主要版本 | 更新時間 | 備注 |
---|---|---|
v3.0 | 2020-03-31 | 知識體系完善,在v2.0的基礎上,新增20%左右的知識點 調整部分知識的順序及結構,方便閱讀和理解 通過GitHub Page搭建,便於閱讀 |
v2.0 | 2019-02-19 | 結構調整,更適合從入門到精通; 進一步完善知識體系; 新技術補充; |
v1.1 | 2018-03-12 | 增加新技術知識、完善知識體系 |
v1.0 | 2015-08-01 | 首次發布 |
GitHub 項目地址:進入
GitHub Pages 完整閱讀:進入
Gitee Pages 完整閱讀:進入 (國內訪問速度較快)
基礎篇
面向對象
什么是面向對象
面向對象與面向過程
面向對象的三大基本特征
面向對象的五大基本原則
封裝、繼承、多態
什么是多態
方法重寫與重載
Java的繼承與實現
Java的繼承與組合
構造函數與默認構造函數
類變量、成員變量和局部變量
成員變量和方法作用域
平台無關性
Java如何實現的平台無關性的
JVM還支持哪些語言
值傳遞
值傳遞、引用傳遞
為什么說Java中只有值傳遞
Java基礎知識
基本數據類型
8種基本數據類型
整型中byte、short、int、long的取值范圍
什么是浮點型?
什么是單精度和雙精度?
為什么不能用浮點型表示金額?
自動拆裝箱
自動拆裝箱
Integer的緩存機制
如何正確定義接口的返回值(boolean/Boolean)類型及命名(success/Success)
String
字符串的不可變性
String的長度限制
JDK 6和JDK 7中substring的原理及區別
replaceFirst、replaceAll、replace區別
String、StringBuilder和StingBuffer之間的區別與聯系
String對“+”的重載
字符串拼接的幾種方式和區別
String.valueOf和Integer.toString的區別
switch對String的支持
字符串池
常量池(運行時常量池、Class常量池)
intern
Java中各種關鍵字
transient
instanceof
volatile
synchronized
final
static
const
集合類
Collection和Collections的區別
常用集合類的使用
Set和List區別
ArrayList和LinkedList和Vector的區別
SynchronizedList和Vector的區別
Set如何保證元素不重復
HashMap、HashTable、ConcurrentHashMap區別
Java 8中Map相關的紅黑樹的引用背景、原理等
HashMap的容量、擴容、hash等原理
Java 8中stream相關用法
Apache集合處理工具類的使用
不同版本的JDK中HashMap的實現的區別以及原因
Arrays.asList獲得的List使用時需要注意什么
Collection如何迭代
Enumeration和Iterator區別
如何在遍歷的同時刪除ArrayList中的元素
fail-fast 和 fail-safe
CopyOnWriteArrayList
ConcurrentSkipListMap
枚舉
枚舉的用法
枚舉的實現
枚舉與單例
Enum類
Java枚舉如何比較
switch對枚舉的支持
枚舉的序列化如何實現
枚舉的線程安全性問題
IO
字符流、字節流
輸入流、輸出流
字節流和字符流之間的相互轉換
同步、異步
阻塞、非阻塞
Linux 5種IO模型
BIO、NIO和AIO的區別
三種IO的用法與原理
netty
反射
什么是反射
反射有什么作用
Class類
java.lang.reflect.*
動態代理
靜態代理
動態代理
動態代理和反射的關系
動態代理的幾種實現方式
AOP
序列化
什么是序列化與反序列化
Java如何實現序列化與反序列化
Serializable 和 Externalizable 有何不同
為什么需要序列化
serialVersionUID
為什么serialVersionUID不能隨便改
transient
序列化底層原理
序列化如何破壞單例模式
protobuf
為什么說序列化並不安全
注解
元注解
自定義注解
Java中常用注解使用
注解與反射的結合
如何自定義一個注解?
Spring常用注解
泛型
什么是泛型
類型擦除
泛型帶來的問題
泛型中K T V E ? object等的含義
泛型各種用法
限定通配符和非限定通配符
上下界限定符extends 和 super
List