美团 android mmap,3月跳槽,分享我的美团、字节、阿里Java面经,已入职字节

总体感受:

每个大厂问项目问得特别细,虽然下面的面经都只用了一句话去概括,但在实际面试过程当中,项目这一块占了整个面试流程的很大一部分,相反纯技术问题的占比都比较小。

面试题几乎类似,比较简单,也很常见。(文末有参考解析)

美团

通常是两轮技术面试,一轮 HR 面试,第一面会有一道算法题,有的时候会有三轮技术面试。

一面

一道算法题,十分钟左右时间,要求能正常运行,通过给出的测试用例。

最近做过的最有挑战的项目,有哪些难点?

结合项目细聊系统的设计,根据你的设计提出疑问。

你们项目中是如何保证数据一致性的?

代码在执行 SQL 语句时,数据库连接出现了超时异常,但是你不知道这条 SQL 语句在数据库中究竟有没有执行成功,这种情况怎么保证数据的一致性?

你们系统中分布式锁是如何实现的?(当时回答采用 redis 实现,set(key,value,nx,ex,expire))

上面使用 redis 实现分布式锁会存在什么问题?

项目中除了使用 redis 实现分布式锁,还有哪些使用场景?

redis 的数据持久化机制?如何保证数据不丢失?当 redis 内存满了以后,内存的淘汰策略?

AQS 实现锁的原理?与 synchronize 的区别

MySQL 存储引擎的区别?数据库有哪些隔离级别?

MySQL 索引的数据结构是什么?为什么选择这种数据结构?

B+Tree 和 B-Tree 有什么区别?

Reactor 线程模型有哪些?Netty 是如何支持这三种线程模型的?

多路复用器的实现原理?

epoll 的实现原理?epoll、poll、select 的区别

JVM 如何进行垃圾回收?标记算法有哪些?垃圾回收算法有哪些?

CMS 垃圾回收器的原理?

二面

最近做过的最有挑战的项目?

redis 和 MySQL 的双写一致性问题?你们是如何做的?为什么这样做?其他的做法会存在什么问题?

分布式锁的实现原理

数据库有哪些隔离级别?这几种隔离级别分别解决了什么问题?

MySQL 是如何解决不可重复读问题的?

MVCC 的实现原理

MySQL 的可重复读隔离级别下,存在幻读吗?为什么?

数据库的索引是不是创建得越多越好?为什么?通常创建几个?

一张表中对 a、b、c 三个字段分别建立了索引,现在有一条 SQL 语句:select field1,field2 ... from t where a = xx and b=xx and c=xx. 请问这条 SQL 语句会使用到索引吗?如果会,那么会使用到哪个索引?(回答:只会使用其中一个索引,可能是 a,也可能是 b,还有可能是 c,具体使用哪个索引和表中的数据有关)

为什么不会同时使用 a,b,c 三个索引?什么是回表?

聚簇索引和非聚簇索引的区别

如何知道一条 SQL 语句使用了哪些索引?(回答:使用 explain 查看)

explain 的结果有哪些列?分别代表什么含义?

如何查看慢 SQL?

在 Spring 事务中执行多条 SQL 语句时,是对应多个数据库连接还是一个数据库连接?(回答:一个连接,多个就无法保证事务了)

既然是一个连接,Spring 在前后执行多条 SQL 时,是如何保证当前线程获取到同一个连接的?(回答:当时没想到 ThreadLocal,面试官引导说,如果是你,会怎么实现。后来回答说存在一个 map,key 是当前线程,value 就是数据库连接,最后灵光一现,想到了 ThreadLocal)

ThreadLocal 的实现原理?

使用 ThreadLocal 需要注意哪些问题?(实际上是问 ThreadLocal 内存泄漏的问题)

Redis 主从复制的原理

MQ 使用过哪些?如何选型?

使用的是什么 RPC 框架?为什么选择它?

线上服务流量猛涨,该如何操作,说下详细过程?新加服务节点也可能会导致服务还没起来,机器就被打爆了,这个时候怎么办?

一个场景题:现在有 1000 万的商家,知道他们的地理位置,当我们进入到 APP 首页时,如何加载出附近的商家?

职业规划?为什么选择在年底前跳槽?

字节

三轮技术面试,一轮 HR 面试,每轮技术面试都会至少有一道算法题。

一面

一道算法题

聊项目,你们的广告检索引擎是如何设计的?为什么你们的广告检索不使用 ElasticSearch 这样的搜索组件?

Java 中的锁有哪些?和 Lock 的区别

synchronized 的底层实现原理?

AQS 的实现原理?

volatile 的作用和实现原理?

JVM 的垃圾回收算法

GC Roots 有哪些?

简述新生代与老年代的区别?

类的加载过程?什么是双亲委派机制?

线程池的实现原理?线程池满了,再提交任务时会怎么处理?

redis 实现分布式锁的原理?redis 的分布式锁有什么问题?lua 脚本熟悉吗?

redis 中 key 的过期策略是什么?

redis 的持久化机制?AOF 和 RDB 的区别?

什么是缓存击穿、缓存穿透、缓存雪崩?如何处理?

MySQL 数据库索引的实现原理?

什么是回表?什么是联合索引?什么是最左前缀匹配原则?

MySQL 如何保证高可用?主从复制原理?

Explain 关键字的使用。

RocketMQ 的实现原理。

注册中心的选型?

Zookeeper 作为注册中心的实现原理?

Zookeeper 实现分布式锁的原理?

二面

一道算法题

详细聊项目经历

redis 缓存和数据库数据一致性怎么解决?

分布式系统中,分布式事务怎么解决?(回答:RocketMQ 的事务消息)

RocketMQ 事务消息的实现原理?你们的项目中是如何通过 RocketMQ 来保证数据一致性

MySQL 为什么使用 B+树来作索引,对比 B 树它的优点和缺点是什么?

什么是覆盖索引?

MySQL 中事务的隔离级别?

SQL 的优化经验?

redis 持久化的机制?如何保证数据不丢失?

redis 的内存淘汰策略?key 的过期策略?

RocketMQ 如何保证数据的可靠传输(数据不丢失)?

RocketMQ 中现在堆积了大量消息,该怎么处理?

Netty 的线程模型?主从多线程模型下,线程是如何分工的?

线程池的实现原理是什么?如何设置线程池的参数?

对于 CPU 密集型的系统,为什么线程个数设置为 CPU 核数+1?为什么要+1?

对于 IO 密集型的系统,为什么线程个数为 2 倍 CPU 核数?为什么是 2 倍,而不是 3 倍、4 倍等等?

RPC 框架的选型?

Motan 是如何实现负载均衡的?

下一步的工作计划?为什么?

三面

一道算法题

图这种数据结构了解吗?如何判断图中是否有环?

如何找出图中所有的环境?

Http 和 Https 的区别?

TCP 三次握手和四次挥手?

TCP 如何保证可靠传输?

BIO、NIO、AIO 的区别?

加密算法知道哪些?什么是对称加密?什么是非对称加密?

如何保证接口的安全性?应该使用什么加密策略?

说下哈希一致性算法?

MySQL 索引的数据结构和原理?

MySQL 的调优经验

微服务的技术选型?为什么选择 Motan?

RPC 调用的原理

阿里

三轮技术面试,一轮 HR 面试,第一轮通常是电话面试,第二轮是视频,可能会有一道算法题。

一面

一面基本是 Java 基础问题,比较简单。

Java 如何判断一个对象能否被回收?垃圾回收算法有哪些?

什么是内存模型?

什么是线程安全?

Java 中锁有哪些?synchronize 和 Lock 的区别?

synchronize 的底层实现原理

对象在内存中的布局?

volatile 关键字的实现原理?

什么是原子性、可见性、有序性?什么是 happen-before 原则?解释一下 final 的语义?

什么是 CAS?CAS 存在什么问题?

Lock 系列锁的实现原理?

什么是原子类?原子类的实现原理?

Java 中对象的引用有哪些类型?

ThreadLocal 的实现原理?存在什么问题?如何避免?

HashMap 的实现原理?1.7 和 1.8 的区别?

有哪些线程安全的 Map?ConcurrentHashMap 的实现原理?1.7 和 1.8 的区别?

ConcurrentHashMap 是如何统计 size 的?

MySQL 的索引为什么是 B+Tree,而不是数组、Hash 之类的数据结构?为什么不是 B-Tree?

Redis 有哪些数据类型?List 中数据非常多怎么办?

Redis 的持久化机制?AOF 和 RDB 的优缺点?

线上服务接口非常慢?如何排查?

二面和三面

二面和三面是同一天面的,记不清了,大概是这些问题,面试官比较喜欢追问。

一道算法题。

聊项目经历,非常细。

垃圾标记算法和垃圾回收算法有哪些?

什么是三色标记?什么是安全点与安全区域?

简述一下 G1 垃圾回收器的原理?

为什么你们项目中没有使用 G1 垃圾回收器?

什么时候会触发 Minor GC?什么时候出发 Old GC?什么是 Full GC?

对象什么时候进入到老年代?什么是动态年龄判断?

你们线上服务的 QPS 有多大?机器配置是多少?JVM 的参数是怎么设置的?GC 的频率?为什么要这这样配置?

假设线上服务的流量是当前流量的 1 万倍?系统会出现什么现象?如何优化?

Redis 的高可用怎么保证?线上有多少台机器?怎么部署的?

Redis 实现分布式锁的原理?存在什么问题?

如何用 Zookeeper 实现分布式锁?存在什么问题?

Redis 中遇到热 key 会造成什么问题?如何发现热 key?如何解决热 key 的问题?

SQL 的优化经验有哪些?索引的设计准则?

如何查看 SQL 的慢查询日志?线上服务出现慢查询了怎么处理?

线上数据库出现了死锁怎么办?

MySQL 的 InnoDB 在可重复读隔离界别下如何解决不可重复读问题和幻读问题的?什么是快照读?什么是当前读?

MySQL 中有哪些锁?什么是间隙锁?

MySQL 中有哪些日志?

数据库有哪些特性?MySQL 是如何保证机器宕机重启后,数据不丢失的?

binlog 有什么作用?将其格式设置为 statement 会有什么问题?你们线上是如何配置的?

如何保证 MySQL 的高可用?主从复制的原理?

现在线上环境中发现 MySQL 的总节点大幅落后于 master 节点,可能是什么原因?如何处理?

消息队列的选型?RocketMQ 的实现原理?

如何保证消息不丢失?如何保证不重复消费消息?

线上 MQ 出现消息大量积压,应该如何处理?

让你设计一个 MQ,你会如何设计?

什么是 mmap?

netty 用过吗?为什么 netty 是高性能的网络框架?

零拷贝机制的实现原理?

Zookeeper 集群如何部署?Zookeeper 如何实现选举?什么是 ZAB 协议?

Zookeeper 如何保证数据的顺序一致性?

Zookeeper 的使用场景?如何支撑大量的读请求?

你们微服务的注册中心是如何选型的?Zookeeper 和 Eureka 作为注册中心的区别?它们有什么瓶颈?

如何设计一款能支撑数十万机器组成的集群的注册中心?

如何设计一个秒杀系统?在双十一当天,从浏览器中输入 www.taobao.com 到加载出页面,说一下它的完整过程。

面经参考解析

以上所有问题的答案都有相应的解析文档参考,每个知识点都有左侧导航书签页,看的时候十分方便,由于内容较多,这里就截取一部分图吧。有需要获取到参考借鉴的朋友(文末获取)

美团 android mmap,3月跳槽,分享我的美团、字节、阿里Java面经,已入职字节_第1张图片

学习笔记:

美团 android mmap,3月跳槽,分享我的美团、字节、阿里Java面经,已入职字节_第2张图片

有需要获取到参考借鉴的朋友:一键三连后

你可能感兴趣的