基础篇
01 面向对象
→ 什么是面向对象
- 面向对象、面向过程
- 面向对象的三大基本特征和五大基本原则
→ 平台无关性
- Java 如何实现的平台无关
- JVM 还支持哪些语言(Kotlin、Groovy、JRuby、Jython、Scala)
→ 值传递
- 值传递、引用传递
- 为什么说 Java 中只有值传递
→ 封装、继承、多态
- 什么是多态、方法重写与重载
- Java 的继承与实现
- 构造函数与默认构造函数
- 类变量、成员变量和局部变量
- 成员变量和方法作用域
02 Java 基础知识
→ 基本数据类型
- 7 种基本数据类型:整型、浮点型、布尔型、字符型
- 整型中 byte、short、int、long 的取值范围
- 什么是浮点型?什么是单精度和双精度?为什么不能用浮点型表示金额?
→ 自动拆装箱
- 什么是包装类型、什么是基本类型、什么是自动拆装箱
- Integer 的缓存机制
→ String
- 字符串的不可变性
- JDK 6 和 JDK 7 中 substring 的原理及区别、
- replaceFirst、replaceAll、replace 区别、
- String 对“+”的重载、字符串拼接的几种方式和区别
- String.valueOf 和 Integer.toString 的区别、
- switch 对 String 的支持
- 字符串池、常量池(运行时常量池、Class 常量池)、intern
→ 熟悉 Java 中各种关键字
- transient、instanceof、final、static、volatile、synchronized、const 原理及用法
→ 集合类
- 常用集合类的使用、ArrayList 和 LinkedList 和 Vector 的区别 、SynchronizedList 和 Vector 的区别、HashMap、HashTable、ConcurrentHashMap 区别
- Set 和 List 区别?Set 如何保证元素不重复?
- Java 8 中 stream 相关用法、apache 集合处理工具类的使用、不同版本的 JDK 中 HashMap 的实现的区别以及原因
- Collection 和 Collections 区别
- Arrays.asList 获得的 List 使用时需要注意什么
- Enumeration 和 Iterator 区别
- fail-fast 和 fail-safe
- CopyOnWriteArrayList、ConcurrentSkipListMap
→ 枚举
- 枚举的用法、枚举的实现、枚举与单例、Enum 类
- Java 枚举如何比较
- switch 对枚举的支持
- 枚举的序列化如何实现
- 枚举的线程安全性问题
→ IO
- 字符流、字节流、输入流、输出流、
- 同步、异步、阻塞、非阻塞、Linux 5 种 IO 模型
- BIO、NIO 和 AIO 的区别、三种 IO 的用法与原理、netty
→ 反射
- 反射与工厂模式、反射有什么用
- Class 类、java.lang.reflect.*
→ 动态代理
- 静态代理、动态代理
- 动态代理和反射的关系
- 动态代理的几种实现方式
- AOP
→ 序列化
- 什么是序列化与反序列化、为什么序列化、序列化底层原理、序列化与单例模式、protobuf、为什么说序列化并不安全
→ 注解
- 元注解、自定义注解、Java 中常用注解使用、注解与反射的结合
- Spring 常用注解
→ JMS
- 什么是 Java 消息服务、JMS 消息传送模型
→ JMX
- java.lang.management.*、 javax.management.*
→ 泛型
- 泛型与继承、类型擦除、泛型中 KTVE? object 等的含义、泛型各种用法
- 限定通配符和非限定通配符、上下界限定符 extends 和 super
- List<Object> 和原始类型 List 之间的区别?
- List<?> 和 List<Object> 之间的区别是什么?
→ 单元测试
- junit、mock、mockito、内存数据库(h2)
→ 正则表达式
- java.lang.util.regex.*
→ 常用的 Java 工具库
- commons.lang、commons.*...、 guava-libraries、 netty
→ API & SPI
- API、API 和 SPI 的关系和区别
- 如何定义 SPI、SPI 的实现原理
→ 异常
- 异常类型、正确处理异常、自定义异常
- Error 和 Exception
- 异常链、try-with-resources
- finally 和 return 的执行顺序
→ 时间处理
- 时区、冬令时和夏令时、时间戳、Java 中时间 API
- 格林威治时间、CET,UTC,GMT,CST 几种常见时间的含义和关系
- SimpleDateFormat 的线程安全性问题
- Java 8 中的时间处理
- 如何在东八区的计算机上获取美国时间
→ 编码方式
- Unicode、有了 Unicode 为啥还需要 UTF-8
- GBK、GB2312、GB18030 之间的区别
- UTF8、UTF16、UTF32 区别
- URL 编解码、Big Endian 和 Little Endian
- 如何解决乱码问题