《不一样面经》贝壳5年社招后端

1,440 阅读14分钟

前言

免责宣言,以下为博主朋友云雨雪于2024年面试贝壳社招后端开发工程师岗位的真实经历,如有雷同,你是真的。本次延续上篇不一样面经系列的宗旨,不仅会介绍题目和题解,还会分析面试官为什么这么提问,最后结合云雨雪的个人体验来做一个面试总结。对了,以下我的好友云雨雪视角书写时可能会由于笔误不小心写成第一人称视角,请不要误会。

一面

问答

  1. 讲一讲你觉得最有亮点的一个项目
  2. 数仓存储数据量级如何,单表量级如何--千万级
  3. TIDB选型理由,有没有对其他数据库做横向对比,为什么不用ES之类的NoSQL--关系型事务,监控,可扩展性
  4. Kafka如何处理消息丢失,消费端和生产端两方面
  5. 手动提交的话性能有影响,如何处理--批量解决
  6. 生产端ack=all性能影响--我答用ack=1,如何解决数据丢失问题--我答业务会重抛,不存在该问题
  7. 如果真的出现数据丢失的情况,如何弥补--我答定时任务全量计算兜底
  8. 这个项目给你带来了哪些提升,大数据方面的说一下
  9. 如果让你设计一个电商系统,怎么设计--我答基建,业务
  10. 如何划分领域模型--DDD,不会
  11. 如果用户分布多地,如何解决调用的延迟问题--多地部署,网关按照容器所在位置进行分发
  12. 多地多存储的数据库,如何解决同步延迟问题--答得不好,说了下强一致性(阻塞等待同步完成)和最终一致性(缓存定时更新)
  13. Java中的线程和进程之间的关系,为什么要用多线程,多线程带来了什么问题,如何解决这些问题
  14. Java如何管理线程--我反问了下是不是想问JMM,猜对了,问题转化成JMM是什么
  15. 不断创建线程会出现什么问题,如何避免--OOM,用线程池
  16. 死锁说一下
  17. 垃圾回收器聊一聊--我讲了讲JDK8常用的两种
  18. 如何解决相互引用问题--我答了引用计数法的劣势,可达性分析的原理
  19. 事务隔离级别--四种
  20. MVCC的原理
  21. redo log原理,有什么用,宕机了之后如何处理,数据还是丢了怎么办--我答了buffer pool和磁盘的处理逻辑,底层机制导致的,没办法

老规矩介绍下JD,贝壳二赛道家装部门,当时在急招,投的人非常多,估计池子里不止个位数的鱼。云雨雪面试的岗据说是相对不卷,面向设计师的TOC项目,流量不大是经典的业务项目。

估计是候选者过多,面试官并没有对我的自我介绍感兴趣,选择公式化开局,项目介绍。问题二三是对项目的一个补充了解,这里提醒一下大家,无论是做没做过的项目,只要是你指定的项目,必须清楚知道这个项目的业务情况和数据规模。问题三老搭档了,之前文章有写过,欢迎去看。

问题四五六七其实就是一个消息队列的考察,这些问题太常规了,结合业务和技术点去答就行了,根据标准答案去扩充大碗宽面-Kafka一本道万事通-7366阅读·71点赞·203收藏。项目八的话还是想了解下我对大数据的一个熟悉程度,这个照常说就行,因为我知道我面试的是Java岗,flink相关的知识并不重要,所以我就讲了讲一些实操的案例。

问题九就是一个经典的设计问题,我常规的一个思路是从业务规模说起,再聊基建,再根据具体的业务点比如秒杀等核心功能点去做具体设计。这个思路一般是没有错的,因为没有实战的情况下,从一个宏观的角度告诉面试官,我是有通用设计能力的,最后从具体业务点来讲就是进一步告诉面试官,我是有真实动手设计能力的,主打一个虚实结合。

问题十就是经典理论题,我不会是真不会,哈哈,遇到不会的,老实说让他进入下一part就OK。

问题十一和十二答得不好,属于架构设计,这一块说了不少,但是没到重点,而且本身我对这些也没有很熟悉,只能就自己的经验去说。建议大家查一查这个问题,自己总结下,我提供了一个简单的思路。

此后的问题都是传统八股了,这确实没啥好说的。聊一下八股的回答方法吧,首先得会,这确实是最基础的,一切的回答都建立在这个之上。如果在这个之上增加一些实战的讲解或者对于原理的扩展解释就更好了,举一反三才是强者。

代码题

给定任意一个算术或逻辑表达式,计算出表达式的输出结果,其中表达式支持常量、变量,对于变量通过额外的输入赋值并参与运算,要求:
1.至少实现算术加、减、乘、除、求余等算术运算
2.至少实现逻辑与、或的运算
3.至少实现逻辑 >, >=, ==, !=, <, <=等比较运算
4.实现带优先级的表达式,注:优先级用`()`符号表示
5.实现组合的复杂的表达式
数据结构,a可能也是这样的结构
type: logic
operator: ||
operand: [a, b]

我的思路:扩展性用SPI机制,接口+实现类,递归解决表达式套表达式的问题,外接数据源应对表达式规则的拓展。写得不好,但是也让我过了,在社招阶段,我感觉算法不是最关键的胜负手,更多的还是在项目、场景和设计三方面,有时候算法我写不出来也过了,或者根本就不用写算法或者代码题。

感受

贝壳一面说实话大部分还是在我的好球区,这段时间面试状态延续了23年底的火热。即使过去了四个月,短暂恢复后还是很快找回了当时的状态,所以理所当然的在面试过程中就能感受出来这面能过。就我个人而言,我是比较喜欢贝壳的面试,和滴滴当时给我的感觉一样,很顺理成章,面试过程不是问答题的罗列,而是水到渠成的推演,真正的技术交流。贝壳的部分问题侧重于架构设计,技术上的场景问的不深,基于八股问了不少,符合我对大厂面试的一个模块总结。

二面

问答

  1. 自我介绍
  2. 公司待了4、5年,为什么想跳槽
  3. 部门人员和工作流程,你的角色是什么样的
  4. 项目介绍
  5. 为什么自己做大数据,有没有遇到什么问题,讲一讲--讲了数据有序性、数据倾斜、性能优化
  6. Topic为什么会有多个数据表或者多个命名空间,为什么设计,如何优化?--通过key走不同分区,分区有序性能保证同时提升了消费数
  7. 讲一讲Kafka的Rebanlace--我答了原理、会产生的问题
  8. 4个消费者消费3个分区,3个消费者消费4个分区--分别是什么现象
  9. Kafka向某个集群节点发送请求的时候,Broker会做什么处理---请求转发啥的,讲讲原理
  10. Kafka的批处理是什么逻辑,发送消息是什么流程,为什么用批处理
  11. 讲一讲零拷贝
  12. 讲一讲ES的架构,一条读写请求的流程和原理
  13. ES怎么配置优化,你是怎么做性能优化的聊一聊
  14. 有解决过网络问题吗,有解过包吗?
  15. 解决过的比较难的线上问题
  16. 你说你带过项目,你们的一个整体的项目流程是什么样的

问题一二三四是对我个人经历的一个具体了解,通常面试官在自我介绍后马上提出问题,说明你的自我介绍讲得还不错。

问题五是常规问题,我自己总结过大数据相关的东西,之前写过好几篇博客,我知道会被问到,所以针对亮点和难点进行了总结,每次固定回答即可。但是要注意我这里的大数据是一个让人感兴趣的添头,所以我可以用一段话总结,因为大部分面试官只需要了解你做过即可,并不需要你真的在这一块很厉害,除非JD要求掌握大数据技能。

问题六到十一还是消息队列相关,很明显内部技术栈用到了Kafka,所以这里考察的点在于对Kafka细节的了解。有一些不常见的面试题出现,这里单独聊一嘴,面试的时候注意理解面试官的发问意图,一是要确认问题理解正确,模糊的可以把自己理解的题目反馈给面试官确认一下。二是那种明显连环炮提问的起手式,可以自己主动去扩展相关原理和实战,没必要等着人家来发问。毕竟自己顺着说,你是可以背的,既流利还清晰,等别人问万一卡住了岂不是坏了!

问题十二三关于ES的,这个太经典了,我总结的太详细了,想说啥都能说出来,还是前面的逻辑,举一反三。

问题十四不会,我发现我每次面试都不可能百分百回答所有问题,所以我后面就战略性的放弃了网络模块和一些我认为不重要的模块,重点关注我熟悉的。

问题十五总结过,我一般说JVM相关的一些线上问题解决过程,这个我有很多实操经历,所以说起来蛮简单的。

问题十六其实有点意思,这时候我和面试官谈笑风生,我知道我应该是过了,他也抛了一个问题,想要问我有没有管理经验,这个老实说就行。云雨雪前公司的项目流程挺规范的,就是大厂标准一套,样样齐全。这种涉及到工作场景的就没必要夸张,老实说就行,毕竟就这么些东西,也问不出花来,最关键是编了被发现降印象分,说的离谱人也不加分啊。

感受

二面的感觉同样非常不错,云雨雪依旧在面试中途就感觉到了能过,太顺了,面霸BUFF叠上就是乱杀。这个阶段云雨雪记得正在纠结另一个offer的去留,但是最终在好心人的建议下最终综合各种想法决定继续前进,贝壳就是当时继续前进的进行时。

三面

感受

三面线下,好多问题都记不清了,但是我印象中凡是线下三面就很少有不整活的老板。有现场做题的,画流程图的,凡是带了一支笔和你聊的,就要准备好了,铁定要作业啦!云雨雪本身就是i人嘛,但是经历了过去两年的一个跃升进化,线下不会存在怯场的情况下,绝招就是每次线下面试前说出真言:你也不是第一次没人要了,还在怕什么啊?

三面老板本来说的是聊三十分钟,结果我俩聊嗨了说了快一小时,谈笑风生。这一块我印象不深,有个场景设计题,就是加密信息如何模糊查询,这个我当时正好看了相关的博客,所以很顺利的答了出来,知识的积累很重要啊,兄弟们。然后让我画了我核心项目的一个流程图,大致的一个架构设计,画的相对潦草,但是结合这个图是讲清楚了。老板问的很细,所以我一再和跟我做面试沟通的朋友们说,一定要吃透项目,不仅要体现在技术上,还要吃透业务。业务不仅仅是流程,还有项目目的和结果、规模和架构设计,都要清清楚楚,老板需要的是一个真正完整掌控过项目的人,而不是一个螺丝钉!

聊完以后老板对我特别满意,让我等一下,直接叫了HRBP过来,又聊了半小时不到吧,确认面试通过了。

面试现状和心态

后面反正是挺离谱的,一切都很正常,HR跟我要各种材料,我也填了,定薪流程也走完了,确定了薪资。我觉得应该差不多稳了就推了别的面试,开始休息了,就在我觉得一切顺利的时候,出现了比去年滴滴更离谱的情况,定完薪offer发不出来了。磨了一周多,HR跟我说,业务老板对我特别满意,HR也帮忙提了很多申请和推荐,但是HR老板要求985211学历,所以池子里的我出局了。中间拉扯了一段时间,又说是请业务老板给HR老板写了推荐信,又说是HR同事也帮我求情,各种乱七八糟的,反正最后就没过...

当时直接颓了一周,淦,真的很气人啊,刷了下脉脉,发现也不是个例,哎,就业市场反正是越来越魔幻了,说不出话。反正离谱的时候遇得多了之后,心态也放开了,没办法,只能卷,卷到让他不愿意失去我。云雨雪的经历也说明了现在就业市场就是纯纯的资本家市场,你不干有得是人干,在职的有交接期的比不过辞职在家第二天上岗的,GAP时间长的比不过刚被释放的韭菜,你身上任何一个小缺陷都会被无限放大,原因无他,人太多了。所以我觉得现在求职就是个运气活,技术和运气得五五开了,所以遇到什么奇葩事大家也别见怪了,做好自己,乾坤未定,你我皆是潜龙!

写在最后

不一样面经系列目前最后一篇,云雨雪写了很多面试技巧和理解进去,在时间发生的三四个月来聊,有些记忆缺失了。不一样面经 - 云雨雪的专栏 - 掘金 (juejin.cn),拉了一个专栏来分类,肯定还有别的面经产出,但是我不喜欢罗列面试题。因为每个人的题目都是不一样的,单纯罗列题目意义真的不大,所谓的标准答案也不一定是正确答案,所以我更多的是把面试的感受和技巧写出来,我想要传递给大家的是术。面试是一个多维立体的评价方式,不要仅仅专研于一问一答,面试的状态和口才也是关键,多面试吧,希望大家找到好的工作,加油!