跳至主要內容

八股文

HeChuangJun约 3495 字大约 12 分钟

java基础

数据类型,默认值、越界

面向对象OOP特性?概念,和面向过程OPP区别?创建对象方式、初始化过程√深、浅拷贝及实现?重载和重写区别?抽象类和接口异同?选用?

==和equals区别?hashcode方法作用?两个对象的hashCode方法相同,equals方法一定为true吗?为什么重写equals方法一定要重写hashCode方法?int和Integer区别?==比较Integer、new Integer、int

死锁?实例?产生条件?避免?悲观锁和乐观锁?场景?实现?问题及解决方案?

String创建方法区别?√特点及设计原因?拼接实现原理?与StringBuilder、StringBuffer区别?

异常处理方式?过程?

BIO、NIO、AIO区别?(反)序列化?零拷贝?

java集合

集合继承结构?线程不安全的集合?方案?

ArrayList扩容机制?和LinkedList区别?

HashMap实现原理?/put/get方法执行过程?怎么判断key相等?怎么计算hash、数组位置?设计原因/为什么是亦或而不是与/不用hashCode方法计算/容量为什么是2的幂次方?其他计算hash的方法?初始容量计算?扩容触发条件?扩容机制?扩容后的位置计算?为什么负载因子是0.75?(hashMap)解决哈希冲突的方法?hash冲突后,将元素放到链表头还是尾√/HashMap为什么不是线程安全的?为什么不用二叉树或者平衡树呢?为什么链表要转红黑树/不直接用红黑树?链表转换为红黑树阈值是8?红黑树转链表阈值是6?jdk1.8优化?为什么?

jdk7、8中ConcurrentHashMap实现?

java并发

创建线程方式?√run和start方法区别?√停止线程方法?线程运行时异常会怎么样?主线程能捕获子线程异常吗?√leep()和wait()区别?√ 线程状态及转换?线程通信方式?并发编程三要素?线程安全概念?原因?解决方法?线程同步实现方式?

ThreadLocal理解?场景?原理?ThreadLocalMap怎么解决Hash冲突?扩容机制?为什么key设计成弱引用?内存泄露问题及解决方案?父子线程怎么共享数据?原理?

JMM内存模型概念?为什么线程要用自己的内存?指令重排?happens-before、as-if-serial了解吗?单线程的程序一定是顺序的吗?

volatile特性、场景√原理/怎么保证有序性和可见性?√

synchronized关键字√方法和代码块锁对象区别?怎么保证三性、可重入?同步代码、静态同步方法原理?锁升级原理?优化?和volatile、ReenTrantLock异同?√什么场景下可用volatile替换?

AQS?ReentrantLock、公平锁原理?

保证原子性/多线程下i++??13个原子操作类√AtomicInteger原理?

CountDownLatch√CyclicBarrier区别?

使用线程池原因?场景?处理流程√创建线程池常用参数?√拒绝策略?√Runnable、Callable√、execute()和submit()方法区别?关闭流程?参数设置?阿里开发规范为什么不允许Executors创建线程池/弊端?异常处理?状态?调优?单机线程池宕机处理?

JVM

JVM、运行时数据区组成?

对象在内存中的布局

jvm垃圾判断算法?被标记为垃圾的对象一定会被回收吗?

常用的垃圾回收算法?Java堆的内存分区?√为什么新生代不用标记整理?JVM垃圾回收机制?对象进入老年代时机?Minor/Young、Major/Old、Mixed、Full GC概念?触发条件?

jvm垃圾回收器分类、jdk版本及作用?垃圾收集器选择(线上)及原因?jvm参数选用(线上)及原因 √

类的加载机制?过程/类加载器是如何加载Class文件?类的生命周期吗?jvm类加载器?双亲委派模型?作用?怎么自定义加载?Tomcat类加载机制?

Spring

iOC和DI
spring注册bean的方式?Bean生命周期?自动装配的方式?bean作用域scope类型√单例bean是线程安全的吗?√
bean循环依赖?如何解决?√为何使用三级缓存解决循环依赖而不是二级缓存?√
spring事务配置方式?隔离级别?原理?传播行为作用?实现?哪些情况下会失效?√Spring 事务如何和不同的数据持久层框架(Spring JDBC、Hibernate、Spring JPA、MyBatis)做集成?为什么在Spring事务中不能切换数据源?

Spring MVC

MVC、Restful执行流程?√核心组件?HandlerAdapter作用?√

Spring Boot

Spring Boot配置方式?读取配置的方式?bootstrap\application.properties区别?配置文件读取顺序?√
Spring Boot自动配置原理

Spring Cloud

MyBatis

#{}、${}区别?
分页插件原理

Linux

常用命令

计算机网络

MySQL

varchar与char、blob和text区别?DATETIME和TIMESTAMP异同?存储货币、ip、emoji😊?
delete、truncate、drop区别?
存储引擎及选择?InnoDB与MyISAM区别?
索引分类?原理√为什么InnoDB要使用B+树作为索引?不用普通、平衡二叉树、红黑树、B树√?B+树能存储多少条数据呢?Hash、B+树索引,聚簇索引与非聚簇索引区别?回表?覆盖索引?索引下推优化?最左匹配原则?
锁分类?如何解决库存超卖问题?行锁实现?意向锁?
MySQL事务特性?怎么保证?并发事务问题?事务隔离级别?默认?实现?MVCC实现原理?
数据库读写分离?分配怎么实现?主从复制原理了解吗?主从同步延迟原因?处理?百万级别以上的数据如何删除?添加字段?自增id用完怎么办?

Redis

[为什么快?I/O多路复用?实现方式?单线程模型?]
[数据类型?场景?指令?底层数据结构?从大量key中查找前缀key?]
[缓存穿透,击穿,雪崩及解决√布隆过滤器?/大量key同一时间过期?/热key重建及问题?如何保证本地缓存和分布式缓存、缓存和数据库数据一致性?√过期键的删除策略?内存淘汰策略?内存优化?/内存不足处理?/如何保证数据都是热点数据?/如何提高Redis命中率?预热?方案?无底洞问题?解决?大key和热key?判断?问题?原因?处理?]
如何实现异步、延时队列?事务?如何实现CAS操作?注意事项?原因?Lua 脚本?Pipelining?分布式锁?

分布式