1. 程式人生 > >2018 CVTE秋招內推一面面經

2018 CVTE秋招內推一面面經

專案

做過什麼Web專案?
大二的時候接了一個其他學院的外包,在實驗室裡面做後臺,主要管理資料庫的東西。

資料庫

  1. 用的什麼資料庫
    MySQL
  2. 有那些常見資料型別
    VARCHAR, CHAR, TEXT, BIGINT,INT等
  3. VARCHAR和CHAR的區別
    VARCHAR不定長,CHAR是定長的
  4. INT(5) 和 INT(11)的區別
    int(M) M指示最大顯示寬度。最大有效顯示寬度是255。顯示寬度與儲存大小或型別包含的值的範圍無關。
  5. 使用過什麼索引
    PRIMARY、UNIQUE等
  6. 索引失效的例子,為什麼失效
    最常見就是LIKE的時候查詢字串左端加上%。這和底層API有關,字串左端不確定的情況下不能轉換為簡單比較
  7. 為什麼會失效
    InnoDB使用B樹或B+樹實現索引,當在樹中尋找目標葉子結點的時候,由於左端是不確定的,因此無法進行比較,從而索引失效。
  8. 如果資料表沒有主鍵會怎樣
    如果是InnoDB,會找到另一個唯一鍵且非NULL的,用來作為聚簇索引的依據。如果都沒找到,則會隱式地生成一個主鍵
  9. 隱式生成的主鍵是每個表一個還是所有表共用一個,是一個怎樣的主鍵?
    我認為是一個自增的主鍵,因為這個用來作為聚簇索引,插入速度嚴重依賴於插入順序,按照主鍵的順序插入是最快的。
    我認為是每個表獨立的,原因不清楚,如果知道的話麻煩解釋一下。

網路

HTTP

  1. HTTP常見的狀態碼
    200 成功
    204 No Content
    302 Moved Temporarily
    400 Bad Request
    404 Not Found
    500 Internal server error
  2. HTTP Method有那些
    • GET
    • PUT
    • POST
    • DELETE
    • PATCH 更新區域性資源
    • OPTION 請求WEB伺服器告知其支援的各種功能
    • HEAD 獲取響應的header(與Get相似)
  3. 瀏覽器從輸入URL到顯示頁面的過程?
  4. 是一個HTTP請求一條TCP連線嗎?
    看是HTTP1.0還是1.1,1.0是一個HTTP請求對應一條TCP連線,1.1預設情況下是使用長連線。
  5. 什麼時候會斷開TCP連線
    通過超時策略來控制,一定時間沒有資料傳輸則斷開。
  6. 怎麼判斷資料傳輸完成
    • content-length
      當header上有content-length欄位,則使用該欄位判斷是否接收完畢
    • chunk分塊傳輸
      若header上有欄位Transfer-Encoding: chunked,chunk編碼的資料,最後有一個 長度為0的chunk標示結束
  7. Cookie的用處和風險?
    為了辨別使用者身份、進行 session 跟蹤而儲存在使用者本地終端上的資料。
    風險:可能被攔截、篡改,如果cookie被攔截,就可能取得所有session資訊,例如發生CSRF
  8. CSRF的例子

TCP

  1. TCP 三次握手
    1. 客戶端傳送請求連線報文段,其中首部的SYN=1和seq=i,進入SYN-SENT
    2. 服務端接收到連線請求報文段後,在確認報文段中將SYN,ACK都置1,ack=x+1,seq=y並SYN-RCVD狀態
    3. 客戶端接收到服務端的確認後,確認報文段的ACK置一,ack=y+1, seq=x+1並進入ESTABLISHED狀態,B收到A的確認後,也進入ESTABLISHED狀態。
  2. ddos是怎麼發生的,怎麼降低收到的影響
    說了 利用SYN攻擊的ddos,向伺服器大量的建立連線請求,是伺服器產生大量處於SYN-RCVD狀態的半連線,並且不迴應伺服器的確認,使伺服器一直等待。
    應對ddos的措施:
    • 確保伺服器的系統檔案是最新的版本,並及時更新系統補丁
    • 關閉不必要的服務
    • 限制同時開啟的SYN半連線數目,縮短SYN半連線的time out 時間,限制SYN/ICMP流量
  3. TCP意外中斷的例子,中斷後另一方的狀態
    客戶端主機出現故障。伺服器有一個保活計時器,伺服器每收到一次客戶的資料,就重置保活計時器,時間的設定通常是兩小時。若兩小時沒有收到客戶的資料,伺服器就傳送一個探測報文段,以後每隔75分鐘就傳送一次,若一連發送10個探測報文段後仍無客戶的響應,伺服器就認為客戶端出了故障,接著關閉這個連線。
  4. TIME_WAIT 2MSL 的原因
    • 防止三次握手時,第一步握手傳送的連線請求在“消失”,在斷開連線後出現。
    • 確保客戶端傳送的最後一個ACK報文段能夠到達B。

以上都是這次面試的問答,一些回答純粹是個人見解,並不確切,如果有不正確的地方還請直接指出來,共同探討,謝謝。