一、java基础
(1)基础类型
1)8种数据结构
byte short int long float double char boolean
2) 基础类型存储空间
3)包装类
4)包装类缓存
【面试题精讲】Java包装类缓存机制-腾讯云开发者社区-腾讯云
5)BigInteger
6) BigDecimal
java中BigDecimal的介绍及使用,BigDecimal格式化,BigDecimal常见问题
(a)compareTo与equals方法
为什么不能使用 BigDecimal 的 equals 方法做等值比较
(b) add方法
(c) divide方法
(2)集合collection
1)list queue map set
2) List
(a) ArrayList与LinkedList
(b)ArrayList与Vector
ArrayList和Vector_vector和arraylist
(c) CopyAndWriteArrayList
深入理解Java中的线程安全List:CopyOnWriteArrayList原理和应用
3)Map
(a)HashMap
1.HashMap扩容
2.HashMap jdk7与jdk8区别
JDK8中新增了红黑树,JDK8是通过数组+链表+红黑树
JDK7中链表的插入是用的头插法,而JDK8中则改为了尾插法
JDK8使用红黑树保证插入和查询的效率,JDK8中的Hash算法实现的复杂度降低了
JDK8中数组扩容的条件变化为:仅判断当前元素个数是否超过了阈值,不再判断当前put进来的元素对应的数组下标位置是否有值
JDK7中是先扩容再添加新元素,JDK8中是先添加新元素然后再扩容
(b)HashMap与LinkedHashMap
(c)HashMap与Hashtable
(d)HashMap与ConcurrentHashMap
(e)Hashtable与ConcurrentHashMap
1.相似点
线程安全、键值对存储
2.不同点
同步策略:分段锁与全局锁
迭代器:fail-safe与ConcurrentModificationException
性能:分段锁与全局锁
4)Set
(a) HashSet与LinkedHashSet
5)queue
(a) LinkedList
(b)BlockQueue
1.add offer put、remove poll take、element peek 方法
2. ArrayBlockQueue与LinkedBlockQueue
3.使用场景
(3)Object类
1)equals与==
2)wait notify notifyAll方法
(a)同步锁
3)clone方法
4)hashCode 与equals方法、System.identityHashCode方法
5)finalize方法与final finally
6)Object对象大小
(4)重写与重载
(5)抽象类与接口
(6)字符串
1)String与StringBuilder、StringBuffer
2)字符串反转
(7)IO
1)io、nio、aio区别
2)nio的selector channel buffer
(8)异常处理
1) try catch finnaly
2) Exception 类
3) RuntimeException类
(a)NullPointerException
(b)IndexOfOutBoundException
(c)ArrayIndexOfOutBoundException
(d)ClassCastException
(e)ArithmeticException
(f)NumberFormatException
(g)SecurityException
(h)IllegalArgumentException
(i)IllegalStateException
(j)IllegalMonitorStateException
(k)IllegalThreadStateException
(l)ConcurrentModificationException
4)Error类
(9)注解
(10)反射
(11)日期时间
(12)类加载
1) Class
2) ClassLoader
(a)引导类加载器;---加载核心Java库
(b)扩展类加载器;----加载扩展库
(c)系统类加载器;----加载用户类路径中定义的类
(d)自定义类加载器;
3)双亲委派机制的优点
1、避免类重复加载,保证类的唯一性;
2、防止核心API被篡改
(13)对象
1)对象的生命周期
(a)内存分配
(b)对象头设置
(c)成员变量零值初始化
(d)构建函数调用
(e)返回对象引用
(f)垃圾回收
2)对象的内存结构
(a)对象头
1.Mark Word
32位4byte 64位8byte
哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID
2.类指针
32位4byte 64位8byte开启压缩4byte
3.数组长度
为数组对象时4byte
(b)实例数据
(3)填充对齐 (8byte的整数倍对齐)
3)对象引用
强引用、软引用、弱引用、虚引用
(14) jvm退出
(a)程序正常终止
(b)System.exit
(c)未捕获的异常或错误
(d)Runtime.halt
(f)外部命令强制退出
二、java并发
(1)线程
1)接口
(a) runnable callable
1.返回值
2.抛出异常
3.泛型
4.撤销方法、执行结果方法
(b) Future FutureTask RunnableFuture
Future接口
RunnableFuture
FutureTask类
2)守护线程
3)虚拟线程
4)停止线程
5)重复start线程
6)start与run方法、interrupt interrupted isInterrupted方法
7)线程通信
1.volatile
2.synchronized 临界区方式 ReentrantLock/Condition 消息队列方式
3.使用JUC工具类 CountDownLatch
4.基本LockSupport实现线程间的阻塞和唤醒
5.通过Socket网络通信
6.信号量机制(Semaphore)
7.管道通信PipedInputStream和PipedOutputStream
8)线程调度与时间片
9)线程状态
(a) 线程会进入 WAITING 状态
(b) 唤醒阻塞线程
(2)线程池
1)工作原理
一种用于管理和重用线程的机制,其底层工作原理涉及线程的创建、调度、执行以及回收等关键过程。
- 线程池的创建
- 任务提交
- 线程分配
- 线程回收
- 任务完成和结果返回
- 异常处理
(a)线程池参数
1.核心线程数 allowCoreThreadTimeOut
2.最大线程数
3.超时时间
4.拒绝策略
5. 工作队列
6. 线程工厂
(b)方法
1.shutdown
2.shutdownNow
3.awaitTermination
4. allowCoreThreadTimeOut
5. prestartAllCoreThreads
6.terminated
(c) 线程池状态
(d)线程池中线程异常后销毁
2) ExecuteService
(a)ThreadPoolExecutor
(b) ScheduledThreadPoolExecutor
(c)ForkJoinPool
3)Executors
(3)线程同步
1)同步方式
(4)CAS
1)原理
2)使用方式
3)ABA问题
4)AtomicStampedReference
(5)AQS
1)state 与链表
2)共享锁与排他锁
3)
(6)ReentrantLock
1)公平锁与非公平锁
2) tryLock 与lock
3)ReentrantReadWriteLock
(7)synchronized
1)实现原理
2)使用方式
3)string对象锁问题与Guava Interners
4)锁优化
偏向锁、轻量级锁、重量级锁
5)与ReentrantLock对比
(8)CountDownLatch CyclicBarrier
(9)volatile
1)多个线程之间的可见性
2)防止指令重排
(10)atomic包
(11)ThreadLoal
1) 原理
2) ThreadLoalMap
3) InhertiableThreadLoal
4) 内存泄露
(12)LockSupport
(13)伪共享
1)伪共享概念
2)@Contented
(14)异步编程
1)Future
2)CompletableFuture
(a)
(b) 异步任务
1. runAsync
2.supplyAsync
3. join
(c)组合处理
1.allOf
2.anyOf
(d)异步回调
1.whenComplete thenAccept
2.handle thenApply
3.链式处理 thenRun
(15)并行与并发
(16)线程与进程
(17)线程安全
1)使用synchronized关键字
2)使用Atomic类
3)使用ReentrantLock类
4)使用线程安全的设计模式
(18)可重入锁
(19)锁的优化机制
(20)不可变对象
(21)死锁
1)死锁必要条件
2)打破死锁的方式
3)死锁与活锁
4)死锁与饥饿
三、java JVM
(1)jvm内存
(a)程序计数器
(b)java虚拟机栈
(c)本地方法栈
(d)堆
(f)方法区(元空间)
(g)堆外内存
(2)堆内存分配
(a)对象分配的位置
非堆分配:逃逸分析、标量替换、栈上分配、寄存器分配
堆分配:Eden、老年代
(b) 对象内存分配方式
指针碰撞、空闲列表
(c)对象内存分配如何保证线程安全
TLAB(Thread Local Allocation Buffer)
CAS
(3)常量池
(a)类常量池
Class 常量池是Java类文件的一部分,它由编译器在编译Java源文件时生成,存储在.class文件中。它包含了类或接口的字面量(如字符串、整数常量等)以及符号引用(如类和接口的名字、字段和方法的名字及描述符)
(b)运行常量池
运行时常量池是Class常量池在类加载到JVM后的一种表现形式。它是类加载过程的一部分,在类或接口被载入JVM时,Class常量池的信息被载入运行时常量池。
它在类加载时被创建,是方法区的一部分(在Java 8后部分实现为元空间的一部分)。
存储位置:运行时常量池属于方法区的一部分。
在Java 8之前,方法区是永久代(PermGen)的一部分;在Java 8及以后,方法区被转移到元空间(Metaspace)。
(c)字符串常量池
字符串常量池是用于存储字符串字面量的内存区域。当一个新的字符串字面量被声明时,如果字符串常量池中已经存在这个字符串,它将不会创建新的字符串对象,而是返回已经存在的引用。
它是运行时常量池中专门用于字符串管理的部分。
存储位置:堆内存(Heap Memory)
从Java 7开始,字符串常量池移到了堆内存中。这种转移有助于减少方法区的内存压力,也更好地支持垃圾回收。
(4)gc
1)分代回收
分代理由
- 提高垃圾回收效率
- 减少GC停顿时间
- 优化内存分配
- 简化内存管理
- 适应实际应用场景
- 分代算法的灵活性
2)垃圾对象
(a)根可达性分析
1. gc root
2.三色标记法
a)白灰黑
b)问题
漏标:遗漏垃圾对象
多标:重新标记(CMS、G1)
c)好处
避免循环引用、并发性增强、渐进性收集
3)gc算法
4)gc安全点
方法调用、循环回跳、异常处理
(5)OOM
1) StackOverFlowError
2)OutOfMemoryError
3) OOM一定会导致JVM退出吗
主线程OOM
子线程OOM
捕获的OOM异常
(6)内存泄漏
(7)JVM启动参数
(a)内存相关
-Xms -Xmx -Xss
-Xmn -XX:NewRatio -XX:SurvivorRatio
-XX:MetaspaceSize -XX:MaxMetaspaceSize
(b)gc相关
-XX:MaxGCPauseMillis
-XX:ParallelGCThreads
-XX:+UseConcMarkSweepGC
-XX:+UseG1GC
(8)JVM命令行工具
四、数据库
MYSQL
(1)存储引擎
MyISAM、InnoDB、MEMORY
(2)锁
(a)锁粒度
表锁
行锁(间隙锁、临建锁)
页锁
(b)锁类型
(3)事务
(a)事务特性
ACID
(b)事务的隔离级别
读未提交、读已提交、可重复读、串行化
(c)MVCC
1)
解决读-写冲突无锁并发的问题
四个隐藏字段(rowid、事务id、回滚指针、删除位)+ undo log + readView
2)readView
当前事务id、事务列ids表、最小事务id、最大事务id
3)使用的隔离级别
读已提交(每次读都创建新的readView)
可重复读(只创建一次的readView)
4)事务实现
mvcc+锁(悲观锁、乐观锁)
读请求:快照读
读写请求:当前读
(4)索引
(a)索引结构
b+树:b树、红黑树、二叉树
hash
(b)索引类型
是否包含记录数据:聚簇索引、非聚簇索引
主键上分类:主键索引、辅助索引
底层的数据结构:b+树索引、hash索引
常规功能分类:普通索引、唯一索引、全文索引
(c) b+树
(5)慢sql优化与sql调优
(a)select *
(b)小表驱动大表join
(c)链接代替子查询
(d)union all 代替 union
(e)建立索引
(6)深分页优化
(a)数据量大
子查询减少查询的字段、覆盖索引、增加数据缓存
(b)偏移量大
限定id查询、限制limit添加where条件
(7)bin log
(a)bin log作用
复制、恢复数据
(b)格式
statement、row、mixed
(c)canal bin同步工具
(8)主键与自增id
(9)索引失效
(10)不走索引提效
(11)join
(a)join类型
(b)不使用多表join的原因
(12)加密数据模糊查询
(13)like 查询优化
(14)count(1)、count(*)与count(列名) 的区别
(15)SQL用了函数一定会索引失效吗
(16)truncate、delete、drop的区别
五、消息队列
Kafka
六、缓存
REDIS
MEMCACHE
七、分布式
八、Spring
(1)注解
(2)拦截器
过滤器与拦截器
九、SpringBoot
十、SpringCloud
十一、Mybatis
十二、云原生
十三、网络安全
十四、架构
(1) RBAC