2018 CVTE秋招內推一面面經
阿新 • • 發佈:2019-01-23
專案
做過什麼Web專案?
大二的時候接了一個其他學院的外包,在實驗室裡面做後臺,主要管理資料庫的東西。
資料庫
- 用的什麼資料庫
MySQL - 有那些常見資料型別
VARCHAR, CHAR, TEXT, BIGINT,INT等 - VARCHAR和CHAR的區別
VARCHAR不定長,CHAR是定長的 - INT(5) 和 INT(11)的區別
int(M) M指示最大顯示寬度。最大有效顯示寬度是255。顯示寬度與儲存大小或型別包含的值的範圍無關。 - 使用過什麼索引
PRIMARY、UNIQUE等 - 索引失效的例子,為什麼失效
最常見就是LIKE的時候查詢字串左端加上%。這和底層API有關,字串左端不確定的情況下不能轉換為簡單比較 - 為什麼會失效
InnoDB使用B樹或B+樹實現索引,當在樹中尋找目標葉子結點的時候,由於左端是不確定的,因此無法進行比較,從而索引失效。 - 如果資料表沒有主鍵會怎樣
如果是InnoDB,會找到另一個唯一鍵且非NULL的,用來作為聚簇索引的依據。如果都沒找到,則會隱式地生成一個主鍵 - 隱式生成的主鍵是每個表一個還是所有表共用一個,是一個怎樣的主鍵?
我認為是一個自增的主鍵,因為這個用來作為聚簇索引,插入速度嚴重依賴於插入順序,按照主鍵的順序插入是最快的。
我認為是每個表獨立的,原因不清楚,如果知道的話麻煩解釋一下。
網路
HTTP
- HTTP常見的狀態碼
200 成功
204 No Content
302 Moved Temporarily
400 Bad Request
404 Not Found
500 Internal server error - HTTP Method有那些
- GET
- PUT
- POST
- DELETE
- PATCH 更新區域性資源
- OPTION 請求WEB伺服器告知其支援的各種功能
- HEAD 獲取響應的header(與Get相似)
- 瀏覽器從輸入URL到顯示頁面的過程?
- 是一個HTTP請求一條TCP連線嗎?
看是HTTP1.0還是1.1,1.0是一個HTTP請求對應一條TCP連線,1.1預設情況下是使用長連線。 - 什麼時候會斷開TCP連線
通過超時策略來控制,一定時間沒有資料傳輸則斷開。 - 怎麼判斷資料傳輸完成
- content-length
當header上有content-length欄位,則使用該欄位判斷是否接收完畢 - chunk分塊傳輸
若header上有欄位Transfer-Encoding: chunked,chunk編碼的資料,最後有一個 長度為0的chunk標示結束
- content-length
- Cookie的用處和風險?
為了辨別使用者身份、進行 session 跟蹤而儲存在使用者本地終端上的資料。
風險:可能被攔截、篡改,如果cookie被攔截,就可能取得所有session資訊,例如發生CSRF - CSRF的例子
TCP
- TCP 三次握手
- 客戶端傳送請求連線報文段,其中首部的SYN=1和seq=i,進入SYN-SENT
- 服務端接收到連線請求報文段後,在確認報文段中將SYN,ACK都置1,ack=x+1,seq=y並SYN-RCVD狀態
- 客戶端接收到服務端的確認後,確認報文段的ACK置一,ack=y+1, seq=x+1並進入ESTABLISHED狀態,B收到A的確認後,也進入ESTABLISHED狀態。
- ddos是怎麼發生的,怎麼降低收到的影響
說了 利用SYN攻擊的ddos,向伺服器大量的建立連線請求,是伺服器產生大量處於SYN-RCVD狀態的半連線,並且不迴應伺服器的確認,使伺服器一直等待。
應對ddos的措施:
- 確保伺服器的系統檔案是最新的版本,並及時更新系統補丁
- 關閉不必要的服務
- 限制同時開啟的SYN半連線數目,縮短SYN半連線的time out 時間,限制SYN/ICMP流量
- TCP意外中斷的例子,中斷後另一方的狀態
客戶端主機出現故障。伺服器有一個保活計時器,伺服器每收到一次客戶的資料,就重置保活計時器,時間的設定通常是兩小時。若兩小時沒有收到客戶的資料,伺服器就傳送一個探測報文段,以後每隔75分鐘就傳送一次,若一連發送10個探測報文段後仍無客戶的響應,伺服器就認為客戶端出了故障,接著關閉這個連線。 - TIME_WAIT 2MSL 的原因
- 防止三次握手時,第一步握手傳送的連線請求在“消失”,在斷開連線後出現。
- 確保客戶端傳送的最後一個ACK報文段能夠到達B。
以上都是這次面試的問答,一些回答純粹是個人見解,並不確切,如果有不正確的地方還請直接指出來,共同探討,謝謝。