以面帶點】伺服器後臺開發面試題總結
總結這個面試題並不是鼓勵大家去跳槽,每家公司都有他好的一面,也都會存在一定問題,不要以為別人家的公司什麼都是好的。因此跳槽之前,先想清楚為什麼要跳槽。切不可盲目跟風,但是一旦做出了換工作的決定,那麼就會面臨著頻繁的面試。
對於程式設計師來說,面試主要關注點還是你的技術能力。下面結合自己的面試經歷總結下對於伺服器後臺開發崗位,面試官主要考察的是哪些知識點。有些知識點公眾號前面的文章已經涉及到,將其連結放在題目下,直接點選即可跳轉到相關文章,供大家參考,對於公眾號沒有涉及到的知識點,本文暫時不做解答,後面將會以文章形式持續推出。
每個公司每個面試官的風格不一樣,因此想將所有的面試題都總結不可能,下面總結的是面試中出現頻率較高的面試題。
1:你最熟悉的一種排序演算法,其複雜度是多少,並實現它?
2:hash表的原理,時間複雜度,雜湊衝突怎麼解決?
3:手寫二叉樹的三種遍歷,如果你以遞迴的方式寫出來了,可能會繼續讓你以非遞迴的方式實現。
4:輸入兩個整數n和sum,從數列1,2,3.......n 中隨意取幾個數,使其和等於sum,要求將其中所有的可能組合列出來。
5:單鏈表逆轉
6:合併兩個有序連結串列
7:字串轉化為整數,考察點主要是你編碼的嚴謹性。
8:最大連續子陣列和
9:最長迴文字串
10:陣列中有一個數字出現的次數超過了陣列長度的一半,找出這個數字。
11:100億個數,求最大的1萬個數,並說出演算法的時間複雜度。
注:演算法的考察很靈活,
1:Linux下程序虛擬空間佈局。
2:程序間通訊方式有哪些,它們都適合用於哪些場景,你在專案總用過哪幾種?
3:執行緒同步的方式有哪些?
4:互斥鎖和讀寫鎖以及訊號量
5:malloc函式的實現原理
6:什麼是死鎖?如何避免死鎖?
7:動態連結和靜態連結的區別?
8:程序和執行緒區別,多執行緒程式設計需要注意什麼?
9:select和epoll的區別,epoll兩種模式(ET和LT)的區別。
C/C++語言1
2:static關鍵字的作用。
3:C++中智慧指標的實現原理,shared_ptr和unique_ptr有什麼區別?
4:C++中虛擬函式的作用,實現原理?
5:指標和引用的區別,什麼時候必須用引用?
6:const和define區別
7:stl有哪些容器,它們的特點是什麼,適合用於什麼場景?
8:當vector的記憶體用完了,它是如何擴充套件記憶體的?
9:map是怎麼實現的?查詢複雜度是多少?能不能邊遍歷邊插入?
10:vector每次insert或erase之後,以前儲存的iterator會不會失效?
TCP/IP協議1:TCP和UDP協議的區別。
2:說說對TCP滑動視窗的理解。
3:tcp三次握手四次揮手的過程,為什麼要進行三次握手,四次揮手?
4:time_wait狀態產生的原因、危害以及如何避免?
Linux系統工具1:用過的linux命令有哪些?
2:top/fee/vmstat/iotop/iostat/netstat等系統監控命令的使用,包括命令輸出某些關鍵欄位的含義。
3:gdb除錯相關問題,如怎麼除錯coredump檔案?
4:makefile相關問題
5:awk/sed/grep結合正則表示式的問題。
系統結構設計1:如何設計一個分散式ID生成器
2:系統容錯性設計
3:高併發系統設計從哪些方面考慮
以上就是是面試伺服器後臺開發崗位中出現頻率較高的知識點(三年及以下經驗,至於資深、架構師這些職位面試主要問些什麼,我也不太清楚),主要針對的是C++技術棧,至於JAVA/PYTHON等其它語言,其實也有一定的借鑑,如演算法、協議、系統設計等這些都是共通的。
伺服器後臺開發還是有很多的東西要學,上面的總結只是讓大家在面試中做到心中有數,實際開發中要掌握的東西遠遠不只這些,需要大家在平時的學習過程中慢慢積累。後續將會整理伺服器後臺開發中一些經典書籍和開原始碼供大家參考閱讀。