JAVA後端學習路線
阿新 • • 發佈:2018-12-31
剛開通的部落格,值得紀念的日子2016.12.13
背景:
最近BAT等各大網際網路巨頭們的校招陸陸續續都準備開始了,可能對於在校的大多數學生來說,不知道如何正確衡量自己掌握的技術,更不知道BAT這樣的公司會要求自己必須具備什麼樣的技術能力。對於Java研發方向的技術面試,這裡總結了一些你必須要掌握的技術知識點,考察的內容會比這裡總結的多,所以如果想要有一個很不錯的offer,下面的知識點需要都具備。社招考察的內容會在此基礎上增加專案經驗、技術實戰經驗、熱門技術的使用及理解。
Java基礎:
1. 面向物件和麵向過程的區別 2. Java的四個基本特性(抽象、封裝、繼承,多型) 3. Overload和Override的區別 4. 構造器Constructor是否可被override 5. 訪問控制符public,protected,private,以及預設的區別 6. 是否可以繼承String類 7. String和StringBuffer、StringBuilder的區別 8. hashCode和equals方法的關係 9. 抽象類和介面的區別 10. 自動裝箱與拆箱 11. 什麼是泛型、為什麼要使用以及泛型擦除 12. Java中的集合類及關係圖 13. HashMap實現原理(看原始碼) 14. HashTable實現原理(看原始碼) 15. HashMap和HashTable區別 16. HashTable如何實現執行緒安全(看原始碼) 17. ArrayList和vector區別(看原始碼) 18. ArrayList和LinkedList區別及使用場景 19. Collection和Collections的區別 20. Concurrenthashmap實現原理(看原始碼) 21. Error、Exception區別 22. Unchecked Exception和Checked Exception,各列舉幾個 23. Java中如何實現代理機制(JDK、CGLIB) 24. 多執行緒的實現方式 25. 執行緒的狀態轉換 26. 如何停止一個執行緒 27. 什麼是執行緒安全 28. 如何保證執行緒安全 29. Synchronized如何使用 30. synchronized和Lock的區別 31. 多執行緒如何進行資訊互動 32. sleep和wait的區別(考察的方向是是否會釋放鎖) 33. 多執行緒與死鎖 34. 如何才能產生死鎖 35. 什麼叫守護執行緒,用什麼方法實現守護執行緒 36. Java執行緒池技術及原理 37. java併發包concurrent及常用的類 38. volatile關鍵字 39. Java中的NIO,BIO,AIO分別是什麼 40. IO和NIO區別 41. 序列化與反序列化 42. 常見的序列化協議有哪些 43. 記憶體溢位和記憶體洩漏的區別 44. Java記憶體模型及各個區域的OOM,如何重現OOM 45. 出現OOM如何解決 46. 用什麼工具可以查出記憶體洩漏 47. Java記憶體管理及回收演算法 48. Java類載入器及如何載入類(雙親委派) 49. xml解析方式 50. Statement和PreparedStatement之間的區別
JavaEE:
1. servlet生命週期及各個方法 2. servlet中如何自定義filter 3. JSP原理 4. JSP和Servlet的區別 5. JSP的動態include和靜態include 6. Struts中請求處理過程 7. MVC概念 8.Spring mvc與Struts區別 9. Hibernate/Ibatis兩者的區別 10. Hibernate一級和二級快取 11. Hibernate實現叢集部署 12. Hibernate如何實現宣告式事務 13. 簡述Hibernate常見優化策略 14. Spring bean的載入過程(推薦看Spring的原始碼) 15. Spring如何實現AOP和IOC 16. Spring bean注入方式 17. Spring的事務管理(推薦看Spring的原始碼) 18. Spring事務的傳播特性 19. springmvc原理 20. springmvc用過哪些註解 21. Restful有幾種請求 22. Restful好處 23. Tomcat,Apache,JBoss的區別 24. memcached和redis的區別 25. 有沒有遇到中文亂碼問題,如何解決的 26. 如何理解分散式鎖 27. 你知道的開源協議有哪些 28. json和xml區別
設計模式:
1. 設計模式的六大原則
2. 常用的設計模式
3. 用一個設計模式寫一段程式碼或畫出一個設計模式的UML
4. 如何理解MVC
5. 高內聚,低耦合方面的理解
演算法:
1. 深度優先、廣度優先演算法 2. 排序演算法及對應的時間複雜度和空間複雜度 3. 寫一個排序演算法 4. 查詢演算法 5. B+樹和二叉樹查詢時間複雜度 6. KMP演算法、hash演算法 7. 常用的hash演算法有哪些 8. 如何判斷一個單鏈表是否有環? 9. 給你一萬個數,如何找出裡面所有重複的數?用所有你能想到的方法,時間複雜度和空間複雜度分別是多少? 10. 給你一個數組,如何裡面找到和為K的兩個數? 11. 100000個數找出最小或最大的10個? 12. 一堆數字裡面繼續去重,要怎麼處理?
資料結構:
1. 佇列、棧、連結串列、樹、堆、圖
2. 編碼實現佇列、棧
Linux:
1. linux常用命令
2. 如何檢視記憶體使用情況
3. Linux下如何進行程序排程
作業系統:
1. 作業系統什麼情況下會死鎖
2. 產生死鎖的必要條件
3. 死鎖預防
資料庫:
1. 正規化
2. 資料庫事務隔離級別
3. 資料庫連線池的原理
4. 樂觀鎖和悲觀鎖
5. 如何實現不同資料庫的資料查詢分頁
6. SQL注入的原理,如何預防
7. 資料庫索引的實現(B+樹介紹、和B樹、R樹區別)
8. SQL效能優化
9. 資料庫索引的優缺點以及什麼時候資料庫索引失效
10.Redis的儲存結構
網路:
1. OSI七層模型以及TCP/IP四層模型
2. HTTP和HTTPS區別
3. HTTP報文內容
4. get提交和post提交的區別
5. get提交是否有位元組限制,如果有是在哪限制的
6. TCP的三次握手和四次揮手
7. session和cookie的區別
8. HTTP請求中Session實現原理
9. redirect與forward區別
10.DNS
11. TCP和UDP區別
安全:
1. 如果客戶端不斷的傳送請求連線會怎樣
2. DDos攻擊
3. DDos預防
4. 那怎麼知道連線是惡意的呢?可能是正常連線
其它:
1. 說一個你參與的專案、其中作為什麼角色
2. 遇到最困的問題是什麼,怎麼解決的
3. 你認為自己有那些方面不足
4. 平常如何學習的
5. 如何評價自己
智力題:
1. 給你50個紅球和50個黑球,有兩個一模一樣的桶,往桶裡放球,讓朋友去隨機抽,採用什麼策略可以讓朋友抽到紅球的概率更高?
2. 從100個硬幣中找出最輕的那個假幣?
。。。
總結:
以上這些考察的知識點,在強大的網際網路上都可以搜尋到答案,有些答案可能不是很全,所以需要自己去總結,但是對於一些需要知道原理的知識點,還是推薦看原始碼或者對於的書,然後總結得到自己的東西,這樣既學到真東西,還不會很容易忘。Java基礎的知識點推薦《Java程式設計思想》,JVM的推薦《深入理解Java虛擬機器》,spring原理的推薦《Spring原始碼深度解析》,對於網站架構的推薦《大型網站技術架構核心原理與案例分析》。