2. 专业技能
2.1 Java基础
2.1.1 IO流
IO,即in和out,也就是输入和输出,指应用程序和外部设备之间的数据传递,常见的外部设备包括文件、管道、网络连接。
流(Stream),是一个抽象的概念,是指一连串的数据(字符或字节),是以先进先出的方式发送信息的通道。
- 字节流: 字节流主要用来处理二进制文件,比如说图片啊、MP3 啊、视频啊
- InputStream
- FileInputStream
- ....
- OutputStream
- FileOutputStream
- ...
- InputStream
- 字符流: 字符流一般用于处理纯文本类型的文件,如TXT文件等
- Reader
- InputStreamReader
- FileReader
- ...
- InputStreamReader
- Writer
- OutputStreamWriter
- FileWriter
- ...
- OutputStreamWriter
- Reader
2.1.2 集合
2.1.3 泛型和注解
- 泛型
泛型的核心思想是在定义类、接口或方法时,不指定具体的类型,而是使用一个类型参数(如T
),等到使用时再确定这个参数的具体类型。
上界通配符 <? extends T>
:表示“未知的特定子类型”。它支持读取(你取出的元素肯定是T或其子类),但不支持写入(因为编译器不知道具体是哪个子类,无法保证类型安全)。
下界通配符 <? super T>
:表示“未知的特定父类型”。它支持写入(你可以安全地放入T及其子类),但读取受限(读出的对象只能赋值给Object
,因为不知道具体的父类是什么)。
泛型的核心价值在于编译时类型安全和代码复用,它让我们的数据结构(如集合)和算法变得更加通用和可靠。
- 注解
注解的本质是为代码元素(类、方法、变量等)附加一些元数据。这些元数据本身不直接执行业务逻辑,但可以被编译器、开发工具或运行时环境(通过反射)读取,并根据这些元数据执行相应的操作。
注解的核心价值在于声明式编程和元数据驱动,它让代码的配置和意图更加清晰,并被各种框架和工具所利用。
2.2 JUC
2.2.1 synchronized锁升级机制
-
Java对象内存分布
-
对象头
- 对象标记(Mark Word):HashCode,GC标记,GC存活次数,同步锁标记,偏向锁持有者
- 类元信息(又叫类型指针):指向该对象类元数据(klass)的首地址
- 长度(数组对象特有)
-
实例数据(属性数据)
-
对齐填充(保证8字节的倍数)
-
无锁, 偏向锁, 轻量级锁, 重量级锁
-
无锁 001
-
偏向锁 : 1个线程重复获取 101
MarkWord存储的是偏向的线程ID
如果不是自己线程ID, 则升级为轻量级锁.
- 轻量级锁: 多个线程, CAS获取 000
MarkWord存储的是指向线程的方法栈中Lock Record的指针
CAS次数达到上限(默认10), 升级为重量级锁
- 重量级锁 多个线程获取 010
MarkWord存储的是指向堆中的Monitor对象的指针
2.2.2 线程池机制
public ThreadPoolExecutor(int corePoolSize, // 核心线程数int maximumPoolSize, // 最大线程数long keepAliveTime, // 线程存活时间,超过核心线程数时又空闲TimeUnit unit, // 时间单位BlockingQueue<Runnable> workQueue, // 阻塞队列ThreadFactory threadFactory, // 创建线程的工厂RejectedExecutionHandler handler) { // 拒绝策略if (corePoolSize < 0 ||maximumPoolSize <= 0 ||maximumPoolSize < corePoolSize ||keepAliveTime < 0)throw new IllegalArgumentException();if (workQueue == null || threadFactory == null || handler == null)throw new NullPointerException();this.corePoolSize = corePoolSize;this.maximumPoolSize = maximumPoolSize;this.workQueue = workQueue;this.keepAliveTime = unit.toNanos(keepAliveTime);this.threadFactory = threadFactory;this.handler = handler;}
任务 ==> 核心线程 ==> 阻塞队列 ==> 工作线程
2.2.3 CAS
2.2.4 AQS
2.3 JVM
2.3.1 JVM数据分布
2.3.2 JMM模型
2.3.3 垃圾回收机制
2.3.4 JVM调优核心参数
2.3.5 JVM调优工具
2.4 MySQL
2.4.1 事务
2.4.2 MVCC
2.4.3 索引优化
2.4.4 SQL优化
2.5 Redis
2.5.1 持久化
2.5.2 内存淘汰机制
2.5.3 主从复制, 集群分片原理
2.5.4 缓存问题
- 缓存穿透
- 缓存雪崩
- 缓存击穿
- 缓存数据一致性