← 返回首页
一、数据类型与变量
- 基本类型(8种):
byte(1B) / short(2B) / int(4B) / long(8B) / float(4B) / double(8B) / char(2B) / boolean
- 包装类型:Integer 缓存池范围 -128~127,
Integer.valueOf() 会复用缓存对象
- 自动拆装箱:编译器自动调用
valueOf() 和 xxxValue(),注意 NPE 风险
- String 不可变性:底层
final char[](JDK9+ 改为 byte[]),字符串常量池在堆中
- String / StringBuilder / StringBuffer:String 不可变;StringBuilder 非线程安全但快;StringBuffer 线程安全(synchronized)
二、面向对象
- 三大特性:封装(访问控制)、继承(extends 单继承)、多态(重写 + 向上转型)
- 访问修饰符:
private → 默认(包) → protected(包+子类) → public
- 重写 vs 重载:重写(Override)是子类覆盖父类同签名方法;重载(Overload)是同类中方法名相同参数不同
- 抽象类 vs 接口:抽象类可有构造器和成员变量,单继承;接口 JDK8+ 支持 default/static 方法,多实现
- Object 核心方法:
equals()、hashCode()(重写 equals 必须重写 hashCode)、toString()、clone()、finalize()
- == vs equals:== 比较引用地址,equals 默认也是 ==,需重写实现值比较
三、集合框架
List
ArrayList:底层 Object[],默认容量 10,扩容 1.5 倍,随机访问 O(1),插入删除 O(n)
LinkedList:双向链表,插入删除 O(1),随机访问 O(n),同时实现了 Deque 接口
CopyOnWriteArrayList:写时复制,适合读多写少的并发场景
Map
HashMap:数组+链表+红黑树(JDK8),默认容量 16,负载因子 0.75,链表长度 ≥8 且数组长度 ≥64 转红黑树
ConcurrentHashMap:JDK8 采用 CAS + synchronized 锁单个桶节点,放弃分段锁
LinkedHashMap:维护双向链表保证插入/访问顺序,可用于实现 LRU 缓存
TreeMap:红黑树实现,Key 有序,时间复杂度 O(logN)
Set
HashSet:底层 HashMap(value 为固定 PRESENT 对象)
TreeSet:底层 TreeMap,元素有序
四、异常体系
- Throwable → Error(OOM、StackOverflow,不应捕获)+ Exception
- 受检异常(Checked):编译期检查,必须 try-catch 或 throws,如 IOException
- 非受检异常(Unchecked):RuntimeException 子类,如 NullPointerException、IndexOutOfBoundsException
- try-with-resources:JDK7+,自动关闭实现 AutoCloseable 的资源
- finally 执行顺序:finally 在 return 之前执行,但不会改变已确定的返回值(基本类型)
五、IO / NIO
- BIO:同步阻塞,一个连接一个线程,适合连接数少的场景
- NIO:同步非阻塞,核心三组件 —— Channel(双向通道)、Buffer(缓冲区)、Selector(多路复用器)
- AIO:异步非阻塞(NIO2),基于回调机制,Linux 下底层仍为 epoll
- 零拷贝:
FileChannel.transferTo() 利用 sendfile 系统调用减少数据拷贝次数
六、多线程与并发
线程基础
- 创建方式:继承 Thread / 实现 Runnable / 实现 Callable(有返回值)/ 线程池
- 线程状态:NEW → RUNNABLE → (BLOCKED / WAITING / TIMED_WAITING) → TERMINATED
sleep() 不释放锁,wait() 释放锁并进入等待队列
锁机制
synchronized:JDK6 优化 → 偏向锁 → 轻量级锁(CAS)→ 重量级锁(Monitor)
ReentrantLock:可中断、可超时、可公平、支持多 Condition
volatile:保证可见性和有序性(禁止指令重排),不保证原子性
线程池
- 核心参数:corePoolSize / maximumPoolSize / keepAliveTime / workQueue / handler
- 执行流程:核心线程 → 队列 → 最大线程 → 拒绝策略
- 四种拒绝策略:AbortPolicy(抛异常)/ CallerRunsPolicy / DiscardPolicy / DiscardOldestPolicy
并发工具
CountDownLatch:计数器归零后唤醒等待线程,一次性
CyclicBarrier:所有线程到达屏障点后一起继续,可重用
Semaphore:信号量,控制并发访问数量
CompletableFuture:异步编排,支持链式调用 thenApply / thenCompose / allOf
七、JDK 新特性速览
- JDK 8:Lambda、Stream API、Optional、新日期 API(LocalDate)、接口 default 方法
- JDK 11:var 局部变量推断、HttpClient、String 增强(isBlank/strip/repeat)
- JDK 17:Sealed Classes、Pattern Matching for instanceof、Records、Text Blocks
- JDK 21:虚拟线程(Virtual Threads)、结构化并发、Record Patterns、Switch 模式匹配