我背景是NUS计算机硕士,武汉理工EE本科,春招收获腾讯、字节等后端实习Offer,目前仍在字节实习,今天给大家分享一下面试准备经验,我认为也同样适用于大家日常的学习。
在开始分享之前,我想给大家抛出一个我认为的技术面试公式,仅供大家参考,欢迎大家一起讨论:
面试 = 40% 八股 + 30% 算法题 + 20% 项目经验 + 10% Idea
在接下来的面试准备经验分享中,我会着重介绍项目经验与Idea。
八股和算法题我想市面上资料已经数不胜数了,这里我简略说一下。
如果大家已经对此部分准备足够充分或者已经有着自己的方法论或学习路线,可以直接快进到 项目经验 & Idea。
对于八股准备,我是面试驱动复习,八股文复习与面试相互交叉,是一个相互促进的过程。
第一轮复习我花费了大概1到2周的时间,粗糙浅显地过了一遍MySQL、Redis、JUC、JVM、操作系统、计算机网络、微服务等基础知识,大概是1~2天一个板块,能够简单的应付一下基础面试题,一轮复习完之后正好对应于字节跳动的一轮面试。
第二轮复习我花费了大约20天的时间,着重深入地学习与复习之前各个板块的知识点,并搭配面经(百度或Google搜索:某某公司后端/前端面经),反复地查漏补缺,遇到陌生的题目或知识点,从书上或网上寻找答案,记录下来,便于之后复习。我大概看了不到50篇面经,梳理了接近150道不熟悉的面试题目。第二轮复习与美团、字节、腾讯、阿里面试相互交叉。这段时间准备的很多八股面试题目,在面试中也有被问到。
大家可以参照我的复习路线与经验,以面试作为驱动力,高效地复习八股文。这一阶段不考验智商,只考验耐心、毅力。因为一轮复习的时候大家可能会很新鲜,接触或复习到很多有意思的知识点,感觉自己有很大的提升,这一阶段可能还比较有趣。但是在二轮复习尤其是穿插了面试之后,大家可能会遇到两个问题:一个是感觉到很慌,认为自己什么都不会,看一个面经慌一次;另一个是感觉到很枯燥但又不敢不看。不管是哪一个问题,都需要静下心来,戒骄戒躁,迅速调整心态,不要乱了阵脚。八股文这里我相信只要能花费20天~1个月的时间,每天拉满,一定能攻克。
对于算法题准备,没有任何捷径除非天赋加持,刷就完了。我当时候是LC刷了500多道题目,还有在其他平台也零散地做了一些题,总体刷了8个月。其实精刷200~300道题就足够用了。大家可以以Leetcode为主,着重做剑指Offer,最好做2~3遍。接下来我根据复习时间长短,提供两种策略。
时间长且充裕:每天坚持刷LC每日一题,拓宽思路。抽出一定时间刷 LC HOT100 与 精选200 题单,也可以做一些知名的算法博主总结的题单(推荐宫水三叶姐的LC题单)。总之就是多刷多看,加上剑指Offer的题目,半年多时间可以刷够300多道题,足够应付一般算法题。
时间短且紧:集中性地刷 剑指Offer,比如集中一周时间甚至更短。看题10分钟没思路的话就直接看题解,重复的刷题,反复不断地刻意训练,直到背过为止。若仍有余力,可以再抽空刷刷 LC HOT100 题单。即便时间如此之短,此时的刷题量也可达到100道题左右。
接下来,我将重点介绍 项目经验 与 "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" 有关。
对于 "Idea",我认为占比是最少的甚至可能面试官压根不会问你,但是我认为它对我而言是最有用的,实际上也指导了我整个面试过程甚至是学习编程的过程。
我这里的 "Idea"是指 你想要什么 & 你的一些灵光乍现的想法。
"Idea"第一层
"Idea"第一层:我认为需要清晰地认识到自己学习编程、想要进大厂是为了什么,这一点实际上直接或间接地指引着我们的日常学习或工作。我可以先和大家分享一下我在实习之前的 "Idea"(实习后我又有了新的认知与变化,这部分大家有兴趣我之后再做详细的分享)。
我学习编程的目的就是觉得有意思,做网站、开发小程序、学习前后端、部署服务器等都很有挑战性,做出以后也很有成就感,于是一发不可收拾。
想要进大厂一方面是因为大厂给钱确实多,另一方面还是因为想要进公司学到一些真正企业落地的技术,并能够真正做出一些产品或项目,直接点说就是想要干点真东西出来。
此外我也对自己的职业生涯有着较为清晰的规划,我想的是工作中以后端为主,深耕技术,向架构师的方向迈进;日常学习中提升自己的技术广度,以兴趣为导向,涉猎各个领域,尝试各种新东西。
我上述所说的 "Idea",确实对我面试过程中起到了推波助澜的作用。因为当面试官和我聊起日常学习、职业规划时,我整个人的头脑是清晰的,我可以清晰地给他讲述我的想法。
这一点可以给面试官留下很好的印象,毕竟程序员面试并不仅仅是技术的考察,而是综合评估。此外,我还可以给大家举出一个最近组内的case,我一个同事面试其他后端实习生,但是当问到那位同学有没有投其他岗位时,他犹豫不定。
他说自己不确定,之后会尝试算法岗。面试官就认为这位同学没有很清晰的规划,即使招进来,他可能心思也不会完全地投入到后端工作中。(可能还有其他多方面因素导致面试挂掉)
"Idea"第二层
"Idea"第二层:是否有一些奇思妙想、是否正在尝试做自己的开源项目。这一点我在腾讯面试的过程中深有体会,我先和大家分享一下这段面试经历。
三轮面试几乎没有问什么八股文,第三轮面试在拷打项目,另外两轮都是业务场景设计题以及聊日常学习、聊开源。尤其是第一轮面试给我的印象最深刻,面试官估计很多人都听说过,是一位PHP的开源大佬。
面试中他一直在给我抛出与实际业务相贴近的场景设计题,开放题目,没有固定答案,我觉得是在考察我的思维广度和技术广度。这些问题我也都给出了自己的思考。此外,我们也聊到了开源项目,他向我分享了他做开源的初衷与过程。
而我也一直想要去做自己的开源项目,我和他说了我的想法。这一场面试也让我学习到了很多在八股文中无法学习到的东西。第二轮面试中,面试官最后问了我最近在学习什么,我很自然地说了关于GPT的一些话题以及我想要做一个AIGC的简历项目。本来面试已经准备结束了,但是面试官可能对这个话题比较感兴趣,又和我聊了不到10分钟。
从我这两场面试中,我感觉到有着自己的想法很重要,是否每天有在探索并思考一些新东西,并去实际地做出来一些有意思的项目或产品。这一点是我从学编程以来的兴趣所在,兴趣推动着我不断地去探索一些新东西,经常性地产出自己的"Idea"。
尽管有一些似乎和后端关联性不大,但是它其实最终在一定程度上帮我拿到了Offer。而且"Idea"也可以促使自己即使在春招秋招结束后,还能够有自驱力并且快乐开心地去学习编程,这一点也是我认为最重要的。
总结一下"Idea"就是:清晰认知自我,不断尝试探索。
当然如果你最近有面试需求,想要看看最新的面试八股文整理,可以看看我专门整理的这份《Java进阶学习+面试宝典》分享给大家,内容涵盖:计算机基础、Java、JVM、spring、算法、微服务、分布式、大厂面经、技术脑图等等...共1700+页 质量非常高!!!
不管最近要不要去面试,建议大家都保存一份!!学完之后不论是 厂内晋升 还是 跳槽涨薪 都不在话下!
内容如下:
大厂面试题真题解析(38页)
JVM(183页)
多线程(221页)
Mysql(216页)
Spring(338页)
Spring Boot(41页)
经典面试题(35页)
Spring Cloud(50页)
Dubbo(55页)
Mybtis+Redis(27页)
Linux+网络(66页)
MQ+Kafka+Zookeeper(40页)
Netty(21页)
大数据+hadoop(31页)
算法(38页)
设计模式+项目+高并发(41页)
注:篇幅有限,资料已整理成文档,文末获取!
一、算法(大厂必备)2023版
(含:红黑树,B+树,贪心算法,哈希分治法,七大查找算法,动态规划,一致性算法,数据结构等...)
二、设计模式(工欲善其事必先利其器)2023版
(含:单例模式,工厂模式,抽象工厂模式,建造者模式,原型模式,适配器模式,装饰器模式,代理模式等23种设计模式...)
三、Netty + MQ + kafka(底层原理+面试题)2023版
(含:Netty常用场景,高性能设计,架构设计,经典面试题等...)
四、zookeeper + Dubbo(技术干货+面试题)2023版
(含:zookeeper集群,应用场景,分布式锁,Dubbo核心功能,集群配置,负载均衡,常见面试题等...)
五、Mybtis + Redis (底层原理+面试题)2023版
(含:mybtis缓存,运用原理,分页,Redis事务,主从架构,缓存,穿透,穿击,降级面试题等...)
六、Http协议 + Linux (底层原理+面试题)2023版
(含:TCP/IP协议详细笔记,网络层架构,三四次握手,Linux概述,磁盘,目录,文件,安全,经典面试题等...)
七、Mysql (底层原理 + 面试题)2023版
(含:数据库基础,数据类型,引擎,索引,事务,锁,视图,sql语句,优化,mysql锁,面试题等...)
八、Spring +SpringMVC +SpringBoot(底层原理 + 技术干货)
(含:spring原理,周期,ioc原理,MVC事务,AOP原理,Boot配置,安全,监视器,面试题等...)
九、经典面试题 + SpringCloud(大厂常见面试题)2023版
(含:面试必考21问,SpringCloud熔断,cap原理,设计目标优缺点,版本关系等...)
十、Java基础 + JVM(技术干货+底层原理)2023版
(含:Java基础,异常,NIO,HashMap,Tomcat,JVM堆栈,内存模型,调优,GC,老年代,新生代,垃圾回收,面试题等...)
十一、多线程 (底层原理 + 技术干货)2023版
(含:多线程基本概念,线程安全,线程出,volatile,ThreadLocal,使用场景,并发量,阻塞列队,面试题等...)
十二、实战项目(Github爆火)2023版
该项目是一款标准且已上线的“网约车”应用。符合我国交通部对网约车监管的技术要求。通过了交通部对网约车线上和线下能力认定。项目原型曾在杭州上线运行。
项目中核心功能包括:账户系统,订单系统,支付系统,地图引擎,派单引擎,消息系统等 网约车核心解决方案。
项目中完全采用微服务架构设计,应用了成熟的接口安全设计方案,采用分布式锁保证了分布式环境中的数据同步,用分布式事务解决了分布式环境中的数据一致性等。
前置技能:Git,Maven,Spring Boot,Spring Cloud,Redis,MySql ,RabbitMQ,ActiveMQ等。
项目架构图:
注:篇幅有限,资料已整理成文档,点击下方小卡片获取!