拿到腾讯、字节跳动等大厂后端实习offer了!
一位球友的个人面试经验分享,原贴地址:https://t.zsxq.com/0eZXSATLt 。
PDF 版本:附件: ltyzzz面试经验分享.pdf
下面是正文。
我是去年8月 加入星球的球友ltyzzz。去年8月定下了2022年后半年以及整体的目标,之前的所有目标包括进大厂都逐一实现啦!很感谢Guide哥的星球,帮助了我很多!今天给大家分享一下面试准备经验(接近5000字)
我背景是NUS计算机硕士,武汉理工EE本科,春招收获腾讯、字节跳动等后端实习Offer,目前仍在字节跳动实习。我认为面试准备经验也同样适用于大家日常的学习。
在开始分享之前,我想给大家抛出一个我认为的技术面试公式,仅供大家参考,欢迎大家一起讨论:
40% 八股 + 30% 算法题 + 20% 项目经验 + 10% Idea
在接下来的面试准备经验分享中,我会着重介绍项目经验与Idea。
八股和算法题我想市面上资料已经数不胜数了,这里我简略说一下。
如果大家已经对此部分准备足够充分或者已经有着自己的方法论或学习路线,可以直接快进到项目经验 & Idea。
1、八股准备
对于八股准备,我主要以JavaGuide和小林Coding为主,书本(如Redis设计与实现、JVM圣经、Java并发编程的艺术、高性能MySQL)为辅。如果大家时间紧张,可以不看书。此外,我是面试驱动复习,八股文复习与面试相互交叉,是一个相互促进的过程。
第一轮复习我花费了大概1到2周的时间,粗糙浅显地过了一遍MySQL、Redis、JUC、JVM、操作系统、计算机网络、微服务等基础知识,大概是1~2天一个板块,能够简单的应付一下基础面试题,一轮复习完之后正好对应于字节跳动的一轮面试;
第二轮复习我花费了大约20天的时间,着重深入地学习与复习之前各个板块的知识点,并搭 配面经(百度或Google搜索:某某公司后端/前端面经),反复地查漏补缺,遇到陌生的题目或知识点,从书上或网上寻找答案,记录下来,便于之后复习。我大概看了不到50篇面经,梳理了接近150道不熟悉的面试题目。第二轮复习与美团、字节、腾讯、阿里面试相互交叉。这段时间准备的很多八股面试题目,在面试中也有被问到。
大家可以参照我的复习路线与经验,以面试作为驱动力,高效地复习八股文。这一阶段不考验智商,只考验耐心、毅力。因为一轮复习的时候大家可能会很新鲜,接触或复习到很多有意思的知识点,感觉自己有很大的提升,这一阶段可能还比较有趣。但是在二轮复习尤其是穿插了面试之后,大家可能会遇到两个问题:一个是感觉到很慌,认为自己什么都不会,看一个面经慌一次;另一个是感觉到很枯燥但又不敢不看。不管是哪一个问题,都需要静下心来,戒骄戒躁,迅速调整心态,不要乱了阵脚。八股文这里我相信只要能花费20天~1个月的时间,每天拉满,一定能攻克。
2、算法题准备
对于算法题准备,没有捷径除非天赋加持,刷就完了。我当时候是LC刷了500多道题目,还有在其他平台也零散地做了一些题,总体刷了8个月。其实精刷200~300道题就足够用了。大家可以以Leetcode为主,着重做剑指Offer,最好做2~3遍。接下来我根据复习时间长短,提供两种策略。
· 时间长且充裕:每天坚持刷LC每日一题,拓宽思路。抽出一定时间刷LC HOT100与精选200题单,也可以做一些知名的算法博主总结的题单(推荐宫水三叶姐的LC题单)。总之就是多刷多看,加上剑指Offer的题目,半年多时间可以刷够300多道题,足够应付一般算法题。
· 时间短且紧:集中性地刷剑指Offer,比如集中一周时间甚至更短。看题10分钟没思路的话就直接看题解,重复的刷题,反复不断地刻意训练,直到背过为止。若仍有余力,可以再抽空刷刷LC HOT100题单。即便时间如此之短,此时的刷题量也可达到100道题左右。
接下来,我将重点介绍 项目经验 与 "Idea"。
3、 项目经验准备
对于项目经验,我先为大家介绍项目,然后从项目准备中分享我的经验。
我准备了三个项目:智能停车场项目、仿B站项目、RPC项目。这些都是我自己日常学习的项目,不是实习项目。顺便说一下我在此之前只有一段很水的实习。
- 智能停车场项目,简单总结就是一个增删改查项目,技术含量不是很高。前端通过小程序和后台管理系统展现。前端技术栈是Uniapp + Vue,后端技术栈是Springboot、SpringCloud、Mybatis等。只是用了一些简单的微服务技术(Feign、Gateway、Nacos),后台管理系统用了RBAC实现权限管理。但是在包装项目时,我添加了几个亮点:Redis数据缓存、分布式Session、分布式ID、分布式锁技术、与网络摄像头联调开启道闸。
- 仿B站项目,这个项目含金量要高一些。它后端基本框架是我参考Ruoyi Cloud Plus实现的,脚手架自带了很多功能如数据脱敏、幂等、微服务限流、可观测监控、分布式Session单点登录、安全性措施等。光是脚手架自带的功能点就够在面试上聊很多。此外,该项目我着重于Redis相关的系统设 计,如动态Feed流推拉、点赞评论相关的计数系统、数据缓存,运用了很多Redis的数据结构。此外,还设计了站内信、单聊群聊、视频弹幕等功能点。这个项目是我和朋友一起做的,还没有做完。
- RPC项目,这个项目是我参照掘金小册中的RPC做的。此类项目已经很多了,但是在面试过程中,还是会被经常问到这个项目是如何设计的。我一般会详细说出代理层、路由层、注册中心层、异步设计等的设计思路。有的面试官可能还会问压测相关的内容。如果说要将RPC项目写到简历中,一定要清楚核心功能的设计,并且反复地尝试自己练习表达几次。
现在,我来总结一下项目准备中需要注意的点:
- 准备的项目一定要是自己非常熟悉的项目,起码写到简历当中的功能点能够经得起面试官的盘问。一般面试官也不会问的特别复杂,只要准备充分,都是可以回答上来的。不熟悉的功能点最好不要写,不打无准备之仗。
- 准备的项目最好是两个以上,一个可以为Web前后端项目,另一个可以为框架开发、中间件开发。这样一方面可以体现你业务能力okay,熟悉常见的开发场景,当mentor或leader派活的时候,你知道如何下手去做,有自己的实现思路;另一方面可以体现你有一定的钻研自学能力与解决问题能力,能够啃动硬骨头。
此外,我认为大家可以从日常开发中发现需求,自己设计网站从实际出发,去解决痛点,这样的话在面试中更是加分项。因为实习或工作中,就是从实际需求出发,解决一个个业务场景。面试官会更加认可你的项目。这一点也与我之后要说的 "Idea" 有关。