01

个人背景

大家好,我是Rotepad,来自于一所普遍的双非学校,只有本科学历,计算机科班出身(期间从通信工程转计算机科学)。在大三下学期的春招期间拿到腾讯的研发实习offer,大四秋招顺势拿下了字节跳动、阿里支付宝、小米、哔哩哔哩、携程、京东、招商银行、微保、58同城、迅雷10家offer,其中字节为SP、哔哩哔哩是本科档的SSP等,最后选择了字节跳动小程序基础架构组offer。应学长邀请在此向大家分享一下面试经验,全篇均为个人经历和观点,仅供大家参考。

02

方向选择

说起计算机,我与它的渊源也还算深厚,高中因为数学成绩较为突出,便被选入了高中的信息学奥赛班(算个oier啦~)。只可惜高中不懂得珍惜,停掉文化课跑去搞竞赛(其实大部分时间都在机房摸鱼,打游戏)。最后高考翻车,自主招生没经验,面试差了两分降一本线录取。。。幸运的是本科录到了计算机学院下的通信工程专业,后又转到同院的计算机专业,算是再续前缘了。

大学期间搞过ACM,后又觉得从高中打到大学没什么兴趣了,也去参加过CTF的比赛,之后找到院里的老师跟他的研究生学长一起参加大数据的比赛,期间打过天池,大数据挑战赛,CCF,厦门银行等,成绩只能算个业余选手水平,不过对大数据的确是萌发了浓厚的兴趣。

因此大三下学期找实习期间最先考虑的是大数据方向的岗位,也买了很多网课学习,结果发现打比赛技术栈用的是Python+学习模型等,工作上大多是Java+大数据平台等(个人的理解),并且学历基本上都是硕士及以上,直接让我焦虑了很长一段时间,要不要去考个研。纠结了很久之后,还是回归了老本行,找C++后端开发方向(主要还是本科生没得选呀~)。

个人看来,岗位方向的选择肯定是选择自己感兴趣的方向更好,但也得结合实际情况。比如算法卷不进去可以先找个开发,开发中Java又比C++要卷。对技术感兴趣可以尝试架构组,相对而言,业务组对技术提升确实不大。

03

简历制作

项目是简历中最为关键的一个部分,简历上所写的项目一定要与自己找的岗位相关度高(因此自己做的多个大数据项目最后只写了一个给面试官暗示我还会写Python)。网络服务器,电商秒杀系统等烂大街的项目虽然确实很大众,但是只要理解的深入,有一定的优化依然是一个不错的加分项,毕竟学业期间基本上都是站在巨人的肩膀上,做一个高大上的项目确实不容易。如果有实习,实习期间的项目应该重点声明,并且突出所做的事情解决了什么问题,对整个项目的提升。如果实习期间做的事情不多,可以参照一下其他同事的需求加上去使整个实习期饱满起来,提升面试官的评价,当然前提是要积极去问,深刻搞懂具体操作。并且有实习的话,秋招面试大部分都是问实习期干了什么,写的东西多才能跟面试官有得聊,特别是对于刷题准备不充分的同学来说,讨论项目可以占用很多时间,一般一场面试都是一个小时左右,剩下时间不够,做的算法题难度也会大大降低。并且前面能聊得久,问的基本都会,面试官会认为你的基本开发水平是够的,算法题也就不会刻意刁难了。

另外,简历的投递是越早越好,互联网越来越卷了,现在的提前批就算是正式批,而且要求相对较低(hc多,一般不会有横向对比),效率较高。如果提前批还在实习的小伙伴也别着急,尽快跟leader了解组内转正的hc数量,hc少尽早跑路准备秋招,能够稳转正也建议回去秋招,all in在转正上基本就是大白菜了。

04

面试技巧

在自我介绍时,对项目的描述可以稍微简单点,但要做到言简意赅,对其中的较难的部分知识点应该优先重点声明。之后按照套路,面试官应该会要你重新详细完整的介绍一遍项目,或者直接问你说的知识点。因此对于项目中的知识点梳理至关重要,这其实也是为面试官挖个坑,引着他向你所熟悉的知识上问,说的太过笼统反倒无法预测他会问什么(因此我面试的时候几场下来问的项目知识点都差不多)。项目知识点的梳理与把握,可以让面试官了解你的知识深度与广度,把握的好正如上面所说,可以大大缩短写算法题的时间,算法题难度也会降低,甚至有可能时间聊满了就不写题了。如果是实习期间的项目还需要着重说明你做的这部分需求对整个项目的贡献,所做的必要性,可以进一步增加面试官对你的认可。

05

学习路线

语言基础

C/C++的学习,网上学习资料很多,如果要快速成长,个人比较推荐2017黑马程序员C++的视频,并且配上一本经典的C++书籍作为参考,比如《C++ Primer》 《Effective C++》 《STL源码剖析》等;如果时间比较多,可以考虑学习侯捷的C++视频,以及C++教程从0到1。在观看视频和书籍前建议先去牛客网看大概20篇左右的面经,把握面试常见套路和热门题型。同时,要进一步提升学习速度可以去背牛客面试宝典,每个技术栈的都有,感觉面试八股文基本上都可以在这个上面找到,对于无法理解的知识点,再去看2017黑马程序员C++视频,这个方法可以在短时间内提升你的面试八股文水平,对于找中小厂来说还是足够了。

其他的语言方法基本类似,先找好相关的视频和书籍,再看20篇左右的面经,把握常见题型与套路,再背相应的牛客面试宝典(其实就是面经+答案做的一个合集,都帮你分类好了,虽然还是有点点乱~),对于其中无法理解的知识点就去看视频或者书籍搞懂,这样你就能具备一个知道基本热门八股文的能力,要想再继续提升,就去看面经从而发现一些更深、更偏的知识点,当然这只能算是速成的一种方法,根基还是不稳。早点准备时间充足的情况下,建议还是全面的看书和视频,完善自己的知识网。

计算机网络

计网的学习不需要采用课程学习,或者考研时的学习方法。实际开发与面试中更注重于TCP、UDP、Socket、HTTP、HTTPS、传输安全稳定的理论知识与实际应用。计网部分同样也是推荐先看一些面经把握高频题,再看相关的一些知识点(网上有很多总结好的),采用这样的方法学习更有针对性。书籍的话推荐《计算机网络 自顶向下方法》建议看第三、四章即可,《图解http》《图解tpc/ip》等(这些只看了一点点)。由于我是实习完才搞秋招的,时间确实有点匆忙,因此大部分都是看网上总结好了的高频知识点,书籍看的并不全,对于这些知识点的拓展则主要是通过面经,以及看到一个不会的点在网上搜索,再继续深入探究本源,加以理解。

操作系统

操作系统的学习,刚开始我也看过一阵子的王道考研的视频,后面通过面经总结感觉考研内容还是跟开发面试的区别很大,因此后面也是通过看面经,背网上总结好的知识点准备的。操作系统应着重注意进程、多线程、内存管理相关的知识点。如果有实习经历或者项目涉及,Linux的相关知识点,以及多线程的相关操作也会被考察到。

数据库

数据库一般涉及到的都是MySQL、Redis的相关知识点,以及索引相关、性能优化、B+树等。有时候也会存在让你写一些简单的SQL语句,主要为相关的一些表操作等。数据库主要也是通过看网上总结的知识点,以及原有上课时所学的一些基础,网上有大佬推荐《MySQL必知必会》这本书的。数据库我在面试时被问得较深入的时候都是说我们大学期间数据库是作为一门选修课去学习的,然后主要精力就转到了计网,操作系统上。好在计网掌握的算还可以,数据库的基本知识都还会,也算是没翻车。

算法题

由于高中是一名oier,大学也有过一段时间的ACM经历,因此在算法题上花的时间并不是很多。《剑指Offer》在找实习以及秋招期间都刷了两遍,其次LeetCode大概100道题左右。一般来说高频的easy、mid题出现的较多,除了面试WXG每面基本三道题。。。刷题肯定不是盲目的刷,优先刷高频题,力扣HOT100,CodeTop企业题库总结的很不错,可以精确到公司/部门/岗位。我一般喜欢在面试前2个小时刷上几道对应公司的热题,也算是增加一点底气吧。在整个春秋招过程中,算法题都是至关重要的,具有一票否决权。所以对于算法题一定要多花时间去准备,建议每天刷上2-5道。刷完基本的数据结构相关题型后,应该着重练习一下贪心,动态规划题,防止在面试时瞬间场面尬住,这也是考察逻辑思维的手段(可能是由于说自己有ACM经历的原因,因此算法题相对较为刁钻)。不过前面也说过,项目上聊得多,留给写题的时间一般都不是很多,秋招大部分还是写一个easy、mid题就结束了。不过并不能掉以轻心,算法题这方面还是得靠自己脚踏实地的多刷才能练上来。

例题1

LeetCode-92.反转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。此题为非常高频的题

解法:

在遍历链表时,将当前节点的next指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。最后返回新的头引用。

复杂度分析:

  • 时间复杂度:O(N) ,其中n是链表的长度。需要遍历链表一次。

  • 空间复杂度:O(1)

例题2

LeetCode-102.二叉树的层序遍历

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。(即逐层地,从左到右访问所有节点)。

解法:

借用一个辅助数据结构即队列来实现。队列先进先出,适合模拟BFS,符合一层一层遍历的逻辑;而栈先进后出,适合DFS也就是递归的逻辑。而这种层序遍历方式就是图论中的广度优先遍历,并应用在二叉树上。

复杂度分析:

  • 时间复杂度:O(N) ,N为树上所有节点的个数,每个点进出队列一次;

  • 空间复杂度:O(N) ,队列中元素个数不超过N个,故渐进空间复杂度为O(N)

例题3

LeetCode-122.买卖股票的最佳时机Ⅱ

给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

1.动态规划解法:

考虑到不能同时参与多笔交易,因此每天交易结束后只可能存在手里有一支股票或者没有股票的状态。定义状态dp[i][0]表示第i天交易完后手里没有股票的最大利润,dp[i][1]表示第i天交易完后手里持有一支股票的最大利润(i从 0 开始)。那么就有动态转移方程:dp[i][0]=max{dp[i−1][0],dp[i−1][1]+prices[i]}dp[i][1]=max{dp[i−1][1],dp[i−1][0]−prices[i]}

复杂度分析:

  • 时间复杂度:O(N) ,这里N表示股价数组的长度;

  • 空间复杂度:O(N) ,虽然是二维数组,但是第二维是常数,与问题规模无关。

2.贪心解法:

题中声明不限制交易次数,因此只需要今天股价比昨天高,能赚到钱,就进行交易。这道题 「贪心」 的地方在于,对于 「今天的股价 - 昨天的股价」,得到的结果有 3 种可能:(1)正数,(2) 0,(3)负数。因此贪心算法的决策是:只加正数

复杂度分析:

  • 时间复杂度:O(N) ,这里N表示股价数组的长度;

  • 空间复杂度:O(1)

「贪心算法」 在每一步总是做出在当前看来最好的选择,贪心算法和动态规划相比,它既不看前面(也就是说它不需要从前面的状态转移过来),也不看后面(无后效性,后面的选择不会对前面的选择有影响),因此贪心算法时间复杂度一般是线性的,空间复杂度是常数级别的;

智力题

智力题也有时会被问到,一般都是比较常见的,这个方面的问题在智力题汇总、面经中都有涉及,可以花点时间去看看。

例题4

25匹马,5个赛道,最少需要比赛几次才能知道前3名;该题为我秋招期间遇到过的问题,拿出来与大家分享

解析:

1. 5匹马一组,分为ABCDE组,每组赛一次,得到A1,A2,A3...C1,C2,C3...E1,E2,E3;共5次
2. 将A1,B1,C1,D1,E1拿出来赛一次,得到第一名A1(顺序为A1>B1>C1>D1>E1);共1次
3. 第2 3名可能是:A组的第2 3名,或B组的第1 2名,或C组的第1名,把这5匹马拿出来再赛一次,得到第2 3名;共1次
故一共需要5+1+1=7场赛马

以上例题均为面试题目中的冰山一角,只是选择了较为高频的作为展示,更多的还需要大家多学多练。

总之,对于以上学习路线中的知识点,我主要也是踩在巨人的肩膀上进行学习的。推荐公众号【拓跋阿秀】中的《逆袭进大厂》系列,其中包含总结好的C++、计网、操作系统、数据库等八股文知识点,对于C++、数据库的学习可以参考他总结好的;计网和操作系统推荐公众号【小林coding】中的《图解系统》《图解网络》可以通过图解的方式进一步深入理解,特别是对于像我这种看文字难以理解的人而言;算法题则推荐CodeTop;对于其他技术栈,可以去网上搜索别人总结好的文档,或者购买/白嫖类似于黑马程序员这种网课平台的教程、源码剖析。同时,无论哪方面知识点的学习,有视频看更好,不过为了提升效率,建议先看面经或者文档,还是不懂时再去看视频较好。

06

总结

以下均为个人见解,仅供大家参考。

1.对于方向,没有好坏之分,主要还是根据自己的兴趣以及实际情况去进行选择,在某些不得已的时候可以考虑退而求其次,毕竟这只是一个吃饭的工具。并且尽量选择在这个方向上较为优秀、有前景的团队。

2.好好梳理自己的项目,对于项目的知识点要牢牢把握,尽量往自己所熟悉的领域带,这将会决定你在后续一个小时的面试走向。

3.八股文的学习也是至关重要,要善于发现资源,更高效的学习。算法题没有过多的技巧,主要靠自己多练,优先选择刷高频题有时可以做到事半功倍。

4.实习期间所做的事情,写需求时遇到的问题一定要总结记录下来。这些问题大多都是面试官所能想到,感兴趣的,想考察面试者解决问题的能力。重难点也得梳理出来,大多数面试官开口第一句话都是“在整个实习期间你有遇到什么困难,怎么解决的”,好好梳理,避免尬住。

5.简历一定要多投,投递完可以建表格记录,避免时间冲突等。不要惧怕面试,我从9月1号到10月中旬,每天至少一场面试。面试时可以录音或者录像,方便复盘总结,被问到没答上来的知识点,课后一定要花时间去搞懂。

以上就是个人的秋招总结,总之还是得多卷呀!

想和作者交流更多学习/上岸新得,可以添加作者微信号:Rotepad


汇总作者的资料分享:

2017黑马程序员C++: https://www.bilibili/video/BV1Tb411j7uM?from=search&seid=1135969454769713709&spm_id_from=333.337.0.0)

C++教程从0到1: https://www.bilibili/video/BV1et411b73Z?from=search&seid=1135969454769713709&spm_id_from=333.337.0.0)

牛客面试宝典: https://www.nowcoder/tutorial/93/b36a4e16637540b48edebbe29a405eb8)

CodeTop企业题库: https://codetop/home

智力题汇总: https://www.nowcoder/discuss/526897

文章来源于:ChallengeHub

推荐阅读:

我的2022届互联网校招分享

我的2021总结

浅谈算法岗和开发岗的区别

互联网校招研发薪资汇总

2022届互联网求职现状,金9银10快变成铜9铁10!!

公众号:AI蜗牛车

保持谦逊、保持自律、保持进步

发送【蜗牛】获取一份《手把手AI项目》(AI蜗牛车著)

发送【1222】获取一份不错的leetcode刷题笔记

发送【AI四大名著】获取四本经典AI电子书

更多推荐

本科双非,收割互联网大厂10+offer!!!