总结一下最近面试主要的问题:
Java 基础
- HashMap的实现原理,死链问题,非线程安全问题,链表转红黑色以及红黑树转链表
- ConcurrentHashMap 的实现原理
- LinkedHashMap 原理
- String 和 StringBuilder 的区别是什么
设计模式
- 单例都有哪些实现方式,写一下懒加载的双重检验锁模式(为什么要加 volatile)
- 都了解哪些设计模式,常用的设计模式是哪些
- 模本设计模式的优缺点,为什么使用模板设计模式
Spring
- Spring 如何处理 Bean 的循环依赖问题
- BeanFactory 和 FactoryBean
- Spring Bean 的生命周期
- Spring Bean 的加载顺序
- 谈谈你对于 Spring 的理解
- Spring MVC 原理
- Spring AOP 的原理,是怎么使用的 AOP
- 谈谈对于 SpringBoot 的理解
- Spring 的声明式事务的实现原理了解吗?
- Spring Cloud 的限流算法了解吗
并发编程
- 线程池都是这么配置的
- 线程池中各个参数的含义
- Future 的 get 方法,有超时时间限制吗
- 线程池的拒绝策略,默认采用的那个拒绝策略
- 死锁示例
- 如何设置你的线程数
- 线程都有哪些实现方式
- 锁的机制
- 什么是偏向锁、轻量锁、锁粗化、锁消除等
- 线程的生命周期,画一下各个状态之间的流程图
- 关于 ThreadLocal 是怎么使用的,ThreadLocal 原理
- 知道 CAS 吗,讲一下 CAS
- synchronized 和 ReentrantLock 的区别
- synchronized 原理了解吗?都用在什么场景中
分布式锁
- Redis 实现分布式锁的原理
- Zookeeper 实现分布式锁的原理
Zookeeper
- Zookeeper 的原理
- Zookeeper 的应用场景
- Zookeeper 如何保证一致性(CP原则)
- Zookeeper 包含哪些类型的节点
- 讲一下 Paxos 算法
Kafka
- Kafka 原理
- Kafka 应用场景,为什么要使用 Kafka
- Kafka 为什么速度那么快
- Kafka 如何保证数据只消费一次和至少消费一次
- Kafka 为什么不通过扩展 Partition 来增加吞吐量
- Kafka 0.8 分支至少发送一次和最多发送一次,默认是什么
Redis
- 说一下 Redis 都支持哪些数据结构,你常用的都有哪些
- 为什么 Redis 这么快
- Redis 的持久化怎么做的
- Redis 实现分布式锁的细节
- Redis 雪崩、击穿、穿透了解吗?都有什么解决方案
Storm
- Storm 架构图
- 为什么要使用 Storm
JVM
- JVM 内存模型
- 常用的哪些 Java 命令
- 讲一下 CMS 垃圾收集器
- 类的加载机制和类的加载流程
- 如果你要实现自己的类加载器,需要实现那个类,重写那个方法
- Full GC 什么时候发生
- 如何排查 OOM 的情况
Elasticsearch
- es 的原理了解吗
- 使用es存储什么,为什么要用es
- es 如何做切表
Docker
- docker 常用的命令都有哪些
MySQL
- MySQL 引擎都有哪些,他们之间的区别是什么
- 索引的存储结构是什么
- B+树和B树的区别
- 如何优化你的 SQL
- left join 和 right join 的区别
- 什么是幻读,能举个例子吗
- 事务的隔离特性都有哪些,都解决了什么样的问题
- 了解当前读吗
- MySQL 都有哪些锁
- MySQL出现死锁怎么办,怎么排查
- 如何无感知的进行数据库切换
- 分库分表了解吗,什么是水平拆分,什么是垂直拆分
Linux
- 常用的 Linux 命令
- Linux 文件目录结构,每个文件夹都是干什么的
算法
- 快排
- 二叉树查找
- 给两个有序数组,找出其中相同的元素
- 使用数组实现一个双端栈
- 两个数组,元素排列顺序一样,但是其中一个数组比另一个数组多一个元素,找出这个元素
- 红包的随机算法(最大概率不能超过90%)
- 二叉树前中后序遍历,递归以及非递归(问了两次)
- 翻转链表(问了两次)
- lru 实现(问了两次)
- 多线程打印 1~100(问了三次)
maven
- maven 的生命周期
- maven 如何解决jar包的依赖冲突问题
git
- 常用的 git 命令有哪些
- git merge 和 git rebase 的区别是什么
Tomcat
- Tomcat 做过什么优化
Nginx
- nginx 都有哪些负载均衡算法
- nginx 原理了解吗
MonogoDB
- 为什么要使用 MongoDb
- mongo 如何加索引
- mongo的分片了解吗
应用场景
- 高并发的情况下,如何保证服务的稳定
- 如果业务方给你一个大概的需求,你接下来该干什么
其他
- 用过 Netty 吗
- 微服务怎么做的
- 讲一下你最熟悉的项目的架构,画一下架构图
- 你遇到最难的问题是什么,怎么解决的
- 当你使用多线程时,一定会操作IO,比如数据库,有没有做过最数据库的压测
- 分布式ID了解吗
- 微博的长链接转短连接算法