BAT後端開發秋招面試總結:面試題目+書籍推薦+面試技巧(乾貨)

秋招不易,總結一下知識點回報大家,主要是後臺開發或者雲端計算的方向,希望對想拿到BATMD等網際網路公司的同學offer有用。
計算機網路:
1. OSI七層協議、TCP/IP四層協議
2. 各層對應的網路裝置(路由器、交換機、閘道器、網橋、集線器等等),各層對應的協議
3. 資料鏈路層的CSMA/CD協議,筆試可能會用到
4. IP地址分類,子網劃分(筆試常用)
5. TCP和UDP的區別
6. TCP三次握手和四次揮手,為什麼三次握手,為什麼四次揮手
7. TCP精髓問題:停止等待協議、連續ARQ協議、滑動視窗、流量控制、擁塞控制(慢開始、擁塞避免、快重傳、快恢復)
8. 從瀏覽器輸入www.baidu.com到加載出頁面發生了什麼
9. GET和POST區別
10. HTTP狀態碼,HTTP1.0和HTTP1.1區別
11. HTTP快取機制(cache-control、Expires之類的一系列請求與相應報頭欄位)
12. session和cookie的區別,禁用cookie後怎麼辦
13. DNS解析的過程
14. 常用協議的埠
HTTP權威指南
資料庫:
Mysql:
1. 資料庫三正規化及判斷、E-R圖
2. innodb和myisam儲存引擎的區別
3. 索引分類(主鍵、唯一索引、全文索引、覆蓋索引等等),最左字首原則,哪些條件無法使用索引
4. B樹、B+樹區別,索引為何使用B+樹
5. 聚集索引與非聚集索引(使用非聚集索引的查詢過程)
6. 事務的ACID(原子性、一致性、隔離性、永續性)
7. 事務隔離級別和各自存在的問題(髒讀、不可重複讀、幻讀)和解決方式(間隙鎖及MVCC)
8. 樂觀鎖和悲觀鎖、行鎖與表鎖、共享鎖與排他鎖(inndob如何手動加共享鎖與排他鎖)
9. MVCC(增加兩個版本號)及delete、update、select時的具體控制
10. 死鎖判定原理和具體場景
11. 查詢緩慢和解決方式(explain、慢查詢日誌、show profile等)
12. drop、truncate、delete區別
13.查詢語句不同元素(where、jion、limit、group by、having等等)執行先後順序
14. mysql優化,讀寫分離、主從複製
15. 資料庫崩潰時事務的恢復機制(REDO日誌和UNDO日誌)
1.釋出訂閱
2.資料淘汰機制(好幾種)
3.字典及漸進式rehash
4.RDB與AOF
5.為何高效(記憶體資料庫、非阻塞IO、IO多路複用、單執行緒、hash表、跳錶等)
6. Redis的幾種資料結構
Redis設計與實現
Redis實戰
資料結構與演算法:
1. 陣列、連結串列(單向、雙向、雙端)、棧和佇列、二叉樹、紅黑樹、雜湊表、堆(最大和最小)、圖
2. 個人經驗:棧和佇列、雜湊表、連結串列、二叉樹的題較多,圖的較少
3. 查詢:二分查詢及其變形
4. 二叉樹:前序、中序、後序遍歷,按規定方式列印,兩個節點之間操作(最近公共祖先、距離)等問題。
5. 最大堆和最小堆:大數量級資料找最大幾個等問題、堆如何調整等問題。
6. 圖:深度優先、廣度優先、單源最小路徑Dijkstra,任意兩點間最短路徑Floyd-Warshall,最小生成樹Prime和Kruskal
7. 紅黑樹:特點及如何調整(基本上沒人讓你手擼紅黑樹)
8. 棧和佇列:經常作為演算法題要用到的資料結構
8. 八大排序:3個簡單的:冒泡、選擇、插入及其優化,5個高階的:快速排序、歸併排序、堆排序、希爾排序、桶排序(快排、歸併、堆很重要,經常手擼)
9. 時間複雜度及空間複雜度分析
10. 動態規劃dp:這個比較難,揹包問題之內的
1. 常用命令:使用者控制、許可權控制、程序控制、系統狀態查詢之類的
2. Linux狀態分析:CPU(top)、記憶體(top和free,注意buffer和cache區別)、磁碟(fdisk和df)、IO(iostat)等
3. grep和sed
4. awk(用好awk,指令碼寫得好)
5. shell指令碼
6. Linux目錄結構(尤其是/proc非常重要)
7. linux檔案系統結構和啟動流程
8. 防火牆iptables(這個比較少)
作業系統:
1. 一個二進位制檔案執行出結果,作業系統做了什麼(這是一個很全面的題)
2. 死鎖的條件及銀行家演算法、資源分配圖之類的
3. 程序間通訊方式
4. linux的五種IO方式(阻塞與非阻塞、同步與非同步的理解)
5. linux的select、poll、epoll的區別
6. 程序與執行緒區別、核心級執行緒與使用者級執行緒
7. 頁面置換演算法,尤其是lru
8. 程序排程演算法
9. linux中斷響應機制
10. 虛擬記憶體機制
基本語言(java PHP):
PHP:
1. PHP面向物件的特點和java的不同
2. PHP類內的三個指標的不同(this、類名、self)
3. PHP的自動載入機制
4. PHP的魔術方法
5. PHP的名稱空間
6. PHP的垃圾回收機制和存在的問題(環形引用,記憶體洩漏)
7. PHP如何防止SQL%E6%B3%A8%E5%85%A5/">SQL注入(Mysqli預編譯等)
8. PHP和apache伺服器結合的方式
9. fastcgi和php-fpm的埠及工作方式
10 . nginx伺服器相比apache伺服器的優點和原理(記憶體對映mmap、event-driven和aio等)
java:
1. java面向物件(一大堆知識點)
2. 多執行緒實現的幾種方式(Thread、Runnable、Callable、執行緒池)及各自的特點
3. java執行緒的狀態及相互轉換
4. 執行緒同步的幾種方式和執行緒間通訊
5. 生產者消費者模式
6, volatile關鍵字
7. J.U.C包的JDK原始碼(CAS、AQS、ConcurrentHashMap、ThreadLocal、CyclicBarrier、CountDownLatch、Atom、阻塞佇列等等)
8. String、StringBuffer、StringBuilder
9. 異常處理機制
10.集合框架底層JDK實現(HashMap和Hashtable區別、Set、List等等)
11. IO(writer、reader、InputStream、OutputStream)、NIO等
12. 四種引用及其區別和使用場景
13. 物件序列化與反序列化
14. lambda表示式
15. jvm虛擬機器:記憶體分割槽、垃圾回收(三種垃圾回收演算法、新生代老生代、垃圾回收器、G1優點等等)、記憶體溢位、記憶體洩漏排查、JVM調優、類載入機制、雙親委派、記憶體模型及執行緒、鎖優化
16.設計模式:幾種單例模式實現(手擼)、其他幾種常見的設計模式(JDK中具體點)、專案中怎麼用了
語言這塊知識點太多了,基礎要紮實。
其他:
hadoop:mapreduce、HDFS、yarn等等(推薦:Hadoop權威指南)
hive:很常用的處理工具(推薦:Hive程式設計指南)
訊息佇列(kafka之類的)、遠端過程呼叫RPC之類,寫一些Demo自己試一下,不要被問直接就不知道
負載均衡排程(一致性雜湊經常問)等
專案和實習:
一定要把自己做的東西從頭到尾順一遍。
難點在哪裡,怎麼解決的,學到了什麼,技術亮點在哪裡,這些事經常問的。
常問的問題,像併發量多少,怎麼優化這些也要早測試早作準備。
千萬不要到時候再想,這會讓面試官感覺你對自己做的都不熟悉。最好可以自己畫一下架構圖,講的時候思路更清晰。
總結經驗:知識點準備+資料結構與演算法+面試技巧
1. 知識點準備 ,主要包括:計算機網路、作業系統、關係型資料庫、非關係型資料庫、linux、程式語言、專案及實習。這一部分只要是認真準備,一般問題不會太大。
2. 資料結構與演算法, 這個比較突出硬實力,面過的每個公司都是需要手擼幾個演算法題,所以需要儘早刷題準備。(之所以單獨列為一項,是因為樓主就是有幾家公司死在這裡的)
3. 面試技巧:
第一點,每一次面試後認真總結,很可能下一次面試又碰上這次不會的原題(親身經歷);
第二點,遇到自己研究比較好的知識點,可以引導面試官問,往底層說(但是千萬要自己有把握),這樣如果一次面試有1到2個問題可以說的比較深入,面試官對你的印象會很好(屢試不爽);
第三點,放低身段,面對面試官的嘲諷之類的(比如嫌你low、對你的研究方向一片否定),儘量解釋,不要懟面試官,要忍得住;實在忍不住,就懟個痛快(我試過,順利掛了)。
第四點,自信、自信、自信。相信自己,勇敢的去面試,即是被虐。相信自己,而且面試技巧也都是在一次次被虐中成長起來的。
寫在最後!!!!加關注!!!!不迷路!!!!!持續更新!!!!!