分享

拿到字节跳动offer后,我总结了自己学习路线和面试心得

 叉叉看过来 2021-01-25

上个帖子:双非渣硕的我是如何拿到字节跳动研发岗SP的?(重发一次,又补充了不少东西) 里很多人质疑我,认为我的简历根本过不了华为,更别说拿到字节跳动这种一线大厂的offer,我想说的是不要把你自己的认知强加在别人的身上,自己不行不要认为别人不行,你自己不努力不要说别人努力,我来步行街是来分享自己的经历的,没有作假成分。

我把自己在知乎平台上两篇比较点赞数量比较多的文章搬运过来,这两篇文章分别是

1、讲述我个人的C++学习路线文章:能拿BAT、TMD等国内互联网大厂的C++学习过程分享~ 

2、自己总结的面试心得文章:可能是全网最详细的“如何顺利通过互联网大厂面试“的文章了,还有没介绍到的来欢迎打我 ,

如果觉得有用,您点个赞或者点个推荐,觉得没用直接右上角吧,我也不想占用你的时间。

下面是C++学习过程的文章:

前言

上篇文章发布后,问我如何学习 C++ 的小伙伴可远比问我如何写简历和刷题的多多了,思虑再三还是先把这自己的 C++ 学习路线发出来吧,从入门到入土的那种。坐好小板凳,准备发车了~

萌新入门

我在 2019 年 8 年之前对C++的认识只停留在 “Hello world” 水平上,本科时期学的全忘光了,面向对象三大特性:封装、继承、多态,我就记得一个多态。出于想要掌握一门工业级别的语言的初衷,去年这个时候我开始了C++ 的学习之路。

也有人问我为什么选择 C++ 而不是 Java ,我能说是喜欢 C++ 的严谨和不好学吗...

“我在 B 站上大学” 对我而言并不是一句玩笑话,第一反应就是去B站上看看有没有相关视频,再三选择最终确定了 黑马机构出版的C++学习教程

链接如下:https://www.bilibili.com/video/BV1Tb411j7uM

我当时开着 1.5 倍速很快就看完了,还跟着视频里敲了不少代码,这个视频会教你一些最基本的 C++ 常用知识比如多态、继承之类的,但是都不是很深,只是大概提了一下。看完之后大概懂了 C++ 有哪些知识点了,可后来证明,我确实有点想多了。

黑马的视频很快就看完了,又开始看经典的 C++ 书籍,我选择了《C++Primer 5th》,这本书相当不错,共分为 19 章:前 8 章为变量、循环等基本知识,第 8-12 章为标准库的知识比如容器算法等,第 13-19 章设计拷贝重载等知识。课后习题基本都做了一下,并且从网上找了正确的习题答案,进行查漏补缺,自己也在书上也做了不少笔记,大概花了 3 个月左右的时间过了一遍这本 C++ 圣经。

在看前 8 章期间就已经直接去力扣开始怼题了,怂什么,就是干,干就完事了,在实战中学习进步,哈哈!大概是在 2019.9 月开始到 2019.12 月期间前前后后刷了 180 多道力扣。

在 11.13 号那天最疯狂,我一晚上提交了 29 次,清楚地记得刷了 7 道题,那天我是夜里三点回宿舍睡觉的,最后一道题卡了我 2 个多小时才做出来。

渐入佳境

时间来到了 2019.12 月末,在学习《C++Primer》与刷题过程中,我知道了还有 STL 这种新奇的东西,也知道了另外四本经典的 C++ 书籍《Effectcive C++ 》、《More Effectcive C++》、《STL 源码剖析》、《深度探索 C++ 对象模型》。

我一口气全买了回来,看完《C++Primer》后一头扎进《STL 源码剖析》这本书里看,可是看的我云里雾里,完全不知作者侯捷老师在书中所云为何物。遂转而去看《Effective C++》越看越觉得自己是头猪,也越看越了解到C++的博大精深,花了大概一个月的时间看完了这本书后又接着去看《More Effective C++》,这个时候学校也快放假了,就把两本Effective C++带回家了,打算寒假在家接着看。

在坐火车回去的路上我也没闲着,把 B 站的《C++ STL 体系结构与内核分析-从平地到万丈高楼》的视频下载在 ipad 上,一边坐火车一边看视频。

2019年寒假期间在家刷完了两本《Effective C++》,又看了侯捷老师的其他 C++ 视频:《侯捷C++手把手教学(上),适合新手》、《侯捷手把手教学C++(下)已补充完毕》、《C++内存管理-从平地到万丈高楼》、《C++程序的生前死后-解密 CRT Startup code》。除了前两个视频是开 2 倍速看的,其余的均是仔细慢慢看的。侯捷老师不愧是 C++ 大师,真不是吹的,被侯捷老师深深折服了。

当时2019年寒假的时候家里有人生病住院了,我去陪床,把自己的ipad带着,一边陪护病人一边刷C++视频,233~

后来的事情大家也知道了,过年期间疫情爆发了,后期导致迟迟不能回学校。在此期间也知道了C++跟网络编程联系很大,决定去看看网络编程与 C++ 结合的一些案例。

持续充电

经过查阅资料,最终三本书走进了我的视线:《TCP/IP 网络编程》、《Linux 高性能服务端编程》、《Linux 多线程服务端编程:使用 muduo C++ 网络库》,最先看的是游双老师的那本《Linux 高性能服务端编程》,看了几天只有一个感觉:我去,这什么啊,这种书居然有那么多人推荐。

后来证明,还是我自己太菜了,水平不到看不懂而已233~

转而去看《TCP/IP 网络编程》,确实不错,是本很好的书,我还去 github 上找了别人做好的笔记,一边看别人的笔记一边看书,最后又在别人的笔记基础上删删改改形成了自己的笔记,把书中的例子也敲了个遍。

然后再把丢开的那本《Linux 高性能服务端编程》拿过来看,感觉真的完全不一样了,游双老师在书里说的也能理解了,一边看书一边照着书中敲代码,加深理解。

也确实感谢这两本书,后来在这两本书的基础上写了一个烂大街的 Web 服务器作为自己的项目写在简历上了,其中也参考了 tinyhttpd

兜兜转转终于可以回校了,在 2020.5 月份回的学校,回校后里面就把《STL 源码剖析》这本书捡起来看,越看越觉得跟视频中讲的一模一样,我看的很快,不到十天就看完了。然后手中就只剩下最后一本 C++ 经典书籍:《深入探索C++ 对象模型》了,我依然是先查阅了别人总结好的笔记资料,然后在别人的基础上修修改改,形成自己的笔记的。

至此, C++ 算是正式入门了,看了这么多书,你特么告诉我才入门?哈哈,听起来也许是个悲伤的故事,但是,是的。

后来就忙于秋招也没有继续看别的 C++ 书籍,只是把以前看的书进行二轮甚至是三轮回顾了,因为有以前的基础,所以在回顾的时候速度也是很快的,《 C++Primer 5th 》大概花了 15 天就二刷完了,两本 Effective C++ 也是的。

后期上升

上述那些 C++ 书籍基本上足够应付校招了,后面在看书过程中发现自己在 C++ 并发上欠缺不少东西,又去买了《C++ 并发编程实战》,没事就翻着看看。与此同时也在看 muduo 那本书,B 站真的是宝藏网站,只是抱着尝试的心态搜索了一下,居然真的发现B站上有作者陈硕的讲解视频:

《c++高性能服务器网络编程(陈硕)》

针不戳。

以上就是我过去一年里学习 C++ 的大致历程,其实真正发力的时间是在 2019.8 - 2020.1 月期间,并没有多少时间,其余时候都是偷奸耍滑去了~~

其实学完了这些还是不足以应对比较大型的 C++ 项目开发,你可能还需要接着看《 C++ 沉思录 》与《 C++ 模版元编程 》以及其他的优秀书籍接着进阶。

好的 C++ 开发者从来不怕找不到工作,就是因为想要学好它不容易,换一种思路就是好好学好它对于你以后的裨益可能是你无法想象的,即使你日后从事 Java/Go 的工作,因为语言的原理都是相通的。

种一棵树的最好时间是十年前,其次就是现在,加油!

结语

在不知不觉间,才发现自己居然看过不少书了。有时候功夫到了自然结果就出来了,没有什么其他特别的方法和诀窍的,有时候你会觉得困惑、迷茫、不明白,可能只是时间还没到。冲就完了,哈哈。

PS:B站最近把侯捷老师的视频全部下架了。。。还好去年我有下载,过几天会分享在我的计算机书籍仓库里,慢慢上传上去

References

[1] C++ 入门视频: https://www.bilibili.com/video/BV1Tb411j7uM

[2] C++ STL 体系结构与内核分析--从平地到万丈高楼: https://www.bilibili.com/video/BV1db411q7B8

[3] 侯捷C++手把手教学(上),适合新手: https://www.bilibili.com/video/BV1aW411H7Xa

[4] 侯捷手把手教学C++(下)已补充完毕: https://www.bilibili.com/video/BV1sW411J7JQ

[5] C++内存管理-从平地到万丈高楼: https://www.bilibili.com/video/BV1Kb411B7N8

[6] C++程序的生前死后--解密 CRT Startup code: https://www.bilibili.com/video/BV1Ab411B73D

[7] C++高性能服务器网络编程(陈硕): https://www.bilibili.com/video/BV1Ht411p7wx


下面是如何更好通过面试的文章:

面试,是求职应聘中最重要的环节了,因为是面试官直接与求职者面对面的交流。

如果是中小型公司,面试两次基本就可以了;如果是大公司,一般至少需要面试三到四次甚至五到六次才能确定是否录用你。

我的面试经历很丰富,基本国内大中厂面了个遍。以我的经历加上同周围朋友们的交流来看,面试组成基本上是10%手写代码 + 35%基础问题 + 30%深挖项目 + 15%开放问题 + 10%聊人生(其中一面基础部门占多一些,一面之后的技术面项目问题更多一些了)。

其中手写代码是必要的,一般会共享屏幕或者在指定oj上手写代码,同学们可以不用担心,面试过程中的代码题比笔试过程中的代码题要简单多了,难度基本都是easy或者medium的,hard的很少。

除此之外面试中的手写代码还有一个目的就是看你的代码风格和debug能力,毕竟代码风格不是一朝一夕能养成的,面试官看你的代码风格也是能够看出来你是不是经常写代码,看你的变量命名是否合理等。经常写代码和不经常写代码的人代码风格完全不一样的。

Debug能力更不用说,考察的就是你能否快速定位到bug,进而解决它。

我在华为二面时就被面试官夸过代码风格好,因此建议大家平时一定要保持良好的写码风格。

面试过程中有一些需要注意的地方,这里给大家介绍一下:

1、展示长处

同学们要注意的是面试主要是为了展示出自己的长处和优点。

面试官对你的考察也是为了挖掘出你的潜力和你身上的亮点,除去一些比较无聊的面试官,大部分的面试官都不是为了难为你而问你一些很难的问题,作为求职者的我们要抓住机会告诉面试官自己擅长的地方,引导面试官对你进行提问,整个沟通的过程也会更加流畅。

2、保持诚实

你要对你简历上的每一个标点符号负责,会就是会,不会就是不会,千万不要不懂装懂,当面试官提到你没有接触过的领域的时候要及时跟面试官说自己没有了解过该方面的知识。

如果你胡乱回答面试官的问题,瞎猫碰到死耗子回答对了还好,回答不对真的是很扣面试分的,直接说不会反而能够让面试官停止询问该方面的知识,也给了你更多的时间展示你会的和你了解的领域。

一定要保持诚实,不要不懂装懂,很多工作只有你真正的参与其中,才能够准确说出其中的难点。当面试官就某一个困难深挖时,你的弱点以及不诚实就会毫无保留的暴露出来,最终导致前面的努力功亏一篑。

3、保持互动

面试过程中的代码题以及智力题,除了考察你在这个人的代码能力和是不是足够机智,也考察你的分析问题能力。

某些场合下,面试官可能更看重你个人的思考过程,思考问题是否足够全面。所以当面试官告诉你代码题和智力题的时候,可以稍加思索,然后开口跟面试官说你的思路,说你打算如何做这道题,跟面试官保持互动。即使不会这道题,也要跟面试官说一下这道题的考察点是什么,及时向面试官寻求帮助,然后再开始动手写这道题。

这么做的目的主要有两个:

1、显示自己的思考过程,让面试官看到你的思考方式,即使最后这道题没有成功做出来也是有一定的加分的,1分也是分,总比0分好,蚊子腿再小也是肉啊。

2、如果很干脆直接,没有任何迟疑的就把这道题解出来了,很容易让面试官觉得你以前做过这道题,可能是完全背答案写出来的,然后转手就给你一个更难的代码题或者情景题,那不是得不偿失嘛。

所以一定要与面试官保持互动,注意看着面试官的眼睛说话,保持眼神的交流互动。

4、多总结多回顾

面试过程中建议大家把手机录音打开,在本轮面试结束后复盘一下,听一听自己在面试过程中是如何回答面试官的问题的,看看自己哪些地方回答的不够好,应该如何去改进。

因为对于大部分校招选手来说,可能都是第一次参加面试,再加上面试过程中不免有些紧张感,在那种环境下你是很难描述清楚你想要回答的问题的。通过复盘自己在面试过程中的表现,对自己进行查漏补缺,争取下次遇到同样的问题时能够回答的好一些,特别是对于一些比较内向的同学来说更应该如此。

下面就面试常见流程,为大家梳理一下互联网大厂四到五轮面试的主要询问点。

1、一面

一般来说,第一面都是基础技术面,就是考察面试者的计算机基础,也就是操作系统、计算机网络、数据库、数据结构与算法、编程语言等,有时候也会问一下你的项目,不过一面深挖项目的不多,主要是考察基础。

可以说一面是考察范围最广的一轮面试了,面试时间也比较长,互联网大厂一面基本都在40min-60min之间,如果你的面试时间小于30min,很有可能凉凉。一面要求面试者具备扎实且宽度够广的计算机基本知识,要不你咋挺过去这将近四五十分钟的面试呢,千万记得要打好基础,把自己的基础夯扎实了。

面试开始的时候都会让你简单介绍一下自己,为什么明明简历上都写了自己的信息,还需要自我介绍呢,我认为主要有以下2个原因:

1、面试官很忙,没看你的简历。很多面试官本身就是公司的一些部门主管或者技术leader,他们本来就很忙,每天要处理很多的事情,可能他刚拿到你的简历没几分钟,HR就安排了这次面试。在你进行自我介绍的时候,他也可以看看你的简历,熟悉一下你的技术栈和项目。

2、了解面试者的沟通能力,语言表达能力。面试官通过听你的自我介绍也能看到的你总结概括能力、逻辑思维能力等。在职场中,除了基本的技能外就是跟同事合作,一起去完成某项任务。如果你在介绍自己的时候都介绍的一塌糊涂,以后能指望你跟身边的同事沟通效率高吗?

所以不要小看自我介绍环节,可以私下里多练习几遍,跟室友或者朋友互相介绍一下自己。练习个十来遍就差不多了,就会显得游刃有余、从容不迫了。

一面最后的时候,面试官一般会问:你有什么要问我的吗?这个时候不要乱问(划重点),你可以问以下几个问题:

1、你们部门在做些什么?主要业务是什么?如果自己很荣幸的能够进入贵部门会负责些什么?因为面试者就是这个部门的,通过他的回答,你也能够了解到这个部门正在做的产品和使用的技术。

2、您认为我在哪些方面还存在着不足?这是一个很巧妙的问题,因为它可以从侧面反映出你这次面试的结果。如果面试官带有指导性的回答出了你的不足,你需要补充的知识点,这样就代表你这次面试差不多了,应该是能好好准备二面了;如果面试官直言不讳的说你很差或者基础太弱这样的话,你也就知道凉凉了。

2、请问面试官对自己职业规划的建议?面试官大概率是技术大佬或者工作过几年的前辈了,在社会上摸爬滚打了几年,知道的肯定比在校生多。这个问题既表达了对面试官身份的认可,也表现出求职者对当前这份工作得在意程度,并且还能得到技术大佬的分享,怎么看都不是亏本的买卖。

还有一些比较好的反问问题分享给大家,大家可以在反问环节问面试官:

4、贵公司对我面试的这个岗位的定位是什么?我需要具备哪些技能?

5、如果我有幸应聘成功,公司对我会有哪些期望呢,

6、这个岗位所在的的团队是什么氛围?我这个比较外向(千万要说自己外向,不要说自己内向,原因不必多说了吧)

切记不要直接问:我这次的面试能不能过?这种直击面试官灵魂的问题,一般也是招聘提问时的禁忌,稍微正规点的公司都是不能直接由面试官透露给求职者的。

你可以问一下自己的内推人,让他帮忙查一下这次面试的结果。

2、二面

如果你顺利进入二面,那么恭喜你离成功更进一步了。互联网一般二面面试官都是技术leader级别的了。二面就开始考察你的实习/项目了,而一般中小厂可能将二面和HR面放在一起了。

二面没有一面那么注重基础,会开始问你一些这个项目的细节部分。这个时候你就要跟面试官讲你精心准备的实习或者项目,一般都会是让你说一下你这个项目是用来做什么的?为什么会有这个项目?如何实现某某细节的,用的是什么技术和框架?一般面试官问你问题的都是他们擅长或者喜欢的技术点,所以你如果仔细讲述清楚并且能加入一些自己的思考会加很多面试分,比如当前这个项目还存在着那些不足,可以用什么样的技术去改进它之类的。

可以在二面中适当增加自己的项目困难程度,从侧面反映出自己是具有真才实学和做事能力的,但是不要过分夸大,适当包装就好,不要太言过于实。

同样的,二面最后也是会问你有没有什么想问的,这个时候可以问一些一面反问环节中没有问过的问题,或者问一下贵公司面试共有几轮都可以的。

3、三面

三面一般都是综合面考察,并不是很在乎你的基础了,而是会考察你这个人的思维能力、分析能力等,将事务看清楚、看明白,提炼总结的能力,换句话说就是看你这个人是不是脑子够灵活,是不是够聪明。

一般三面都会考察一些情景题,比如让你设计一个系统,需要哪些功能或者给你一个智力题,考考你的反应能力,像一些比较知名的智力题:腾讯赛马问题、高楼扔鸡蛋、三人三鬼问题以及三门问题都是很好的智力题。这种智力题如果不提前准备的话,很有可能当场懵,其实它并不是难,可能就是比较绕,在那种面试的紧张环境下,很难当场想出来一个比较好的解决办法。对于这类问题,是真的需要提前准备的,牛客上就有不少智力题总结的帖子,搜索关键字“智力题”就能找到很多资料了,将常见的一些智力题情景题自己先过一遍,有个大概的印象即可。

有道是:工欲善其事,必先利其器。多一分准备就会多一分机会,最好私下里多看看这种智力情景题。我在某一线大厂的三面中就被问到过腾讯赛马问题的变种,还好以前有所准备成功答出来了。

在三面过程中,还有一些问题是看你的抗压能力以及处理意外情况的能力,因为工作中是有很多意外情况出现的,比如:

1、分享一件你觉得压力比较大的事?你的压力从何来?你是如何克服他的?

2、你长这么大以来遭受过的最大挫折是什么?你是如何克服它的?

3、二十多年来,你取得的最大成就是什么?

4、你通过多年努力获得的一项技能是什么?你是如何学习从而获得这项技能的,做了哪些工作去改善、精进这项技能?

从面试官的角度来看,他问你经历过的最大困难是什么是真的对你所经历的困难感兴趣吗?

不是的,这个问题的重点是在考察你面对困难时所做的思考和应对,是想看到你的努力以及解决问题的能力。

困难人人都会遇到,克服困难固然值得鼓励,可更重要的是从这个困难中学到了什么,即使没能够克服困难也不意味着一无所获,面试官希望看到的是你如何从过往的苦难和失败中总结出经验,并在以后的工作中能够用上这些经验,更好的指导日后的工作。

面试官问这些问题,是希望所招聘的人能够脚踏实地的做事,充满激情的从事相关工作,所以同学们可以提前想好说辞,提前练习几遍,这样才能做到从容不破。

4、交叉面

如果求职者被HR告知要进行一轮交叉面或者加面一轮,基本是出自以下两个原因:

1、前面三轮还不足以确定你的程度,属于那种对你基本满意但是还差点意思,需要加面一轮才能确定你的评级,才能最终给你定薪资。这种情况就属于比较危险的,如果交叉面没答好,很有可能前功尽弃。

2、第二种情况就是求职者过于优秀,惊动高层的那种优秀,哈哈。加面一场,如果你答得不错的话,给你更高的面试评级,这也意味着SP、甚至是SSP,换句话说就是给你更高的起点更好的薪酬待遇。答得不好也不会取消offer和降低原有的评级,这一点不需要担心。

所以建议求职者找给你安排面试事宜的HR问清楚,到底是第一种情况还是第二种情况。需要注意的是,交叉面的一般都是部门大佬级别的人物亲自来面,千万要小心谨慎一点。

5、HR面

很多人觉得前面几轮的技术面过了就基本稳了,其实HR面也很重要,很多公司的HR权力是很大的,拥有绝对的一票否决权,即使部门主管想要你,HR不同意那也没有办法,比如阿里的HR的权利就很大。

HR面主要是看你对公司文化的理解和价值观的认同,我建议在HR面前,先去了解一下公司的文化和公司的优势之处,这样在被问到为什么选择本公司的时候能够把自己对公司的了解和优势说出来,体现自己的诚意。

我在面试某大厂的时候就把这个公司每周末都会举行类似英语角的活动说了出来,HR给予了充分肯定,并且透露给我在公司内部有很多英语学习的机会,欢迎我前去体验。

HR面的时候也会问一些其余的问题,比如你的最大优点和缺点,这也是HR面试高频问题,大家最好提前准备好这个问题的答案,真的很高频。

我在这里分享一下自己关于“最大优点和最大缺点”的回答:

我的优点就是喜欢看书,看各种各样的书,涉猎广泛,比如《乡土中国》、《中国简史》、》《活着》《明朝那些事儿》,还有一些技术书比如《深入理解计算机系统》;

我的缺点就是有点强迫症,不喜欢别人乱动我的东西。

ok,搬运完毕!

在上个计算机书籍仓库里我被一顿喷。。。。这写文章是我自己手写的,可以说是我自己开源的仓库了。

我把自己的学习过程总结和自己的笔记等资源开源在名为 CSLearning 的github仓库了,也算是记录自己慢慢成长的一个仓库吧。

此外前段时间,还很有幸被牛客网站邀请去做计算机专业校招求职分享,直播的主要内容如下:

我把自己的求职分享PPT留下来了,如果有需要的可以去我的这个Github仓库自取。

在仓库的这个位置

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多