2020届最新面试经验(腾讯and华为and百度)

【1】C++后台开发学习路线

学习建议

对于技术岗,软件基础知识可以说是个人的硬实力,是你能通过面试的一个大前提。
而说到软件基础的学习,对于很多还没有基础的同学可能会有点懵逼,软件基础知
识这么杂,技术书籍这么多,该从何看起呢?先不用慌,当初的我也和你们有一样
的困惑,之后一步步挖坑填坑,才构建了比较完整的知识体系。自己回头想想,如
果当初还是小白的时候,就能确定一个比较合理的学习路线,对知识由浅入深的进
行学习,学习的过程肯定会顺利一些,效率自然也会更高。因此,我会根据自己的
学习经历,结合软件基础的几大板块知识,制定一个合适的学习路线,希望能让正
在学习的同学们少走一些冤枉路!


首先,对于软件基础知识的学习,建议尽可能地去看一些经典的书籍,看第一遍的
时候可以不用太过细致,快速地看,重在了解这本书的知识框架,在把握了整体的
逻辑框架之后,第二遍就可以详细学习各章节的细节,这个时候也能根据自己的情
况,选择性地去看一些相对重要的章节,效率会更高。对于一些经典的技术书籍,
只看一两遍很难完全理解其中的精髓,之后可能还要多次地回顾,也可能在实际应
用中再来回顾书中的理论知识,也能更深入地进行理解。例如深入理解计算机系统
这本书,内容非常经典,很多地方当你再看一遍又会有不一样的理解和体会。

每看完每本书,都要学会去做笔记,对自己所学的知识进行总结消化,笔记中的内
容才是自己的东西,而且在我们学习的过程中难免会对一些知识点的理解有所偏差
和不足,笔记能够很好地帮助我们发现这些问题,然后加以纠正并很好地记录下来。

软件基础主要分为这几大板块:C++基础、数据结构与算法、操作系统、计算机网络、
数据库、设计模式和一些常用工具。

C++基础:
C++ Primer 第5版
STL源码剖析(侯捷 著)
深度探索C++对象模型(侯捷 译)
Effective C++(侯捷 译)

软件学习中,语言肯定是最基础的,由于C++较低层,语法非常灵活(比较适合写算法),
就导致语法规则比较繁杂,而且涵盖了C语言的内容,学习C++语法相对python、java等其
他高级语言时间成本更高一些。

学习C++语法,首推C++ Primer 第5版,C++语法学习的最权威书籍,以C++11来讲解,非
常全面地讲解了C++的语法以及C++11的各种新特性,看完帮助很大,如果有时间建议至少
看两遍,时间有限的话,建议至少通读一遍,把握这本书的大体框架,然后结合个人情况选
择性地去看一些重点章节。

STL 源码剖析这本书讲解了C++底层实现,内容包括C++底层内存管理、各种容器的数据结
构实现、常见算法的实现等,建议列为必读,可以帮助深入理解C++底层,同时也是对数据
结构的复习和巩固。其中也有很多面试常考的知识点,如内存池的机制、traits技法、一些常
用容器的底层数据结构等。

深度探索C++对象模型这本书讲解了C++面向对象特性的底层实现机制,由于是翻译版本,读
起来内容会相对晦涩一些,但是内容非常重要,尤其是虚函数底层的实现机制,建议多看几遍
加深理解,这个基本是C++必问的知识点。看完这本书,对C++面向对象的理解帮助极大,建
议必读。

Effective C++这本书主要讲解了编写C++程序的过程中需要注意的一些条款,有助于梳理在编
写C++程序时的一些常见错误和注意事项,也是面试常考的。如果认真读过了C++ Primer,这
本书看起来会非常快,其中的很多内容都包含在C++ Primer中了。

总之,C++由于它自身的特点,学习起来不会很轻松,需要一定的时间成本,但是如果你认真
的学习了以上4本书,你会对C++有一个新的认识!相信我,等你学好C++,再学习其他高级语
言会觉得轻松许多!



数据结构与算法:

数据结构

大话数据结构

浙大数据结构网上课程(B站链接)

算法

算法 第4版(是以java来讲解)

刷题

LeetCode中文网站

剑指offer 第2版(建议至少刷两遍)

程序员代码面试指南(左程云 著)

数据结构可以说是软件设计的精髓,建议将基础打扎实。大话数据结构这本书对于新手,
很适合作为入门,用于建立数据结构的知识体系,另外浙大数据结构网上课程也非常不
错,B站上直接可以搜到,讲解简明易懂,弥补了大话数据结构中一些讲解不清楚的地
方。在学习了数据结构的基础后,可以开始学习算法,建议学习算法这本书,可以帮助
你梳理一些常用算法的原理和应用。

在学习数据结构与算法的同时,建议同步学习C++语法知识,两者基础都学习完之后,
就可以刷题了,而在刷题的过程中,可以同步学习STL 源码剖析,有助于你更游刃有余
的去使用STL,提高代码效率。刷题的话,建议先刷LeetCode,英语不好的可以到Leet
Code中文网站,LeetCode中有一个数据结构的探索专栏,根据难度,分为初级、中级
和高级,基本覆盖了各个知识板块的面试高频题,可以帮助新手循序渐进地刷题,培养
写代码的感觉。另外的话,剑指offer这本书中也涵盖了很多面试高频题,可以到牛客网
的剑指offer专栏中刷题,由于题目难度划分层次不太明确,新手刷起来效率会偏低,建
议在刷完LeetCode探索专栏中的初级、中级之后,再去刷剑指offer的题目,其中的题目
在面试中出现的非常高频,建议最好刷两遍,熟练掌握每道题的思路和优化方法。最后
,作为进阶,可以看左神写的程序员代码面试指南,非常好的一本书,其中讲解的编程
题都非常经典,不仅仅限于国内的IT公司,而是面向全球,包含了国外知名IT公司的一
些面试高频题,可以帮助开阔视野。

在刷题的过程中,要非常注意方法,一般将刷题方法分为龟系和兔系。龟系刷法的精髓
就是每个题目要注意质量,不要满足于一种解法,各种解法都尝试写一写,并对比它们
的时间空间复杂度。但龟系不是说在一道题上耗死。越是龟系越要注意时间上要掌握好
分寸,能解出来最好,解不出来也不要倔强。我觉得比较好的一个平衡点差不多是一个
小时。如果一个小时还是解决不了,可以看看提示,如果还是解决不了,可以看看讨论
区的答案或者网上搜索答案。兔系刷法精髓就是要暴力,天马流星拳,大力出奇迹。作
为兔系选手,讲求的就是要疯,一上来就看答案,照着答案写。这个做法看起来不靠谱
,其实它有内在的合理性:大部分算法都不是我们发明的,如动态规划,二叉树,线段
树,并查集,贪心算法等等,到后来所谓的不看答案自己做出来,其实都是在用固定套
路。另外编程题的知识点很多很杂,LeetCode中将题目分为各种标签,建议对标签按照
广度优先的顺序去刷题,刷题尽量覆盖每个标签。我个人更倾向于龟系,这种方法能够
更好地理解每道题的方法套路,也能训练自己的思维,毕竟刷题不是题海战术,刷题质
量更重要,每刷完一道题,最好将其中的思路方法记录下来,然后定期做总结,对一些
常用方法进行总结分类,慢慢的会发现刷来刷去就是那些套路,你会对它们了然如胸。

 

操作系统:

操作通用知识

深入理解计算机系统 第3版(CSAPP)

操作系统 精髓与设计原理 第8版

程序员的自我修养

Linux

鸟哥的Linux私房菜 第4版(用于了解Linux基本命令)

UNIX环境高级编程 第3版(APUE)

Linux/UNIX系统编程手册(上下册)

内核

Linux内核设计与实现(LKD)

深入理解Linux内核

计算机网络:

计算机网络 第7版(谢希仁 著)

TCP/IP详解 原书第2版(卷1)

UNIX网络编程 第3版(卷1)

面试技巧

在具备了技术上硬实力的基础上,面试技巧也是非常重要的,它决定了你能否充分展现自己的实力。

从以下几点,来谈谈我对面试的看法:

个人简历:简历一般包括个人信息、项目经历、专业技能、个人荣誉这四个方面,其中项目和技能是最为
核心的。对于项目,描述逻辑一般是:简介项目的需求和目的 -> 自己主要负责的内容 -> 分为几点详细描
述自己的工作 -> 最终的进展和相关成果,对于自己所做的工作要非常清楚,同时要善于挖掘自己项目中的
技术点,对每个技术点要烂熟于心,多问自己为什么,为什么用这个技术,这个技术的优点和缺点是什么,
为什么适合现在的项目,使用之后取得的效果等等。。。然后有条理地将它们写在自己的工作中。对于专业
技能,首先要真正了解自己的掌握情况,对自己的掌握程度要描述准确,一般用词是了解->熟悉->精通。如
果只是学习了基本理论知识,没有很深入,建议用了解;如果理论知识学习比较深入,并且有相关的实践经
历,建议用熟悉;而如果在某个技能上可以说是大牛甚至专家级别,才建议用精通。因此,一般大部分时候
建议用了解和熟悉来描述专业技能,精通尽量不要用。

面试前准备:面试之前,首先要调整自己的心态,有一个好的心理素质,防止自己在面试中过于紧张而显得
很慌乱。然后就是自我介绍的准备,一般3-5分钟时间,简单介绍自己的信息、项目经历和一些获奖经历等等
,有些自己的亮点,可以在自我介绍的时候突出表现,有可能引起面试官的兴趣。内容可以事先在纸上写好
,在家里或宿舍对着镜子多练习几遍,直到自己能表达地条理清晰,流畅自然。然后就是面试问题的准备,
这方面首先是自己对相关知识有了系统的学习,并做了知识点的总结或者笔记,然后在网上收集一些面试的
高频题来检验自己。之后可以在网上找一些面经,尝试着模拟面试去回答面经中的问题,面试不多的同学会
有这种感觉,面试官问的这个问题你实际上知道,但是突然问你,你不一定能回答的很有条理,很有逻辑性
,这个模拟训练能够很好地提升自己这方面的能力,在面对每一个问题,力求回答条理清晰,描述流畅,并
且分析透彻,最好能够横向纵向地进行一些扩展。

面试中:首先,在衣着方面,面技术的同学穿的干净得体即可,不用特意穿正装,如果你穿着正装去面试,
很有可能发现只有你一个人穿了。。。如果是现场面试,最好自己打印几张简历过去,在面试的过程中,
一定要保持自信的状态,面带微笑,说话礼貌谦逊,给面试官第一感觉比较好。面试的时候,一般是先进
行自我介绍,面试官在这个过程中了解你的基本信息,然后开始问问题,如果对你的项目很感兴趣,一般
会问项目问的比较多,对项目中的每个技术点都可能问的很细很深,有可能会针对项目问一些开放扩展性
的问题,比如这个项目或者技术点,你认为还有没有能够优化的地方,应该怎么优化?因此要将自己的项
目烂熟于心,每个技术点的细节都要清楚,而且要能够发散的去思考,对一些技术点进行展望和扩展。在
问项目之外,重点就是问基础知识了,在回答问题的过程中,注意一定要控制自己的节奏,要尝试引导面
试官往你擅长的知识上走,遇到自己很熟的知识,也不要太着急,语速也不要太快,有条理并且全面地问
答出来;如果是不太熟或者不记得的知识,可以先对问题中的一些概念进行解释,打打擦边球,在这个过
程中也能给自己一些思考的时间,如果实在不清楚或者不记得了,就坦诚地说自己不太熟,如果勉强自己
乱回答,反而效果更差,给面试官不好的印象。另外,互联网大厂一般会要求现场写代码,要求将核心处
理代码写在纸上,因此在平时刷题的过程中,尽量一个一个字母敲上去,不要用代码补全,当然刷题就显
得非常重要。在面试的最后,一般面试官会问你还有什么问题想问?这时候问一些自己感兴趣的话题,例
如部门研究方向,用到哪些技术等等。

面试后:每次面试完,就不要太在意面试结果怎么样,下去之后及时将面试问题记录下来,特别是自己答
得不好的问题,一定要花时间去研究,解决这些问题,下次面试再遇到相同的问题就能够很好地解决。每
经过一次面试,都能发现自己项目或者基础知识的一些不足,下去一定要将项目进行适当地修改和补全,
基础方面也能发现自己比较薄弱的地方,要多看书多研究,同时也会发现自己在表达方面的一些不足,要
及时调整,尽量在下次面试能够做得更好。

总之,找工作就是一场战役,在这里你会不断跌倒不断爬起来,在这个过程中,一定要调整好自己的心态,
做好长期坚持的准备,不要因为一次面试的失败就否定自己,变得情绪失落,如果真的受到挫败,对情绪影
响很大,可以找朋友家人倾诉,有助于排解自己的不开心,在下次面试前一定调整好自己的情绪,以饱满的
精神状态去面对每一次考试。

另外,前面主要提到技术面的一些技巧,这里补充说一下HR面,一般你的技术面表现和本人性格都OK,HR
面问题就不大,但是也要重视起来,毕竟是通往offer的最后一关。HR面一般是和专业知识无关的,主要看个
人性格和岗位匹配度,会问一些个人信息,如家庭情况、有没有女朋友,想去的工作城市等等。对于常见的
HR问题,可以到网上搜一些常见的回答技巧,在面试中稍加注意即可,在此基础上,最重要的还是保持坦
诚谦虚的态度,做真实的自己!

猜你喜欢

转载自blog.csdn.net/N1314N/article/details/92802916