騰訊秋招面經

2021-09-26 07:01:52 字數 4761 閱讀 5509

1、負載均衡中的一致性雜湊如何使用的

2、伺服器的半同步半非同步怎麼使用的

主線程非同步監聽listenfd,當有客戶端連線的時候,將連線連線套接字發給工作執行緒,工作執行緒也是非同步處理,使用libevent將所有套接字監聽起來。所以是乙個高效的半同步半非同步

3、伺服器和客戶端通訊的步驟

4、資料報在網路中傳輸的具體過程

應用層將要傳送的資料傳送到傳輸層,傳輸層加上傳輸層的頭部資訊之後給到網路層,網路層新增網路層的頭部之後,主要是目的ip和源ip,ttl跳數等,將資料報給到網路介面層,這時arp協議開始工作,根據目的ip位址在arp表中查詢對應的mac位址,如果在同乙個區域網並且arp表中可以查到對應的目的mac,直接傳送,如果查不到則arp會給該區域網廣播一條arp請求來獲取目的mac,然後傳送訊息並將該目的mac和ip存入到自己的arp表中。如果不在乙個區域網中,那麼arp就會將連線該區域網的路由器的mac位址封裝到mac幀中,由物理層傳送出去,然後當路由器接收到該資料報之後,他會進行乙個去頭部的過程一直到網路層,識別到目的ip,在自己的路由表中查詢到合適的next hop的ip位址,將該ip傳給網路介面層,arp協議根據ip找到mac位址,封裝到mac幀中傳送出去,在網路中的路由一直重複這個過程,直到乙個路由器發現該資料報的目的ip是自己的區域網中的一台主機時,就不再進行路由,而時直接傳送給該主機,這就完成了一次資料報在網路中的傳輸過程。

5、資料報的傳輸經過了哪些層

應用層->傳輸層->網路層->網路介面層

6、粘包的優點和缺點

粘包的概念:傳送端的多個tcp資料報被連在一起頭尾相接,當成乙個資料報傳送。或接收端從接收緩衝區中讀的時候,將多個資料報一次讀出。產生原因:socket緩衝區與滑動視窗的限制,mss/mtu限制,nagle演算法將多個包結合起來一次傳送。

優點:減少網路中細碎的資料報個數,避免對網路造成壓力,導致網路擁塞。

缺點:接收端處理的時候比較困難,要進行解包

7、接收端如何處理粘包

用特殊字元來標識資料報的結束。

給資料報增加長度字段,置於資料報首部

規定每個資料報的固定大小,若不足該大小時會造成空間的浪費

8、資料報在網路中路由時如何確定路由的路徑,目的ip和源ip會改變嗎

arp協議根據ip位址查詢對應的mac位址,進行物理層的尋路**,如果arp表中沒有對應的mac位址,則會廣播一條mac請求,誰回應他誰就是對應的mac位址,也是乙個學習過程,網路層根據ip位址在路由表中查詢合適的下一跳,確定之後將下一跳的mac位址封裝到鏈路層頭部,進行**。因此,ip位址是不會改變的,改變的是mac位址,每次都會被更新成下一跳的mac位址。

9、滑動視窗協議,視窗是越大越好嗎,為什麼

滑動視窗協議是tcp流量控制的一種手段,tcp的核心緩衝區中會維護乙個視窗,傳送緩衝區維護傳送視窗,傳送視窗的大小由接收視窗和擁塞視窗的最小值決定;接收緩衝區維護接收視窗,接收視窗的大小一般由接收應用程式讀取接收緩衝區的速度決定。當雙方通訊的時候,接收端在對所接收到的資料報進行確認的時候,會將接收視窗的大小放在tcp頭部帶給傳送端,傳送端根據接收視窗的大小結合擁塞視窗的大小,確定自己傳送視窗的大小。傳送視窗的前沿可以右移,也可以左移(不推薦),後沿只能右移。而且後沿只有在接收到第乙個資料報的確認的時候才會右移。接收視窗在接收到資料報後,會先暫存在接收緩衝區,直到應用程式讀取該資料報之後才會將其從接收視窗移出。

傳送視窗是由擁塞視窗和接收視窗共同決定的,在網路狀況允許的情況下,如果接收視窗越大,那麼傳送視窗也會越大,這樣的好處是會提高傳輸效率,但是有可能會對網路造成壓力。

10、tcp為什麼是三次握手

如果是兩次的話,這時的情況是:客戶端傳送給伺服器乙個syn,伺服器在接收到該syn後,傳送乙個ack給客戶端,這時伺服器進入established狀態,客戶端收到ack後也進入established狀態。在這種情況下,如果客戶端第一次傳送的連線請求在網路中擁塞了,超過重傳時間,客戶端又傳送了第二個請求,這次很快從到達伺服器,建立連線,完成互動,斷開連線。當斷開之後,第一次的請求才到達伺服器,伺服器又會重新建立乙個和該客戶端的連線,然而此時客戶端已經關閉了,這將會極大的浪費伺服器的資源。

11、ip頭部的字段

4位版本號,4位頭部長度,8位服務型別,16位總長度,16位標識,3位標誌,13位片偏移,8位生存時間,8位協議,16位頭部校驗和,32位源ip,32位目標ip

12、myisam和innodb的區別

1、myisam只支援表鎖,而innodb支援行鎖

2、innodb支援事務,myisam不支援事務

3、myisam支援全文索引,innodb不支援全文索引

4、innodb支援外來鍵,而myisam不支援外來鍵

5、myisam只支援非聚簇索引,而innodb支援聚簇索引

13、innodb如何實現對事務的支援

事務的話是有它的四個特性:acid,即原子性,一致性,隔離性,永續性。

原子性:乙個事務必須被視為乙個不可分割的最小工作單元,整個事務的所有操作要麼全部提交成功,要麼全部失敗回滾,不可能只執行其中的一部分

一致性:資料庫總是從乙個一致性的狀態轉換到另乙個一致性的狀態。

隔離性:通常來說,乙個事務所做的修改在最終提交前,對其他事務是不可見的。

永續性:一旦事務提交,那麼其所做的修改就會永久儲存到資料庫中,即使系統崩潰修改的資料也不會丟失

那innodb對acd的支援是通過redo log和undo log實現的,隔離性是靠鎖實現的。

redo log:記錄欄位被事務修改後的值,由於考慮到效率問題,事務被提交之後並不會立即對資料檔案進行寫入,而是先暫存在記憶體中,但redo log卻會在事務未被提交時就刷到redo日誌檔案中,這時如果資料庫斷電,當恢復後就可以從redo日誌檔案中讀取事務對資料庫的修改然後寫入磁碟。

undo log:記錄字段執行事務前的值,如果事務已經修改了某個記錄,但是還未提交的時候突然斷電,當恢復後就可以從undo log中回滾到事務未執行之前的狀態,確保了原子性。

14、索引的型別

hash索引:採用一種hash演算法,將鍵值轉換成新的hash值儲存

在等值查詢時,hash索引的優勢比較明顯,只用經過一次hash函式的計算而不用經過 從跟節點到葉子節點的查詢過程。但是範圍查詢時由於b+樹的葉子節點之間是連續的,      所以很高效,只用進行一次i/o,而且hash索引也不能用來對鍵值進行排序。

15、聚簇索引和非聚簇索引,myisam和innodb索引的區別

聚簇索引的葉子節點是資料節點而不是索引節點,而非聚簇索引的葉子節點存放的是聚       簇索引的位址,先根據非聚簇索引找到聚簇索引,再根據聚簇索引找到資料。

myisam中沒有聚簇索引,innodb中有聚簇索引。

myisam中的索引的葉子節點存放的是資料檔案的檔案指標,而innodb的非聚簇索引   的葉子節點存放的是聚簇索引鍵值,找到鍵值後再根據聚簇索引去找到資料。

16、聚簇索引為什麼快,如果查詢的字段不是建立索引的字段還會高效嗎

聚簇索引只用查詢一次就能夠獲取到資料,而非聚簇索引要查詢一遍之後,再進行一次       聚簇索引的查詢

17、聚簇索引範圍查詢為什麼快

b+樹的葉子節點會有乙個指向下乙個葉子節點的指標,找到範圍中的第乙個資料後,   就可以直接指向下乙個節點,而不用再回表重新查詢。

18、作業系統的分頁機制及其優點

二級頁面對映:

linux核心中位每個程序維護了乙個頁面目錄,當cpu將線性位址交給mmu去查詢物    理位址時,mmu以該線性位址的高十位為下標去頁面目錄中查詢目錄項,對應目錄項    的高20位指向了乙個頁面表,低12位的最低位p標誌位為1時說明       該頁面表在    記憶體中,為0時說明在磁碟上;找到頁面表後,mmu再根據線性位址的次       10位在   該頁面表中找到對應的頁面表項,頁面表項的高20位指向對應的頁面,當該頁面表項  的最低位為1時表示該頁面在記憶體中,否則在磁碟上,找到對應的頁面後,再用該頁面       的位址加上線性位址的低十二位就是對應資料在物理記憶體中的位置

分頁機制:作業系統在將磁碟上的資料載入到記憶體中時是按頁為單位載入的,每個程序       會有乙個頁表,對應物理記憶體中的乙個頁面。

優點:程式不必連續存放,區域性性原理:每次載入乙個頁到記憶體中,訪問頁中的乙個數       據時,下次訪問的可能是和該資料在同一頁的資料,不用多次載入。

19、堆排序的思想

利用堆進行排序,小頂堆根節點和葉子節點相比肯定是最小的。使用小頂堆排序的思路       為:將待排資料先構造成乙個小頂堆,此時整個堆的根節點是整個序列的最小值,將其    和最後乙個元素互換,將待排序列長度減一,再調整小頂堆,這時堆頂元素是次小元素,       再和最後乙個元素交換,重複這個過程直到剩下乙個資料的,就成為有序的乙個序列。

20、如何從乙個字串中找到所有不重複的字元,最優的時間複雜度

2020秋招面經總結

本碩均為機電專業相關,比賽和專案也是軟硬體結合,個人軟開背景中學已經學過pascal和資料結構與演算法,大學本科除了c語言和微機原理基本沒學過cs相關課程,研究生才把作業系統 組原以及計算機網路補上,順便補了個c 抽空玩linux,秋招前3個月開始刷題 牛客300,力扣350 第一目標崗位 嵌入式軟...

2021秋招CVTE面經

c 11的特性知道哪些?說一下 c 中的記憶體布局?靜態變數的作用,為什麼要有靜態變數?當時答的時候靜態變數這塊沒有回答好,bss段和資料段有些混淆 c 中的struct和class之間的區別有啥?知道哪些智慧型指標?簡單說下原理和應用場景,盡量能夠多說些 c 中多型是怎麼實現的?以及實現的原理 虛...

面經 秋 春招技術崗面經 死鎖

死鎖是指兩個或兩個以上的執行緒在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。1 互斥條件 程序在執行中對資源進行排他性使用,即乙個資源僅能被乙個程序使用,此時其他程序...