JVM
- JVM 内存模型
- 堆是一个什么样的结构
- CMS 垃圾回收的过程
- CMS 垃圾回收过程中会有几次 STW 的操作
- 根集包括哪些对象,为什么这些对象会作为根集对象
- 类加载机制、双亲委派模型
- 为什么要引入双亲委派机制 :防止出现多分相同的字节码,类加载器和类确定唯一性
- JVM 内存区域分布?GC 发生在哪些部分?
- 介绍一下垃圾回收过程
- 垃圾回收算法了解多少?现在用的什么回收算法?
- 现在使用的什么垃圾回收器?知道哪些?讲讲 G1
- 容器的内存和 JVM 的内存有什么关系?参数怎么配置?
- 线上有什么 JVM 参数调整?
- oom 问题排查思路
- 线上问题排查,突然长时间未响应,怎么排查,oom
- cpu 使用率特别高,怎么排查?通用方法?定位代码?cpu 高的原因?
- 频繁 GC 原因?什么时候触发 FGC?
- 怎么获取 dump 文件?怎么分析?
- 怎么实现自己的类加载器?
- 类加载过程?
- 初始化顺序?
- Java 里边常见的垃圾回收器和垃圾回收算法
- CMS 垃圾回收器跟 G1 垃圾回收器的区别
- 对比 CMS,G1 垃圾回收器的优点有哪些
多线程并发
- 解释 Java 中的锁升级
- 解释可重入锁的概念及原理
- 解释自旋锁的概念及原理
- voliate关键字的使用场景及作用
- 进程间如何通信:进程 A 想读取进程 B 的主存怎么办?线程间通信?
- 线程的生命周期有哪些状态?怎么转换?
- wait 和 sleep 有什么区别?什么情况下会用到 sleep?
- 怎么停止线程?
- 怎么控制多个线程按序执行?
- 会用到线程池么?怎么使用的?用什么实现的?
- 常用的线程池有哪些?用的哪个线程池?什么情况下怎么选择?
- ThreadPoolExecutor 有什么参数?各有什么作用?拒绝策略?
- 一个任务从被提交到被执行,线程池做了哪些工作?
- 了解 AQS 么?讲讲底层实现原理
- AQS 有那些实现?
- 讲讲 AtomicInteger 的底层实现
- volatile 关键字有什么用?怎么理解可见性,一般什么场景去用可见性
- 讲一下 threadLocal 原理,threadLocal 是存在 JVM 内存哪一块的。
- 讲一下锁,有哪些锁,有什么区别,怎么实现的?
- ReentrantLock 应用场景
- 死锁条件
- 对线程安全的理解
- 乐观锁和悲观锁的区别?
- 这两种锁在 Java和MySQL分别是怎么实现的?
- 事务有哪些特性?
- 怎么理解原子性?
- HashMap 为什么不是线程安全的?
- 怎么让HashMap变得线程安全?
- jdk1.8对ConcurrentHashMap做了哪些优化?
- Redis主从机制了解么?怎么实现的?
- 有过GC调优的经历么?
Java 基础
- 了解 NIO 么?讲讲
- NIO 与 BIO 有什么区别?
- 了解 Netty 原理么
- Collection 有什么子接口、有哪些具体的实现
- 简单介绍下 ArrayList 怎么实现,添加操作、取值操作,什么时候扩容 ?
- 讲一下 hashMap 原理。hashMap 可以并发读么?并发写会有什么问题?
- 讲一下 concurrentHashMap 原理。头插法还是尾插法?扩容怎么做?
- 堆是怎么存储的,插入是在哪里?
- 集合在迭代的过程中,插入或删除数据会怎样? 如果是 for 的话
- int float short double long char 占字节数?
- int 范围?float 范围?
- hashcode 和 equals 的关系
- 深拷贝、浅拷贝区别
- Java 异常体系?RuntimeException Exception Error 的区别,举常见的例子
- lambda 表达式中使用外部变量,为什么要 final?
- Java中的 HashMap、TreeMap 解释下?
- TreeMap 查询写入的时间复杂度多少? logn
- ConcurrentHashMap 怎么实现线程安全的?
- HashMap 多线程有什么问题?怎么解决?
- CAS 和 synchronized 有什么区别?都用 synchronized 不行么?
- 为什么重写 equals 方法时,要求必须重写hashCode方法?
- 遍历 ArrayList 时候删除数据会发生什么
- ArrayList 扩容机制
- Java 定时任务实现原理:优先队列
- Java 线程的几种状态
- 线程阻塞状态是什么意思
- 线程中断
- 当一个线程进入一个对象的一个 synchronized 方法后,其它线程是否可进入此对象的其它方法?
MySQL
- mysql 索引的数据结构,为什么用 B+ 树而不用 B 树
- 解释 mysql 的聚簇索引和非聚簇索引
- hash 索引
- Mysql 深分页怎么优化,不能分表分区
- mysql 里的聚簇索引和非聚簇索引,区别,使用主键索引和非主键索引查询时有什么区别
- mysql 里的事务隔离级别,具体含义,分别解决了什么问题
- 聚簇索引和聚簇促索引的区别
- mysql 的存储引擎
- innodb 和 myisam 的区别
- 为什么 myisam 不支持事务
- 为什么 myisam 不采用和 innodb 相同的方案来解决事务问题?
- 为什么数据量大的时候会出现慢 sql
- 慢 sql 如何解决 sql 优化
- 分库分表如何做的
- 分库分表如何做到不同库表间数据不重复
- 数据库水平切分,垂直切分的设计思路和切分顺序
- acid 含义?事务隔离级别?幻读怎么解决的?
- 用过 mysql 的锁么?有哪些锁?
- MyISAM、InnoDB 区别?为什么不用 MyISAM?
- mvcc 原理?多版本数据存放在哪?
- mysql 脏页?
- redo log,undo log?
- innodb 的索引结构是什么?什么是聚簇索引?
- b+ 树与 b 树的区别?
- b+ 树与二叉树区别,优点?为什么不用红黑树?
- 多列索引的结构
- 字符串类型和数字类型索引的效率?数据类型隐式转换
- 主键与普通索引的联系?存储上的区别?
- join 和 in 怎么选择?有什么区别?
- union 和 union all 有什么区别?怎么选择?
- 怎么处理 sql 慢查询?
- 索引用得不太正常怎么处理?同时有(a,b)和(a,c)的索引,查询 a 的时候,会选哪个索引?
- 跨库分页的实现?
- 分库分表有哪些策略?怎么保证 id 唯一?
- 对 uuid 的理解?知道哪些 GUID、Random 算法?
- 主键选随机 id、uuid 还是自增 id?为什么?主键有序无序对数据库的影响?
- 主从复制的过程?复制原理?怎么保证强一致性?
Kafka
- Kafka 里边有几种基本角色,每个角色具体职责是什么
- Kafka 里怎么保证高可用性
- Kafka 里的 rebalance 是怎么回事,怎么触发
- 用 Kafka 做了什么功能?
- Kafka 内部原理?工作流程?
- Kafka 怎么保证数据可靠性?
- 怎么实现 Exactly-Once ?
- Kafka 选主怎么做的?
- Kafka 与 rabbitmq区别
- Kafka 分区怎么同步的
- Kafka 怎么保证不丢消息的
- Kafka 为什么可以扛住这么高的qps
Redis
- Redis 的持久化储存有哪几种,各自的特点
- 如果 Redis 崩溃,rdb 和 aof 选用那种进行恢复,为什么
- Redis 怎么做分布式锁,有几种方法,Redis 作为分布式锁有什么优势
- Redis 里的事务,与 mysql 事务的区别
- Redis 的 ziplist 数据结构,越详细越好
- Redis 复制的过程越详细越好
- Redis 常用数据结构
- zset 的数据结构
- zset 中插入一个元素的时间复杂度
- Redis 如何保证高可用?
- 什么是 Redis 的哨兵模式?
- Redis 主备切换过程是怎样的?
- Redis 数据结构、对象,使用场景
- Redis 内存淘汰策略
- 缓存的热点 Key 怎么处理?Redis 缓存穿透,怎么避免?
- Redis keys 命令有什么缺点
- 主从同步原理,新加从库的过程
- RDB 和 AOF 怎么选择,什么场景使用?
- Redis 的 zset 的使用场景?底层实现?为什么要用跳表?
- 怎么实现 Redis 分布式锁?
- Redis 4.0 有什么新特性?
- Redis 的过期时间
- Redis 的 lru 策略
Spring
- 讲一下 IOC、AOP
- ioc 怎么防止循环依赖
- aop 的实现原理、动态代理过程
- spring boot starter 自加载是怎么实现的?在生命周期哪个阶段?
- Spring 处理请求的过程?
- SpringMVC 不同用户登录的信息怎么保证线程安全的?
操作系统
- select,poll,epoll,epoll 的优势
- 进程和线程的区别,linux 切换进程线程时具体做了哪些操作,越详细越好
- 协程了不了解,为什么轻量级,对比进程线程讲一讲