前段时间在极客时间上购买了杨晓峰老师的《Java核心技术36讲》,趁着这段时间有空,对相关知识点做了一个整体的大纲,也对自己所掌握的Java基础进行了一个复习和梳理,若想深入学习,可以购买这个专栏,也可以对着该知识点查阅相关资料,源码等自学。---- kayfen
文末附专栏链接
Java核心技术36讲知识点总结大纲
1 Java平台的理解
Java的特性,解释运行和编译运行
2 Exception 和 Error 有什么区别
- 理解Java的异常体系的设计,
Throwable
,Exception
,Error
的关系 - 理解
ClassNotFoundException
与NoClassDefFoundError
的区别 - 遵循
Throw early, catch late
原则
3 final、finally、finalize 有什么不同
从安全、性能、垃圾收集方面考虑
4 强引用、软引用、弱引用、幻象引用有什么区别
对象的可达性状态:强引用 -> 软引用 -> 弱引用 -(finalize)->幻想引用
- 对象可达性状态的流转
- 引用队列(ReferenceQueue)的使用
- 诊断 JVM 引用情况
- Reachability Fence 通过底层 API 来达到强引用的效果
5 String、StringBuffer、StringBuilder有什么区别
- 字符串的设计与实现考量
- 字符串缓存 intern()方法,由永久代移到堆中。
- String 的演化,Java 9 中底层把 char 数组换成了 byte 数组,占用更少的空间
- getBytes()方法指定字符编码
6 动态代理是基于什么原理
- 反射原理
- 动态代理分类:JDK动态代理原理,cglib动态代理原理
- 优缺点,适用场景
7 int和Integer有什么区别
- 基本类型和包装类型
- 包装类型的缓存
- 适应场景,性能影响
8 对比Vector、ArrayList、LinkedList有何区别
- Collection 各种类的实现原理,使用场景
- List 的各种实现,Set 的各种实现,Queue的各种实现
- 理解Java提供的各种排序算法 Collections.sort() Arrays.sort()
9 对比Hashtable、HashMap、TreeMap有什么不同
- HashMap 实现原理,源码分析
- Java 8 HashMap 中的树化
- 容量和负载因子
- 解决哈希冲突的方法
10 如何保证集合是线程安全的? ConcurrentHashMap如何实现高效地线程安全
- HashTable 低效的加锁方式
- Collections 提供的同步包装器
- ConcurrentHashMap 的设计原理:
早期(Java 7)实现原理
- 分离锁 Segment 对数组进行分段锁定,基于 ReetrantLock
- HashEntry内部使用 volatile 保证可见性
- 一个 Segment 可以对应多个桶,先定位到Segment 再进行二次哈希定位具体链表
- size() 方法获取大小时会进行2次重试,不保证一定准确
Java 8 和之后版本 ConcurrentHashMap 变化:
- 总体结构类似于 HashMap,锁的粒度更细
- 初始化利用volatile的
sizeCtl
检测是否发生竞争,若竞争则等待,然后CAS初始化 - 使用 CAS 操作进行无锁并发操作,key哈希得到桶的位置,为空进行CAS加新节点,否则使用
synchronized
加锁,链表达到数量之后转换红黑树 - size() 方法利用 LongAdd 进行累计
11 Java提供了哪些IO方式? NIO如何实现多路复用
- 传统的IO类库结构
- NIO 的基本组成和多路复用模型,Buffer,Channel,Selector
- Socket IO 中 传统实现方式与 NIO 的区别
- NIO 2 的基本组成
- 区分同步和异步,阻塞和非阻塞
12 Java有几种文件拷贝方式?哪一种最高效
- 使用 java.io 包下的XXXStream 拷贝 和 使用 NIO 中的FileChannel的 transferTo()
- 理解用户态和内核态
- Files.copy 标准库的底层使用的还是用户态的拷贝
- NIO 中 Direct Buffer 堆外内存和垃圾收集(只有FullGC 时收集),使用场景
- 高效文件拷贝的原则:
- 使用缓存,减少IO次数
- transferTo 等机制,减少上下文切换和额外IO
- 尽量减少不必要的转换,编解码,对象序列化之类
13 谈谈接口和抽象类有什么区别
- 接口和抽象类的设计原则
- 面向对象基本要素:抽象,封装,继承,多态
- 面向对象的S.O.L.I.D原则:
- 单一职责
- 开关原则
- 里氏替换
- 迪米特法则
- 接口分离
- 依赖反转
14 谈谈你知道的设计模式
设计模式分类:
-
创建型模式—对对象创建过程的各种问题和解决方案的总结:
工厂模式、单例模式、构建器模式、原型模式
-
结构型模式—针对软件设计结构的总结,关注于类、对象继承、组合方式的实践:
桥接模式、适配器模式、装饰者模式、代理模式、组合模式、外观模式、享元模式等
-
行为型模式—从类或对象之间交互、职责划分等角度总结的模式:
策略模式、解释器模式、命令模式、观察者模式、迭代器模式、模板方法模式、访问者模式
通过实例学习和理解设计模式<