2020,可谓是招聘面试最难季。不少大厂,如腾讯、字节的招聘名额明显减少,面试门槛却一再拔高,如果不用心准备,很可能就被面试官怼得哑口无言。今天不谈其它,就说说我作为面试官面试的那些事儿。

从某电商项目负责人的算起,再到后来的首席架构师,我前前后后面试了至少 300 多位求职者。不敢说成功入职的每个同事都发展得特别好,但大部分人来说还是很不错的。

过硬的技术功底是最起码的考核要求。不少来应聘的朋友底子还是有的,但知识面太窄了。那么对于互联网大厂,尤其是电商行业来说,都会重点考核哪些呢?最近我将这些年自己常问的考核知识整理了一下,不下 100  道,其中涵盖了不少大厂必考点、高频点、加薪点,这些也是作为开发人来说日常项目中经常遇到的踩坑点。

为了方便大家,我把这些点做了一个归类,一共分成了 5 大类,分别是:Dubbo,ElasticSearch,JVM,多线程/高并发,消息中间件 。我把关于这些问题的拆解与思考,整理成一个 pdf,限于篇幅,这里就不一一列出了。需要的同学可以文末扫码领取,希望能从中有所启发、收获。

这里先罗列出近三年部分技术考核点,具体有:

## 1 Dubbo

 1.1 服务调用超时问题怎么解决?

 1.2 Dubbo支持哪些序列化方式?

 1.3 Dubbo和SpringCloud的关系?

 1.4 Dubbo的架构设计?一共划分了哪些层?

 1.5 Dubbo的默认集群容错方案?

 1.6 Dubbo使用的是什么通信框架?

 1.7 Dubbo的主要应用场景?

 1.8 Dubbo服务注册与发现的流程?流程说明。

 1.9 Dubbo的集群容错方案有哪些?

 1.10 Dubbo的四大组件

 1.11 Dubbo在安全机制方面是如何解决的

 1.12 Dubbo和SpringCloud的区别?

 1.13 Dubbo支持哪些协议,每种协议的应用场景,优缺点?

 1.14 Dubbo的核心功能有哪些?

 1.15 Dubbo的注册中心集群挂掉,发布者和订阅者之间还能通信么?

 1.16 Dubbo集群的负载均衡有哪些策略

 1.17 为什么需要服务治理?

 1.18 Dubbo超时时间怎样设置?

## 2 ElasticSearch

 2.1 你们公司的ES集群,一个node一般会分配几个分片?

 2.2 Elasticsearch是如何实现Master选举的?

 2.3 你是如何做写入调优的?

 2.4 如何避免脑裂?

 2.5 Elasticsearch对于大数据量(上亿量级)的聚合如何实现?

 2.6 ES主分片数量可以在后期更改吗?为什么?

 2.7 如何监控集群状态?

 2.8 ElasticSearch中的副本是什么?

 2.9 ES更新数据的执行流程?

 2.10 shard里面是什么组成的?

 2.11 ElasticSearch中的分析器是什么?

 2.12 什么是脑裂?

 2.13 客户端在和集群连接时,如何选择特定的节点执行请求的?

 2.14 Elasticsearch中的倒排索引是什么?

 2.15 什么是索引?索引(名词) 一个索引(index)

 2.16 详细描述一下Elasticsearch更新和删除文档的过程

## 3 JVM

 3.1 JVM参数主要有⼏种分类

 3.2 Java中会存在内存泄漏吗,简述一下。

 3.3 Java虚拟机是如何判定两个Java类是相同的?

 3.4 Java 中都有哪些引用类型

 3.5 在 Java 中,对象什么时候可以被垃圾回收?

 3.6 StackOverflow异常有没有遇到过?一般你猜测会在什么情况下被触发?

 3.7 堆空间分哪些部分?以及如何设置各个部分?

 3.8 什么是栈帧?栈帧存储了什么?

 3.9 如何设置参数生成GC日志?

 3.10 GC 是什么?为什么要有 GC?

 3.12 使用过哪些jdk命令,并说明各个的作用是什么

 3.13 JVM运行时数据区区域分为哪⼏部分?

 3.14 是否了解类加载器双亲委派模型机制和破坏双亲委派模型?

 3.15 逃逸分析有几种类型?

 3.16 -Xms这些参数的含义是什么?

 3.17 你知道哪几种垃圾收集器,各自的优缺点,重点讲下cms和G1,包括原理,流程,优缺点。

 3.18 JVM的内存结构,Eden和Survivor比例是多少?

## 4 多线程/高并发

 4.1 负载平衡的意义什么?

 4.2 请说出同步线程及线程调度相关的方法?

 4.3 关于epoll和select的区别,哪些说法 是正确的?(多选) 

A. epoll 和 select 都是 I/O 多路复用的技术,都可以实现同时监听 多个I/O事件的状态。 

B. epoll 相比 select 效率更高,主要是基于其操作系统支持的 I/O 事件通知机制,而select是基于轮询机制。 

C. epoll支持水平触发和边沿触发两种模式。 

D. select能并行支持I/O比较小,且无法修改。

 4.4 启动一个线程是调用run()方法还是start()方法?

 4.5 如何确保N个线程可以访问N个资源同时又不导致死锁?

 4.6 编写多线程程序的几种实现方式(换个问法:创建多线程的方式)?

 4.7 线程和进程的区别?

 4.8 什么是线程池,有哪些常用线程池?

 4.9 什么是死锁?

 4.10 怎么保证缓存和数据库数据的一致性?

## 5 消息中间件

 5.1 消费者获取消息有几种模式?

 5.2 RocketMQ的特点有哪些?

 5.3 kafka 同时设置了 7 天和 10G 清除数据,到第五天的时候消息达到了 10G,这个时候 kafka将如何处理?

 5.4 为何需要Kafka集群

 5.5 Kafka 数据存储设计

 5.6 Kafka如何判断一个节点是否存活?

 5.7 kafka消息发送的可靠性机制有几种

 5.8 请详细说一下推送模式和拉取模式。

 5.9 Kafka 与传统消息系统之间有三个关键区别

 5.10 RocketMQ 由哪些角色组成?

 5.12 Kafka的消费者如何消费数据

 5.13 Kafka的优点

 5.14 Kafka 的设计是什么样的呢?

 5.15 说说你对Consumer的了解?

 5.16 Kafka新建的分区会在哪个目录下创建

 5.17 说一下Kafka消费者消费过程

 5.18 介绍下Kafka

 5.19 什么情况会导致Kafka运行变慢?