这一次面经的分享来自很早和我一起打王者的兄弟,为啥印象这么深刻呢,因为他鲁班贼6,以至于我单独给他存了个备注。
这一次历时两个月,他拿到了一大堆的Offer,恭喜他拿到了心仪的阿里Offer。
按照惯例,当然是邀请分享一波面经了。
不过这一次是我看见面经里整理的最完善的了,几乎不需要我做什么修改就可以发出来了,再次感谢他的分享。
百世物流专场一面线上SQL调优经验。调优的惯用思路。索引为什么采用B+树,而不用B树,红黑树。项目中MQ应用场景,如何防止消费丢失,重复消费如何解决?JVM类加载机制(双亲委派)。CMS垃圾回收过程。项目中的设计模式的使用。如何提升接口的响应时间?MyBatis框架缓存说一下。如何自己实现一个锁。(回答时候基于AQS)Redis挂了怎么解决?(增加本地缓存)网络的七层模型。每层的作用?(回答时候,我直接说了我是基于五层模型的。)三次握手的过程,为什么三次?为什么出现ip?HTTPS发送请求的过程。Eureka调优如何调的?自我保护模式。分布式事务的流程?(LCN)限流的使用,原理是什么?常见限流的算法有哪些?限流之后的拒绝策略。二面手撕实现一个多叉树,遍历打印。手撕单例。死锁的产生。如何预防死锁,OS如何做的?MySQL如何做的?如何在代码编写时候避免死锁?hashmap。什么是高内聚低耦合。项目中的开放封闭原则如何实现的,如何自定义Bean。bean的循环依赖如何解决?MySQL索引实现原理。为啥快?三面为什么离职?现在薪资?期望薪资?介绍业务,你认为的核心是什么?有什么想问我的。光云科技一面(30分钟)项目中解决过什么问题?数据库事务ACID是如何实现的?mysql如何解决死锁的?分布式锁的使用为什么使用Redisson?Redisson挂了一台怎么办?redis为什么可以实现锁?分布式锁还有其他的方式吗?redis持久化分库分表为什么分库分表?遇到过什么问题吗?讲一下你理解的CAP让你设计一个系统,按照CAP理论你会怎么设计?MQ用过吗?技术选型,为什么选择RocketMQ?线上有没有遇到过向MQ写入消息失败的情况?RocketMQ消费者发送消息失败怎么办?(放redis,如果redis挂了怎么办?)RocketMQ消息堆积怎么办?dubbo+zkdubbo为什么用zk不用nameservice?zk挂了dubbo还能调用吗?重启之后还能调用吗?有什么要问我的?二面(40分钟)两个面试官
说一下项目中秒单模块的优化。带宽大是什么概念?考虑使用同一机房的机器局域网吗?如果走局域网的话,网络如何走的?聊一下MQMQ写入消息失败的情况如何处理?(和一面的问题一样,我直接说出了解决方案,redis,本地内存)生产者发送消息的几种方式,还有其中的差别。Nginx聊一下Nginx为什么那么快?(没看过,但是我猜测用的epoll)说一下linux常见的IO模型。(5种)epoll的边缘触发和水平触发了解吗?epoll的缺点说一下。MySQL画一下MySQL的架构图。线上MySQLCPU报警了,如何快速锁定问题并且解决?同样一条查询语句,有时候快有时候慢,什么原因导致的?(刷脏页)还有什么?(不会了)设计一个商品类目的数据库存储,查询的时间复杂读说一下。如何做优化?(这里说到自己能想到的最优解决方案)线上SQL调优一般怎么调优?说一下FileSort。讲一下MySQL如何排序的?磁盘+内存排序什么情况会触发这个?如果采用磁盘+buffer的排序方式最根本用的什么排序算法?(归并排序)DDD了解吗?有什么想问我的?三面(30分钟)介绍事业部的业务和产品线。问我加入的原因(并发量高,能够锻炼我自己)当你遇到工期不够的时候,你自己认为的优化还没有做完怎么办?我们部门的并发量很大,但是你刚来还是CRUD,你心里怎么想的?你来了之后你自己想着如何快速的使用新的公司?拿了几个offer了?有什么问我的?四面(10分钟)HRBP
介绍一下个人情况。你自己平常自己生活状态是什么?你做过的项目中你最有成就感的一个是哪个?为什么?介绍了团队的情况。五面(10分钟)招聘的HR。
期望薪资。为什么加入我们。离职原因入职时间。来未来科技一面(40分钟)介绍项目,项目中遇到的问题。秒单的优化。Redis挂了怎么办?MQ如何防止丢失的?为什么RocketMQ采用NameServer线上OOM如何触发的?如何快速找到问题的?线上遇到的SQL慢查询问题?如何快速锁定问题的?如何做的优化?如果让你设计一个类似于Dubbo这种RPC远程调用框架你如何设计?说一下你理解的线程安全~线程安全的方式?除了加锁还有什么方式?(单线程的线程安全,我回答的redis,这里应该回答到ThreadLocal)ThreadLocal用过吗?用来做什么?他的本质思想?有什么注意事项?他保证线程安全的方式是什么原因?项目中设计模式的使用策略模式模版方法模式Redis为什么那么快?讲一下常见的IO模型。用主从redis做锁可以吗?有什么问题?都学习过什么知识,阅读哪些源码?你刚才说的你源码读了就忘你是怎么解决的?(画流程图,多读几遍)有什么想问我的?二面(30分钟)画一下项目的业务架构图。在项目中遇到过什么问题?你在项目中解决过什么问题?平常如何学习的?大搜车一面(60min)你认为的技术成长是什么样子的?介绍最拿手的项目介绍项目的架构。你觉得你项目中比较优秀的点在哪里?你们项目的架构是什么?多少个节点?讲一下你们数据流的流向。讲一下你Eureka线上如何做的优化?注册中心还了解其他的吗?讲一下Eureka和ZK的区别是什么?Nacos的原理说一下MySQL线上语句的优化?讲一下优化的流程。索引为什么快?讲一下B+树。红黑树为什么不能用?红黑树和AVL树的区别?红黑树最多经过多少次旋转?(忘记了)自定义Bean容器如何做的设计?如果让你优化这种设计你如何优化?自定义注解可以实现吗?(这里不会,不知道咋实现)JVM线上的OOM如何排查的?如果线上没有OOM,但是我的应用吞吐量突然下降,这个时候你猜测一下什么原因?(FullGC)讲一下CMS和G1G1的最大优点是什么?Redis介绍一下线上redis的使用。redis挂了怎么办?如何保证本地缓存和redis还有mysql的数据一致性延迟双删的策略。redis的缓存穿透如何解决?布隆过滤器如何实现的?10W数据和1W数据布隆过滤器的长度是否是变化的?不变的话是多大?(这个要结合误差率来回答)ConcurrentHashMap如何能保证线程安全的?什么是线程安全?HashMap线程不安全表现在哪里?(扩容时候,多线程是不安全的)HashMap数组的长度为什么是2的次方?说一下扩容的操作。计算数据落在hash槽的时候不用取模用的位运算是如何计算的?(忘记了,这里是(数组长度-1哈希值)))有什么要问我的?婚礼纪一面(60分钟)介绍一下你项目中遇到的问题,你是如何解决的?线上SQL调优,问题的解决。常见的SQL优化方案Eureka的参数调优怎么调的?Ribbon远程调用的时候用的缓存是和EurekaClient是同一份吗?如果保证上线新的服务时,老得服务被及时的下线?(手动下线)熔断如何做的?讲一下他熔断的原理callback同步还是异步?SpringBoot说一下自动装配的机制多个Bean例如配置多个DataSourceSpringboot会优先装载那个?一个余额的模块,更新余额和插入流水的顺序如何做?(都可以啊,只要在一个事务就行)如何保证余额模块,查询出来去做修改这个操作的数据安全。(代码中加锁,数据库forupdate或者一个update语句或者使用乐观锁机制在数据库中增加版本号)如何提高接口的响应速度?MQRocketMQ为什么那么快?(零拷贝是关键)MQ持久化机制说一下。MySQL一条SQLbetweenand,和in的区别。唯一索引和普通索引如何选择?讲一下索引下推的过程。银泰一面(60分钟)介绍一下你做过最复杂的项目和线上解决过的问题。SQL调优,OOM,秒单优化。你对这个项目做过的最大贡献是什么?这个项目带给你哪些挑战和成长了?如何保证系统的稳定性?限流,降级熔断,多节点,报警信息。限流算法有那些?令牌桶设置为10代表QPS最大是10吗?如何选择集群限流和单体限流?(都用上)熔断降级区别是什么?除了这些你还有什么想要补充的吗?分布式事务你们项目中的解决方案说一种你认为QPS最高的分布式事务的解决方案。redis项目中redis用来做什么了?redis还能干嘛。(说了一下五种数据结构的用途,还有分布式锁。)redis单线程为啥快?多线程会有哪些问题?分布式锁聊一下。redis如何实现可重入锁?MQMQ在项目中的用途。消息写不进去怎么办?消息消费不了怎么办?消息什么情况下消息会出现丢失的情况?什么时候消息会出现重新投递的情况。顺序消息如何保证?如果不写入同一个queue如何保证消息顺序消费?RocketMQ为什么快?(mmap和sendfile区别,DMAgetter机制的引入)分库分表了解过吗?如何分库分表?DDD了解过吗?有什么想问我的?有赞一面(80分钟)这次面试主要分为3部分,时间约1个小时。
HashMap讲一下你理解的HashMap。HashMap查询的复杂度为O(1)是如何实现的。(因为数组在内存中存储是连续的内存空间)线程安全吗?线程不安全表现在那里?线程安全的的map说一下JDK的线程安全的Map?分别如何实现的线程安全的?你理解的线程安全是什么样子的?如何实现线程安全?(锁,变量线程私有化)线程池讲一下线程池的原理。你们线上线程池的配置,为什么这么配置?计算密集型如何配置线程池的参数,为什么这么配置?如何实现动态配置线程池?MySQL讲一下MySQl的架构事务的ACID分别是如何实现的?讲一下你理解的MVCC(高低水位和当前读的理解)SQL调优我们一般SQL调优在调什么?让优化器选择正确的索引。你简历项目中线上调优的经历分享一下。什么原因导致的线上事故,如何快速发现和解决的?从这次线上事故,你得到了什么经验了嘛?(需要提前储备我们的知识,当发生了问题的时候,我们才可以快速的锁定和解决问题)redis缓存异常情况如何处理?热key的问题处理。你在线上会做兜底方案吗?开发周期不够怎么办?(周末加班也要完成该问题)分布式事务你们线上分布式事务的解决方案是什么?你有没有思考过你们的解决方案存在一定的问题?如何优化?线上的补偿机制如何做的?RocketMQ说一下RocketMQ的事务消息。RocketMQ你们线上如何保证消息不丢失的。分库分表。你们业务分库分表了吗?(没有,但是我知道解决方案)DDD讲一下你理解的DDD。(刚开始学,说了一些大概的概念和一些名词)介绍一下你的项目(说了一堆之后,面试官不问了)如何学习的?有什么想问我的?二面(60分钟)现场面,面试官很热情。这一面完完全全是业务。项目的细节扣的很细。
画一下你们项目的架构图。NGINX负载均衡策略有哪些?说一下你项目中如何优化Eureka的参数的?各个注册中心的比较?你如何理解CAP的?MQKafka和RocketMQ的比较?RocketMQ的事务消息。RocketMQ如何实现顺序消费?你们项目有这种需求吗?画一下你负责模块主要的时序调用图。项目中数据库表的设计。你们项目线上遇到过什么问题?你在项目中解决过什么问题?你项目中遇到过最大的挑战是什么?ES有没有使用过?(没有)画出你认为的电商交易链路。讲一下你认为的DDD。你有什么想问我的?三面(30分钟)你项目中解决过什么问题?给你带来了哪些思考?除了被动的解决一些问题,你主动解决过什么问题?平常如何学习的?为什么选择有赞?HR(20分钟)为什么会选择内推有赞?是什么让你在上家公司呆了三年的?你工作之后最大的挑战是什么?你如何理解你面试的部门做的业务的?平常有在学习吗?如何学习的?拿了哪些offer了?菜鸟一面(40分钟)先开始聊项目,项目中每个点都扣的特别特别细。
介绍项目。
第一个项目
第二个项目
说一下你们项目的业务架构和应用架构。当时架构为什么做?项目的QPS和数据量。还是那个问题流量激增倍,你认为你们这个系统哪里最先出现瓶颈?如何解决?你们这个业务是行业Top3,发展的很好,为什么不按照你的优化思路去优化来提升他的稳定性?说一下你们项目中分布式事务和分布式锁的解决方案。讲一下你项目中架构。(单体)项目的QPS和数据量。你项目中做了什么?拿到了什么结果?解决项目中的问题带给你的思考。如果流量扩大倍如何解决?有了解决方案了为什么不去做?你们如何保证你项目的稳定性的?线程安全
syn的锁升级。常用的线程安全的容器有哪些?SpringIOC和AOP
RocketMQ
架构。消息防止丢失如何做的?事务消息说一下。让你设计一个MQ你如何设计?有什么想问我的吗?
拿了哪些offer了?有赞和我们这边你如何选择?
二面(笔试)阿里的伯乐平台(相当于白板),面试官出题,需要和面试官通话的状态下写代码,你写的面试官可以实时看到。语法不用正确,只要逻辑没有太大的问题就行。
实现一个双向链表的insert,find,delete的方法。分别的复杂度是多少?(这里注意,插入头尾和按照index插入的时间复杂度不一样)优化一下find方法的查询时间复杂度。跳表O(logN),哈希表O(1)。三面(30分钟)项目相关解决过什么问题?如何做到快速锁定问题的?如何保证项目的稳定性?说一下项目的应用架构?SpringICO和AOP注解式事务和编程式事务有什么差别?工作上遇到过的最大挑战是什么?到现在为止你生活中遇到过的最大的挑战是什么?一面面试官说你拿了有赞的offer了?我们和有赞你会选择哪一个?有什么想问我的?四面(20分钟)大老板面试,晚上十点多。
你在项目中的角色是什么样子的?你认为计算机相关的基础课程重要吗?你除了通过B站看视频还有哪些学习路径?你想来阿里想从这里获得什么?前面面试官说你拿了有赞的offer了,我们和有赞你会如何选择?你认为哪些问题我没有问到?没有问技术。(因为我能看到前面的面试记录,所以都知道他们问了哪些了)有什么想问我的?对我的建议?五面为什么加入菜鸟?你平常除了工作会做一些什么事情?好了,看完了你知道了吧,那些荣耀王者的我邀请你的时候不要爱答不理的了啊。