Java基础

适用于没有Java基础的同学

先过一遍 Java教程 ,示例可以在 菜鸟教程在线编辑器 边刷教程边写代码。

代码规范

这是一个经常容易被忽略,却极其重要的部分,不要让自己的代码别人看了就想吐。刷一下 常见企业级代码规范,包括《阿里巴巴 Java 开发手册》、《Google Java 编程风格指南》、《Twitter Java Style Guide》

基础巩固

面向对象

阅读:Java 基础 - 面向对象 ,可以学习到:

1
2
3
1.Java三大特性:继承、封装、多态;
2.编译时多态和运行时多态;
3.UML图;

UML的前置知识回顾: Java教程-Java 对象和类

阅读:JAVA基本类型和包装类 ,可以学习到:

1
2
3
4
1.八大基本数据类型及其包装类;
2.包装类的作用;
3.装箱和拆箱,及其实现原理;
4.==和equals的区别 - 缓存池;

String

阅读:【Java基础】String 相关知识点总结 ,可以学习到:

1
2
3
1.String为什么设计成不可变及其好处;
2.字符串常量池和intern()
3.String s = new String("abc");创建几个对象

异常体系

阅读:java 异常分类和处理机制 ,可以学习到:

1
2
3
1.异常分类:Throwable=Error+Exception(编译时异常+运行时异常);设计为RuntimeException,可不显示捕获;
2.异常处理机制:try..catch..finally
3.如何优雅的设计异常:有无法处理的问题的时候,需要抛出异常;不要用异常来控制业务逻辑;

IO

阅读:史上最骚最全最详细的IO流教程,没有之一! ,可以学习到:

1
2
3
4
5
6
7
8
9
10
11
12
1.如何从名称一眼看出IO流的分类;
2.File的定位,与IO流的关系
3.createNewFile方法以及mkdir与mkdirs的区别
4.字节流、字符流、缓冲流的继承体系
5.FileInputStream读取数据的流程和注意事项(为什么要在while循环读length?)
6.字节流如何借用String的解码功能读取中文字符
7.flush():既想写出数据,又想继续使用流(内置缓存区)
8.快速复制:缓冲流+数组
9.编码和解码、字符集(字符流=字节流+编码表)、转换流,转换的时候传入编码表(最高效率:BufferedReader内包装InputStreamReader)
10.序列化
11.打印流及其特点
12.Properties的load(InputStream inStream)

扩展阅读:java try-with-resource语句使用

注解

阅读:Java注解(Annotation) ,可以学习到:

1
2
3
1.注解类型:Documented、Inherited、Retention、Target;
2.注解生命周期;
3.反射注解;

泛型

阅读:Java 泛型最全指南 ,可以学习到:

1
2
3
4
5
1.什么是泛型?泛型类、泛型接口、泛型方法;
2.结合继承了解泛型的使用;
3.泛型的上界和下界,泛型通配符;
4.泛型擦除;
5.使用泛型的建议:指定类型信息可结合kotlin的;

扩展阅读:一文读懂 Java 和 Kotlin 的泛型难点 ,可以学到:

1
逆变和协变

反射

阅读:Java反射的深入理解以及超级详细的使用方式 ,可以学习到:

1
2
3
1.反射的原理;
2.反射的使用:操作构造器、操作成员变量、操作成员方法、操作注解;
3.AccessibleObject和setAccessible()

扩展阅读:Java 反射调用静态方法

集合

HashMap

阅读:Java 8系列之重新认识HashMap ,可以学习到:

1
2
3
1.源码原理:确定哈希索引位置、put流程、扩容机制
2.HashMap大小为什么是2的n次方 & JDK1.8 hash算法的巧妙之处:&替代%;一半索引没变;
3.HashMap为什么会出现死循环?

扩展阅读:并发-HashMap在jdk1.8也会出现死循环

JUC

阅读:不可不说的Java“锁”事 ,可以学习到:

1
2
3
4
5
6
7
8
1.锁的分类
2.乐观锁和悲观锁、自旋锁和自适应自旋锁
3.CAS和三大问题(ABA、开销大、多个变量的原子性)
4.无锁、偏向锁、轻量级锁、重量级锁:Java对象头(Mark Word、Klass Point)、Monitor
轻量级锁和重量级锁的区别
5.公平锁和非公平锁
6.可重入锁和不可重入锁
7.独享锁和共享锁(读写锁)

扩展阅读:一篇文章理解 Java 中的 Unsafe 类,可以学习到:

1
2
3
4
5
6
1.如何获取Unsafe实例?
2.如何通过Unsafe创建对象?
3.如何通过Unsafe修改private?
4.堆外内存使用;
5.CAS的使用;
6.park/unpark的使用;

线程安全的三大特性

阅读:线程安全性详解(原子性、可见性、有序性),可以学习到:

1
2
3
4
1.原子性:CAS算法,ABA问题及解决;
2.可见性:主内存和工作内存、synchronized和volatile对比
内存屏障和禁止重排序,count++的执行逻辑;
3.有序性:as-if-serial语义规则、happens-before原则