经验专栏目录
1. 前言
想来今天已经入职字节 1 个多个月啦,身边也有很多迷茫的同学,经常询问我如何复习八股、准备面试。今天这篇文章主要给大家提供一个思路,提供一个我总结的面试公式,希望能提供一些新的维度供大家参考~
大家好,我是ltyzzz。这可能是我第一次和大家做自我介绍~之前一直在忙着玩 GPT
项目。
我背景是NUS计算机硕士,武汉理工EE本科,春招收获腾讯、字节等后端实习Offer,目前仍在字节实习,今天给大家分享一下面试准备经验(接近5000字),我认为也同样适用于大家日常的学习。现在我实习刚满一个月,之后我会陆续给大家分享实习的工作经验~
在开始分享之前,我想给大家抛出一个我认为的技术面试公式,仅供大家参考,欢迎大家一起讨论:
面试 = 40% 八股 + 30% 算法题 + 20% 项目经验 + 10% Idea
在接下来的面试准备经验分享中,我会着重介绍项目经验与Idea。
2. 八股&算法题
八股和算法题我想市面上资料已经数不胜数了,这里我简略说一下。
如果大家已经对此部分准备足够充分或者已经有着自己的方法论或学习路线,可以直接快进到 项目经验 & Idea。
2.1 八股准备
对于八股准备,我主要以 Java Guide 和 小林Coding 为主,书本(如Redis设计与实现、JVM圣经、Java并发编程的艺术、高性能MySQL)为辅。如果大家时间紧张,可以不看书。此外,我是面试驱动复习,八股文复习与面试相互交叉,是一个相互促进的过程。
- 第一轮复习我花费了大概1到2周的时间,粗糙浅显地过了一遍MySQL、Redis、JUC、JVM、操作系统、计算机网络、微服务等基础知识,大概是1~2天一个板块,能够简单的应付一下基础面试题,一轮复习完之后正好对应于字节跳动的一轮面试。
- 第二轮复习我花费了大约20天的时间,着重深入地学习与复习之前各个板块的知识点,并搭配面经(百度或Google搜索:某某公司后端/前端面经),反复地查漏补缺,遇到陌生的题目或知识点,从书上或网上寻找答案,记录下来,便于之后复习。我大概看了不到50篇面经,梳理了接近150道不熟悉的面试题目,大家有需要的话,之后也可以在星球中分享给大家。第二轮复习与美团、字节、腾讯、阿里面试相互交叉。这段时间准备的很多八股面试题目,在面试中也有被问到。
大家可以参照我的复习路线与经验,以面试作为驱动力,高效地复习八股文。这一阶段不考验智商,只考验耐心、毅力。因为一轮复习的时候大家可能会很新鲜,接触或复习到很多有意思的知识点,感觉自己有很大的提升,这一阶段可能还比较有趣。但是在二轮复习尤其是穿插了面试之后,大家可能会遇到两个问题:一个是感觉到很慌,认为自己什么都不会,看一个面经慌一次;另一个是感觉到很枯燥但又不敢不看。不管是哪一个问题,都需要静下心来,戒骄戒躁,迅速调整心态,不要乱了阵脚。八股文这里我相信只要能花费20天~1个月的时间,每天拉满,一定能攻克。
2.2 算法题准备
对于算法题准备,没有任何捷径除非天赋加持,刷就完了。我当时候是LC刷了500多道题目,还有在其他平台也零散地做了一些题,总体刷了8个月。其实精刷200~300道题就足够用了。大家可以以Leetcode为主,着重做剑指Offer,最好做2~3遍。接下来我根据复习时间长短,提供两种策略。
- 时间长且充裕:每天坚持刷LC每日一题,拓宽思路。抽出一定时间刷 LC HOT100 与 精选200 题单,也可以做一些知名的算法博主总结的题单(推荐宫水三叶姐的LC题单)。总之就是多刷多看,加上剑指Offer的题目,半年多时间可以刷够300多道题,足够应付一般算法题。
- 时间短且紧:集中性地刷 剑指Offer,比如集中一周时间甚至更短。看题10分钟没思路的话就直接看题解,重复的刷题,反复不断地刻意训练,直到背过为止。若仍有余力,可以再抽空刷刷 LC HOT100 题单。即便时间如此之短,此时的刷题量也可达到100道题左右。
3. 项目经验
接下来,我将重点介绍 项目经验 与 "Idea"。
对于项目经验,我先为大家介绍项目,然后从项目准备中分享我的经验。
我准备了三个项目:智能停车场项目、仿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" 有关。
4. “Idea”
对于 "Idea",我认为占比是最少的甚至可能面试官压根不会问你,但是我认为它对我而言是最有用的,实际上也指导了我整个面试过程甚至是学习编程的过程。我这里的 "Idea"是指 你想要什么 & 你的一些灵光乍现的想法。
-
"Idea"第一层:我认为需要清晰地认识到自己学习编程、想要进大厂是为了什么,这一点实际上直接或间接地指引着我们的日常学习或工作。我可以先和大家分享一下我在实习之前的 "Idea"(实习后我又有了新的认知与变化,这部分大家有兴趣我之后再做详细的分享)。
- 我学习编程的目的就是觉得有意思,做网站、开发小程序、学习前后端、部署服务器等都很有挑战性,做出以后也很有成就感,于是一发不可收拾。想要进大厂一方面是因为大厂给钱确实多,另一方面还是因为想要进公司学到一些真正企业落地的技术,并能够真正做出一些产品或项目,直接点说就是想要干点真东西出来。此外我也对自己的职业生涯有着较为清晰的规划,我想的是工作中以后端为主,深耕技术,向架构师的方向迈进;日常学习中提升自己的技术广度,以兴趣为导向,涉猎各个领域,尝试各种新东西。
- 我上述所说的 "Idea",确实对我面试过程中起到了推波助澜的作用。因为当面试官和我聊起日常学习、职业规划时,我整个人的头脑是清晰的,我可以清晰地给他讲述我的想法。这一点可以给面试官留下很好的印象,毕竟程序员面试并不仅仅是技术的考察,而是综合评估。此外,我还可以给大家举出一个最近组内的case,我一个同事面试其他后端实习生,但是当问到那位同学有没有投其他岗位时,他犹豫不定。他说自己不确定,之后会尝试算法岗。面试官就认为这位同学没有很清晰的规划,即使招进来,他可能心思也不会完全地投入到后端工作中。(可能还有其他多方面因素导致面试挂掉)
-
"Idea"第二层:是否有一些奇思妙想、是否正在尝试做自己的开源项目。这一点我在腾讯面试的过程中深有体会,我先和大家分享一下这段面试经历。
- 三轮面试几乎没有问什么八股文,第三轮面试在拷打项目,另外两轮都是业务场景设计题以及聊日常学习、聊开源。尤其是第一轮面试给我的印象最深刻,面试官估计很多人都听说过,是一位PHP的开源大佬。面试中他一直在给我抛出与实际业务相贴近的场景设计题,开放题目,没有固定答案,我觉得是在考察我的思维广度和技术广度。这些问题我也都给出了自己的思考。此外,我们也聊到了开源项目,他向我分享了他做开源的初衷与过程。而我也一直想要去做自己的开源项目,我和他说了我的想法。这一场面试也让我学习到了很多在八股文中无法学习到的东西。第二轮面试中,面试官最后问了我最近在学习什么,我很自然地说了关于GPT的一些话题以及我想要做一个AIGC的简历项目。本来面试已经准备结束了,但是面试官可能对这个话题比较感兴趣,又和我聊了不到10分钟。
- 从我这两场面试中,我感觉到有着自己的想法很重要,是否每天有在探索并思考一些新东西,并去实际地做出来一些有意思的项目或产品。这一点是我从学编程以来的兴趣所在,兴趣推动着我不断地去探索一些新东西,经常性地产出自己的"Idea"。尽管有一些似乎和后端关联性不大,但是它其实最终在一定程度上帮我拿到了Offer。而且"Idea"也可以促使自己即使在春招秋招结束后,还能够有自驱力并且快乐开心地去学习编程,这一点也是我认为最重要的。
总结一下"Idea"就是:清晰认知自我,不断尝试探索。
5. 后记
以上这就是我的面试经验分享啦~
这也是我第一次在自己的博客对外分享我的面试经验,希望能给大家带来帮助!
此外,如果大家感兴趣,我可以之后分享一下我近期实习工作的经验思考,我相信一定能够给大家带来新的启发~
后续我会继续分享一些学习心得、技术干货和实战项目,帮助大家在 金九银十
斩获各路大厂 Offer!