1、基础 - 常见的集合框架的类
Collection:
- List
- ArrayList
- LinkedList
- Vector
- Set
- HashSet
- TreeSet
Map:
- HashMap
- ConcurrentHashMap
2、基础 - 问区别
- ==与equals的区别
- ArrayList与LinkedList的区别
- ArrayList、LinkedList、Vector的区别
- HashMap与HashTable的区别
- String、StringBuffer、StringBuilder的区别
3、基础 - 问线程安全
- HashMap和HashTable,哪个是线程安全的?
- StringBuffer、StringBuilder,哪个是线程安全的?
- HashMap与ConcurrentHashMap,哪个是线程安全的?为什么?
4、基础 - 问 扩容
- HashMap 如何扩容?
- ArrayList 如何扩容?
5、基础 - 问 源码实现
- Set是如何添加元素的?
- Set如何遍历元素?
- HashMap是如何put元素的?相同key的添加如:map.put("a", "1"); map.put("a", "2");最后a的value是几?为什么?
- HashMap如何遍历元素?
- ConcurrentHashMap的并发度是多少?
- ArrayList 如何遍历元素?
6、基础 - 问 存储(数据)结构
- HashMap的存储机构
- ConcurrentHashMap的存储结构
- ArrayList的存储结构
7、基础 - 问 实现原理
- HashMap的实现原理
- HashMap线程不安全的原因是?
- ConcurrentHashMap的实现原理
- ConcurrentHashMap在jdk1.7和1.8分别有什么不同?(jdk1.8后ConcurrentHashMap去掉了分段锁,而改为使用synchronized+CAS+Node+Unsafe实现)
8、基础 - 锁 基本概念
- synchronized是可重入锁吗?jdk1.8后有什么变化?
- synchronized放在类、静态方法、普通方法上 都有什么不同?(类锁和对象锁)
- Lock 是如何实现锁的?
- synchronized和Lock有何区别?(从实现上说。Lock的实现是AQS)
- 了解AQS吗?(内部是CAS)
- 了解CAS吗?
- 了解volatile吗?
- 讲以下公平锁和非公平锁。
9、基础 - 锁 - AQS
- AQS的数据结构是什么?
- AQS的原理是什么?
- AQS的队列是阻塞式的吗?为什么?
10、基础 - 线程
- 创建线程有几种方式?
- 熟悉ThreadLocal吗?ThreadLocal的内部结构是怎样的?
- ThreadLocal会引发内存泄漏吗?为什么?
- wait()、sleep() 的区别?(会不会释放锁?)
11、基础 - 线程 - 并发工具
- JUC包了解吗?你熟悉哪些JUC下的类?
- CountDownLatch 了解吗?
12、基础 - 线程 - 线程池
- 说说线程池的几个核心参数?
- 线程池是怎么工作的?(工作原理或者机制)
- 线程池的阻塞队列是有限的还是无限的?为什么?
- 拒绝策略有几种?默认的拒绝策略是什么?
- ThreadExecutorServie 了解吗?
- 说下如何实现 线程安全的单例模式
13、高级 - 框架 - spring及springboot
- Spring的bean是如何加载的?IOC容器加载bean的过程?
- 什么是控制反转?什么是DI?
- Spring的bean是单例的还是多例的?
- @Autowired和@Resource有何区别?@Resource是如何进行装配的?
- spring 事务的传播特性了解吗?说说。
- 你自定义过springboot starter吗?
- springboot是如何启动的?启动时需要注意什么?
14、高级 - 数据库 - mysql
- Oracle与mysql 有何不同?
- 了解mysql存储引擎吗?了解哪些?说说
- mysql是如何优化的?
- 了解mysql的优化器吗?了解CBO、RBO吗?
- 了解聚簇索引和非聚簇索引吗?有何区别?
- B-Tree索引和B+tree索引的区别?
- mysql的隔离级别有哪些?默认的是隔离级别是什么?
- mysql explain分析sql语句的执行计划时,几个性能参数了解吗?说说
- mysql慢查询怎么解决?
- mysql 的锁机制了解吗?简单说下
- 数据库崩溃了,如何恢复?Undo日志与Redo日志
- 设计sql索引:给定一张表,表里含有A、B、C、D及其他字段,常用的查询场景有where条件会有
A | C | ||
A | B | ||
B | C | D | |
C | D | ||
A | B | D |
问该表的索引如何设计?
- 问是否走sql索引:有一张表person(id, name, age, phone),索引(age, phone),问以下语句会不会走索引
select * from person where phone = '120';
15、高级 - 分布式锁的实现
- redis如何实现分布式锁?
- zookeeper如何实现分布式锁?
- mysql如何实现分布式锁?
16、高级 - 微服务 SpringCloud
- 说下SpringCloud的几个核心组件?
- 知道API网关是做什么的?
- 你们用什么做服务发现组件?
- 服务消费者是否需要注册到服务发现组件?
- 简单说下Feign组件?
- 为什么使用Feign而不使用RestTemplate?
- 使用Feign是如何发现服务的?
- 使用Feign第一次请求失败了,什么原因?如何解决?
- 了解Feign的源码吗?(其实掌握Feign的几个核心的API就可以,以便自定义一些东西,如:自定义并开启日志)
17、高级 - 消息中间件
- 熟悉rabbitmq吗?
- 熟悉kafka吗?
- (聊你熟悉的组件)为什么选择kafka?kafka有什么优点?
- 会搭建kafka集群吗?(不明白面试官问这种问题的目的)
- 使用消息中间件你们发生过消息丢失吗?怎么解决的?
- 消息重复,又如何解决?
- 如何保证消息的一致性?
- kafka只用来当作消息中间件吗?
18、高级 - Redis
- redis 如何实现做分布式锁(jedis setnx+lua、redisson)
- redis为什么那么快?
- 说说你了解的redis常规复制架构
- Dual Master复制架构, master - master(双主,一主负责写,一主负责读)
- 级联复制架构 master - slaves - slaves...(一主多从,从之间又分多层,从服务器的级联问题容易出现低延迟)
- Dual Master 与级联复制架构结合 master - master - slaves -slaves(一主负责写,一主负责同步到其他从 也负责读,解决了写主的压力,也解决了从服务之间的低延迟问题)
- 了解reddis的持久化吗?(AOF和RDB)分别说说
- redis是集群做过吗?
- 请求过来时redis集群是如何确定那个redis节点接收的?(redis节点上有一个key,根据这个key计算得出是哪个redis节点接收请求)。
19、高级 - 数据库 - 分库分表技术
- 了解分库分表吗?简单说说
- 横向 - 分表,垂直 - 分库
20、高级 - JVM
- 说下jvm的内存组成、内存模型?
- 了解垃圾回收机制吗?说说
- 垃圾回收的依据是什么?或者怎么垃圾回收的?或者垃圾回收的算法?
- 垃圾回收器你了解哪些?你们工作中常见的垃圾回收器是什么?
21、高级 - 分布式理论
- 了解CAP吗?简单说下。
- 了解2PC、3PC吗?
- 了解Paxos算法吗?
22、高级 - zookeeper?
- zookeeper属于CAP中的哪两者?(AP,不具备强一致性)
- zookeeper是什么框架?或者问zk是干嘛的?
- zk使用哪种协议?
- zk有哪几种节点类型?
- zk对节点的watch监听通知是永久的吗?
- zk的部署方式?集群中的机器角色有哪些?集群最少要几台?
- 集群如果有3台机器,挂掉一台集群还能工作吗?挂掉两台呢?
- 集群支持动态添加机器吗?
- zk的选举过程?