C/C++面试

首先说明,此帖针对的是非计算机专业想转互联网开发的童鞋,C/C++后台开发方向,想起自己在准备阶段也经常水河畔,看了一些面经对自己确立方向和需要准备哪些上帮助很大,所以也分享下自己的经历,希望对大家有所帮助。

基本情况:电工硕士,教研室项目就是matlab仿真,自己毫无兴趣,一心想从事互联网软件开发,但无互联网方面的项目经验,无实习经验(这一点面试时很伤),自己准备的是C/C++后台开方向,现已签约华为,最近收到腾讯offer,打算毁约签鹅厂(毁约之路困难重重)。

一:准备阶段
因为自己较早就决定找C/C++后台开发岗位,所以主要准备了以下几大块:
1.C/C++:自己先从《C++primer》看起,然后是《Effective c++》(重点推荐),《STL源码剖析》、《深度探索C++对象模型》(只看了部分),C++差不多就这些,在准
备C++的同时,也不能忽略C的重要性,在看linux系统及网络编程就会体会到,指针要非常深刻地理解(应付面试也要搜集一些常见的坑、常问的问题)。
2.操作系统:如果做后台,感觉linux必须会,推荐《UNIX环境高级编程》,个人觉得非常重要的一本书,很经典,重点理解:进程、线程,多进程多线程间通信,I/O操作
(特别是多路I/O); 对linux整体认识方面,推荐《linux鸟哥私房菜》,这本书可作为手册翻翻就行了,重点掌握一些常用的指令,时间允许的话,shell也可以学一下;
操作系统概念理解方面,《现代操作系统》,重点理解进程,线程,虚拟内存,也可结合《深入理解计算机系统》,感觉某些章节讲得很好。
3.网络编程:很重要的一块,面试集中在TCP/IP协议上,《TCP/IP协议详解:卷一》多看几遍,然后就是《UNIX网络编程卷1》,书太厚只看了部分章节,但讲得很经典,看书
的同时要多动手在linux系统上多实践
4.数据结构与算法:几大排序算法和查找算法,链表、二叉树,多刷刷题,《剑指offer》多看几遍,刷题网站:牛客网,leetcode
上面重点讲了自己看了哪些书,这些可操作性强一点,但也不能忽略项目实践的重要性,一定要有一两个拿得出手的项目或者有实习(非常重要),但这个我没法提建议,我是参加了华为的软件挑战赛,自己整了个后台开发的小项目,面试时重点讲这两个。

二:面试阶段
  就按自己面试的时间顺序讲吧,重点讲问了哪些问题,所有面的都是软开岗位

1.中兴(提前批,拿到offer)
中兴是自己的处女面,当时还有点紧张,但问的问题较简单,记得的有:写一段代码输出九九乘法表,if (p==NULL)有什么不妥的?
二面的一个问题:在一个项目已完成80%了,客户突然说要改需求,你作为项目主管会怎么办?

2.华为(提前批,拿到offer)
因为自己之前参加软件挑战赛,进了复赛,所以参加的是7月底的比赛专场面试(后面看来用处不大)。当时是先进去做性格测试再面试,后来才知道自己第一次性格测试挂了, 第二次做过了,提一点建议(仅作参考):每组题目选择时 一定要有区分度 ,即每组题目不能选太多相同程度的。

一面:
1)看我华为比赛进入了8强,让我好好讲讲我们的方法,团队分工,并说说自己做了哪方面的贡献
2)既然你们的比赛题目是寻路的,那坦克大战也是寻路的(后面想想好像关系并不大),让你设计这个游戏,你会怎么设计?(扯了点面向对象的设计,多态等)
3)你好像对面向对象比较了解,那谈谈你对多态的理解?(。。。。。。)对设计模式了解吗?(不知道,这里有点自己把自己带入坑的感觉,所以面试时自己对面试官的引导   很重要,要避免引入自己不熟悉的领域)
4)给了我张纸,让我看下上面那段代码有什么问题(考的是内存泄漏)
一面差不多就这些

二面:
二面继续聊项目,华为比赛,自己教研室做的项目,(所以写在简历上的任何项目一定要非常熟悉),然后就谈谈自己的职业规划(感觉每个公司都会问的问题),为什么想来华为?

3.58集团校招(拿到offer)
   一面碰到个做算法的,问了我很多数学知识,比如矩阵乘法有什么实际含义,现场做了一个概率题,针对一个教研室的项目用了最优化方法,揪着我问共轭梯度的优点和缺点(所以自己写上简历上的任何东西都得弄清楚,保不准就被问到了,我当时没怎么准备那个项目,以为没哪个面试官会对教研的matlab项目感兴趣);

二面问我网络方面的,TCP/IP协议(感觉是做后台必问的一块),由于没做记录,具体记不大清了。

4.百度内推(2面挂,都是电话面)
一面:
(1)华为比赛的:要解决的问题是什么?解决的方法是什么?遇到最大的困难
(2)C++ static关键字的作用,尽可能多讲它的应用场景
(3)C++的4个转型动作分别是什么?各自的作用
   Const_cast<>移除常量特性后,是否会修改原变量的值?为什么?
(4)指针和引用的区别
(5)c++虚析构函数
(6)c++虚函数表的原理?(即要从编译器的角度讲多态的原理)
   菱形继承有什么问题?如何避免?
(7)聊一聊算法,10亿个数找第10大的。
(8)如何判断链表是否有环?
(9)看你做了网络方面的,下面聊一点网络方面的问题:
         局域网软件用了epoll,你当时为什么要做epoll?(感觉自己面的几个互联网公司都对这个感兴趣)
        Tcp和udp的区别?(被问过很多遍的,要尽可能的多讲)
        Tcp中什么时候会出现time_wait和close_wait状态?
        进程间通信的方式有哪些?自己在什么场景下使用过?

二面:
1.你做了很多个项目,讲一个你认为影响最深刻的。(华为比赛)
  1)先讲一个这个比赛是关于什么的,要解决什么问题?
  2)你们当时具体是怎么做的,详细的讲一讲。
  3)求两点的最短路用的是广度优先还是深度优先?(详细讲了dijstra算法的原理,属于广度优先)
2.你的专业是信号的,为什么又来做软件开发相关的?
3.你做的局域网聊天软件,是用什么协议通信的?(TCP)
  为什么要选用TCP?
4.是用的集中式服务器还是分布式服务器?
  如果要将其拓展成分布式的服务器,你会怎么做?(不知道,对分布式不了解)
5.如何测试两台主机是否连通?(用ping)
  Ping程序的原理是什么?(ICMP报文)ICMP报文是在哪个层? ICMP报文有哪些潜在危险?
6.你平时做项目是在linux下开发还是windows下,对linux系统了解吗?
7.如何要查看一个服务器的状态,比如硬件的使用情况,进程数等?
8. 了解数据库吗?(用过MYSQL)
   a.那你说说mysql的原理,客户端有一个查询,在数据库中是如何执行的?
   b.那查询语句在数据库中具体是怎么执行的?怎么找到对应符合条件的记录?
   c.那有了这个B+树以后,马上就能定位到符合条件的记录吗?
8. 对shell了解吗?
9.有个100G的文件,里存的都是query,找出出现频率最高的10个query
  假设小文件分得很小,能够把多个文件同时加载到内存,怎么进行并行处理?(这样的话,可以使用多线程)
  那你是如何确定需要线程的数量的?是线程开得越多越好吗,可以开启线程的数量有上限吗?那除了内存的限制还有其他的吗?假设内存没有限制,那线程是开得越多越好吗?
10.数据结构这些课程应该上过吧?
11.差不多就这样吧,你还有什么问题问我吗?
感觉这一面就一直在夺命连环问,这也是面试官很喜欢用的方式,考察我们对一个知识的掌握是否有一定深度

5.美团校招(3面挂)
由于没做记录,所以记得不大清楚了,留下的印象就是美团会问得很广,基本把语言、操作系统、网络、设计模式都问一遍,并结合项目问得很细,
还有就是每一面都要写代码(一面写了两个:大数相加,链表反转;二面:写一个循环队列)

6.腾讯(从内推到校招,一路坎坷,最终拿到offer)
腾讯是面得最多的公司,一开始面的MIG内推,测试开发岗,挂在二面;然而又转到SNG内推,视频面完一面后莫名的成了TST内推,在深圳面了两面,最后还是没拿到offer;接着就是校招,面完三面,当时仍没有收到offer(彻底心碎了 ,然后,12月底接到个电话,加面了一面,终于在元旦后发了offer

MIG内推一面:
1.简单自我介绍一下,包括平时做的一些项目
2.局域网聊天软件(注意,这也是我自己把面试官引导到我熟悉的领域
(1)tcp连接的建立过程,什么时候发起链接,什么时候connect返
(2)讲一下tcp层和ip层的区别,它们各自分管的功能;
(3)密码安全方面的考虑,有什么措施?
(4) 第一次登录时保存了密码,下次登录时还要输入密码吗?
    如何识别别人冒充你登录到服务器?
(5)讲一下epoll实现的原理; epoll和传统服务器的区别。
(6)做完这个东西有哪些心得体会,有什么收获?
3.C++的多态原理是什么?编译器上是怎样实现的?多态和普通函数的重写有什么区别?
4.对设计模式是否了解?举例常用的设计模式
5.文件在硬盘上的组织形式是什么?文件在硬盘上的块肯定不是连续的,那是怎样找到这些块的?
6.虚拟内存方面:
32位系统虚拟内存多大?
用户程序及内核代码在虚拟内存上的布局是怎样的?
虚拟地址是怎样映射到物理地址的?
7.平时有没有用面向对象的思想做过东西?从对象的抽象开始。
8.平时做信号处理算法方面项目时,能不能用到面向对象的东西?你给我讲一讲用matlab做的东西,或许我们可以一起尝试用面试对象的方式来实现?(鹅厂的面试官真的很nice,然而当我跟他讲完平时用matlab做的东西时,他立马就放弃了

MIG内推二面:
1.先简单自我介绍一下;
2.选两个你觉得体会比较深刻的项目讲一下;
选的华为比赛项目
  (1)当时是要解决什么问题?
  (2)用了哪些算法?是自己实现的吗?讲一下dijkstra算法的原理。。。。
  (3)在提高成功率上你做了哪些改进;
  (4)在团队中,你的工作量在哪?发挥了什么重要作用?
  (5)比赛过程中你遇到的最大困难是什么?
3.了解一些脚本语言吗?python,javascript,shell
3.平时写程序时有没有遇到过程序崩溃的情况?
当时做华为比赛时,遇到程序崩溃最多的是因为数组越界。。。。
那有什么方法避免数组越界?
4.对多线程了解吗?
5.对死锁是否了解?如何避免死锁?实现项目中有没有遇到过死锁的情况?
6.你是如何理解测试开发的?
7.你是偏向于测试还是偏向于开发?
8.给你一个网页登录的程序,你会从哪些方面测试它?
9.你觉得自己的优势有哪些?
10.你觉得自己有哪些缺点?
11.对html5有了解吗?
12.你对自己未来的规划是什么?
13.你有什么问题想问我?

MIG面挂后,不知道为什么又把我推到SNG了,面完一面后,过了挺久没抱希望了,突然收到电话叫我去深圳参加TST的内推面试:

SNG内推一面:(视频面试)
1.先自我介绍
2.你说学习的方法是先看一些经典书,那你看了哪些书?
3.局域网聊天软件是自己做的吗,还是有这方面的项目?
4.问一个ping方面的问题,有没有两台主机不能ping通,但可以建立tcp连接的情况?
有没有能ping通情况下,但不能建立tcp连接的?
5.一台主机在一个端口上可以建立多个连接吗?可建立连接数有上限吗?限制的因素有哪些?
6.你主要是在Linux下还是在windows下编程的?动态库用过吧?动态库的加载是在什么时候的?
7.写一个程序,求数组中第k小的数(自己电脑上写代码,面试官那边能看到)
8.问一个非技术类问题:你需要把一些罪犯送到一个荒岛上,于是你请了船长帮你来运这些罪犯,你需要支付一笔钱给船长,问题是,在运输的过程,有些体弱或生病了的罪犯会  被船长扔到海里,你如何防止这样的事情发生?即你的目的是要让所有罪犯安全送到岛上,你可以有什么办法?(至今不知道。。。。。)

大概过了2周后通知去深圳面试:

SNG深圳现场一面
一进去先让我做两个智力题,给40分钟(其中一题有些思路,差不多做出来了,另一题没任何思路),然后问了下我华为比赛的项目,怎么实现的,自己做负责哪块?

SNG深圳现场二面:
hr面,聊聊自己的性格、爱好、家族情况、优缺点,腾讯的hr还是很nice的,整个面试气氛比较轻松。

面完看着小伙伴们都收到offer了,最后又没有我,伤心。。。。。 然后就等到 腾讯校招了,最后一次机会。。。。。

腾讯校招一面:
1.你先简单自我介绍下吧(介绍时面试官在看我简历)
2.操作系统,对进程的理解
3.那一个进程有哪些资源
4.进程间的通信方式
5.有没有想过进程间的通信方式在操作系统里是怎么实现的?
(我就以共享内存为例,说大概是跟虚拟内存映射为物理内存的机制差不多)
6.那你说说虚拟内存是怎么映射到物理内存的?
7.线程间的通信方式有哪些?
扯到读写锁 就问我读写锁方面的
8.对操作系统还知道哪些?(Linux下的文件系统,io这些)
9.看我项目里有epoll,问我epoll的原理
10.找链表倒数第k个点(说了下快慢指针的方法)
还有什么方法?(想了半分钟,说可以用递归的方式,然后跟他解释了下,但没说清楚,就叫我写一下代码)
但最后代码也没完全写对,当时脑子卡壳了,其实挺简单的,
(这也是一面最遗憾的地方,但幸好面试官说,你能想到几种方法,已经可以了)
差不多了,今天的面试就到这吧,回去等通知

腾讯校招二面:
1.先自我介绍
2.你是信号专业的,有上过基本的计算机课程吗?
3.对操作系统了解吧
4.Linux你学过什么?(主要是linux下系统编程方面的,还有一些操作系统方面的概念,如进程,线程,linuxIO这些)
5.那你讲讲线程与进程的区别?
  为什么线程的切换速度快?
6.那一个进程的内存布局是怎样的?
8.进程间的通信方式有哪些? ( ……….)   
10.为什么共享内存是最快的IPC?(把共享内存和信号队列的实现上对比了一下)
  反问AB两个进程访问共享内存不会有什么问题吗?(说需要有同步)
  接下来就问我信号量,说信号量的原理,怎么使用信号量
11.对网络编程方面的知道吗?(知道一些,主要是tcpip协议及socket API这些)
12.tcp udp有什么区别?
13.那tcp是怎么实现流量控制的?(滑动窗口+拥塞窗口)
14.你刚才说到tcp在传输层加了很多东西,所以比较慢,那具体有哪些,怎样导致它比udp更慢?
15.画一下TCP的状态转换图
16.对网络编程方面的IO操作有了解吗,说说阻塞IO和非阻塞IO的区别?
17.什么是异步IO,异步IO完成后有什么通知进程的方式?(说到有信号驱动的IO,还说到epoll)
18.你项目中也用到了epoll,你能说说epoll的原理吗,以及和select,poll的区别?
19.数据结构算法也熟吧(说了一些常用的数据结构,和一些排序算法)
20.查找算法有哪些?(说了常用的是二分查找)
21.那写一个二分查找的程序吧,要以能在电脑上运行的标准来写
(写完后,他一看是递归的,就说你怎么用递归写,你知道递归有什么缺点吗? 当时有点紧张了,赶紧说了下递归的缺点,然后强调说我也可以写循环的 接着就让我写循环的了)
22.看完后,紧接叫我写单链表反转的代码
23.对c++掌握的怎么样?构造函数和析构函数的作用,为什么需要它们? (期间扯到了对象的分配,new和malloc有什么区别)
20.能说说你对多态的理解吗?
21.你学的是c/c++语言,你对语言是怎么看待的?
22.你想做的方向是什么?(linux下的服务端开发)
23.我这里没有问题了,你有什么问题问我的?(就问了下面试官是哪个事业群的)

腾讯校招三面(HR面)
1.先自我介绍
3.说我之前内推面试过,看到我应聘的测试开发,问我为什么,问我内推为什么挂了。
4.这些内推面试之后到现在这段时间内,有没有总结,然后去改进?
5.说一个你最近觉得做得最成功的项目(华为比赛)                    
6.具体是怎么做的,自己承担了哪些工作
7.当时遇到的最大困难是什么?
8.在这个比赛的过程中队员之间有没有产生过分歧
9.你是怎样自学的,如何知道自己要学什么?
10.你有什么优缺点?
11.进入公司后,你希望从这个岗位上收获什么?
12.面过哪些公司?
13.说到华为有找学校拿三方的情况,问我是否了解,华为是不是跟你电关系很好?
14.问我有什么问题问她?(问完后,还跟我聊了挺多的,感觉面试官很nice)

整体校招面下来感觉还不错,以为问题不大了,然而还是没有收到offer,当时也就彻底放弃了腾讯,安心去华为,跟华为签了。
But。。。。12月底又突然接到hr电话,问我还有没有意向去?(赶紧强调自己想去),然后就又面了10几分钟,等通知,终于在元旦节后收到offer,总结下来腾讯从内推到校  招,总共面了有9次(两个部门),也是醉了,最终收到offer,感觉挺幸运的,接下来又要开始漫长的毁约之路了(学校今年卡得严),希望自己最终能去腾讯!

我把每次面试问了哪些问题都讲得很详细,希望对之后准备校招的有一定参考意义吧!也给自己赞点人品

猜你喜欢

转载自blog.csdn.net/ZX714311728/article/details/61927007
今日推荐