26届如何赢在起跑线?保姆级面试通关攻略,建议收藏!
个人背景
前言
这块内容太多了,所以单独拆了一篇出来,承接上文,记得收藏:《26届如何领先起跑线?我的25届找实习经验分享,跟上节奏!》
首先是要在牛客、就业群里尽可能去收集面试信息,很多人会把自己的 面经 公开出来,一定要在面试前去看,这些内容有时候会帮大忙的。
其次是 准备手稿。我是每次答辩、演讲、面试都会准备手稿的,因为机会是留给有准备的人的。
自我介绍
自我介绍的部分大概准备个一两分钟就行,内容这里我从网上找了一段给大家做参考:
面试官您好,我叫███,来自███,现为███计算机学院硕士二年级学生,主修专业是计算机技术;读研以来,我一共参与了三个项目的研发,那我就按照时间的先后来说吧。
在2018年6月到2019年5月我参与了第一个项目:███工程管理系统,该软件主要是为了███厂的信息化管理而开发的一套系统,分为微信公众号开发和web端开发。该项目前端采用Vue框架,后台部分使用的是Java语言,基于Spring+ SpringMvc+Mybatis框架进行开发的,其中运用Activity工作流框架对工作流程的进行管理。数据库运用mysql来支持。版本控制使用的gitlab。
在2019年5月至2019年8月参与第二个项目███软件1.0版本的开发,因项目需要在此期间于中国███实验室边实习边开发。该项目使用的是C#语言,运用WPF框架以及Unity3D引擎,开发一套███三维场景仿真软件。
在2019年9月至今参与第三个项目的███软件2.0版本的开发。因为实验室一直是以███为主的,由于实验室之前的███软件难以维护,二次开发很困难,所以在实习结束后在老师和师兄师弟们的一起努力下运用所学知识以及经验对以前开发的███软件进行重新开发。该项使用的是C#语言,运用WPF框架以及Unity3D引擎。这两个项目版本控制都使用的是SVN。但是从技术到性能以及开发效率都有了很大的提升。
以上就是我研究生期间所参与的项目。对于学生工作方面我从本科到目前做了5年的学生工作。(由于在本科期间着重于学生工作,分别担任了计算机学院大一班级班主任,心理健康教育中心学生副主席、学生会综合实践部部长以及辩论队队长等职务。因此,在多重压力下,我学会了如何去合理安排时间,让我的学习、工作和业余爱好都不耽误。最后,感谢贵公司能给我这次面试的机会,谢谢。
这篇内容可以说是相当充实了,值得借鉴。
此外千万要注意,企业要找的是一个 能干活的人,不是找一个 好学生,有些同学在自我介绍里一直介绍说自己学了哪些课程,得了多少分。我觉得如果你是本科生尚能理解,如果你是一个研究生,那这就是完全不适合的内容了,因为企业的关注点往往不在这里。
项目概述
项目这一块是重中之重。
其实面试官要的不是你做的项目有多么贴合互联网,用的多么高级的技术。大公司往往都是看你的 综合能力,看你 对待事情的认真程度 以及 学习能力。
如果你的项目和互联网关联度较小,或者说你没有做过项目,那我建议在这一环节中可以多将讲自己解决问题的过程,无论是项目还是自己的科研内容,只要能体现自己的思考能力和解决问题的能力就行。
如果已经有项目经历,那么我的做法是:
-
把整个项目的流程捋清楚:怎么登录的、怎么处理某个业务的、某个功能是哪个模块在起作用,这里可以让 chatGPT 帮忙捋一捋。
-
让 chatGPT 把项目的核心表结构设计出来:每个表是怎么使用的,有什么核心字段,表之间是什么关系需要弄清楚。
-
弄明白项目的架构:后端是怎么分的模块,为什么这样分。
-
弄明白项目的部署流程:前端、后端、数据库各是怎么部署的,环境又是怎么配置的。这块是证明你真的有做过项目,而不是纸上谈兵。
-
找到项目的亮点,说清楚为什么要这样做,其必要性在哪:这个环节很多人有欠缺,只说自己用了哪些高大上的组件,但问其为什么要用,往往一问三不知,这会让人怀疑自己没有深入思考过。
比如为什么要用 Docker,用虚拟机不行吗?为什么要用 Redis,直接用 MySQL 不可以吗?你说你用了 ThreadLocal,那你知道 ThreadLocal 存在的潜在风险吗?
这些内容既是亮点,也可以凸显自己解决问题的思路,让面试官看到你的思考过程。这里是我介绍项目亮点的部分内容:
一开始我们想到了利用虚拟机,为代码执行提供安全的隔离环境,同时维持每个项目的独立配置需求。但是虚拟机的启动速度非常慢,并且虚拟机的资源消耗实在是太高,一台机器上启动不了几台虚拟机就会非常卡顿。
有什么能代替虚拟机的功能但又非常轻量呢?我们想到了当时比较流行的 Docker,Docker 在资源效率、启动速度、可移植性上相比虚拟机有明显优势。我们完全可以让用户的工程代码执行在不同的 Docker 容器中,这样就可以得到一个代码运行的隔离沙箱,实现和虚拟机一样的安全性。
我并没有上来就说 docker 多么多么好,我肯定知道 docker 比虚拟机好啊,但我这里就要故意先说虚拟机,假装自己有一个思考的过程在里面,这样更能强化项目的真实性。
这样来准备项目概述的部分,绝对没问题。
-
在项目中穿插八股的内容,方便引导面试官后面问你具体八股的内容。这里是我故意引导的部分内容:
那多文件的交互怎么办?如何将用户指令和特定进程绑定起来呢?当时我正在学习一些线程池的知识,因为要使用多线程来启动和管理外部进程。那么,既然线程可以有线程池,那我们能不能借鉴线程池的思想,在后端也维护一个进程池呢,不同之处在于,线程池管理的是线程,而我们要管理的是进程。
于是,我们利用线程安全的 ConcurrentHashMap 写了一个接口来统一管理进程,每次新建一个进程的时候,就在进程池中存储这个进程,同时给前端返回进程的句柄,这样前端在进行信息传输的时候,通过这个进程句柄就可以实现和对应的进程进行交互,而在程序终止的时候,后端就会销毁进程,并从进程池中移除该进程。
这里我故意提到线程池和 ConcurrentHashMap,目的就是诱导面试官来问我这两个点……
-
如果你准备了两个项目,注意两个项目不要 同质化,最好要有区分度,不要这里写了 Redis 做缓存,那边又写 Redis 做缓存,这相当无聊,显得你好像江郎才尽了,没什么可写的,搁这水字数。要知道,简历是寸土寸金的地方,也是你唯一的入场券,如果你不认真对待,那么必然不会有好的结果。
同时注意,两个项目在某些方面最好能够 对等,如果你一个项目写的特别牛逼,特别新颖,但另一个项目写的是瑞吉外卖这种烂大街的项目,那么面试官基本上不会有兴趣问这个外卖项目的事,只会逮着你另一个项目问,所以针对每个项目都要做好万全的准备。
-
上面说的都是 代码实现 方面的一些准备,其实还有另一个方向是可以准备的,那就是 项目管理 的。
因为大部分项目其实不是一个人就能完成的,所以就涉及到团队合作,技术选型、需求对接、项目验收方面的事。这些部分如果作为开发人员,你能说个七七八八,是很让面试官刮目相看的。
比如这些问题:
- 甲方的需求不断变动,怎么节省人力资源,避免无用的工作?
- 开发人员中间从研二换为了研一的,如何快速交接工作,避免进度的延后?
- 团队中出现推卸责任,甩锅现象,你是怎么处理的?
这些内容和代码无关,但和业务、团队有关。你可以说自己在项目中担任小组长的角色,所以接触到了这些东西,讲讲自己是怎么解决的,有什么心得体会。
我记得面美团的时候,面试官本来心不在焉,对我完全没兴趣。当我开始说这块的时候,他直接眼前一亮,表示非常有同感,态度也好了很多。
当然这块也是最难准备的,因为没有项目经验的话,很容易说的时候露怯。
还要记住一句话:介绍项目的时候,核心还是推销自己,不要推销项目!
有些同学跟卖保险一样,一个劲说项目有多厉害,但其实项目的描述只需要一两句话。面试官的经验丰富的很,完全能明白我们的项目是什么性质。更多的时候我们要 着重介绍自己在项目开发过程发挥的作用,尽力多夸夸自己,这才是核心。
项目选择
就后端开发来说,100 份简历里面得有 80 份,项目是外卖(点评)和论坛(秒杀和商城倒是少了,估计大伙儿都知道避雷)
前年流行秒杀,去年流行 RPC,今年流行论坛,这确实是没办法。一来学校里面尤其是本科生根本接触不到好项目,老师教来教去就是 CRUD,二来不是每个人都有实习经历,而随着求职门槛的不断提高,大伙儿不得不自己去找项目做,但网络上能找到文档很全的优质项目确实少至又少,大部分同学都是从 B 站搜罗视频然后照着做。
我建议可以先用这些项目找个实习,然后正式校招的时候手里有个实习项目就比较稳,如果简历上一个秒杀一个论坛或者一个外卖一个商城,那确实有点难顶了。
我个人是在简历上写了两个项目:
- 一个偏业务的项目
- 一个轮子类项目
偏业务的项目是为了说明自己是参与过真实开发过程的,给面试官传递的信号是:我一来就可以做事。此外在项目中夹带了一些微服务、分布式的加分内容。
轮子类项目,相比于偏业务的项目在大厂面试时是更受欢迎的,有些面试官对轮子都是情有独钟,但对黑马点评或者谷粒商城这种会比较抵触,因为太烂大街了。
而且做一个小而美的轮子类项目还能对计算机基础有更深的理解,也能更容易引导到八股问答的环节。
今年的找实习过程中,轮子类项目帮了我极大的忙,是我后来才意识到的。
但轮子类项目往往有一些难度和门槛,因此有一定的上手难度,付出和收益需要自己把握。
八股问答
我建议是先按照上文来准备一份简历,再按照简历来针对性准备八股,为什么呢?
因为 八股是不可能背完的。任何一门知识的精通都需要好几年,所以八股的内容自然是非常多的,我们不可能面面俱到,一定要做好取舍。有的放矢会让你事半功倍,所以我才说先准备简历,再准备八股。
八股我选择了博主"沉默王二"的《面渣逆袭手册》,其里面的八股问题都非常典型,命中率很高,这些问题如果都能回答上,已经可以吊打 70% 以上的人了。
缺点是面渣系列的部分问题的 回答 可能不是最好的,以及部分有关联、有递进的问题,其序号没有挨在一起,看的时候自己要注意跳着看,有助于理解。
Java 基础的部分我会对照着 JavaGuide 的博客来看。
MySQL和 Redis 的部分,如果理解不太清楚,可以看《小林coding》来加深理解,感觉挺不错。
强调一下,八股也要有取舍,不是所有的八股都要看。
校招往往更看重的是学生的基础扎不扎实,如果基础很好,你在简历上写微服务、分布式、消息队列、Elasticsearch,这都是锦上添花,加分没得说。
但是!如果你的基础很薄弱,和我一样靠背八股临时抱佛脚,那就不要想这些东西了!把 Java 后端四大件整好了,比什么都强!虽然说有可能因为你简历里面没有这些内容,导致你去不了某些岗位,那也只能说明这些岗位本来你就没有机会,你写了答不上来一样会被筛掉。
Java 后端四大件:
- Java基础(包含 JVM、JUC)
- MySQL
- Redis
- Spring 系列
如果面试官非要问你简历上没有的内容,知道多少回答多少,不知道就说不知道,这很正常。可以跟一句表示自己会在面试结束后去查找资料弥补知识的欠缺。
不少面试官更喜欢基础扎实的实习生,因为基础够扎实,上手框架就快得很。
这里补充一下 为什么我觉得《面渣逆袭手册》好,因为他很”精华“,不多不少刚刚好。如果你觉得它内容不够,那比他更够的,都像百科全书一样几百页,你能吸收得过来你就不是”面渣“了。如果你觉得它太多,那你就结合自己简历,摘录出手册里对应的内容,保证可以应付大部分面试情况。
以下是我针对自己简历整理的面经目录:
这份主要是在精不在多,要确保自己半小时内能过一遍。而且其内容我是以能轻松读出来为主,所以做了很多 口语化设计,不给自己任何记忆的负担。
内容我是自己结合各大面经整理成 自己的语言,但问题都来自面渣手册。
整理我大概花了一天的时候,但内容慢慢打磨,几乎可以做到 直接照着读出来,面试官也不会认为我在背八股。
包括下面这段,由于我的英语是短板,所以我不放任何英语单词进去(如果你英语也不好,你也可以像我这样做,没有人会在意你的英语发言有多标准),面试官问我参数,我直接说中文,一样不会出问题。
在回答面试官问题时,要记住一个要点:关键词。
举个例子,当我问你 MVCC 的时候,你哪怕整个过程都可能不太清楚,但你一定要说出关键词:隐式字段、回滚日志、版本链和 Read View(一致性视图),面试官听到这个就已经满意了,并不会太在乎你其余的话。
相反,如果你说半天,内容不能算错,但是就是说不出关键词,会让人感觉很不舒服,好像你的学习都流于表面了,没能抓住关键点。
手撕代码
一方面如上文所说,多刷刷牛客、小红书上的面经,看看同一场面试的人被问到了哪些问题,好提前准备。
另一方面,从现在开始,刷力扣 hot100,刷代码随想录。
时间够多,那就多刷几遍代码随想录,绝对没问题。
手撕代码比笔试要简单太多了,而且如果面试官对你前面的表现足够满意,就不会在这一环节给你出太难的题。
面试会考到的题除了算法,还会有一些简单的 SQL 题和多线程的题,后面两个也需要稍微做些准备,但往往都比较基础。
最后
每次面试都要尽可能的复盘(可以面试时录个音),找到自己的不足并修正。就像打副本一样,你面得越多,你就越有经验越从容。
甚至面到后面,你都可以引导面试官了,你也能大概猜到他接下来要问什么,以及他想听到什么答案。
我还记得我当时某一场面试,锁升级 我没答上来,第二次面别家的时候,我主动在八股环节提到锁升级,面试官赞赏地说我基础很扎实,但其实我也只是临时背了些相关内容。
记住,如果你成功拿到了一个 offer,不要骄傲,很有可能只是因为 运气好,仍然不要放松自己,有时候后来的可能更好。
我们需要做的,就是在每一场面试的时候都全力以赴,为几个月后的秋招做好热身准备。
#听劝,我这个简历该怎么改?##牛客创作赏金赛##你投了多少份简历了?##简历中的项目经历要怎么写##我的失利项目复盘#从小,似乎没有人教过我们怎么去生活、去认知世界。 我们被要求好好读书,而直到毕业那天,才猛的被推到现实面前,独自面对社会。 然而,许多社会常识我们并不具备:学校以为家庭会教,家庭又以为学校会教…… 结果呢,当我们碰壁时,往往被一句“大学生连这都不知道?”轻轻带过。 常言“出社会自然会懂;吃过亏就明白了”,可经验值得传承,所以,我决心撰写此专栏。 在这里,我希望大家能有所收获,一起并肩同行。