博主渣渣本科,掙扎到十一月秋招終於結束了。面過百度/騰訊/小米/網易/搜狗/知乎/京東/360/瓜子。期間總結了一些面試題目,現在放上來。由於是博主自己的面經記錄,所以涵蓋不全面的話諸位請諒解。
根據博主的面試經驗來看,面試有一定的層次性,如bat級別公司每個點都會深入,而有些公司則只會問到表層,所以將每個領域都分爲必須掌握和深入瞭解這兩個部分。
一、計算機網絡
基礎部分
- TCP報頭格式
- UDP報頭格式
- TCP/UDP區別(不僅是宏觀上的,最好能根據各自的機制講解清楚)
- HTTP狀態碼(最好結合使用場景,比如在緩存命中時使用哪個)
- HTTP協議(一些報頭字段的作用,如cace-control、keep-alive)
- OSI協議、TCP/IP協議以及每層對應的協議。
- SESSION機制、cookie機制
- TCP三次握手、四次揮手(這個問題真的要回答吐了,不過真的是面試官最喜歡問的,建議每天手擼一遍,而且不只是每次請求的過程,各種FIN_WAIT、TIME_WAIT狀態也要掌握)。
- 打開網頁到頁面顯示之間的過程(涵蓋了各個方面,DNS解析過程,Nginx請求轉發、連接建立和保持過程、瀏覽器內容渲染過程,考慮的越詳細越好)。
- http和https區別,https在請求時額外的過程,https是如何保證數據安全的
- IP地址子網劃分
- POST和GET區別
- DNS解析過程
深入部分
13. TCP如何保證數據的可靠傳輸的(這個問題可以引申出很多子問題,擁塞控制慢開始、擁塞避免、快重傳、滑動窗口協議、停止等待協議、超時重傳機制,最好都能掌握)
14. 地址解析協議ARP
15. 交換機和路由器的區別
二、數據庫
基礎部分
- 事務四大特性(ACID)
- 數據庫隔離級別,每個級別會引發什麼問題,mysql默認是哪個級別
- MYSQL的兩種存儲引擎區別(事務、鎖級別等等),各自的適用場景
- 數據庫的優化(從sql語句優化和索引兩個部分回答)
- 索引有B+索引和hash索引,各自的區別
- B+索引數據結構,和B樹的區別
- 索引的分類(主鍵索引、唯一索引),最左前綴原則,哪些情況索引會失效
- 聚集索引和非聚集索引區別。
- 有哪些鎖(樂觀鎖悲觀鎖),select時怎麼加排它鎖
- 關係型數據庫和非關係型數據庫區別
- 瞭解nosql
- 數據庫三範式,根據某個場景設計數據表(可以通過手繪ER圖)
- 數據庫的主從複製
- 使用explain優化sql和索引
- long_query怎麼解決
- 內連接、外連接、交叉連接、笛卡兒積等
深入
- MVCC機制
- 根據具體場景,說明版本控制機制
- 死鎖怎麼解決
- varchar和char的使用場景。
- mysql併發情況下怎麼解決(通過事務、隔離級別、鎖)
Redis
- redis數據結構有哪些
- redis隊列應用場景
- redis和Memcached(支持數據持久化)
- 分佈式使用場景(儲存session等)
- 發佈/訂閱使用場景
三、操作系統
- 內存的頁面置換算法
- 進程調度算法
- 進程間通信方式
- 進程線程區別
- 進程之間的通信
- 父子進程、孤兒進程
- fork進程時的操作,
這個部分我回答的都不好,只能是死記硬背,建議基礎好的同學多看看操作系統這部分,能大大加分。
四、算法
基礎
- 劍指OFFER的各個題目是最常見的,即使不是原題也是題目的變體,因爲面試不像筆試,一般不會出特別困難的題目,所以劍指OFFER上小而精的題目就非常適合。建議手刷一遍。PHP的同學可以參考專欄劍指OFFER
- 二叉樹相關(層次遍歷、求深度、求兩個節點距離、翻轉二叉樹、前中後序遍歷)
- 鏈表相關(插入節點、鏈表逆置、使用鏈表進行大數字的加減,雙向鏈表實現隊列、尋找鏈表中的環)
- 堆(大量數據中尋找最大N個數字幾乎每次都會問,還有堆在插入時進行的調整)
- 排序(八大排序,各自的時間複雜度、排序算法的穩定性。快排幾乎每次都問)
- 二分查找(一般會深入,如尋找數組總和爲K的兩個數字)
- 兩個棧實現隊列。
- 圖(深度廣度優先遍歷、單源最短路徑、最小生成樹)
動態規劃問題。
深入
紅黑樹性質
- 分治法和動態規劃的區別
- 計算時間複雜度
- 二叉樹和哈希表查找的時間複雜度
具體題目記錄
1. 一個文本文件中每一行中有一個URL,最多一萬行,統計每一個URL的次數,輸出到另外一個文件中,每一行前面是URL,後面是個數。
2. 單鏈表的逆序
3. 一個函數實現給定字符串,去除前面和後面的空格,比如“ ab cd ”,最後得到的結果是”ab cd”,不能改變字符串的地址。
4. 對比cookie和session,有一個值錯誤則不正確
5. 查找10的階乘後面有幾個0
6. 字符串匹配
7. 字符串移位,給出字符串abc##dfg##gh,實現將所有#移至字符串串頭。輸出####abcdfggh(個人認爲可以用後向移位,減少移位次數)
8. 給出一顆二叉樹,兩個葉節點,找到這兩個葉節點互連通的一條最短路徑。
9. 兩個日期計算天數差
10. 100個有序數組合並
11. 矩陣的最大子矩陣和
12. 給定一棵多叉樹,每個節點有一個編號,現在要對節點排序,要求對於每個節點,它的父節點排在它後面,如果一棵樹有N個節點,那麼肯定有N-1條邊。輸入的數據形式爲:Map.Entry
LINUX
- 硬鏈接和軟連接區別
- kill用法,某個進程殺不掉的原因(進入內核態,忽略kill信號)
- linux用過的命令
- 系統管理命令(如查看內存使用、網絡情況)
- 管道的使用 |
- grep的使用,一定要掌握,每次都會問在文件中查找
- shell腳本
- find命令
- awk使用
語言部分(PHP)
- 數組操作函數
- 字符串操作函數(數組和字符串的函數是最常問的,非常多,一定不要記混了)
- 指針和引用區別
- 堆和棧的區別
- == ===區別
- PHP的垃圾回收機制
- zval結構
- 防sql注入
- 跨域問題
- 長鏈接和長輪詢
面向對象、設計模式
- 接口和抽象類區別
- 單繼承
- construct的調用順序(子類父類之間)
- 設計模式(工廠模式、策略模式、單例模式、裝飾模式比較常見)
- OOP特性,通過哪些機制實現的
- 重寫和重載區別
- 靜態類靜態方法
- 根據某個需求設計一個類(主要考慮類之間的繼承關係和屬性的權限設置)
項目
- 項目中遇到的困難(提前想好,並且把實現或者優化方法說清楚)
- 系統的量級、pv、uv等
- 應對高併發的解決辦法(分佈式)
- 在項目中主要負責了哪些工作。
- nginx的負載均衡
- 分佈式緩存的一致性,服務器如何擴容(哈希環)
- 項目中用到了哪些技術
- 服務器性能如何測試
- 項目中印象深刻的東西
- 項目中遇到過哪些坑,怎麼解決的
- 項目中爲什麼用redis以及怎麼實現相關功能
- 用過的開源框架(路由問題),框架的原理
- 消息隊列的應用場景(想一個)
- 有沒有用到非關係型數據庫
- 網站負載變大時怎麼辦
- SOA?
- WebService?
- 《大型網站技術架構:核心原理與案例分析》
- redis的消息隊列 redis的數據類型
- OAuth認證過程
- 單點登陸系統 分佈式緩存的使用場景
- 一個Controller調用兩個Service,這兩Service又都分別調用兩個Dao,問其中用到了幾個數據庫連接池的連接?
- 圖片是怎麼存儲的
- 分佈式一致性協議、分佈式鎖(應用場景)
- 項目中的網絡編程
- 劃一下項目的架構
- MVC的路由機制怎麼實現的(路由很重要)
- 爲什麼要用hadoop
- 自己寫的接口如何防止被別人惡意調用?印象筆記
- 如何實現數據容災,
- 怎樣實現負載均衡
- 如何解決單節點負載過
- Redis和memcache區別
- redis的持久化
總之要把寫在簡歷上的項目部分熟悉一遍,技術棧、項目功能、難點都要考慮好。
總結
秋招真的是一場曠日持久的戰爭,祝各位都能拿到想要的OFFER。
PS:之前把一些難點找到答案做成了PDF,放在手機上每天看一點,效果不錯。還有ANKI這個工具對於複習效果也很好。不過裏邊除了我自己的一點還有大牛總結的哈,感覺挺好用的,就一起發給大家。發郵件的時候說明了,不要以這點噴我哈。多謝!
2017.11.14 PPS:無語了。CSDN把積分提高成11了,我自己不能修改,大家可以私信/留下郵箱吧。那些用11積分下載的同學實在抱歉
2017.11.10 PDF更新了一下,之前通過資源下載的私信我郵箱給你發過去哈。留郵箱的小夥伴我都補充上了
2018-08-02 因爲工作最近好多都沒回,發到百度雲上了,鏈接: https://pan.baidu.com/s/1bXE6YfswcRgwFBVfEQIerQ 密碼: ap5v。
還有大牛們的資料:
PHP面試解讀:鏈接: https://pan.baidu.com/s/1skY7dG5 密碼: 7htu
面試指南系列+算法系列:鏈接: https://pan.baidu.com/s/1kVd2T0N 密碼: 5b86
侵刪。
祝大家心想事成,需要內推的私我哈,拜拜