公众号后台回复“面试”,获取精品学习资料
扫描下方二维码了解详情,试听课程
《互联网 Java 工程师面试突击(第3季)》重磅升级,由原来的70讲增至150讲,内容扩充一倍,升级部分内容请参见文末
说明:本文来源于中华石杉架构班学员 dasthinker 同学在拿下美团、京东两家互联网大厂技术专家offer之后的面经总结
简单自我介绍
本⼈是⼯作多年的⼀枚「⽼码农」,对⽐群⾥的年轻朋友们,是有点「⽼」哈,最近⼯作是在⼀家几百人规模的互联⽹公司⼯作。大家可能觉得,这个时期出来看机会,是往⽕坑⾥跳吗?
个⼈不这么认为,借此疫情的特殊时期,通过企业市场招聘情况也能帮你把握⼀下⼤致业务发展⽅向,这其实是好事。
当然了,招聘岗位有限,狼多⾁少,岗位竞争肯定⽐往年更加激烈的,所以需要珍惜每⼀个机会。
⽐如在新浪的⼀位朋友也很缺⼈,内部还在商讨,少量HC还没有正式放开...本次薪资涨幅还算满意,具体就不便透露了。在谈薪资⽅⾯,如果你能提前拿到其他公司Offer,且你之前Base还可以,那么还是容易谈的。
⾯试结果:
京东、美团⾯试已通过。具体定级对标P7上下这样⼦吧,个⼈理解是资深、专家岗,因为进去也基本都是⼲活的,带⼈与否看情况。
⾯试流程:
京东、美团多个部⻔都是并⾏⾯试的,这个没有正式谈薪前都是没问题的。
京东:三 / 四⾯技术 + HRBP美团:四⾯技术 + HRBP + 专职HR
个⼈感受美团HR专业性、与候选⼈沟通⽅⾯体验相对更好些,因招⼈旺季,HR也都很忙。
HR职责也会细分,联系协调⾯试的有专⻔的HR、技术⾯过会HRBP⾯试,最后都通过确定职级,然后会有专职HR谈薪资。
⽽京东HR...,这⽅⾯相对美团吐槽也更多⼀点⼉,所以后⾯同学去引起注意即可,如果你是「不确定」的候选⼈,各种情况可能都会遇到,⼤家知道就好。
京东⾯面试过程总结
⾯试⽅式:电话⾯试,他们都不露脸呀!好处是不⽤⼿撸代码了。
京东物流:三轮或四轮技术⾯
通常⼀或⼆⾯是研发同学(即未来跟你⼀起⼯作的同事)、⼆或三⾯(架构师T7或T8,要给你定级的)、三或四⾯(部⻔负责⼈,也会有技术⾯)。你的定级是在最后两⾯综合来确定的。
【京东⼀或⼆⾯】因为⼀⾯或⼆⾯都是研发同学,基本都是常⻅的⼀些⾯试题,也不会很深,群⾥同学肯定都会。个⼈在部⻔内曾推⼴过 Apollo 配置中⼼,⾯试官也会让你说出实现原理。
京东内部应该是不使⽤ Dubbo 的,他们的RPC框架叫做「JSF」,内部实现机制 应该是跟 Dubbo 很像。所以京东⾯试官要问RPC,基本都问到 Dubbo 实现原理,内部扩展机制等等,肯定不会问 JSF 了,也没开源。
【京东架构师⾯】 项⽬问的很详细,说的我很累~ 基本每个项⽬具体实现⽅案、亮点都讲了⼀下,遇到的问题。
具体的技术面
JVM & GC 1)你们JVM线上使⽤的什么垃圾回收算法?CMS、G1
详细说⼀下CMS垃圾回收算法回收过程?4个阶段
CMS中的remark阶段⽐较慢,怎么分析和解决?
- XX: +CMSScavengeBeforeRemark Remark前提前来⼀次YGC;增加CMS回收的线程数...
线上如何来分析GC问题?
JVM线上是如何调优的?
1.7和1.8中jvm内存结构的区别?
发⽣Full GC时会回收Metaspace空间内存吗?
这里推荐一下「儒猿技术窝JVM专栏」,有不少作者亲身经历的JVM调优实战案例。感兴趣的朋友可以扫码看看,面试来说足够用了。
2、数据库
1)锁等待问题如何处理?⼀个事务中调⽤了本地事务,还调⽤了RPC接⼝?
我说这⾥涉及了分布式事务了,他说不⽤,把RPC接⼝调⽤放在最后⾯...然⽽实际逻辑并不⼀定都这样的...他应该是想问出现死锁、间隙锁问题应该如何来处理,说了下死锁的解决思路,没有太get到点上。
3、缓存 & ⾼并发
1)⾼并发下缓存与数据库⼀致性如何保证?
2)⾼并发情况下扣减库存如何处理?如何优化?参考⽯杉架构笔记⾥的⽂章
3)当队列满了,核⼼线程空闲、扩展线程也空闲,谁从队列⾥获取?
4、JUC 1)为什么线程池⾥要先创建coreSize⼤⼩的核⼼线程?2)线程池中的各个参数的含义解释⼀下?
5、框架 & 源码
1)SpringCloud和RPC具体都有哪些区别?
2)SpringCloud中遇到过哪些坑,具体降级了Eureka注册中⼼的坑。
3)最近⼀分钟上报的次数计算错误,bug
4)⾃我保护机制,剔除Down掉服务器并不是90秒,也是个bug,⾄少180秒以上。
6、算法题
1)编程珠玑⾥的⼀道题:⼀个40亿的⽆序数字,请找出不存在的数字
2)⼀个很⼤的List,⾥⾯都是int类型,如何实现加和?因为电⾯,就说了⼀下思路
京东四⾯部⻔领导
1、介绍下项⽬的亮点,有成就感的项⽬
2、JVM相关深⼊
1)深⼊探讨了CMS、GC Roots,跨代是如何进⾏GC的?有点发散,提到了GC Roots Tracing,Rset、Card Table
2)ParallelScavenge了解吗,什么算法?实际是复制算法【⽼年代可以搭配Serial Old或者Parallel Old】
3)为什么不能和CMS⼀起使⽤呢??后来听说这个负责⼈jvm源码他都看过,研究很深。
3、MySQL索引如何做优化的?
1)假设有⼀个表字段⼏⼗个,索引如何创建的?所有字段都能建吗?区分度、选择性、列基数
2)MySQL为什么是B + 树的结构,为什么不能是红⿊树呢?优化的是什么,优化的是磁盘IO,减少磁盘寻址。
4、MQ队列⽤了哪些?答:Kafka。那⾦融场景下,Kafka如何保证消息不丢失?答:ack = -1,Leader-->ISR写⼊所有的follower
5、Redis⽤过哪些数据结构?zset底层是什么结构,hash和跳表,为什么是跳表,查找效率⾼。
6、其他
1)⾃身优缺点?
2)⼀句话总结下⾃⼰?
3)对待加班的看法?
接下来,重磅节选美团的两个部门的面试过程。
美团A部⻔⾯面试过程
⾯试⽅式: ⽜客⽹视频链接,因为可以⼿撸代码,⼀般职级越⾼,技术⾯试轮次越多
3-1以下应该是三轮技术⾯,3-1通常四轮技术⾯,⼀、⼆轮技术和项⽬负责⼈⾯,三、四轮是交叉⾯或部⻔
领导⾯,五⾯是HRBP,六⾯专职HR谈薪⽔收到offer后接受开始背调,⼀般需要5个⼯作⽇背调结果给到公司,联系⼈及⼯作时间必须准确⽆误。
3-2以上据⾄少五轮技术⾯,没这待遇啊。⼤体这样,当然每个部⻔安排顺序不⼀定相同。因为是两个部⻔都做了⾯试,⾯试官⻛格也不⼤⼀样。
美团A部门一面技术
1、JVM如何优化的?CMS算法执⾏流程?什么情况下发⽣的Full GC?
2、分布式事务讲⼀下?结合项⽬想讲的可靠消息⼀致性实现⽅案 + 最⼤努⼒送达通知⽅案,最后也提到了单应⽤多DB(JPA)、TCC事务以及适⽤场景。
3、ES是如何调优的?副本机制作⽤?写⼊doc操作执⾏过程?
4、其他也都是基础问题,印象不是很深刻了。
【美团A部门二面技术】
1、将最近做的两个项⽬详细讲解 + 现场画出整体系统架构图并结合架构图讲解+ 设计模式类图
我是拿了⼀张纸,画出来然后对着电脑屏幕开讲,这⾯试画⻛可以想象⼀下哈,⾯试官隔着屏幕看。
2、因聊的项⽬时间⽐较⻓,也因为电脑快没电了,所以接下来⼏道技术题他出完我很快回答出来了。
3、MySQL数据库底层实现结构?B+树结构,也讲了数据⻚,以及⻚⽬录相关的
4、Spring Bean循环依赖如何解决的?
5、MyBatis⼆级缓存如何实现的?
6、有个项⽬⽤的分布式缓存是CouchBase,要求讲下CouchBase基本原理?
7、RabbitMQ如何保证⾼可⽤的?queue数据在节点之间如何同步的?死信队列
如何实现的?
技术回答的很快,最后丢⼀句「等HR电话」,我是有点懵逼,难道都该聊到hr
⾯了,这不才2⾯技术⾯么。
因为电脑⻢上没电了,没有多问,已经聊了⼀个半⼩时了。
后来才知道,是等HR电话通知我约下⼀个⾯试官啊。。。果然是好久没⾯试
了^_^
【美团A部门三面技术】
讲解了项⽬的从客户端到后端的具体流程。主要问了⼀些扩展技术⾯,⽐如Http2都有哪些改进的?Redis最新特性了解哪些?等等吧,总体也不是很难的。
【美团A部门四面技术】
1、⾃我介绍、介绍具体项⽬突出贡献
2、离职原因?业务⽅向如何考虑的?职业规划?
3、⾼并发与性能的关系?根据项⽬经验⾃有发挥吧,但尽量还是答案宏观⼀点。
4、缓存和数据库⼀致性如何保证的?谈到了分布式锁,那详细讲讲分布式锁实现?redis setnx、redisson、zookeeper
5、项⽬架构中如何做技术选型?
6、有什么要问我的吗?
【美团A部门五⾯】
1、为什么要离职,基于什么原因考虑的?
2、你的未来职业规划是什么样的?项⽬中的⻆⾊是什么样的?
3、你认为⾃⼰还有哪些需要提升的吗?
4、你在团队中的绩效如何?
5、有什么需要问我的吗?
美团B部⻔门⾯面试过程汇总
讲真,这个部门面试覆盖面够全面的,多数的中间件底层原理必问~
【美团B部门一⾯ 技术】
1、JVM中的CMS和G1垃圾回收算法具体区别?
2、问了两道线程池相关问题,觉得没啥问题了 此时,话锋⼀转,咱们聊聊中间件相关吧 【后来听说,⼈家是有个⾯试⼩模板^+^ ,都是套路哦~】
接下来开始问中间件相关:
1、Dubbo
1.1 说⼀下Dubbo的具体执⾏流程,涉及哪些模块,作⽤?
1.2 使⽤过过Dubbo哪些特性,做过哪些扩展?Dubbo⾥的泛化有了解过吗?
1.3 Dubbo中的注册中⼼Zookeeper是如何注册上去的?
2、Zookeeper
2.1 Zookeeper节点有哪⼏种类型(临时、持久)?
2.2 如何注册的,如何选举的(选举算法?),
2.3 如何完成监听或者说是订阅的?
2.4 提到了分布式锁,在Curator框架中是如何实现的,watch机制本地数据结构啥样的?
3、Redis
3.1 都⽤过哪些数据类型?分别介绍下使⽤场景?
3.2 持久化机制,AOF、RDB具体区别有哪些?
3.3 Redis 主从同步机制是怎么样的,⽐如slave启动之后同步过程?
3.4 Redis Cluster集群如何选主的?
3.5 Redis Cluster 跟哨兵模式有什么区别吗?
3.6 Sentinel 哨兵模式是如何选主的?这⾥说跟cluster差不多,追问了下,其实还是有些区别的, sdown odown 主观宕机、客观宕机⽅式不太⼀样
4、Kafka
4.1 ⽣产端是如何发送⼀条消息到Broker的?
4.2 具体可以调整哪些参数提升吞吐量?
4.3 消费端发⽣rebalance的过程是怎样的?⽐如有⼀个新的consumer加⼊
到了Group中是个什么流程?
5、⼿写算法
算法题:⼀个链表,输⼊k,⽐如k=3,翻转前3个链表值 【你撸不出来,也得写
talk is cheap,show me your code】
【美团B部门二⾯技术】
1、 都是发散探讨性的题⽬⽐如⽤过CouchBase,那你觉得CouchBase有哪些不⾜的地⽅,哪些不够专注的?
谈到专注,我也提到了Redis不够专注,因为Redis5.0还提供了Stream作为持久化队列解决⽅案,Redis应该更专注分布式缓存这块,反⽽野⼼也很⼤,还要⽀持类似MQ的功能,并且也参考了Kafka设计思想,所以也不够专注。
2、 ⼿写多线程题⽬:T1线程输出都是A,T2线程输出的都是B,T3线程输出的都是C要求三个线程启动后输出顺序:ABCABCABC
【还有其他一些发散性题目,就是跟你来探讨技术以及实现,由浅⼊深,看看你是如何思考的,为什么这么来设计?有没有什么更好的解决⽅案?】
【美团B部门三⾯ 技术】
部⻔总监⾯,主要聊项⽬,也聊到了Reactor模式。因为已确定去另外⼀个部⻔,没有安排交叉⾯,或者已经有过交叉⾯了,如果决定去这个部⻔也不⼀定会再重新安排了,
交叉⾯⾯试官也不是很好约⾯的,其主要作⽤就是把把关⽽已,其决定作⽤的还是本部⻔的⾯试。
面试前准备&⼩小技巧
1、⾯试前准备
儒猿技术群⾥之前也有⼩伙伴都做了⼤量值得借鉴的⾯经分享了,我也说一下我的面试准备。
我个⼈主要是通过公众号儒猿技术窝 + 极客时间 + 架构课程 + 自身项⽬经验+ 石杉老师指导为主要⽅针,这样基本不会偏离太⼤的⽅向,在这⾥再次感谢⽯杉⽼师。
基础知识必备:
数据结构与算法(如果不是面头条这种公司,掌握常用数据结构算法就够了)、Java基础、JVM、并发、⽹络&NIO、设计模式
中间件相关:
缓存(Redis为主)、消息队列(Kafka、RabbitMQ、RocketMQ)、数据库(MySQL)、搜索(ES)
分布式相关:
分布式理论(CAP、BASE)、分布式锁、分布式事务、分布式幂等框架&源码相关:Spring、MyBatis、SpringBoot、SpringCloud、RPC(如:Dubbo)、Netty等常⽤框架
架构&容器相关:
微服务架构(架构演进过程)、微服务拆分原则、容器化(了解Docker & Kubernetes)
项⽬经验:
项⽬整体架构(能画出来)、项⽬上下游关系(能将明⽩)、项⽬实现细节、项⽬主要亮点
技术之外:
你有什么要问我的吗?、离职原因?、职业规划?项⽬管理?⾃身优缺点?挫败感的事⼉?⾃身哪些需要提⾼的?绩效怎么样?突出贡献?
这些技能要想深⼊不是短时间内突击就能完成的,需要⻓期做项⽬加上平时的有⽬的性的学习和积累。技术栈⽐较多,我个⼈建议在⾯试前提前准备阶段,通过思维导图的⽅式梳理,对抗遗忘曲线,推荐使⽤ProcessOn⼯具。
2、⾯试时⼩技巧
上⾯尽管罗列了很多技术栈,但是要尽量做到⼏个技术栈能更擅⻓⼀些,⽐如对 JVM调优、并发、分布式等技术都有深⼊实践和研究,或者对某些框架源码深⼊研究,并做过⼆次开发之类的,都是有加分的。
因为⼤家不可能都是样样精通的,也最好别都样样稀松,所以关键夯实住⾃⼰擅⻓的,然后其他技术栈查缺补漏。
同时,在⾯试中开始⾃我介绍后,建议你要有意识的说出你擅⻓的领域、技术栈等。其⽬的也很简单,就是将⾯试官的思路往⾃⼰擅⻓的⽅向引导。不然呢,当⾃我介绍结束之后,⾯试官基本就按照他的套路出牌了,或许你此时会有点被动的~
但是,有的⾯试官也不吃这⼀套,那你就准备应战就好了。某些技术你简历写了,⾯试官正好问到了,但是其实你并不是很擅⻓,或者时间久没有了解的很深⼊,如果追着问,就有点尴尬了?
⼀般⾯试官都是结合你简历问的,很少⾯试官是只问他会的东东,如果真遇到这样的,也是有点尴尬,不⾯也罢!
小结&问题答疑
最后也提醒各位要换⼯作的⼩伙伴,⼤家加油!
1、社招算法:算法虽然在社招里面占据的比重不大(大概10%),但作为基础,也是要准备的。我这次也不是很充分,算法还在平时的积累和练习。
2、思维导图:平时尽量画⼀画思维导图(processon),对抗技术知识的遗忘曲线。
3、技术应⽤:这个是重点,将学到的技术应⽤到项⽬⾥,使你的项⽬看上去更有亮点,更有聊的价值。
4、临场应变:有些题⽬会发散,要提⾼临场随机应变的能⼒
5、技术积累:基础和经验相结合
举个例⼦:有⼀家C轮公司的⾯试官⽼哥,很直接的说我仅出两道题,剩下你来
问我:
题⽬1、输⼊⼀个⽹址⽐如jd.com到底发⽣了什么?请你讲的越详细越好
题⽬2、后端服务如何做性能优化的?讲的越详细越好。
惊不惊喜意不意外啊。。。第⼀个题⽬可以考察:⽹络、CDN、DNS解析、TCP 三次握⼿/四次挥⼿、Http协议。第⼆个题⽬可以考察:DB、SQL(索引)、缓存、Tomcat、JVM上等性能优化等等?
说是两个问题可以扩展出很多个问题,所以要回答的全⾯且到位,也不是那么容易的对吧。当你提到某个技术优化的时候他会详细追问如何做的,这哪是两个问题啊。这家公司也是⾯过了的,也具备⼀定的发展潜⼒,个⼈也是⾮常看好的。
⼆⾯架构师⾯:JUC问的很多,volatile、synchronized、aqs、cas、锁升级机
制、闭锁等等及各中间件原理,反正问的很全⾯。
以上就是我今天的面试经验分享哈,希望能跟正在找工作或者以后找工作的同学有帮助,大家有什么问题可以积极留言,或者定个flag,2020年是个不平凡的一年,转瞬间已经过去一半了,大家一起加油!
END
《Java工程师面试突击第三季》加餐部分大纲:(注:1-66讲的大纲请扫描文末二维码,在课程详情页获取)
详细的课程内容,大家可以扫描下方二维码了解: