上海各大厂社招经验分享

2,586 阅读7分钟

这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战

今年6月底,冒险裸辞找工作,面试了一个月后,目前顺利拿到了拼多多、b站和得物的offer。

我的语言主要是Python和Java,Java做的时间不长,但也投了一部分Java的岗位,求职方向是工作3-5年的后端开发岗位。分享一下我面试上海地区各大厂的经验,由于不同的公司的不同部门的面试风格都有所区别,这里仅总结我的感受,以供参考。

字节跳动

字节共面了两个部门,一是飞书的saas开发,算法题+八股文,虽然算法题做出来了,但是我八股文没准备好,一面挂了。所以最好在面字节之前先面一些别的公司,找找面试感觉,尤其是帮助八股文的查漏补缺。我当时直接就去面字节了,状态没调整好。

另一个是语音中台部门,考察的比较难,项目问的多,问了我很多分布式相关的内容,但是这些我研究地不够深,感觉答得不够让面试官满意,算法题出的比较难,K个一组反转链表,达到了Hard级别,一面又理所当然的挂了。

字节每轮面试都会有算法题,特别喜欢出链表的题目,比较考验逻辑思维能力。字节常见的算法题目包括:

八股文包括网络,操作系统,MySQL,Redis几块,典型题目包括:

  • HTTPS是怎么建立连接的
  • TCP的粘包是什么
  • TCP和UDP区别
  • 缓存过期策略时什么
  • sortList什么数据结构,时间复杂度
  • MySQL事务实现机制
  • 主从同步怎么实现的
  • 最左前缀原则是什么
  • MySQL的B+树结构
  • ……

项目经验方面只能平时多思考,多注重积累。

总结一下,字节的各个部门的面试差异很大,但总结起来无非就是这几块,算法(必考)+八股文+项目,对于字节的后端岗位,它们是用Go,如果你不是Go的技术栈,不必过于担心,因为语言层面的面试问题考的非常少,更多的是看计算机基础知识(算法、网络、操作系统)以及各种数据库和中间件(MySQL,Redis)以及项目(分布式等)。

美团

岗位Java开发。

一面的问题比较常规,都是Java的基础知识,包括JVM,并发,spring,MySQL等等。

算法题考的是的是143. 重排链表,但是我当时没做出来,结果挂了。

总结一下,美团的面试体验给我感觉不是很好,我的面试官比较严肃,另外对于Java的要求还是挺高的,问了比较多语言层面的东西。

阿里

岗位是金融风险部的SRE岗,语言也是Java。

一面问的项目比较多,做了两道算法题,比较简单,一个是二分查找,另一个是正确的电话号码格式。

一面过了,但是他们内部评估觉得Java经验不够,所以后面没安排二面。

总结一下,阿里似乎都是研发人员自己去找人面试,不知道是不是他们内部的KPI,他们也是比较看重语言的,对Java能力要求比较高。

拼多多

岗位Java开发。

三轮技术面+一轮HR面,顺利拿到offer。

虽然是Java岗位,面试官考察的更多是项目经验或者通用计算机知识,Java问的也比较基本,没有太刁难我,面试体验比较好。

算法题是一道业务逻辑的题目,给了一个停车场收费的场景,把各种情况考虑清楚就能顺利写出。

总结一下,拼多多最后给我的薪资很诱人,是我拿到的所有offer里面最高的,它的涨薪也很给力,但是代价就是11 11 6。我觉得程序员还是要腾出自己学习的空间,而不是被工作给完全侵占,所以在犹豫再三后,我还是放弃了拼多多的offer。

得物

岗位Python开发,部门工程效率中心。

两轮技术面+一轮主管面+一轮HR面,顺利拿到offer。

这个岗位跟我背景太相似了,技术栈也完全匹配,面试问的问题集中在Python、React、项目经验,我都有所准备,所以全程都很顺利。另外得物没有考算法题。

总结一下,得物的面试比较常规,一面问技术,二面问项目,没有出现太偏太怪的问题,正常准备就可以了。因为这个岗位跟我做的东西太过相似,我不想停留在舒适区,最终也没选择得物的offer。

b站

岗位Go开发,是一个负责up主业务的部门。

三轮技术面+一轮HR面,顺利拿到offer。

一面考察的范围比较广,基本把语言、数据库、缓存、网络、操作系统、算法都涵盖了,跟面试官一共聊了一个半小时,比较受到他的认可。

总结下b站的一面面试题:

  • MySQL:索引下推,myIsam和innodb的区别,聚簇索引和非聚簇索引,B+树,索引优化方案,innodb里面有哪些锁,意向锁,读写分离,分库分表,事务的原理,事务隔离级别
  • Redis:分布式锁,缓存淘汰策略,持久化,rdb和aof
  • Rabbitmq:amqp协议,消息队列作用
  • go:并发写dict的问题,slice扩容
  • 网络:tcp和udp的区别
  • rpc:rpc原理,使用什么网络协议实现
  • 操作系统:进程和线程,select和epoll
  • 数据结构:数组和链表的区别,完全二叉树和满二叉树
  • 算法:算法题给我出的是求一个数组里面为目标值的所有子集,因为自己算法练的比较多,也轻松做出来,要用到回溯法。

二面主要考察了系统设计以及项目经验的问题,包括设计线程池,生产如何做MySQL热切换。也考到了一道算法题,两数之和的所有可行解(可包含重复值),轻松做出。

三面主管面,没考太多技术,随便聊了聊项目和职业发展。

总结一下,经过前面几家公司的面试,我在面试b站时,已经准备的非常充分了,所以能应付自如,面试我的几位面试官也给了我很多肯定。其实后端岗位的考察范围比较固定,常问的题目也就那些,好好准备的话,面试都会比较容易。态度很重要,用心准备跟直接面试相比,差异还是非常大的。


从这次跳槽的面试结果来看,我感到自己还是受到市场的认可的,努力没有白费,很开心。至于我最后的选择,我放弃了上海拿到的大厂offer,选择了去南京的一家创业公司。做决定时,我是非常纠结的,上海能给我提供的成长空间和福利待遇肯定比南京要高很多,但同时上海也面临很大的买房压力。我退回了二线城市,希望能平衡好工作和生活,不必像在大城市那么卷。

另外,大公司分工比较明确,很多时候只是担任螺丝钉的角色,我毕竟也工作挺久了,希望能在小公司有更多的发挥空间。不管身在哪个公司,我都会注重自身技术能力的积累,保证自己的不断进步。比起大厂的光环,我更看重我能为公司创造哪些实际的价值,把自己身价体现出来。

放弃了很多offer,就像是告别了其他平行世界里的自己,告别了很多可能性,还是挺可惜的。这次offer的选择,就好像蝴蝶轻轻扇动了翅膀,影响着未来的命运,但谁也没法预知未来,不管未来怎样,希望自己无怨无悔,勇敢坚定地走下去。我相信,成就我的,是我走过的所有道路,而不是我呆过的公司。