前言
大家好
许久没有时间静下心来打开编辑器写文章了
忙碌暂过,难得一闲时
求学三年,终到离别时
回忆过往,枯燥且多彩
有一点经验,以文字形式分享,希望帮助到大家
可能是这段时间事多且杂,加上很长一段时间没有写博客
正在编辑文字的我,脑子空空,有些许陌生感
行文逻辑如有错误、含有不严谨之处,请多见谅
个人情况:
- 技术语言:C++
- 求职岗位:后台开发
- 竞赛:国家级两项(非ACM)、其它若干
- 奖学金:国家奖学金等
- 科研成果:专利一项,论文一篇
获得offer情况:
- 暑期实习
- 菜鸟期,只拿到3个offer
- 一大厂、一中厂,还有一个不知名小公司
- 秋招
- 刷经验 拼命升级期
- 三家大厂(两sp,一ssp),两中厂,其他若干
- 字节面两次,二面挂两次
- 腾讯面两次,二面挂两次
- 快手面两次,二面挂两次
- ...
失败原因:自己最大的问题在于项目深入这一块,对一些项目实战细节了解不深导致大多挂在这一块,所以希望后面的学弟们在准备时一定要把项目准备好!
注:由于求职时间为2023年暑期实习及秋季招聘,时间已过去几个月,一方面细节回忆不是很细节,另一方面具有时效性,请依据实际情况进行调整
求职历程
一、基础篇
1.1 选择技术路线
主旨:结合自身实际情况,选择适合自己、感兴趣的技术方向。
可选择方向:
- 算法
- 后端
- 前端
- 测开
- ...
自身选择历程:
- 首先排除算法。掂量了自己的水平及能力,学历/论文不够,算法这一条路应该行不通。
- 然后在前后端中选择,二者各有一些开发经验,综合考虑发展前景和个人兴趣,最终选择后端开发,编程语言选择了C++。
- 最后规划学习路线和收集资料。
1.2 收集备战资料
明确路线后,开始在各大网站查找前辈们的求职经验,了解他们的准备过程及所需要使用到的资源。
在此过程中,寻找与自身方向吻合度高的文章并整理到自己的文档中。分析共同点,制定个人学习计划。
由于很久没有接触这一块了,很多细节不是很了解。一些内容仅靠自己的少量记忆进行描述。
1.3 按部就班学习
准备资料可以分为四部分:
- C++基础及进阶知识
- 项目
- 八股文
- 算法题
(1)基础知识
目标:学习C++的基础知识,语法、函数、特性等。
学习路线:
- 先看纸质资料,包括C++课本、C++ Primer、计算机网络、操作系统、数据库、Linux基础、Git基础等。边看边使用笔记软件记录,形成笔记,不会的知识点查阅文章帮助自己理解,形成自己的知识库笔记系统。
- 再看视频资源,主要听的是侯捷老师的课程,大致是:C++面向高级对象开发、STL标准库和范型编程、C++设计模式、C++新标准C++11&14、C++内存管理机制...
- 最后把书和视频中的一些例子自己重新敲了一遍。
花费时间:大概1个月
(2)项目经历
目标:准备简历中的项目经历。
这里自己狠狠地踩坑了,准备暑期实习时就在Git上找了一个项目,尽管啃完源码后自认为还可以,结果在面试时被问懵了,挂了很多次。这是不太好的一种做法,不建议采取。(后面秋招反应过来了)
平时有机会多参加学校内的一些课题项目或者自己提前准备好个人的项目方案。采用网上同质化严重的项目,加上不熟悉具体流程,很容易被刷下去
当然,还是按照自己的实际情况来准备项目经历。
- 首要条件是要有与个人技术路线对齐的项目经历,有总比没有好。
- 更进一步,在可选择条件多时,尽量选择优质的项目写在简历,不用过多,一到两个就可以了。
- 关键在于:
- 项目设计的难点在哪里?
- 遇到的困难是怎么克服的?
- 具体使用了哪些技术细节?关键点在于如何通过一个项目体现自己的技术实力,如何解决地难点部分?
- ...(想象自己是面试官,多反问自己)
花费时间:大概1个月
个人建议:
- 即将找工作的小伙伴可以提前看看各大公司的招聘网站,看看对应岗位的招聘需求。PS:有些岗位会介绍一些非常好的开源项目,这里我们是可以借鉴一下的(后悔当时没有早看到)
- 能完整走完项目流程最好。开发、部署、上线、运营... 相信大部分都会完成一个项目的源码开发,但后续的线上部署实际则忽略了,这一块如果有时间的话也建议做一下,在线上运行时发现问题,思考问题,解决问题。
- 源码要敲,尽量少copy整个文件。
- 向已工作的师兄师姐、同学请教实际工作时遇到问题的解法、常用工具等...
(3)八股文
目标:熟悉基础,流程表达
个人准备方法:
第一步:把需要理解/背诵的知识点誊抄到自己的文档,形成自己的笔记内容。
可以依据类别,把知识点按照问题+回答的方式总结下来,形成自己的知识体系
再打印出纸质材料方便自己学习与背诵。
第二步:理解与记忆,形成"肌肉"记忆。
每天坚持9点左右到达图书馆,开始进行知识点学习与记忆。
- 无他,就理解+记忆反复多次。
- 每天坚持读完/背完一类知识点,一次需要3小时左右,一个上午
- 一轮学习所需时间为1周。
1周后,将问题单独打印成一册,训练时,只看问题描述,然后回答。
- 回答时,必须要说出来,不能是觉得心里知道,而不开口讲述。
- 面试时是需要向面试官解释知识点的细节的,是需要开口说话的,同时也需要讲解得当,将知识点叙述地尽可能地准确,而不是讲完了后,只有你自己懂了,面试官根本没有听懂...
- 训练时,可以使用手机将自己的回答过程录制下来,然后再回看视频,想象自己是一个小白,看看自己的回答是否将此知识点讲解明白。
- 切记,一定要敢说,敢讲,敢练。
- 目标:坚持练习30天,基本实现看到某个知识点后,立马可以熟练地回答,不卡壳、语速适中。
以经常被问到的一个计算机网络知识为例:请你描述下TCP三次握手和四次挥手的过程。
相信一看到这个题目,大家都会觉得很简单。但是一到真实面试时,会很紧张,同时描述也会磕磕绊绊的,尽管描述没什么问题,也有可能会显得不熟练、不稳重、知识深度很低、不自信。
对于这样的高频问题,在训练过程中,可以考虑每天都坚持讲解一遍,要保证回答过程中语速适当、不磕绊,回答流畅且顺利,不漏知识点,自信向面试官展示自己对于这类问题的理解。
面试多次后,自己就会明白,有些题目是在反复出现,这类问题就是平时训练的重点,尽可能的把答案回答全、回答准确,不要遗漏细节内容
(4)算法题
在算法题这部分,短时间内突击效果不理想。
因此选择采取每天尽可能练习,保持题感,坚持刷题,强化肌肉记忆。
刷题阶段可以分为三阶段:
- 基础了解
- 专项学习
- 拼命刷题
基础了解:此阶段是没有刷题经验同学的第一关。
- 刷算法题和实际编程稍微有点区别,部分同学在第一次进入刷题网站时,尽管知道题目的解题思路,但是不熟悉刷题网站的使用、解题模式的转变等...
- 这里需要做的就是花点时间了解下解答算法题的操作、熟悉编程语言对应的一些API(比如C++经常使用到vector、queue等对应的一些api)...
专项学习:重要阶段。
- 这里有两种学习路线,一种是按照类型刷题,另一种是按照题目顺序学习。
- 两种方法各有优劣,按照自己的实际情况选择一种坚持学习就行。
- 以自己为例,采用按照类型 进行专项学习。
- 先统计出一些热门题型,如动态规划、二叉树、链表等
- 再针对某类题型的概念、解题思路、例题、变式题进行线形学习。不局限于大佬的笔记、B站讲解等方式,选择适合自己的就行。
- 关键在于,每一次学习后,要对学习内容按照自己的理解总结并记录下来 ,而不是光是听,而是要将其转化为自己的知识点。
使用笔记软件对每次学习的内容进行总结,并给出自己的思考过程。
总之一句话就是:学习,总结、记录、反思,形成自己的知识笔记,方便后续的复习。
了解各类题型后,就可以通过做题巩固及拓宽自己的知识点。
- 开始时,每道题给自己的时间不要超过20分钟,20分钟后若还不会做,可以放弃了,直接看题解。
- debug也不宜过久,不需要出现几天半个月都专注于一道题上。完全不会的题看评论区各位大佬的题解,有思路但没有正确的同学需对照题解看看自己的错误点在哪里。
- 提交成功且正确的同学可以看看其余的解法,不局限于一种解法。在这个阶段,建议每道题从做题、解题、反思总结这几个阶段时间限制到1小时内,不要太长,每天坚持做1题都是可以的,关键是要坚持。
拼命刷题:通过上一阶段的训练后,可以按照题目序号顺序进行刷题了。
- 刷题号为1-300的题库,每道题时间限制为5分钟,包括题目思考与代码编写。
- 时间一到没有思路或者测试失败立马查看题解,着重于思考大佬的思路为什么可以解出来,而自己却没有这种思路。
- 理解后再按照此思路重新敲一遍,这个过程不要看着答案敲,而要凭借自己的理解重新写一遍代码。
- 如果思路卡壳或者测试case不过,那么再对照检查。重复上述过程,直到可以所有case通过。
- 按照个人经验,一道题大概需要0.5-1h。
形成刷题记录:每次刷题后,可以对自己的刷题过程进行总结。
- 使用xmind进行归纳,统计刷题日期、是否成功解出(YES表示所有测试case通过,NO表示失败)、是否为最优解、🌟表示重点关注题型...
为什么这样做呢?
- 因为有些题过一段时间后就会忘记,手感生疏,所以需要统计刷题时间。
- 更重要的是,分析查找出自己不会的题目,以便后续突击时重点关注此类题。
- 一般来说,同一道题,不同时间连续三次做对后,可以理解为对这道题比较熟悉了,后续刷题过程可以暂时略过。
贴一下自己三年来的刷题记录:
没有天赋,只有多练。
个人面试时,在有思路的情况下,基本可以做到5min左右快速敲完代码并一次提交通过。
当然,没有思路时,再长的时间也没有做出来... 后续也就是理所当然地被挂了...
二、简历篇
这一块自己没有发言权,毕竟自己做的不是很好。
个人的理解大概就是:简洁、突出重点、体现个人价值、岗位匹配度。
简历不要只做一份,每个岗位都投递相同的简历,而是需要依据岗位需求适当修改下内容再投递,不要想着偷懒,一份简历投递所有岗位。
简历上重点:
- 项目经历,描述好项目使用的技术栈、实现了哪些效果、项目难点技术是什么
- 个人技能,不是简单写自己会C++/Python/Java,而是要继续深入表述,具体到细节部分,不要泛泛而谈,写自己最为熟悉的部分
适当调整简历:
- 当投递几份简历投递后,若效果不是很好,则需要思考简历内容是否不当。
- 可以寻找之前求职过的师兄师姐进行指导,看看简历的不足,进行修改调整,再进行投递。
三、笔试篇
笔试形式一般是机考,在一个在线网站上进行,需要对屏幕进行录屏、打开摄像头实时录像,手机需要扫码进入一个小程序,此时不能切出去,多次切出小程序会被判断作弊,可以使用此小程序内的计算器等,部分公司会要求再使用一个手机摄像头拍摄参考者的整个考试过程,也就是拿个支架放在身后。时间大概1-2h,请确保电脑有电源、手机有足够的电量。有些笔试时可以使用自己的草稿纸。
笔试题型有选择、填空、判断、算法题、场景题等,一般以选择+填空+算法为主,当然一些大厂只有算法,记忆中腾讯只有5道算法、字节4道...
选择、填空、判断一般都是考察语言的基础知识,可以先在网站题库中刷一些题(不需要太多,了解下考啥就好了),然后做一些真题。这一块时间不需要准备太久,因为前面背了八股文,笔试的知识点可以轻松点。
重点在于复习笔试中的算法题。在前面介绍刷算法题的过程,更多面向的是面试过程中遇到的算法题。为了对付笔试中的算法题,还需要学习额外的知识点。
笔试中算法题一般还是以ACM模式为主的,格式与力扣中有些出入,需要自己定义输入、输出。当然,核心思路肯定是一样的,只是小部分有些不同。考察的知识点也有些差别。
结合个人经验,准备笔试中的算法题时,首先需要了解基础的ACM模式输入与输出。然后再学背包问题及其变式、树DP问题等,这类问题稍微会更难一点,时间有限的情况下可以把基础的解题模块记住,考试后套模版即可。一般题目难度不大的情况下,模版稍微修改后就可以通过一些cese,难度大的题目实在不会可以放弃。
这一块具体的学习可以去一些大佬搭建的刷题网站中进行刷题,里面还有近期笔试的算法题目及解题方法,通过刷真题的方式学习方法,这样是最方便且高效的,可以一定程度上节约自己的时间,更专注于解题思路的培养。
AC题目的数量越高越好,这肯定是毋庸置疑的。其实自己算法题也是弱项,状态好时可能会多对几道,状态差时一道也做不出来。
个人进面的算法题正确率:
腾讯共5题,AC3道,后两道通过部分case;
美团5题,AC3道,后两道通过部分case;
华为机试总分600,得分500;
字节4题,AC3题;
其余厂记不太清了,反正最后一题基本没对过,剩下的可以完成。
四、面试篇
面试前:
- 干净整洁的个人形象,不要显得太邋遢。
- 安静且有保障的环境。 因为面试一般是在线形式,所以需要提前想好面试地点在哪里,提前准备好,尽量保证安静、光线好、网络通畅、有电源等。大部分同学应该选择在宿舍进行面试,这也是可以的,提前与舍友沟通好就可以了,自己一般选择在图书馆设置的室外座位进行面试,一是有电源、网络好,二是可以锻炼自己的胆量,敢于开口答题(室外座位是自由讨论区,一般情况下人不多,是安静的,而且可以讨论讲话的)
- 放平心态,自信答题。
面试过程中
- 答题过程中语速不能过快,过快面试官可能会听不太清回答内容是什么。语速要正常且回答不停顿,遇到会答的题,更要稳重,尽量答全,不要漏知识点。不会的题一方面可以发散思维,尽量答一点,实在不会,可以告知面试官,部分面试官会有一点提示或者引导。如果没有回答正确,也不要紧张,保持心态,继续答题。
- 手撕算法题时,听清楚面试官的要求,看到题目后不要直接上手写代码,而是先要看清楚要求,不懂的地方要与面试官进行沟通。使用1-2min想一想思路,然后5min左右敲出代码,写完后再简单检查一遍,不要着急直接提交测试。检查完毕后再提交,尽量保证一次就AC。有错也不要着急,稳住心态,仔细查看,一般来说,有思路时写的代码没有AC错误大概率不难,可能是某个地方不小心写错,修改即可。避免多次debug,多次debug还是没有AC会显得解题思路不清晰...
面试后:
- 立刻总结,把面试被问到的一些题目进行归纳总结
- 对没有回答正确或模糊的知识点进行查缺补漏,避免下一次还不会,不断补齐自己的短板。
写在最后
本文仅简单分享个人求职经验,仅供参考
没有对细节内容进行过多描述,比如项目具体需要什么、算法具体有哪些模版...
一方面是因为求职方向不太一样,方法不一定适用于所有岗位,另一方面是因为细节内容工作量有点大,暂时不能详细介绍(其实是忘的差不多了,不会了...)
最后祝愿各位学弟学妹们,都可以找到自己满意的工作,前程似锦!