面试题1

01 Zookeeper 部分

CAP定理

ZAB协议

leader选举算法和流程

02 Redis 部分

Redis的应用场景
Redis支持的数据类型(必考)
zset跳表的数据结构(必考)
Redis的数据过期策略(必考)
Redis的LRU过期策略的具体实现
如何解决Redis缓存雪崩,缓存穿透问题
Redis的持久化机制(必考)
Redis的管道pipeline

03 Mysql 部分

事务的基本要素
事务隔离级别
如何解决事务的并发问题(脏读,幻读)?
MVCC多版本并发控制?
binlog,redolog,undolog都是什么,起什么作用?
InnoDB的行锁/表锁?
myisam和innodb的区别,什么时候选择myisam?
为什么选择B+树作为索引结构?
索引B+树的叶子节点都可以存哪些东西?
查询在什么时候不走(预期中的)索引?
sql如何优化?
explain是如何解析sql的?
order by原理

04 JVM 部分

运行时数据区域(内存模型)

jdk1.7

1
2
3
4
5
6
7
8
JMM
|_ 线程共有
|_ 方法区(常量池、类信息)
|_ 堆(对象实例)
|_ 线程私有
|_ 程序计算器(方法执行到第几行)
|_ 虚拟机栈(方法出入栈)
|_ 本地方法栈(native方法)

jdk1.8

1
2
3
4
5
6
7
8
9
10
JMM 
|_线程公用
|_ 方法区
|_ 堆
|_线程私有
|_ 程序计数器
|_ 虚拟机栈
|_ 本地方法栈
本地内存
|_ 元数据空间MetaSpace
  • 方法区
    记录


  • 数组和对象的实例都分配堆上,也是最容易空间不足的地方。

  • 程序计数器

  • 虚拟机栈

  • 本地方法栈

  • 元空间

垃圾回收机制

垃圾回收算法

Minor GC和Full GC触发条件

GC中Stop the world

各垃圾回收器的特点及区别

双亲委派模型

JDBC和双亲委派模型关系

05 Java 基础部分

HashMap和ConcurrentHashMap区别
ConcurrentHashMap的数据结构
高并发HashMap的环是如何产生的?
volatile作用
Atomic类如何保证原子性(CAS操作)
synchronized和Lock的区别
为什么要使用线程池?
核心线程池ThreadPoolExecutor的参数
ThreadPoolExecutor的工作流程
如何控制线程池线程的优先级
线程之间如何通信
Boolean占几个字节
jdk1.8/jdk1.7都分别新增了哪些特性?
Exception和Error

06 Spring 部分

Spring的IOC/AOP的实现
动态代理的实现方式
Spring如何解决循环依赖(三级缓存)
Spring的后置处理器
Spring的@Transactional如何实现的?
Spring的事务传播级别
BeanFactory和ApplicationContext的联系和区别

07 其他部分

高并发系统的限流如何实现?
高并发秒杀系统的设计
负载均衡如何设计?