做者:御光飄揚
連接:https://www.nowcoder.com/discuss/57390
來源:牛客網
java
總的經驗:知識點準備+數據結構與算法+面試技巧 mysql
1. 知識點準備,主要包括:計算機網絡、操做系統、關係型數據庫、非關係型數據庫、linux、編程語言、項目及實習。這一部分只要是認真準備,通常問題不會太大。 linux
2. 數據結構與算法,這個比較突出硬實力,面過的每一個公司都是須要手擼幾個算法題,因此須要儘早刷題準備。(之因此單獨列爲一項,是由於樓主就是有幾家公司死在這裏的) ios
3. 面試技巧: 面試
第一點,每一次面試後認真總結,極可能下一次面試又碰上此次不會的原題(親身經歷); 算法
第二點,遇到本身研究比較好的知識點,能夠引導面試官問,往底層說(可是千萬要本身有把握),這樣若是一次面試有1到2個問題能夠說的比較深刻,面試官對你的印象會很好(屢試不爽); sql
第三點,放低身段,面對面試官的嘲諷之類的(好比嫌你low、對你的研究方向一片否認),儘可能解釋,不要懟面試官,要忍得住;實在忍不住,就懟個痛快(我試過,順利掛了)。 shell
計算機網絡: 數據庫
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解析的過程
數據庫:
看書結合實踐,多看底層原理實現、多動手。會分析比較並設計幾種經常使用數據庫的實際使用場景,熟練寫各類SQL語句。
怎麼作:
一、刷題(一遍看書一遍刷)
二、瞭解常考面試題,理解+背
三、一個一個查而後解決它們
Mysql:
1. 數據庫範式
數據庫三範式及判斷、E-R圖
2.數據庫事務
事務特性:ACID(原子性、一致性、隔離性、持久性)
事務隔離級別和各自存在的問題(髒讀、不可重複讀、幻讀)和解決方式(間隙鎖及MVCC)
MVCC(增長兩個版本號)及delete、update、select時的具體控制
3.數據庫索引
索引分類(主鍵、惟一索引、全文索引、覆蓋索引等等),最左前綴原則,哪些條件沒法使用索引
B樹、B+樹區別,索引爲什麼使用B+樹
彙集索引與非彙集索引(使用非彙集索引的查詢過程)
4.數據庫的鎖
樂觀鎖和悲觀鎖、行鎖與表鎖、共享鎖與排他鎖(inndob如何手動加共享鎖與排他鎖)
死鎖斷定原理和具體場景
5.數據庫的存儲引擎
innodb和myisam存儲引擎的區別
6.MySQL命令
查詢緩慢和解決方式(explain、慢查詢日誌、show profile等)
drop、truncate、delete區別
查詢語句不一樣元素(where、jion、limit、group by、having等等)執行前後順序
7.主從複製
mysql優化,讀寫分離、主從複製
數據庫崩潰時事務的恢復機制(REDO日誌和UNDO日誌)
Redis:
怎麼作:
結合項目去理解,整理面試題,背
1.發佈訂閱
2.數據淘汰機制(好幾種)
3.字典及漸進式rehash
4.RDB與AOF
5.爲什麼高效(內存數據庫、非阻塞IO、IO多路複用、單線程、hash表、跳錶等)
數據結構與算法:
1. 數組、鏈表(單向、雙向、雙端)、棧和隊列、二叉樹、紅黑樹、哈希表、堆(最大和最小)、圖
2. 我的經驗:棧和隊列、哈希表、鏈表、二叉樹的題較多,圖的較少
3. 查找:二分查找及其變形
4. 二叉樹:前序、中序、後序遍歷,按規定方式打印,兩個節點之間操做(最近公共祖先、距離)等問題。
5. 最大堆和最小堆:大數量級數據找最大幾個等問題、堆如何調整等問題。
6. 圖:深度優先、廣度優先、單源最小路徑Dijkstra,任意兩點間最短路徑Floyd-Warshall,最小生成樹Prime和Kruskal
7. 紅黑樹:特色及如何調整(基本上沒人讓你手擼紅黑樹)
8. 棧和隊列:常常做爲算法題要用到的數據結構
8. 八大排序:3個簡單的:冒泡、選擇、插入及其優化,5個高級的:快速排序、歸併排序、堆排序、希爾排序、桶排序(快排、歸併、堆很重要,常常手擼)
9. 時間複雜度及空間複雜度分析
Linux:
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文件系統結構和啓動流程
操做系統:
1. 一個二進制文件運行出結果,操做系統作了什麼(這是一個很全面的題)
2. 死鎖的條件及銀行家算法、資源分配圖之類的
3. 進程間通訊方式
4. linux的五種IO方式(阻塞與非阻塞、同步與異步的理解)
5. linux的select、poll、epoll的區別
6. 進程與線程區別、內核級線程與用戶級線程
7. 頁面置換算法,尤爲是lru
8. 進程調度算法
9. linux中斷響應機制
基本語言(java):
java:(未接觸javaee)
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調優、類加載機制、雙親委派、內存模型及線程、鎖優化
其餘:
hadoop:mapreduce、HDFS、yarn等等(推薦:Hadoop權威指南)
hive:很經常使用的處理工具(推薦:Hive編程指南)
消息隊列(kafka之類的)、遠程過程調用RPC之類,寫一些Demo本身試一下,不要被問直接就不知道
設計模式
熟悉幾種經常使用的設計模式,尤爲單例模式,各類手寫都要會,線程安全的、線程不安全的,各類實現方式之間的區別。
場景設計
面試通常都會考察一些實際場景的設計題,有時間多看看開源,理解一些人家的設計思路,積累多了遇到這樣的問題不會徹底沒有思路。
項目和實習:
必定要把本身作的東西從頭至尾順一遍。
難點在哪裏,怎麼解決的,學到了什麼,技術亮點在哪裏,這些事常常問的。
常問的問題,像併發量多少,怎麼優化這些也要早測試早做準備。