从业十多年,我从一位向往大厂的面试者成为了一个大厂面试官,身边很多从事Java 开发的朋友都不时咨询如何才能进大厂。的确,进大厂对于大多数人来说,绝不只是谈资,而是一种技术追求。像阿里、腾讯、字节这样的大厂,技术氛围和技术规范都明显优于体量较小的公司,业务场景也更加丰富、更具挑战性。在大厂锻炼几年,可以更好地提升个人能力,对以后的职业规划也有更多选择。
话虽如此,要拿到大厂offer并不容易。简历投递如同大浪淘沙,面试过程也是竞争激烈。特殊时期大厂需求降低,要求反而更高。没有十足准备,很难通过层层筛选。不少Java人的问题并不是技术功底不过关,而是没有形成系统、全面的知识体系,总是被面试官问得哑口无言。
结合自己多年电商大厂面试官的经历,我将这些年常问的知识点从头梳理,整理成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 19-Elasticsearch对于大数据量(上亿量级)的聚合如何实现?
2.6 ES主分片数量可以在后期更改吗?为什么?
2.7 如何监控集群状态?
2.8 ElasticSearch中的副本是什么?
2.9 20.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 3.Java中会存在内存泄漏吗,简述一下。
3.3 Java虚拟机是如何判定两个Java类是相同的?
3.4 Java 中都有哪些引用类型
3.5 在 Java 中,对象什么时候可以被垃圾回收?
3.6 19.StackOverflow异常有没有遇到过?一般你猜测会在什么情况下被触发?
3.7 堆空间分哪些部分?以及如何设置各个部分?
3.8 什么是栈帧?栈帧存储了什么?
3.9 如何设置参数生成GC日志?
3.10 GC 是什么?为什么要有 GC?
3.11 使用过哪些jdk命令,并说明各个的作用是什么
3.12 JVM运行时数据区区域分为哪⼏部分?
3.13 是否了解类加载器双亲委派模型机制和破坏双亲委派模型?
3.14 逃逸分析有几种类型?
3.15 -Xms这些参数的含义是什么?
3.16你知道哪几种垃圾收集器,各自的优缺点,重点讲下cms和G1,包括原理,流程,优缺点。
3.17JVM的内存结构,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 17.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.11 23.Kafka的消费者如何消费数据
5.12 Kafka的优点
5.13 Kafka 的设计是什么样的呢?
5.14 说说你对Consumer的了解?
5.15 Kafka新建的分区会在哪个目录下创建
5.16 说一下Kafka消费者消费过程
5.17 介绍下Kafka
5.18 什么情况会导致Kafka运行变慢?