拒绝BAT等大厂SP、SSP offer,最终选择了华为,关于C++,我是这么学习的!

拒绝BAT等大厂SP、SSP offer,最终选择了华为,关于C++,我是这么学习的!_第1张图片

首先说明,本文标题并非是标题党,实打实的实事求是!该文由我的本班同学所分享,实打实的个人干货分享,希望对未来准备求职C++岗位的同学有些帮助吧。(个人经验,仅供参考!)

秋招总结及学习经验分享

个人简介:双非本211硕,研究生期间无实习经历,期间实验室的主要研究方向是计算机视觉,硕士期间运气也很好在实验室师姐的指导下也收获了「两篇SCI」,秋招期间求职意向岗位主要是以「C++」(后端和服务器开发)为主,当然也投递过一些QT开发的岗位。

秋招的offer情况

下图是我投递简历笔试面试的时间记录表,这里没有列出所有投递的公司,举了一些例子,秋招的同学也可以作个小小的记录,毕竟秋招高峰期投递的简历也会非常多,再加上每天都有面试笔试,可能就会忘记一些具体的信息。

拒绝BAT等大厂SP、SSP offer,最终选择了华为,关于C++,我是这么学习的!_第2张图片

先说下投递简历的情况,大大小小公司差不多算下来投了有40多家,拿到offer的数量大概也接近30,大厂基本上都投递了,中小厂比较感兴趣的有合适岗位也都尝试了,因为自己的拖延症比较严重,投递简历基本上都是压着DDL和在朋友们的多次push下才投递的,好在虽然投的比较晚,但都还是如愿以偿的拿到了offer。

  • 秋招的整体offer情况还算是比较满意的, 「字节跳动」「百度、拼多多」都拿到了「SSP」「腾讯」「网易」是SP,「阿里」是白菜, 其他一些公司的offer算下来差不多也有20多个。比较可惜的是美团的提前批和正式批都挂掉了,原因也是因为自己在某些方面准备的不够充分,没有得到面试官的青睐。

  • 因为自己是陕西人,所以最终也是选择了留在西安,签约了华为,华为也是在我拒掉了多个offer后才开奖,一开始大厂开的「薪资待遇」都很诱人,面试完也加过不少面试官的微信,在我拒了offer以后,也是收到了面试官和主管的一些中肯的意见,也是希望我可以综合考虑,虽然有过动摇,但是也比较期待华为能给一个不错的结果, 华为开奖以后,我自己也是瞬间觉得之前的大厂待遇已经不香了,再加上本身就在西安,生活气息比较平静,生活压力也小很多,不用考虑太多其他的因素,所以也就毫不犹豫的签约了,  可能这就是善始善终吧,第一份简历投递的是华为,最后签约的也是华为。

签约现场 & 签约小礼品

拒绝BAT等大厂SP、SSP offer,最终选择了华为,关于C++,我是这么学习的!_第3张图片 拒绝BAT等大厂SP、SSP offer,最终选择了华为,关于C++,我是这么学习的!_第4张图片

个人学习经历

「本科期间」:大一荒废了一整年,沉迷「LOL」无法自拔(现在依旧还是保持每天打两把,毕竟「EDG」夺冠了)。

「大二」「大三」开始逆袭,当时听从了一位特别优秀的前辈的一些学习经验,然后开始买书学习,大部分时间都在宿舍和图书馆写代码,那时候也是书籍爱好收集者,有不错的书就买了,家里和学校都放了挺多。

下面的图是宿舍书桌的一角, 家里也有一部分。大部分书也是都看过的,《「C++ Primer」》看了大概三遍,因为翻得太旧了,后来又买了一本新的作为纪念。

拒绝BAT等大厂SP、SSP offer,最终选择了华为,关于C++,我是这么学习的!_第5张图片 拒绝BAT等大厂SP、SSP offer,最终选择了华为,关于C++,我是这么学习的!_第6张图片

本科读的书主要是「C++、QT、Linux」网络编程相关等。大二大三看过的书籍大概有《C++程序设计语言》、《C++ Primer》、《Effective C++》、《Effective STL》、 《More Effective C++》、《深度探索C++对象模型》、 《C++ Templates》、《Unix网络编程》、《Linux多线程服务端编程》、《C++并发编程实战》。

还有几本是关于QT的,已经记不得书的名字了, 其他的书籍可能就随便翻了翻, 以吃灰为主, 大四考完研毕设摸鱼期间也写了大半年的JAVA, 然后也学了一些Python的东西。

「硕士期间」「研一」大部分时间都以上课,论文,实验室的事情为主,研究生生涯也非常感谢我实验室的师姐(数学系,研究生拿了国奖,手上也有好几篇论文,简直是论文的神)在研究生期间给了我很多的指导,确实让我学会了不少科研相关的东西。

研一似乎也就浑浑噩噩的过去了,那时候也是目睹过师兄师姐们找工作逐渐趋于内卷的现象, 然后「我也在2021年1月份开始在力扣上刷题」,在刷题之前我自己也是没有过任何算法竞赛经历和系统学习过的,说白了就是个算法小白, 可能就是在编程语言和数据结构(考过研)略懂一二,省去了学习编程语言语法和数据结构的时间。

「研二」为了找工作也是补了一部分本科期间没有读过的书籍,大致有:《深入理解计算机系统》、《计算机网络自顶向下方法》、《linux高性能服务器编程》、《STL 源码剖析》。

秋招准备

基础知识
  • 我个人情况是计算机网络比较短板,所以我一开始打算看 《计算机网络自顶向下方法》,后来一个朋友推荐的小林coding的 《图解计算机网络》 确实作者很用心, 里面的配图、文字、实战抓包分析,更或者是内核源码分析都涵盖的有,比一般的八股要深入,同时也突出了重点,应付秋招完全够了,排版的风格也是很不错的, 所以秋招的同学可以参考《图解计算机网络》来复习和巩固自身。

  • 操作系统因为自己对Linux内核有一点点的了解,研一蹭课听了《Linux内核分析》那门课,再加上PPT有存档,秋招前也复习了一波。其他的就是看了看面经里经常出现的一些点,自己总结了总结,总结的次数多了,也就比较熟悉了。C++选手一般问Linux或者操作系统的点还是比较多的,毕竟很多同学可能都是Linux网络编程的项目为主去准备面试,所以可以重点学习学习Linux相关的东西。所以操作系统我推荐看《深入理解计算机系统》和Linux内核相关的东西。

  • 数据结构的话感觉就是题目刷的多了,很多东西也都迎刃而解了,没有过多的记忆性的东西,重在理解和思维上,所以数据结构可以多做做题,多尝试去分析一道题的算法时空复杂度,以及在某个题目里可能会用到什么样的数据结构,以及是否可以在时空上做到优化。

  • 数据库和设计模式暂时没有特别好的资料推荐,我也是以看博客为主,这个JAVA选手更懂一些。

对于计算机的基础知识在准备的时候不仅仅要有广度,对于一些常见的点还需要一定的深度才能在面试中取得很好的表现,比如大家在看资料的时候都会注意到进程间的通信方式, 大概有哪几种, 但是如果被问到某一种方式的具体实现,如果没有看到过也是很难回答的上来的,这些问题在一般的面经中也会时不时的出现, 所以准备秋招的同学也要留意一些东西的底层实现,不能仅仅只是知道一个皮毛。当然不是什么问题都要追根溯源去看源码, 这样时间是远远不够用的,对于比较常见的问题还是可以花点时间去学习一些底层的。

刷题经历
拒绝BAT等大厂SP、SSP offer,最终选择了华为,关于C++,我是这么学习的!_第7张图片 拒绝BAT等大厂SP、SSP offer,最终选择了华为,关于C++,我是这么学习的!_第8张图片
  • 2021年一月份的时候开始在力扣上刷题,当时也是加了一个C++ LeetCode学习交流QQ群,一开始只有四个小伙伴,每天刷刷题,打卡力扣的每日一题,然后相互讨论一些学习相关的,分享一些学习的资料和经验,现在群里大概也有100来人了,如今已经是大佬云集,群名也比较有意思 「“未来成功人士交流群”」  现在秋招也结束了,群里的小伙伴也都拿到了自己心仪的offer。

  • 从开始刷题的时候大概保持着每天三道题的进度,然后每个月有100+题左右的题量, 所以从1月到现在的11月也刚好有「1000+」 的题量,当然在其他的平台上也做过一些题,比如「POJ」「HDUOJ」也经常会做一些比较有代表性的题目,也是在学习某个算法的时候可能在力扣上找不到特别好的题,然后选择在其他OJ上提交,以便检查自己是不是真的学会了。

  • 刷题还是贵在坚持,短期性的刷题如果是为了应付某些公司的面试,可以着重去做一些剑指offer系列hot100 ,也可以看看公司的一些高频题库,当然这些题是高频题,面试出什么样的题完全是看面试官个人,有可能你见过,有可能没见过,什么样的情况都有可能发生,所以我觉得每天坚持刷题拓宽自己的知识面,见多识厂。

  • 分享分享一些刷题的心得,如果是刚来力扣刷题,可以先按照分类tag来做,比如数组、链表、二叉树、图、动态规划等这样的tag去练习,可以让自己掌握某个点更快一些,而不是选择随机题库,在刷某个tag的时候可以以 3 简单 4 中等 1 困难的比例来选择性的练习,这样坚持一段时间以后,可以选择性的去做一些自己比较薄弱的专题和有挑战性的专题,提升一下自己。

总结:多刷题就对了,刷题上力扣,找面经上牛客,当然牛客也可以刷题,力扣也有面经,做过的题再次遇到的时候一定要有思路并且可以写出代码。

项目推荐
  • 可能大部分同学看到推荐的项目都是以 Web server为主,这个项目需要有Linux网络编程的基础才能拿下,参考书籍是 《linux高性能服务器编程》 (作者是游双), 因为可能会存在人均Web Server的现象,所以我在简历当中并没有用它作为项目之一。想学习这个项目的同学可以看书,源码对应在github上也有,甚至还有改进的更好的版本。

  • 我个人推荐一个C++ 和 OpenGL结合的项目是一款游戏 我的世界 , 这个就是在熟悉C++的基础上,需要掌握一定的OpenGL的知识可以做的出来,开源代码也有很多。当初是打算用这个项目来面游戏公司的,但是后面也没咋投游戏公司,所以也就没用用它,但确实是一个不错的选择。

  • 其次是可以考虑 跨平台的远程控制的项目,类似于现有的向日葵、TeamViewer,当然功能还可以再完善,同样在github上也有开源的项目可以学习。

  • 大家在准备项目的时候,不一定非要只依赖C++,可以使用一些其他的库来配合C++完成,这样不仅可以使项目有特色,也能更好的把C++用起来,如果对图像感兴趣的,也可以用Opencv和C++做一些比较有意思的东西。如果对音视频比较感兴趣的同学,可以考虑用FFmpeg来做。

我个人秋招的项目大致如下,当然也会根据投递的公司和岗位对简历进行调整:

  • 自动驾驶中的图像语义分割, 这个主要是深度学习相关的, 有论文输出,通过这个项目,引出了两篇论文,然后和面试官展开讲。

  • OCR身份信息识别,这个是银行的一个项目,主要是提取账单的信息以及文字的纠错。

  • 评测机&查重, 评测机主要是C和Python做的,查重算法是借鉴并自己复现了一位师兄的硕士论文,有传统算法也有基于机器学习来做的。

  • C语言解释器,大致的需求有虚拟机、词法/语法分析器、递归下降、变量函数语句定义等。当然也可以用C++写一个脚本语言的解释器,也是比较有意思的。

  • 多人IM,功能比较繁,类似于飞书和腾讯会议,用的是QT开发的,有很多BUG,也在持续完善中。

面试经验
  • 大家都知道面试主要就是自我介绍、项目经验、八股文和手撕代码环节, 因为每个人准备的东西大不一样,但是每个人都会有自己的优势或者亮点,所以可以在自我介绍的时候突出一下自己的亮点或者优势,倘若面试官对自己介绍的东西感兴趣,那么面试官也就会展开询问,这样不就可以好好展示一下自己了。那么不熟悉的或者比较生硬的东西就不要放在简历上或者自我介绍当中了,这样不仅会让自己尴尬,也会面试官觉得自己华而不实。

  • 其次就是投简历的时候,现在基本上人均内推,所以在找内推的时候一定要找靠谱的且能保持联系的上的,这样可以跟进自己的进度,也可以及时的知道自己的状况,不用一直提心吊胆的。最好的情况就是提前了解到某个部门,部门直推或者HR直推,这样可以直接和HR保持联系,不管是面试结果还是部门的相关信息都能第一时间了解到。

总结C++的学习经验

  • 如果是没有基础的同学,可以先找一本不太厚的(400页左右)的书籍先入个门,可能大家都知道C++ Primer或者C++之父的书籍不错,但是如果没有基础直接去看C++ Primer的话还是非常吃力的,甚至很多地方都是云里雾里,所以我个人觉得可以先找个薄点的书入个门,再去看Primer, 当然看书也不能光看不敲, 还是得多练习练习。 「PS:《C++ Primer》可以看上个两遍或者以上」

  • 看完Primer以后,可以看一下Effective系列, 当然这些书啃起来都是需要时间,也是需要耐得住性子的,知难而进才能吃的透。如果有更多的时间可以参考我前面的那些书籍,如果是准备大半年直奔秋招的同学,可以走这个路线:

    简单找本书入个门  -> 《C++ Primer》 -> 《Effective C++》 -> 《深度探索C++对象模型》 -> 《STL 源码剖析》 -> 《C++并发编程实战》

    基本上这个路线已经足够应付秋招了,当然还需要准备其他的东西, 比如数据结构、操作系统、计算机网络、数据库等。

刷题推荐

  • 大家在力扣上刷题,尤其是每日一题的题解,leetcode上也有免费可以阅读的两本LeetBook。

  • DP - 路径问题 (https://leetcode-cn.com/leetbook/detail/path-problems-in-dynamic-programming/)

  • 设计数据结构 (https://leetcode-cn.com/leetbook/detail/designing-data-structures/)


最后感谢鹏哥的经验分享,也感谢在我刷题过程中的建议和指导。

拒绝BAT等大厂SP、SSP offer,最终选择了华为,关于C++,我是这么学习的!_第9张图片

你可能感兴趣的:(C语言与C++编程,算法,编程语言,人工智能,java,面试)