騰訊後臺開發面試總結

readyao發表於2016-02-29

前段時間專心面過騰訊,經過了N輪的技術面,結果還是掛了,但沒掛在技術面,比較欣慰,回來之後寫一點總結,以供有夢想進入騰訊做後臺伺服器開發的同學參考,本文章為胡成精心總結,胡成原創,copy和轉載請通知。ps:()之內的文字由作者點評,非面試題文字。


linux和os:


netstat tcpdump ipcs ipcrm (如果這四個命令沒聽說過或者不能熟練使用,基本上可以回家,通過的概率較小 ^_^ ,這四個命令的熟練掌握程度基本上能體現面試者實際開發和除錯程式的經驗)

cpu 記憶體 硬碟 等等與系統效能除錯相關的命令必須熟練掌握,設定修改許可權 tcp網路狀態檢視 各程式狀態 抓包相關等相關命令 必須熟練掌握

awk sed需掌握

共享記憶體的使用實現原理(必考必問,然後共享記憶體段被對映進程式空間之後,存在於程式空間的什麼位置?共享記憶體段最大限制是多少?)

c++程式記憶體空間分佈(注意各部分的記憶體地址誰高誰低,注意棧從高道低分配,堆從低到高分配)

ELF是什麼?其大小與程式中全域性變數的是否初始化有什麼關係(注意.bss段)

使用過哪些程式間通訊機制,並詳細說明(重點)

makefile編寫,雖然比較基礎,但是會被問到

gdb除錯相關的經驗,會被問到

如何定位記憶體洩露?

動態連結和靜態連結的區別

32位系統一個程式最多多少堆記憶體

多執行緒和多程式的區別(重點 面試官最最關心的一個問題,必須從cpu排程,上下文切換,資料共享,多核cup利用率,資源佔用,等等各方面回答,然後有一個問題必須會被問到:哪些東西是一個執行緒私有的?答案中必須包含暫存器,否則悲催)

寫一個c程式辨別系統是64位 or 32位

寫一個c程式辨別系統是大端or小端位元組序

訊號:列出常見的訊號,訊號怎麼處理?

i++是否原子操作?並解釋為什麼???????

說出你所知道的各類linux系統的各類同步機制(重點),什麼是死鎖?如何避免死鎖(每個技術面試官必問)

列舉說明linux系統的各類非同步機制

exit() _exit()的區別?

如何實現守護程式?

linux的記憶體管理機制是什麼?

linux的任務排程機制是什麼?

標準庫函式和系統呼叫的區別?

補充一個坑爹坑爹坑爹坑爹的問題:系統如何將一個訊號通知到程式?(這一題哥沒有答出來)


c語言:


巨集定義和展開(必須精通)

位操作(必須精通)

指標操作和計算(必須精通)

記憶體分配(必須精通)

sizeof必考

各類庫函式必須非常熟練的實現

哪些庫函式屬於高危函式,為什麼?(strcpy等等)


c++:


一個String類的完整實現必須很快速寫出來(注意:賦值構造,operator=是關鍵)

虛擬函式的作用和實現原理(必問必考,實現原理必須很熟)

sizeof一個類求大小(注意成員變數,函式,虛擬函式,繼承等等對大小的影響)

指標和引用的區別(一般都會問到)

多重類構造和析構的順序

stl各容器的實現原理(必考)

extern c 是幹啥的,(必須將編譯器的函式名修飾的機制解答的很透徹)

volatile是幹啥用的,(必須將cpu的暫存器快取機制回答的很透徹)

static const等等的用法,(能說出越多越好)

資料結構或者演算法:

《離散數學》範圍內的一切問題皆由可能被深入問到(這個最坑爹,最重要,最體現功底,最能加分,特別是各類樹結構的實現和應用)

各類排序:大根堆的實現,快排(如何避免最糟糕的狀態?),bitmap的運用等等

hash, 任何一個技術面試官必問(例如為什麼一般hashtable的桶數會取一個素數?如何有效避免hash結果值的碰撞)


網路程式設計:


tcp與udp的區別(必問)

udp呼叫connect有什麼作用?

tcp連線中時序圖,狀態圖,必須非常非常熟練

socket服務端的實現,select和epoll的區別(必問)

epoll哪些觸發模式,有啥區別?(必須非常詳盡的解釋水平觸發和邊緣觸發的區別,以及邊緣觸發在程式設計中要做哪些更多的確認)

大規模連線上來,併發模型怎麼設計

tcp結束連線怎麼握手,time_wait狀態是什麼,為什麼會有time_wait狀態?哪一方會有time_wait狀態,如何避免time_wait狀態佔用資源(必須回答的詳細)

tcp頭多少位元組?哪些欄位?(必問)

什麼是滑動視窗(必問)

connect會阻塞,怎麼解決?(必考必問,提示:設定非阻塞,返回之後用select檢測狀態)

如果select返回可讀,結果只讀到0位元組,什麼情況?

網路程式設計:

tcp與udp的區別(必問)

udp呼叫connect有什麼作用?

tcp連線中時序圖,狀態圖,必須非常非常熟練

socket服務端的實現,select和epoll的區別(必問)

epoll哪些觸發模式,有啥區別?(必須非常詳盡的解釋水平觸發和邊緣觸發的區別,以及邊緣觸發在程式設計中要做哪些更多的確認)

大規模連線上來,併發模型怎麼設計

tcp結束連線怎麼握手,time_wait狀態是什麼,為什麼會有time_wait狀態?哪一方會有time_wait狀態,如何避免time_wait狀態佔用資源(必須回答的詳細)

tcp頭多少位元組?哪些欄位?(必問)

什麼是滑動視窗(必問)

connect會阻塞,怎麼解決?(必考必問,提示:設定非阻塞,返回之後用select檢測狀態)

如果select返回可讀,結果只讀到0位元組,什麼情況?

keepalive 是什麼東東?如何使用?

列舉你所知道的tcp選項,並說明其作用。

socket什麼情況下可讀?


db:


mysql,會考sql語言,伺服器資料庫大規模資料怎麼設計,db各種效能指標

最後:補充一個最最重要,最最坑爹,最最有難度的一個題目:一個每秒百萬級訪問量的網際網路伺服器,每個訪問都有資料計算和I/O操作,如果讓你設計,你怎麼設計?

相關文章