Java複習大綱

做者:御光飄揚
連接:https://www.nowcoder.com/discuss/57390
來源:牛客網

java

總的經驗:知識點準備+數據結構與算法+面試技巧 mysql

1. 知識點準備,主要包括:計算機網絡、操做系統、關係型數據庫、非關係型數據庫、linux、編程語言、項目及實習。這一部分只要是認真準備,通常問題不會太大。 linux

2. 數據結構與算法,這個比較突出硬實力,面過的每一個公司都是須要手擼幾個算法題,因此須要儘早刷題準備。(之因此單獨列爲一項,是由於樓主就是有幾家公司死在這裏的) ios

3. 面試技巧: 面試

第一點,每一次面試後認真總結,極可能下一次面試又碰上此次不會的原題(親身經歷); 算法

第二點,遇到本身研究比較好的知識點,能夠引導面試官問,往底層說(可是千萬要本身有把握),這樣若是一次面試有1到2個問題能夠說的比較深刻,面試官對你的印象會很好(屢試不爽); sql

第三點,放低身段,面對面試官的嘲諷之類的(好比嫌你low、對你的研究方向一片否認),儘可能解釋,不要懟面試官,要忍得住;實在忍不住,就懟個痛快(我試過,順利掛了)。 shell

第四點,自信、自信、自信。相信本身,勇敢的去面試,便是被虐。相信本身,並且面試技巧也都是在一次次被虐中成長起來的。

下面是我本身總結的一點知識點的乾貨,若low,勿噴:

計算機網絡: 數據庫

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. 經常使用協議的端口

推薦:計算機網絡(謝希仁)、TCP/IP詳解、HTTP權威指南,大神能夠看一下RCF2616之類的

數據庫:

看書結合實踐,多看底層原理實現、多動手。會分析比較並設計幾種經常使用數據庫的實際使用場景,熟練寫各類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表、跳錶等)

6. Redis的幾種數據結構

推薦:MySQL數據庫應用從入門到精通(王飛飛,雖然名字很low)、高性能Mysql、Redis設計與實現、Redis實戰

數據結構與算法:

1. 數組、鏈表(單向、雙向、雙端)、棧和隊列、二叉樹、紅黑樹、哈希表、堆(最大和最小)、圖

2. 我的經驗:棧和隊列、哈希表、鏈表、二叉樹的題較多,圖的較少

3. 查找:二分查找及其變形

4. 二叉樹:前序、中序、後序遍歷,按規定方式打印,兩個節點之間操做(最近公共祖先、距離)等問題。

5. 最大堆和最小堆:大數量級數據找最大幾個等問題、堆如何調整等問題。

6. 圖:深度優先、廣度優先、單源最小路徑Dijkstra,任意兩點間最短路徑Floyd-Warshall,最小生成樹Prime和Kruskal

7. 紅黑樹:特色及如何調整(基本上沒人讓你手擼紅黑樹)

8. 棧和隊列:常常做爲算法題要用到的數據結構

8. 八大排序:3個簡單的:冒泡、選擇、插入及其優化,5個高級的:快速排序、歸併排序、堆排序、希爾排序、桶排序(快排、歸併、堆很重要,常常手擼)

9. 時間複雜度及空間複雜度分析

10. 動態規劃dp:這個比較難,揹包問題以內的

推薦:數據結構C語言版(嚴蔚敏)、java數據結構和算法(Robert Lafore)、劍指offer及leetcode刷題、大神能夠看一下算法導論

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文件系統結構和啓動流程

8. 防火牆iptables(這個比較少)

推薦:鳥哥私房菜、視頻(馬哥的一套 http://pan.baidu.com/s/1pL3HGT1

操做系統:

1. 一個二進制文件運行出結果,操做系統作了什麼(這是一個很全面的題)

2. 死鎖的條件及銀行家算法、資源分配圖之類的

3. 進程間通訊方式

4. linux的五種IO方式(阻塞與非阻塞、同步與異步的理解)

5. linux的select、poll、epoll的區別

6. 進程與線程區別、內核級線程與用戶級線程

7. 頁面置換算法,尤爲是lru

8. 進程調度算法

9. linux中斷響應機制

10. 虛擬內存機制

推薦:現代操做系統、網易雲課堂的北大公開課

基本語言(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調優、類加載機制、雙親委派、內存模型及線程、鎖優化

16.設計模式:幾種單例模式實現(手擼)、其餘幾種常見的設計模式(JDK中具體點)、項目中怎麼用了

語言這塊知識點太多了,基礎要紮實。

推薦:設計模式那點事、瘋狂java講義、java併發編程實戰、深刻理解java虛擬機、java編程思想

其餘:

hadoop:mapreduce、HDFS、yarn等等(推薦:Hadoop權威指南)

hive:很經常使用的處理工具(推薦:Hive編程指南)

消息隊列(kafka之類的)、遠程過程調用RPC之類,寫一些Demo本身試一下,不要被問直接就不知道

負載均衡調度(一致性哈希常常問)等

固然,還有不少其餘知識。

Spring
整理有什麼?IOC和AOP思想,bean如何初始化,生命週期,動態代理等細節的實現,能看源碼最好。沒時間看完,IOC和AOP部分看看源碼瞭解一下底層實現。
 

 

設計模式

熟悉幾種經常使用的設計模式,尤爲單例模式,各類手寫都要會,線程安全的、線程不安全的,各類實現方式之間的區別。

 

場景設計

面試通常都會考察一些實際場景的設計題,有時間多看看開源,理解一些人家的設計思路,積累多了遇到這樣的問題不會徹底沒有思路。

 

項目和實習:

必定要把本身作的東西從頭至尾順一遍。

難點在哪裏,怎麼解決的,學到了什麼,技術亮點在哪裏,這些事常常問的。

常問的問題,像併發量多少,怎麼優化這些也要早測試早做準備。

千萬不要到時候再想,這會讓面試官感受你對本身作的都不熟悉。最好能夠本身畫一下架構圖,講的時候思路更清晰。
每一個細節好好把握,知道項目的擴展點,對於擴展要有設計思路。
 

補充一些內推信息給後來人:
內推渠道:
北郵人論壇的畢業生找工做板塊、牛客網的討論區(通常有置頂)、脈脈上(互聯網員工直接發佈一些內推信息)
內推時機:
不能太早也不能太晚:太早的話,徹底沒有面試經驗和準備,被撈起來一面就容易掛了;太晚的話,極可能就死在簡歷池子裏了!
BAT爲例:
百度:提早批開始不須要填系統,電子版簡歷由內推人直達部門,須要早一些內推,否則部門招滿,極可能就死在簡歷池裏。
騰訊:內推後,會收到郵件更新信息,可是簡歷會不少(騰訊樓主內推的比較晚,簡歷就是校招才撈起來的)。
阿里:內推後,會收到郵件更新信息,我的感受注意不要太早內推(阿里主要java,java須要準備的東西還挺多的,最好充分準備了,否則極可能一面掛;並且阿里雖然校招要人少,但面的應屆生超多,通常內推不會死在簡歷池裏)
車票報銷的公司(我知道的):
網易、騰訊(內推)、鏈家、滴滴、招銀網絡(提早批)
相關文章
相關標籤/搜索