念神面经篇

Java基础篇

  • JDK & JVM & JRE的区别
  • 包装类型的常量池技术
  • 接口和抽象类的区别
  • String、StringBuffer、StringBuilder的区别
  • 泛型擦除的原理
  • 反射的应用场景
  • 异常的类型,具体的例子有哪些
  • 说说常用的容器和各自的特点
  • ArrayList的扩容机制
  • HashMap源码实现
  • ConcurrentHashMap的底层实现
  • Lambda表达式有什么好处,什么坏处,应用场景有哪些

Java并发篇

  • 为什么要使用多线程,有什么好处,举例具体场景
  • 线程的生命周期以及每个周期进入和结束的标志
  • 避免死锁的三个必要条件
  • 简述哲学家进餐问题和银行家算法
  • 为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法?
  • 场景题:如何实现一个实时排序的游戏战力榜单
  • 场景题:如何实现一个竞技场挑战功能,考虑高并发
  • volatile的用法
  • synchronized和ReentrantLock的区别
  • 乐观锁和悲观锁的底层实现
  • 不加锁如何保证线程安全
  • synchronized是可重入锁么
  • 使用了vector就一定能保证线程安全吗
  • 多线程的实现方式
  • 场景题:高并发的情况下保证数据的一致性怎么做到
  • 场景题:有10个线程分别对 i = 0 做10次自增操作,最后 i 的值会是多少,为什么
  • ThreadLocal的原理
  • 场景题:在生产者消费者问题中怎么保证当消费者用完产品后生产者会马上得知,不能使用while循环去解决
  • Java的线程池类型有哪些
  • Java线程池的参数以及其具体意义
  • 线程池的拒绝策略

JVM篇

  • JVM的基本结构
  • 双亲委派模型的好处
  • 运行时数据区的基本结构,各种结构都有什么用途
  • 垃圾回收策略
  • 垃圾回收器都有哪些
  • 如何判断一个类是无用的类
  • 查看运行内存,JVM状态有什么方法
  • G1回收器与之前的回收器相比最大的不同是什么
  • 类加载的过程是什么,每个过程具体做到了什么事
  • JVM的常用参数有哪些
  • JVM调优常用的手段是什么

Spring篇

  • Spring的特性和优势是什么
  • Spring有哪些组件
  • 场景题:如果实现一个你自己的Spring框架需要考虑那些方面,简单聊聊
  • Spring MVC底层实现原理
  • IOC 和 AOP 具体介绍一下
  • Spring Bean是什么
  • IOC 和 DI 是什么关系
  • IOC 配置的三种方式
  • 依赖注入的三种方式
  • 为什么推荐构造器注入方式?
  • 场景题:在使用构造器注入方式时注入了太多的类导致Bad Smell怎么办
  • AspectJ注解方式接触过吗,具体说说有什么特点和不足
  • Spring为何不能解决非单例属性之外的循环依赖?
  • Spring中Bean的生命周期介绍一下
  • 场景题:自定义一个你自己的starter怎么实现(开共享屏幕实现)

MyBatis篇

  • 接口层和数据库交互的方式有哪些
  • 简述MyBatis的层次结构
  • sqlSessionFactory 与 SqlSession介绍一下
  • Excutor的概念
  • 动态SQL有哪些,都有什么用途
  • 为什么要使用连接池
  • $ 和 # 的区别

计算机网络篇

  • OSI和TCP/IP介绍一下
  • HTTP和HTTPS的区别
  • HTTPS的加密手段是什么
  • 三次握手的过程以及每一次起到了什么作用
  • 四次挥手的过程以及每一次起到了什么作用
  • TCP协议中的流量控制起到什么作用
  • 介绍一下ARQ协议
  • 从输入URL到页面加载发生了什么
  • HTTP 如何保存用户状态
  • Cookie 的作用是什么
  • Cookie 和 Session 有什么区别
  • HTTP状态码有哪些

数据库篇

  • 数据库设计通常分为哪几步
  • MySQL的分页怎么做的
  • MyISAM和InnoDB的区别
  • MySQL日志都有什么,分别有什么作用
  • 读锁和写锁实现的底层原理
  • 表级锁和行级锁的实现原理
  • 事务的特性
  • 并发事务带来的问题有哪些
  • 事务隔离级别有哪些
  • 场景题:MySQL对于千万级的数据库或者大表怎么处理
  • MVCC解决什么问题
  • 索引有什么作用
  • 索引的底层数据结构
  • 为什么InnoDB使用B+树作为索引的数据结构
  • 索引有哪些种类
  • 为什么会出现回表查询,怎么避免
  • 解释一下最左前缀法则
  • 覆盖索引是什么意思
  • MySQL读写分离方案
  • MySQL主从复制是什么意思
  • MySQL主从的延迟怎么解决

Redis篇

  • 为什么Redis 是单线程的
  • Redis 一般有哪些使用场景
  • Redis 有哪些数据类型,每一种都有什么实际应用
  • sds存在的意义
  • 为什么会设计Redis Stream
  • Redis Stream消费者崩溃带来的会不会消息丢失问题
  • Redis Steam 坏消息问题,死信问题
  • Redis 的持久化机制是什么
  • AOF是写前日志还是写后日志
  • Redis 过期键的删除策略有哪些
  • Redis 内存淘汰算法有哪些
  • Redis如何做内存优化
  • Redis事务相关命令
  • Redis事务中出现错误的处理
  • 为什么 Redis 不支持回滚
  • Redis缓存有哪些问题,如何解决
  • Redis6.0之前为什么一致不用多线程