為何我建議1-3年的Java程序員仔細看看這篇文章
此文的目的是為了督促自己去不斷學習,讓自己有更明確的方向去提升自己。以技能樹為基礎(chǔ),以面試要點為大綱,我覺得比抓住什么看什么要更有目的,更能堅持下去。世界瞬息萬變,我們要時刻準備著、時刻提高著自己,才能使自己更具有競爭力。
一、Java技能樹
1、基本語法
這包括static、final、transient等關(guān)鍵字的作用,foreach循環(huán)的原理等等。比如面試的時候面試官問你static關(guān)鍵字有哪些作用,如果你答出static修飾變量、修飾方法面試官會認為你合格,答出靜態(tài)塊,會認為你不錯,答出靜態(tài)內(nèi)部類會認為你很好,答出靜態(tài)導包會對你很滿意,因為能看出你非常熱衷研究技術(shù)。
2、集合
集合要掌握的是ArrayList、LinkedList、Hashtable、HashMap、ConcurrentHashMap、HashSet的實現(xiàn)原理,當然能掌握CopyOnWrite容器和Queue是再好不過的了。
還需要了解ConcurrentHashMap的鎖分段技術(shù),ConcurrentHashMap的讀是否要加鎖,為什么,ConcurrentHashMap的迭代器是強一致性的迭代器還是弱一致性的迭代器
3、設(shè)計模式
知道常用設(shè)計模式的優(yōu)缺點。
能畫出常用設(shè)計模式的UML圖。
4、多線程
Thread和Runnable的區(qū)別和聯(lián)系、多次start一個線程會怎么樣、線程有哪些狀態(tài)。
假如有Thread1、Thread2、ThreaD3、Thread4四條線程分別統(tǒng)計C、D、E、F四個盤的大小,所有線程都統(tǒng)計完畢交給Thread5線程去做匯總,應(yīng)當如何實現(xiàn)?
常用的線程池有幾種?這幾種線程池之間有什么區(qū)別和聯(lián)系?線程池的實現(xiàn)原理是怎么樣的?
synchronized和ReentrantLock的區(qū)別、synchronized鎖普通方法和鎖靜態(tài)方法、死鎖的原理及排查方法等等。
5、JDK源碼
要想拿高工資,JDK源碼不可不讀,總結(jié)一下比較重要的源碼:
List、Map、Set實現(xiàn)類的源代碼;
ReentrantLock、AQS的源代碼;
AtomicInteger的實現(xiàn)原理,主要能說清楚CAS機制并且AtomicInteger是如何利用CAS機制實現(xiàn)的;
線程池的實現(xiàn)原理;
Object類中的方法以及每個方法的作用。
6、數(shù)據(jù)庫
union和union all的區(qū)別、left join、幾種索引及其區(qū)別,數(shù)據(jù)庫性能的優(yōu)化。
7、數(shù)據(jù)結(jié)構(gòu)和算法分析
數(shù)組、鏈表是基礎(chǔ),棧和隊列深入一些但也不難,樹挺重要的,比較重要的樹AVL樹、紅黑樹,可以不了解它們的具體實現(xiàn),但是要知道什么是二叉查找樹、什么是平衡樹,AVL樹和紅黑樹的區(qū)別。
8、Java虛擬機
- Java虛擬機的內(nèi)存布局
- GC算法及幾種垃圾收集器、
- 類加載機制,也就是雙親委派模型
- Java內(nèi)存模型
- happens-before規(guī)則
- volatile關(guān)鍵字使用規(guī)則
9、Web方面的一些問題
- 分布式Session的幾種實現(xiàn)方式
- Session和Cookie的區(qū)別和聯(lián)系以及Session的實現(xiàn)原理。
- get/post的區(qū)別、forward/重定向的區(qū)別、HTTPS的實現(xiàn)原理
- 一致性Hash算法
二、Java面試題
1 Java 基礎(chǔ)
1.1 Java 基礎(chǔ)語法
- 面向?qū)ο蟮奶卣?/li>
- java 中四種修飾符的限制范圍
- 重載和重寫的區(qū)別
- 抽象類和接口有什么區(qū)別
- Java 基本數(shù)據(jù)類型
- int 和 Integer 有什么區(qū)別
- 說說&和&&的區(qū)別
- final, finally, finalize 的區(qū)別
- Object 類中的方法
- equals 與 == 的區(qū)別
1.2 Java 常用集合
- List 和 Set 區(qū)別
- List 和 Map 區(qū)別
- Arraylist 與 LinkedList 區(qū)別
- ArrayList 與 Vector 區(qū)別
- ArrayList在循環(huán)過程中刪除,會不會出問題
- HashMap 和 Hashtable 的區(qū)別
- HashSet 和 HashMap 區(qū)別
- HashMap 的源碼,實現(xiàn)原理
- HaspMap 擴容是怎樣的,為什么都是2的N次冪的大小
- HashMap,HashTable,ConcurrentHashMap 的區(qū)別
1.3 Java IO 和 NIO
- 什么是比特(Bit),什么是字節(jié)(Byte),什么是字符(Char),它們長度是多少,各有什么區(qū)別
- java 中有幾種類型的流
- 字符流和字節(jié)流有什么區(qū)別
- 什么是 java 序列化,如何實現(xiàn) java 序列化?
- IO 和 NIO 區(qū)別
- ByteBuffer 與 StringBuffer 有什么區(qū)別
- 內(nèi)存映射緩存區(qū)是什么
- 直接緩沖區(qū)與非直接緩沖器有什么區(qū)別
- 原生的 NIO 在 JDK 1.7 版本存在 epoll bug
2 多線程
2.1 線程的基本概念
- 線程和進程的區(qū)別
- 創(chuàng)建線程的方式有哪幾種
- Callable 和 Future 的了解
- 線程的生命周期
- ThreadLocal 原理分析
- sleep 和 wait 的區(qū)別
- notify 和 notifyAll 的區(qū)別
- sleep() 、join()、yield()有什么區(qū)別
2.2 線程池
- 為什么使用線程池
- 線程池的幾種實現(xiàn)方式
- 線程池的實現(xiàn)原理
- 線程池的停止方法
2.3 鎖
- synchronized 關(guān)鍵字的用法,優(yōu)缺點
- synchronized 與 lock 的區(qū)別
- volitile 關(guān)鍵字的作用,原理
- CAS 概念及理解
- 悲觀鎖和樂觀鎖
- 可重入鎖的用處及實現(xiàn)原理
3 數(shù)據(jù)庫
- 數(shù)據(jù)庫鎖、行鎖
- 事物的性質(zhì)
- MySQL 索引使用的注意事項
- 數(shù)據(jù)庫索引的原理
- MySQL 數(shù)據(jù)庫的常用存儲引擎
4 算法
- 排序算法
- B+樹
- 紅黑樹
5 框架
- BeanFactory 和 ApplicationContext 有什么區(qū)別
- Spring Bean 的生命周期
- Spring 的單例實現(xiàn)原理
- Spring IOC 如何實現(xiàn)
- 說說 Spring AOP
- Spring AOP 實現(xiàn)原理
- 動態(tài)代理(cglib 與 JDK)
- Spring 框架中用到了哪些設(shè)計模式
- MVC 設(shè)計思想
- Spring MVC 運行流程
- SpringMVC 的Controller 是如何處理參數(shù)的
6 網(wǎng)絡(luò)
- 計算機網(wǎng)絡(luò)的模型
- TCP,UDP 區(qū)別
- 三次握手,四次揮手,為什么要四次揮手
- 長連接和短連接
- 連接池適合長連接還是短連接
- https 原理
PS:這是本人之前面試過程中遇到的較多的以及不太懂的問題、本人覺得比較重要的。也參考了一些網(wǎng)上別人的面試問題,歡迎大家補充。