必读专题Chat
《后端/服务端开发方向面试题全解析》
博主博文汇总
《C/C++后端-服务端开发技术博文分类汇总》
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火、京东、去哪儿等10家互联网公司的校招Offer。6、7月主要是做系统复习、项目复盘、LeetCode与牛客刷题等准备工作,并且投了字节跳动、拼多多、猿辅导在内的几家公司的提前批,当然还是挂在了简历,因为毕竟自己的学校、学历、项目经验肯定比不过牛客网上那些大厂实习的大佬了。
8月开始海投,真的是海投,至少不下60家吧,8月份主要是各大公司的提前批,线上的笔试面试。自己的第一场面试是8月上旬趋势科技的提前批,西安站现场面试,并且特别的幸运的拿到了Offer,最后给的薪资也是小SP。在拿到了第一份Offer后,之后笔面试的信心会增加不少,因此还是建议大家一定要抓住8月提前批的机会,拿下几家公司,至少在9月跑宣讲时心里比较稳。
秋招可谓金九银十,九月份一定得拼尽全力,千万别让自己闲着,你不努力马上就会被竞争对手赶超,在前一天晚上准备好第二天参加宣讲的公司,最好选择有现场笔试的公司,因为现场笔试的通过几率比线上要高很多,自己参加的现场笔试通过率是100%。一般公司现场笔试后第二天会安排现场面试,当然现场面试肯定又要比线上视频面试/电话面试通过率更高,因为面对面沟通的效果肯定要比隔着屏幕好很多了。9月,自己毅然决然地放弃了保研的机会,全身心的投入到秋招之中,最繁忙的一天参加了4个公司的现场面试。由于之前的海投,导致各种面试冲突、笔试冲突都要处理好,大家在选择时首先可以和HR沟通,能否调整笔面试时间,若无法调整,肯定要有舍弃了。
自己参加的笔试(在线/线下)累计48场次,共收到了24家公司的面试邀约,因为时间地点等原因拒掉了5家公司的面试,截止到目前收到了网易、京东、去哪儿网等10家互联网公司的校招Offer。
目前已经签约网易雷火!在秋招过程中,认识了很多一起找工作的小伙伴,交流面试经验、求职经历,少走了很多坑,收获还是很大的。另外在面试过程中也遇到了很多非常友善的HR小姐姐、技术面试官,其中一部分也互加了微信,聊了很多对于未来职业发展的话题,认识他们也是真的开心。在我面试的公司中面试官没有特别刁难的,遇到不熟悉的问题面试官们也会慢慢引导,但是有其他的小伙伴反映说遇到了很不友善的面试官,甚至有语言攻击,其实如果能遇到这类面试官就要真正考虑下这家公司是否值得加入了,因为面试官的素养基本可以体现出一个企业的文化。
秋招说实话真的是实力和身心意志力的双重考验,尤其是没有Offer或者没有满意Offer的时候,其实咬咬牙,坚持一下下也就过来了,但这个过程的确很辛苦,整个八九月,早七点起床,晚上12点左右休息,有时熬夜到一两点也是很常见的,六七月前期准备了很长一段时间基础,包括语言基础、Linux、网络、操作系统、数据库、分布式系统相关的知识,LeetCode只刷了200多道题目,但刷的都是高频题目,另外剑指Offer又刷了两遍,这两大法宝搞定了,面试中的算法题基本没问题,笔试的算法题可能相对难一些,还是要靠一定时间训练吧。
8月最多一天要做四场的笔试,9月最多一天参加四场面试,然后每场面试结束后,自己都会进行复盘,写面经,查漏补缺,这个很重要,因为面试过程中暴露出的知识弱点盲点很有可能在你之后的面试中被提问到,千万别抱侥幸心理。
校招其实就是对毕业生的各方面考量和综合筛选,包括基础知识水平、知识广度与深度、知识的拓展思维与综合运用能力(场景问题)、代码能力等。首先明确一点,硬实力是决定性因素,在没有实力之前去面对一切,结果会很不尽人意,所以前期准备过程中,一定要夯实基础,再做以相关的拓展,还有面试中的算法题考察一定得撕得出来。另外不要一味地强调技巧,没有那么多捷径可以走的,还是要一步一个脚印,扎扎实实走好每一步。
C++后台与Server端的技术栈包括C/C++语言基础、计算机网络、操作系统原理、数据库原理、Linux操作系统、算法设计与分析、设计模式等几个模块。这些模块都要有了解,知识要有广度,这些基础最好多学习几遍,温故而知新,其实在每次学习的过程中又会无形之间发现知识间微妙的联系,甚至你也会在笔面试或者与小伙伴的交流中得到答案,当然顿悟的前提一定是大量的知识积累。其实这些模块不是每个都要非常精通(当然这样最好),而是在面试官提问时不会不知所云。对于基础的知识要答得很漂亮,但是对于关键的问题要有较深的理解,即知识要有深度,不能只浮于表面,一定要突出自己的亮点,例如你的算法功底比较好,或者你对Linux这块了解的很深,对于它的内存管理、进程管理都可以了解到内核级别等等。要建立起来知识的框架和体系,搞清楚它们之间的联系和区别,包括实际应用场景、优缺点等等。面试一定要展示出你的综合实力,要有与别人不同的地方,这些会是你面试的加分项。
博主原创博文汇总:《C/C++后端-服务端开发技术博文分类汇总》
推荐的书单
C/C++语言基础:
计算机网络原理:
操作系统原理:
SQL与数据库原理:
Linux操作系统:
算法:
数据结构:
设计模式:
上述的知识技能搞定了之后,技术方面应该问题不大了,可以根据自己的兴趣点再继续做拓展就OK了,然后每天要保持一定量的刷题频率,可以直接在牛客网/LeetCode上按模块做就OK。接下来向大家分享一下面试过程中的一些经验和技巧,当然前提是你的基础非常扎实,上述部分书单中的内容都有掌握。
其实面试不仅仅是一场个人solo,是个企双方的双向匹配选择,它不仅考察个人的硬实力,也就是知识储备和专业能力,也是个人综合素质的考验,即软实力的比拼,通俗的讲就是情商表现了。性格方面的东西其实是很难改变的,但是在面试过程中我们还是要尽可能的展现出自己的优势,掩盖住一些语言的锋芒或者不好的状态,也要讲究回答问题的技巧,简单总结如下:
string str;
getline(cin, str); // 输入一行数据
vector<string> vec;
int pos = 0;
while (str.find(' ') != str.npos) // 这里是处理按空格分割的数据,如果是其他的分隔符,这里和下一行更改为指定的分割符即可。
{
pos = str.find(' ');
string tmp = str.substr(0, pos);
vec.push_back(tmp);
str = str.substr(pos + 1);
}
vec.push_back(str);
参加各大技术岗位招聘的过程中,前期经过了简历筛选、笔试、面试官筛选等一系列环节,面试是通往Offer的最后一步,不同公司的面试流程不同,现场面试一般是一站式面试,远程面试一般是电话面试或视频面试,视频面试一般在采用牛客网的视频面试系统,当然无论是现场面试还是视频面试,技术岗肯定少不了Coding环节,因此扎实的代码功底是才是真正的硬实力。
面试其实除了实力之外,当然技巧也是很重要的,主要是对面试节奏和面试问题的把控,把控面试节奏和放任面试节奏会是不同的结果,一比一的回答面试问题和能够引导面试官到自己熟悉的领域上来又会是不同的结果。
接下来我从技术岗求职简历、面试前期准备、面试技巧和面试心态、面试复盘等四个方面给大家做以分享。
求职简历-技术岗位:简历是我们应聘工作的敲门砖,技术岗简历最为注重的就是项目经历和技术栈了,因为面试过程中面试官基本就是围绕这些内容展开技术提问的,所以技术栈这块主要就是展现自己比较熟悉的技术点,不能为了简历漂亮就把一些不是很熟悉或者根本没有使用实践过的技术点写上去,否则面试时必然被Out。并且可以根据自己的掌握程度采用不同的措辞,如了解、熟悉、精通等,精通还是慎用吧~。另外投递简历时要注意招聘官网上写的应聘要求,是否与自己的技术栈相匹配,如果不匹配,那很有可能简历筛选这一关就会被out掉了。简历上写的技术点如果自己只是了解一些,那么面试官问到时一定要讲清楚,否则面试官可能会一直深挖下去,效果就会很差了。对于项目来讲,首先必须是自己独立完成或者团队完成自己做了实质性工作的,才可以写到简历上。另外,简历上的项目经历主要介绍项目技术点、功能即可,至于具体实现、项目难点等都可以在面试时和面试官交谈,不必写在简历上,并且自己最好能够根据项目做一些问题拓展,如本版本的优缺点,具体改进方案,整体架构的优化等等。在经过了几场面试后,项目也介绍过几遍了,也发现了一些项目问题,可以重新修改并且润色一下简历,对面试官提出的项目问题做到心里有数。
面试前期准备:面试一家公司前,首先要对公司和应聘的职位熟悉,自己的简历上的技能点要烂熟于心,项目的各种问题要熟悉,可以多看看该家公司的面经,看看自己是否能完美的回答出来面经上的问题,包括回答问题的流畅度、逻辑层次、条理性等,多去刻意锻炼自己的表达能力。牛客讨论区是个不错的选择,基本涵盖了你所能应聘的所有公司的笔经面经,然后自己最好对这些问题再做以拓展,看到更深层次的东西。之后我会将我总结的面经题库分享给大家。
面试技巧:面试是你与无数竞争对手的一场实力比拼,在实力相当的情况下,就要PK的是面试过程中的非技术因素了,如表达能力、精神状态、专注力等等,所以掌握一些简单的技巧还是很有用的。首先,线上与线下面试选择,肯定是首选线下现场面试,我手里的9个Offer全部参加的是线下现场面试,因为现场面试能够向面试官更加充分的表现自己,展现自己的精气神,包括自己的专注力等,更重要的是与面试官交谈时的眼神交流能够让他看到你的态度,眼神要专注不要游离。然后对于面试官提出的问题不要急于回答,哪怕是很熟悉的问题,也要考虑清楚,组织好语言后不慌不慢的答出来。而且一些辅助语言也会让别人听着很舒服,比如我经常说,“这个问题之前自己也没有遇到过,先让我想想吧”,“我是这样理解的,···,您看对不”,“这一块我之前确实没有了解过,我下去会学习一下~”,就像这样有礼貌的、温和的语气,会给人很舒服的感觉,不要遇到不会的问题就说我不会、我不知道,稍微委婉一点表达会更好。
因为技术面试一般就两到三轮,所以每一轮面试官需要在短暂的时间内快速评判出应聘者的综合能力,所以可能会需要考察语言基础、网络、操作系统、数据库、算法、数据结构等很多领域,虽然面试问题可能会很杂,但是自己最好能够稳住面试节奏,在自己擅长的领域,讲的深一些、多一些,自己主动的做这方面的拓展,这样面试官就会发现你的亮点,可能会一直深挖的问下去,如果掌握了足够的知识回答这些问题,那么效果肯定是很好的。如面试官提问Linux五种IO模型,我们可以拓展到阻塞与非阻塞、同步IO与异步IO的概念与区别上,进而拓展到IO模型的两个阶段上等等。
面试心态:面试过程中心态还是很重要的,每场面试不要太在意最后的结果,不要太紧张了。尤其是还没有拿到Offer或者没有拿到满意Offer的同学,每次面试都可以定一个小目标,比如上次一面没有通过,这次一面过了就是进步,接下来好好准备二面吧!把自己的目标一点点的向上提。另外要在面试过程中集中注意力,表达自己,充分的展现自己,也不要受面试官的影响,的确有时面试官会忙别的事情,也不要太在意了,我们需要做的就是把自己的能力展现出来就OK。面试之后,无论面试是否通过,都不要太影响自己的心情,没通过的话就当做积累面试经验了,并且及时复盘,发现自己的不足,会在下场面试中做的更好。在自己没有确定结束秋招之前,这里将一直都会是战场,对于一场面试,你的对手可能正精神饱满的准备着,而你却沉浸在上一场面试失败的失落感之中,最后面试结果也就很清楚了,所以一定不能太情绪化,不能太松懈,否则你就可能输了下一场。
面试复盘:面试之后,最关键的就是要及时做好复盘总结,总结自己的知识弱点,面试中自己了解却没有讲清楚的技术点,包括项目问题、面试官提出的建议等。最好自己能够写写面经,简单总结一下面试效果,其实面试结束后自己还是能够基本判断出是否能够通过的。透过面试官的反馈建议能够清楚的了解到自己存在的问题在哪里,面试结束后及时查漏补缺,有针对性的补充不足。其实面试是提高能力的最好途径,我们前期的复习都是很宽泛的,什么都会涉及到,抓不住重点,但是通过面试我们便知道了企业招聘最喜欢考察的点在哪里,你也会明白自己比较擅长的地方在哪里,在之后的面试过程中可以把面试官向自己擅长的方向引导,有利于我们更充分的展现自己。
秋招面试,真的不是技术实力硬或者工程能力强就可以拿到Offer的,自身的软实力,如状态、心态、临场反应能力、态度都有可能成为是否通过的关键因素,还是要靠我们不断的经验积累和知识储备才能达到一个不错的结果。我和一起找工作的同学交流时,大家都会反馈一个问题,就是对于一个很平常的问题,不知道该怎样回答,如项目中遇到的技术难点是什么,怎么解决的,为什么要使用这个技术等,还有HR面问到的各类开放性问题,其实与技术无关 ,都是情商的考验,但却实实在在会影响面试官对你的评价,所以最终还是要保持谦逊、诚恳的态度,才能拉近与面试官的距离,在秋招中斩获满意的Offer!
面试方式:西安现场面试
一面 (2019.8.13 10:20 - 10:50)
秋招第一面,内心小忐忑,一面面试官很和蔼,我进去时面试官竟然在看我的博客,吓晕~
1、解释一下Linux下两种高效的并发模式
2、如果要进行中文词频统计,应该如何统计,如何设计中文分词算法?
3、Map的底层是如何实现的?时间复杂度是多少?
4、C++里边的对象模型了解吗,具体讲一下?
5、讲一下C++的虚继承以及它的对象模型?
6、多重继承中使用dynamic_cast类型转换符把孙子转换成爸爸会发生什么?
7、一个类会有很多成员变量,成员变量的排列顺序会影响到对象的大小吗?
8、两字节对齐、四字节对齐,变化的可能性有哪些?
9、Linux的内存管理机制谈一下,如何进行段页映射?
10、Linux下线程同步机制有哪些,具体的讲一下。
11、场景题:有两个函数,函数A和函数B,函数A中调用了函数B,这两个函数都会申请互斥锁,在同一个线程中,函数A申请了互斥锁,会出现什么情况?
12、如果让你设计一个同步的代码,你如何避免死锁的产生?
13、闲聊:将来想在哪工作?将来你想从事哪个方向的工作?
二面 (2019.8.13 11:00 - 11:40)
1、简单介绍一下你的项目?
2、这个项目怎么个用法?
3、你怎么知道服务端的Md5?
4、你的客户端是个什么样的控制台?任何一个支持SSH的都可以连接吗?
5、你的程序如何拿到我本地的文件进行传输?
6、如何实现断点续传?
7、断点续传中服务端如何实现数据追加?
8、传输过程中网断了,怎么办?传输过程中对异常中断的处理?
9、两个客户端能不能同时传?你如何解决多客户的并发处理?
10、你的项目怎么实现高性能?
11、一个进程能打开多少文件描述符?最大能改到多少?
12、你觉得多线程这种它的性能比较高这是你的一个点是吗?
13、有没有办法让文件传输更快一点,比如说一个很大很大的文件?几十个G?因为你这个最多就一个线程在传?
14、你谈到了大文件分片传输,如何对它们进行组装?在这种情况下断点续传怎么做呢?
15、客户上传文件断开,未上传完毕,然后客户修改文件,那么再上传怎么办?
16、Stat结构体中文件的相关时间属性都有什么?
17、谈一下你这个网络的项目?是你自己写的玩的还是?
18、Redis对存储的消息需要满足什么要求?
19、场景题:每天一个小时存储消息,存储是按小时存储,如何按天统一删除呢?
20、Linux了解吗,我想知道当前是谁在使用我这个服务器?谁在做什么事(进程)?如何杀掉进程?
21、场景题:浏览器输入www.baidu.com发生了什么?它是如何知道服务器在哪呢?
22、有一个协议,在局域网里边如何找一个机器,通过网线连接的,它是如何知道机器的IP的?
23、一个程序运行起来如何变成进程的?从可执行文件到进程发生了什么?
HR面
1、趋势科技不知道你了解哪些,基于你的了解你认为什么是吸引你的地方?
2、谈谈你对趋势科技文化的了解?
3、地点的话你有考虑吗?
4、如果说你选择一家公司,那么你认为最重要的因素是什么?
5、技术的话,你通过这两轮面试,你有什么感受?
6、你有什么想问我吗?
面试方式:牛客网视频面试
一面 (2019.8.13 15:30 - 15:50)
上来先写一道算法题:给你一个有序整数数组,数组中的数可以是正数、负数、零,请实现一个函数,这个函数返回一个整数:返回这个数组所有数的平方值中有多少种不同的取值。
说了一个set的O(n)解法,然后它说没有使用到数组有序的特性,再想想,然后说了双指针法,过了。
1、介绍一下自己的项目?
2、断点续传是怎么做的?
3、讲一下你这个里边的多路复用技术?
4、讲一下epoll为什么性能是最高的?比其他的有什么改进?
5、你用到的Redis是怎样的架构,你这个集群是怎样的规模?
6、你这个Redis具体的用处是什么?你用到了Redis的哪些技术?
7、你的Redis是怎么部署的?部署模式是什么?
8、单机Redis如果退出了,那么我的消息岂不是丢掉了,Redis针对这种情况有什么解决方案?
9、你有什么要问我的
二面(2019.8.16 11:00 - 11:30)
1、为什么要做这个项目?
2、有没有做过性能测试?
3、按你的理解,有好多个机器,一般吞吐会达到什么级别,有这个概念吗?
4、你认为要实现大规模并发的资源瓶颈在哪里?
5、多线程和多进程的区别?
6、有没有了解过比线程更轻量,并发更高的技术吗?
7、场景题:如何实现增量拉取用户列表(增加、删除)?如何设计这种交互协议?
8、算法题:求两个数组的交集、并集?
9、你有什么要问我的
场景题答的确实有点差,二面两小时后,官网流程变灰,鹅厂拜拜~
面试方式:一面电话面试、二面HR面QQ视频面试
一面(2019.8.17 10:02 - 11:05)
1、gdb如何调试指定的进程?
2、gdb如何查看线程堆栈?
3、如果正在调试的程序被信号打断怎么办?
4、信号处理的三种方式(忽略、默认、自定义),具体的标志是什么?
5、32位和64位系统下char类型、int类型、指针类型等常见类型的大小是多少?
6、让你设计一个可变长结构体,你会怎么设计?(互怼8分钟)
7、全局变量存储在哪个区?
8、给了一段代码,问这些东西存放在哪些空间中?(int a ;char *c = (char*)malloc () , snprintf(c, “%s”, “bb”))
9、内存对齐问题,32位系统与64位系统,(char int char*)
10、malloc申请的内存最大可以申请多大?
11、了解C++的多态吗?
12、谈一下纯虚函数,再说一下它有什么作用?
13、什么函数不能声明为虚函数?
14、STL用过吗?
15、讲一下vector的内存分配问题?
16、数组和链表的区别?
17、多线程下操作链表应该注意什么?
18、双向链表交叉会形成一个什么形状?
19、如何判断双向链表是否交叉?
20、谈一下哈希表?
21、一致性哈希算法说一下,负载均衡说一下?
22、哈希表处理冲突的方式?
23、开链法如果一个桶中结点太多了该怎么办?
24、哈希环中只是用源IP地址映射导致只集中在一个结点上该怎么办?
25、recv函数用过吗?recv的返回值说一下?
26、recv的ERROR值、SOCKET_ERROR说一下?
27、讲一下recv的非阻塞模式,ERRORNUMBER具体的说一下?
28、libevent说一下,它有什么特点、优点?
29、epoll有什么特点?具体的谈一下?
30、讲一下libevent的两种触发模式?
31、strcpy函数的缺陷有哪些?
32、有什么可以替代strcpy的函数?
二面(2019.8.18 16:10 - 17:40)
1、快速排序算法及其优化
2、二叉树的结点删除怎么做
3、Heap有了解吗,具体讲一下
4、算法题:合并两个有序数组、字符串数组的最长公共前缀、判断单链表是否有环
5、Linux内核链表,内核的其他数据结构
6、算法题:合并多个有序链表
7、谈项目各种问题(谈了很多很多)
面试官迟到,上线后面了一个半小时·······
HR面(2019.8.20 11:20 - 11:40)
1、简单介绍一下你自己
2、你这几个项目是团队开发还是独立开发
3、介绍一下你的专业
4、你学习的方式都有哪些,平常有什么爱好
5、你觉得团队合作和个人独立开发的区别在哪里
6、你对薪资的要求和期望
面试方式:牛客网视频面试
一面(2019.8.27 14:00 - 14:40)
1、自我介绍
2、平常用的语言是什么,别的语言会吗?
3、平常主要是在LINUX下开发吗?
4、你这边投递的是服务端开发工程师,你知道服务端开发是干什么吗?
5、我看你项目使用Redis做队列,能讲讲你这个架构吗?
6、Redis还有哪几种数据结构?
7、Redis底层的数据结构是什么,有了解吗?
8、Redis多级部署,主从同步怎么做?备份怎么做?
9、Docker讲一下?Dockerfile熟悉吗?
10、数据库熟悉Redis,其他的熟悉吗?
11、MySQL的存储引擎有哪些?
12、InnoDB和MyISAM存储引擎有什么差别,你觉得在什么情景下使用比较合适?
13、如果我有一个MySQL的表,如果查询速度比较慢,我应该怎么定位问题?
14、如果数据量比较大,要进行分表,应该满足哪些原则,谈一下分布式系统的分库分表策略?
15、MangGDB了解吗?
16、C++ inline内联函数的原理是什么,什么情况下使用比较合适?
17、C++程序执行时,内存是怎么分配的?
18、如何定位内存泄露?
19、智能指针的原理?
20、C++中的模板类用过吗,在什么情况下使用?
21、第一个Muduo网络库项目的代码量有多少?
22、Linux检查网络状况、内存、负载的命令。
23、守护进程有用过吗,使用场景?
24、epoll的底层数据结构讲一下。
25、epoll比较重要的函数都有哪些,API接口?
26、epoll和select最大的不同的什么?
27、TCP连接什么时候处于TIME_WAIT状态?
28、如何解决大量TIME_WAIT出现的问题?立即生效的方法
29、Muduo网络库的项目做得是长连接吗?
30、http支持长连接?
31、http和https有什么区别?
32、加密方式都有哪些?
33、怎么控制安全,因为HTTPS也不是绝对安全的?
34、有什么问题问我?
二面(2019.8.27 15:00 - 15:20)
1、自我介绍,怼项目相关的各种问题一大堆:如何检测客户异常退出、如何设计使得连接利用率最高?
2、析构函数中能不能delete this?为什么?
3、软连接和硬链接的区别。
4、共享库和静态库的区别。
5、Linux下如何引用三方库?
6、场景题:抢红包。
二面面试官好像不是很Care我的项目,之后一脸高高在上的样子,加上场景题答得太简单了,不够深入,二面OUT
面试方式:Zoom视频面试
一面(2019.8.28 14:30 - 15:30)
1、简单自我介绍一下
2、讲一下Muduo、Redis的项目,做了什么东西?
3、用到了Redis的什么功能?
4、Redis主要使用的是开源客户端开发的还是Redis的接口。
5、发布订阅用的是Redis的裸协议吗?
6、Redis连接有心跳检测吗?
7、你使用Redis的裸协议,发布和订阅需不需要建立心跳呢?
8、一致性哈希算法讲一下?
9、一致性哈希算法主要解决什么问题,与其他hash算法的区别是什么?
10、TCP连接中TIME_WAIT状态讲一下?
11、如何在应用层解决、避免TIME_WAIT状态?
12、Nagle算法讲一下?
13、有一个很大的UDP包,会不会丢包,什么情况下会丢包,应用层会不会出现接收到部分包的情况?
14、TCP的RST报文在什么情况下会产生?
15、连接池有了解吗,如何保证连接池里的连接都是正常的,连接对端关闭连接,怎么办,如何设计?
16、讲一下单例模式?
17、程序运行起来的空间分布、内存分布是怎样的?
18、fork函数创建出子进程后,父子进程对文件描述符是共享的吗?
19、Linux的buffer和cache的区别讲一下?
20、Linux下的信号了解吗,怎么使用?
21、STL 中 map的key能不能是一个结构体?
22、讲一下C++ 11的智能指针?
23、shared_ptr 指针释放了,weak_ptr 会自动变为空吗?
24、MySQL里边的主键索引和辅助索引讲一下?
25、如何设计一个LRU算法?
26、共享屏幕,算法编程:二叉搜索树转双向链表。
Bigo是我面过最奇葩的公司,自我感觉面试题目回答的很流畅,算法题也都撕出来,面了一面直到现在都没有任何消息,肯定是挂了,但官网流程还是HMPS(面试中),佛性招人啊~
面试方式:牛客网在线面试
一面(2019.9.1 16:10 - 16:40)
1、tcp发送的报文中包含了源地址端口和目的地址端口,会不会发生改变
2、线程间同步的机制有哪些?
3、CAS讲一下,CAS和普通的锁有什么区别,CAS有什么问题?什么情况下会使CPU利用率变高?怎么解决?
4、二叉树遍历的四种方法的时间复杂度、空间复杂度?
5、算法题:O(1)空间的二叉树遍历,结构中包含了指向父节点的指针,如何知道该结点是否遍历过。
快手的这次面试自己是真的面的很差劲,可能是下午状态也不好,脑子太糊~
10月12号被捞起来重新面
一面(2019.10.12 13:33 - 14:35)
1、讲一下你这个项目,然后之后的问题全部围绕项目展开
2、讲一下TCP Socket编程中的Server端编程流程
3、那你的Server主框架中是怎样的
4、算法题:设计一个高效算法,计算 X^Y mod N.
5、STL有了解过吗?具体的讲一下?
6、容器了解哪些?
7、从源代码到可执行程序都有哪些步骤?
8、可执行文件的文件结构大概是什么样子的?
9、在执行期的程序都会有哪些段?
10、堆和栈的区别有哪些?
11、多线程环境下,对于堆和栈的话哪些是私有的,哪些是公有的?
12、二维数组按行和按列访问的效率
13、64位和32位基本数据类型的大小
14、实现一个vector需要注意什么,需要实现哪些结构?
15、迭代器失效的从场景有些?
16、迭代器失效的情况下对迭代器进行解引用会出现什么问题?
17、UNDEFINE BEHEAVIER
18、vector的 [] 运算符重载的返回值是什么
19、对其返回的引用进行push_back()操作会有什么问题,如何解决?
20、C++ 智能指针有哪几种?
面试方式:西安现场面试
一面(2019.9.7 19:00 - 19:45)
1、解释Reactor模式、preactor模式、半同步半异步模式
2、代码题:分析下面代码,然后讨论底层实现、内存分配策略、内存管理
struct A
{
int x,y;
}
A *p = new A[10];
delete A;
3、游戏引擎了解不
4、手写单例模式,然后问各种问题
5、手写shared_ptr
依然是面试很差劲,最后一个shared_ptr没撕出来,极其失落,回来手写了两个不同版本的智能指针的实现,之后的很多面试都问到了这个,可见复盘的重要性!
面试方式:西安现场面试
奇安信9月9号参加线下宣讲会和笔试,凌晨5点收到下午面试的通知,真拼。
一面(2019.9.10 14:00 - 14:40)
1、手撕二叉树层序遍历(非递归和递归)
2、Tire树简单的讲一下,画一下它的构建过程,再讲一下应用场景
3、项目的多线程怎么做的,逻辑画一下
4、socket编程的流程将一下,以及它的网络协议栈的变化情况
5、TCP三次握手、四次挥手的图画一下,标注每种转换的状态
6、TIME_WAIT 状态讲一下,为什么需要2MSL的定时器控制
7、操作系统熟悉哪些,linux还是windows
8、linux下程序调试怎么做,linux下如何调试多线程
9、如何调试死锁问题,如何通过gdb检查调试死锁
10、编译时加上-g选项的作用,调试信息都包括哪些
11、进程复制怎么做?fork的底层实现怎么做
12、除了fork外还有什么其他方法,它们之间的区别有哪些
13、epoll讲一下,它的底层实现是怎样的
14、LT和ET模式讲一下,底层怎么做的
15、数据库熟悉哪些,将一下MySQL的存储引擎,区别
16、讲一下事务的四大特性,数据的不一致性有哪些,数据的隔离性有哪些
二面(2019.9.10 15:00 - 15:20)
1、自我介绍
2、将一下你这里边的Reactor模式、Proactor模式、半同步半异步线程池
3、如何设计一种更高并发的程序,比你多线程程序还要更快的
4、你了解其他语言吗,比如python、java
3、项目中的Redis怎么做的,用到了哪些特性
4、你如何去保证客户端与服务器的长连接
5、你这个文件传输的断点续传和秒传怎么实现的
6、讲一下sendfile零拷贝机制的底层是如何做的,为什么它比较高效
7、讲一下你的一致性hash算法如何实现
HR面(2019.9.10 15:40 - 16:20)
1、用三四分钟简单介绍一下自己
2、你获奖还挺多的,你这个社团先进个人是一个怎样的奖
3、你是如何学习一门语言或者技术的,通过哪些方式
4、你觉得你的优势是什么,是总结能力强、学习能力强、还是驱动力强一些
5、我看你主要用的是C和C++语言,其他语言了解吗,描述一下C++和Java的工程应用上都有哪些区别
6、讲一下你大学这几年中最有成就感的一件事
7、描述一下你们部门的主要工作
8、你选择一家公司的主要标准是什么
9、谈一谈你对腾讯、阿里巴巴和字节跳动的企业认知
10、现在假如你都拿到了它们的offer,你会怎么选择,排个序,然后讲一下
11、你对奇安信了解哪些(可劲的夸)
12、你有什么要问我的吗
HR最后做面试总结,最后说我的逻辑思维和反向思维不错,笔试成绩还挺高的,性格也比较好,整体不错。
面试方式:西安现场面试
一面(2019.9.10 16:40 - 17:20)
在一个大厅中,软件开发岗是个女面试官,看了我的简历,就准备开始了
1、简单介绍下自己
2、刚才去哪家公司面试了
3、你对优必选了解多少
4、开始问项目,你这系统是怎么使用的
5、后面基本一直在讲项目,能讲大半个小时,然后在A4纸上画项目的架构图,运行的流程图,然后讲讲讲
6、面试官说我看看你的博客吧,但是它的网慢没进去
7、protobuf了解不
8、HiSocket了解不
9、最后说我给你安排个二面吧
HR面(2019.9.10 17:25 - 17:50)
1、HR上来说一句,你是我今天面试的第一个本科生,来我这里面试的都是西电啊,西交啊,什么的。
2、你觉得你自己的优势、亮点在哪里
3、你觉得你自己缺点有哪些,为什么不考研或者保研
4、你认为成功最重要的因素都有哪些
5、你觉得本科生和研究生的差别在哪里
6、你们学校和交大、西电的区别在哪里
7、我看你才过了英语四级哦,那么其实英语很重要的,我身边的同事,它们英语比较好的人发展也比较好
8、你对优必选了解哪些,昨天有没有来我们的宣讲会
9、那今天就到这里了,谢谢~~
面试方式:牛客网视频面试
一面(2019.9.12 14:10 - 15:30)
1、C++的内存布局
2、空类的大小
3、设计模式:抽象工厂和工厂方法的区别
4、类的大小,添加不同的成员变量、成员函数
5、智能指针
6、算法题:求数组中第一个缺失的正整数
技术问答记不清楚了,都很常规,最后算法题也撕出来了,面试结束后上Leetcode上看还是困难级别,但面试官最后竟然没给过,暴风哭泣~~~
面试方式:西安现场面试
一面(2019.9.17 11:52 - 12:39)
1、自我介绍
2、简单介绍一下你的项目
3、空类的大小是多少,空类中默认产生什么函数,详细讲一下
4、C++多态讲一下,直接在纸上画一下多继承中基类有虚函数时子类对象的内存布局**
5、智能指针讲一下
6、Linux下怎么创建一个进程,fork()详细说一下
7、僵尸进程了解不,讲一下什么情况下会产生僵尸进程,如何解决(处理wait和waitpid还有kill父进程外还有什么方式)?
8、算法题:一个数组中,把数组中所有的0移动到数组的首部,其他数字的相对顺序不能改变
二面(2019.9.17 13:09 - 14:07)
1、自我介绍
2、详细介绍一下你的项目
3、SIGPIPE这个信号有什么作用,如何使用
4、传输过程中路由器断电该怎么办
5、一个线程能不能发送两个客户端的数据
6、实现一个线程池
7、实现一个类似Muduo库的日志打印类
HR面(2019.9.18 17:30 - 17:58)
CVTE的HR面和其他公司的有点不同,CVTE的HR的刷人还是很厉害的,所以内心有点很恐慌,而且CVTE一般都是一对多的群面,但是由于自己是下午最后一个去的,因此就是一对一面试,O(∩_∩)O哈哈~~
1、自我介绍
2、你能给你之前的两轮专业面试打个分数吗
3、从之前的面试中你学到了什么
4、介绍一下你的家庭
5、谈一下父母对你的影响
6、你的性格是怎样的,说一件你大学中最自豪的一件事
7、你一般通过什么渠道学习新知识
8、学习新技术遇到困难怎么解决的
9、面试情况怎么样了,现在有什么offer
10、对CVTE有了解吗
11、反问环节
面试方式:西安现场面试
一面(2019.9.18 9:45 - 10:20)
1、讲一下一致性hash算法(扩展、业务场景)
2、Trie树的小项目讲一下
3、C++11用的多还是C98用的多
4、智能指针中的shared_ptr讲一下
5、C++多态讲一下
6、如何使用C语言实现类似C++多态的机制
7、如何在main函数之前执行打印
8、如何使用C++实现类似Java的反射机制
二面(2019.9.19 9:00 - 10:00)
1、自我介绍,主要介绍一下你的亮点,突出的地方在哪
2、场景题:京东商城中每天有几十万条用户的搜索数据(中文),找出TOP 10的关键词
3、我看你博客写的东西还挺全面的,讲一下Trie树吧
4、写一下Trie的结构定义、插入、查找都写一下
5、你认为如果是做中文词频统计,你需要考虑哪些问题
6、讲一下你这里边写的Linux五种IO模型,详细讲一下吧
7、你说到了IO复用,具体讲一下它们之间的区别
8、LT和ET模式讲一下
9、讲一下多进程和多线程之间的区别
其他的不记得了,之后面试官还主动给我讲了部门具体的工作,然后还主动加了微信~
HR面(2019.9.20 11:20 - 11:32)
电话面试,深圳的HR打来的。
1、HR上来先来了个自我介绍,说是为了公平,就不同城市间交换面试
2、自我介绍
3、你对公司的选择都考虑哪些因素
4、你自己的职业规划是怎样的
5、经过前面两轮面试,你感觉京东的公司氛围是怎样的
6、你以后想在哪些领域发展
7、提问环节:京东的入职培训、职位晋升相关的问题
面试方式:西安现场面试
一面(2019.9.18 11:00 - 11:30)
1、项目将一下
2、流程图画一下,包括系统架构
3、C++的多态了解不,讲一下
4、忘了
一面完了面试官说我马上给你安排二面
二面(2019.9.18 12:00 - 12:30)
二面是我全程在讲项目,面试官全程姨妈笑,,,秋招最差最差的面试体验,拉黑,因为下午有哈啰的面试,所以面试官让我先走了,极差的面试体验,两面基本是我在讲,面试官没问什么技术问题。
面试方式:西安现场面试
一面(2019.9.18 13:30 - 14:00)
1、面试官讲它们的嵌入式开发技术
2、看一下你的笔试做的可以
3、问了几个C语言的题目
4、将一下指针和引用的区别
5、const的作用、volatile的作用,它们两能不能一起使用
6、strcpy有什么问题,如何解决
7、讲一下项目吧,挑一个讲讲
8、我看你这都是上层应用开发,了解嵌入式、单片机不
HR面(2019.9.18 14:00 - 14:30)
1、职业规划
2、为什么要选择嵌入式开发
3、你觉得做嵌入式最大的挑战是什么
3、对公司有什么要求
4、未来的职业规划是什么
面试方式:西安现场面试
百度的面试自己还是很幸运的,一路走完了三轮面试流程,期望十月能给个Offer~
一面(2019.9.19 11:00 - 12:00)
1、自我介绍
2、项目讲一下
3、负载均衡怎么做的
接下来开始漫长的画图,架构图讲解
4、如果现在有一百万条数据,你如何保证数据的同步,一致性
5、编写一个命令,将占用指定端口号的进程杀死。sudo kill -9 $(lsof -i:端口号 -t)
6、编写一个命令,查找出文件中包含aaa但不包含bbb的行。cat test.log | grep "aaa"|grep -v "bbb"
其他的主要是围绕项目做的拓展性问题,问了很多很多
二面(2019.9.21 13:00 - 14:00)
1、自我介绍
2、实现一个读写锁吧,他写了几个接口供我使用
3、哈希表解决冲突的方式有哪些
4、拉链法如果桶中结点个数太多该怎么办
5、如何减少在扩容时的时间复杂度、多线程环境下的读写怎么控制
6、数据库存储引擎innodb的默认隔离级别是什么
7、幻读知道吗
8、如何解决幻读的问题
三面(2019.9.23 10:00 - 11:20)
1、面试官自我介绍,百度大搜部系统架构师
2、讲项目,项目技术问答,场景问答
3、实现一个中文分词算法,给你一个词典,给你一个目标字符串,进行匹配
4、实现一个内存池,使用到什么数据结构、包括内存分配的策略、回收的策略
面试方式:西安现场面试
一面(2019.9.19 14:00 - 15:00)
1、算法题:将数组排成最小的数
2、项目讲一下,又开始画架构图
3、负载均衡的一致性hash算法讲一下
4、sendfile讲一下
5、C++的智能指针讲一下
6、数据库了解不,讲一下存储引擎、索引
面了一个小时,其他问题都很常规
二面(2019.9.19 16:00 - 17:00)
1、算法题:求最长递增子序列、两个无序数组求交集(重复的不合并)
2、sendfile讲一下
3、SQL了解吗,讲一下SQL都有哪几种语言
4、Redis了解么,几种数据类型知道么
5、Redis是单线程还是多线程
6、Linux命令:查找一个文件名不完整的文件、查找日志文件中后300行的数据、查找日志文件中下午4点的数据
面试方式:西安现场面试
一面(2019.9.20 9:40 - 10:20)
1、自我介绍
2、面试官介绍了它们的技术栈主要在java,转语言OK不
3、项目介绍一下吧,又开始画项目流程图
4、文件传输的项目问什么用TCP,TCP和UDP的区别是什么
5、两种网络模型讲解一下
6、MySQL的存储引擎介绍一下
7、Linux下的五种IO模型介绍一下吧
8、算法题:判断一个单链表是否有环?说几种不同的算法
9、快慢指针法,慢指针一步,快指针三步可以不;慢指针两步,快指针三步可以不
10、写一下快慢指针的实现代码吧
二面(2019.9.20 11:30 - 12:20)
1、自我介绍
2、二面全程再讲项目,面试官有提到客户端和服务端没有建立心跳,会不会存在消息丢失的问题,自己将了一下思路,就是和TCP一样的做个超时重传就OK
3、项目中用到的线程模型是什么,你为什么要使用4个线程
最重要的因素是程序是CPU密集型还是IO密集型,对于CPU密集型,我们可以通过开辟核数的线程;对于IO密集型,因为IO会导致等待,因此和核数关系不大
其他的常规问题,不记得了
HR面(2019.9.19 12:30 - 13:00)
1、自我介绍
2、又讲到了去哪儿的技术栈是Java
3、对去哪儿了解吗
4、你选择一家公司的标准是什么
5、HR向我介绍公司的福利,包括薪资的构成、绩效考核机制等
6、最后是你有什么想了解的吗
面试方式:杭州现场面试-网易大厦
一二轮交叉面试(2019.9.26 10:00 - 11:30)
1、自我介绍
2、讲项目,提问:为什么要使用一致性哈希算法,它比轮询算法好在哪里,轮询算法有什么问题?
3、C、C++语言的链接过程详细讲解一下(只将链接过程)
4、为什么编译阶段不分配内存
5、AVL树与红黑树的区别是什么
6、IO多路复用将一下,LT和ET模式将一下,为什么要有这两种触发模式,适用场景是什么
7、五种IO模型都有哪些,讲一下
8、讲一下同步IO和异步IO,阻塞IO和非阻塞IO
9、网络的五层模型具体讲解一下
10、说一下链路层
11、设计模式你除了单例、工厂和观察者还知道哪些
12、讲一下享元模式
13、给了一个题目,写一个SQL语句:两个表中数据求交集,性别按照先女后男排序,性别一样按照年龄降序排列
14、算法题:LCS问题,求两个字符串的最长公共子串
15、题目:N1个度为1的结点,N2个度为2的结点,……,Nm个度为m的结点,求树中有多少叶子结点
16、算法题:现在有很多木棒,长度不一,随机的放置在0-10000的范围内,现在用一个带刻度的尺子,求该尺子能框选住的最大木棒长度是多少?
三面(2019.9.26 13:25 - 14:30)
1、自我介绍
2、讲项目,项目技术问答
3、为什么要用Redis
4、对Redis了解吗,Redis的底层有了解吗
5、为什么不自己写一个发布订阅,如果让你实现一个发布订阅模式,你会怎么实现
6、讲一下你的一致性hash算法
7、心跳检测如何做的,这种方式效率高吗
8、Redis 在使用过程中有没有遇到什么问题,你是如何解决的?
9、为什么你更改了接口就可以避免这种问题呢?
10、讲一下Reactor模式、半同步半异步线程池的实现
11、sendfile的原理了解吗,为什么它能实现零拷贝
12、Muduo网络库的接收一个TCP连接之后的处理流程讲解一下,消息是如何处理的,如何分发的,画一下整个框架图
13、讲解一下channel类的具体实现,如何实现消息分发的
14、除了我们之前聊的,你感觉你还有什么突出的地方,我没有问到的,可以将一下
15、C++11的右值是什么,讲一下
16、你平常爱玩什么游戏,打到什么等级的
17、网易的游戏玩过么,阴阳师之类的
HR面(2019.9.26 15:30 - 16:00)
1、自我介绍
2、从西安飞过来的?之前有来过杭州吗
3、你这个项目是自己做的还是学校的课程要求什么的
4、那这个项目上线了吗
5、平常自己学习的方式都有哪些
6、喜欢游戏吗,为什么要做游戏服务端开发
7、自己以后的方向是什么,职业规划
8、选公司的标准是什么呢**
9、除了网易,有没有面试其他大厂呢
10、现在手里都有哪些offer
11、自己以后向往哪方面发展?互联网、游戏、安全?
12、对薪资有什么要求,工作地点呢
13、反问环节
面试方式:西安现场面试
一面(2019.10.12 10:00 - 10:30)
1、简单自我介绍一下
2、Coding:使用栈实现二叉树的层序遍历
3、数据库有了解吗,索引讲一下
4、观察者模式具体的讲一下
5、进程间通信机制都有哪些
6、具体讲一下共享内存吧
7、数据结构你所了解的都讲一下,栈和队列、链表、数组、树、哈希表等等
8、shell脚本有写过吗,如何判断一个文件是否存在?
9、你有什么要问我的
其他的常规问题,不记得了
二面(2019.10.12 10:30 - 11:00)
1、简单自我介绍一下
2、这两个项目谈一下
3、你这个第一个项目具体讲一下吧
4、之后开始画流程图、项目整体的架构,包括负载均衡器、心跳包、Redis消息中间件等
5、你这个Load balance是如何持有Server的连接状态的
6、文件传输项目讲一下
7、如何进行文件发送的
8、有什么想要问我的
HR面(2019.10.12 11:00 - 11:30)
1、自我介绍
2、这边后台主要使用的是Java,你对java有了解吗?
3、你之后主要是想做java还是C/C++
4、对途家民宿有了解吗?
5、现在还有其他的Offer吗?
6、那你更倾向哪一个,你选择一家公司的标准是什么?
7、你觉得你的优势是什么?
8、你的专业是信息对抗技术,那你对目前国内的安全领域的了解有多少?
9、工作地点的考虑
10、反问环节
欢迎加入专题Chat:《后端/服务端开发方向面试题全解析》