2020校招复盘——秋招不易,致敬每一位追梦者(含网易、京东等19家互联网公司后台/Server端面经)

作者: zixun 发布时间: 2019-10-21 浏览: 2293 次 编辑

文章目录


前言

从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火、京东、去哪儿等9家互联网公司的校招Offer。6、7月主要是做系统复习、项目复盘、LeetCode与牛客刷题等准备工作,并且投了字节跳动、拼多多、猿辅导在内的几家公司的提前批,当然还是挂在了简历,因为毕竟自己的学校、学历、项目经验肯定比不过牛客网上那些大厂实习的大佬了。

8月开始海投,真的是海投,至少不下60家吧,8月份主要是各大公司的提前批,线上的笔试面试。自己的第一场面试是8月上旬趋势科技的提前批,西安站现场面试,并且特别的幸运的拿到了Offer,最后给的薪资也是小SP。在拿到了第一份Offer后,之后笔面试的信心会增加不少,因此还是建议大家一定要抓住8月提前批的机会,拿下几家公司,至少在9月跑宣讲时心里比较稳。

秋招可谓金九银十,九月份一定得拼尽全力,千万别让自己闲着,你不努力马上就会被竞争对手赶超,在前一天晚上准备好第二天参加宣讲的公司,最好选择有现场笔试的公司,因为现场笔试的通过几率比线上要高很多,自己参加的现场笔试通过率是100%。一般公司现场笔试后第二天会安排现场面试,当然现场面试肯定又要比线上视频面试/电话面试通过率更高,因为面对面沟通的效果肯定要比隔着屏幕好很多了。9月,自己毅然决然地放弃了保研的机会,全身心的投入到秋招之中,最繁忙的一天参加了4个公司的现场面试。由于之前的海投,导致各种面试冲突、笔试冲突都要处理好,大家在选择时首先可以和HR沟通,能否调整笔面试时间,若无法调整,肯定要有舍弃了。


秋招经历

自己参加的笔试(在线/线下)累计48场次,共收到了24家公司的面试邀约,因为时间地点等原因拒掉了5家公司的面试,截止到目前收到了网易、京东、去哪儿网等9家互联网公司的校招Offer,另外还有两家公司面试流程结束,在等待最终的录用结果。

目前已经签约网易雷火!在秋招过程中,认识了很多一起找工作的小伙伴,交流面试经验、求职经历,少走了很多坑,收获还是很大的。另外在面试过程中也遇到了很多非常友善的HR小姐姐、技术面试官,其中一部分也互加了微信,聊了很多对于未来职业发展的话题,认识他们也是真的开心。在我面试的公司中面试官没有特别刁难的,遇到不熟悉的问题面试官们也会慢慢引导,但是有其他的小伙伴反映说遇到了很不友善的面试官,甚至有语言攻击,其实如果能遇到这类面试官就要真正考虑下这家公司是否值得加入了,因为面试官的素养基本可以体现出一个企业的文化。

秋招说实话真的是实力和身心意志力的双重考验,尤其是没有Offer或者没有满意Offer的时候,其实咬咬牙,坚持一下下也就过来了,但这个过程的确很辛苦,整个八九月,早七点起床,晚上12点左右休息,有时熬夜到一两点也是很常见的,六七月前期准备了很长一段时间基础,包括语言基础、Linux、网络、操作系统、数据库、分布式系统相关的知识,LeetCode只刷了200多道题目,但刷的都是高频题目,另外剑指Offer又刷了两遍,这两大法宝搞定了,面试中的算法题基本没问题,笔试的算法题可能相对难一些,还是要靠一定时间训练吧。

8月最多一天要做四场的笔试,9月最多一天参加四场面试,然后每场面试结束后,自己都会进行复盘,写面经,查漏补缺,这个很重要,因为面试过程中暴露出的知识弱点盲点很有可能在你之后的面试中被提问到,千万别抱侥幸心理。


秋招心得

  • 注重实力,保持良好心态:秋招过程中,继续巩固好自己的技术栈,然后保持一个良好的心态,尤其是还没有Offer的时候,心态别崩,其实到最后大家都会找到工作的,唯一的区别就是公司的方向、规模、待遇方面,也别太在意别人拿到了牛X的Offer,尤其是牛客网,天天神仙打架,刚开始自己也是很纳闷,怎么就能这么牛,最后也都见怪不怪了~。好多之前一直没Offer的人,可能突然某一天就收获到了几份Offer,所以不断提升自己的综合能力才是关键,与其在这羡慕别人,不如让自己心态沉静下来,认真复习、厚积薄发。
  • 多交流,多思考,刻意锻炼表达:牛客网上有各种面经、面试经验,数不胜数,多去刷刷面经,和一起找工作的小伙伴们或者牛友们交流下面试经验、疑难问题什么的,收获也会很大的,也能放松自己紧张的身心。通过交流与思考要能总结出属于你自己的那一套正确的面试技巧,如回答问题的角度,如何更加全面的展现自己等,面试就是一个双向选择的过程,要让企业认同你,你就要有突出的地方,至少表达能力要很OK。我自己就经常模拟回答一个具体的面试问题,这个过程中就可以总结出回答问题的逻辑、层次、深度等技巧了,超级有用的。
  • 及时复盘,查漏补缺:每一场面试大家都要尽力展现出自己更优秀的一面,对于线上面试,自己都是有完整录屏的,就是为了能够之后总结面经、查漏补缺,对自己面试的真实表现也有一个完整的了解。对于线下面试,自己前几场面试都是开着手机录音的,之后复盘。最后因为一天要跑很多面试,就没录音了,面经就靠记忆写啦~。在面试过程中,大家肯定也会发现企业都会问到的一些面试问题,对于这类高频问题,最好自己总结下来,对以后的面试也是很有帮助的。我在文末将附上自己总结的面经题库。

C++后台/Server端方向校招准备

夯实技术栈-知识技能提升

校招其实就是对毕业生的各方面考量和综合筛选,包括基础知识水平、知识广度与深度、知识的拓展思维与综合运用能力(场景问题)、代码能力等。首先明确一点,硬实力是决定性因素,在没有实力之前去面对一切,结果会很不尽人意,所以前期准备过程中,一定要夯实基础,再做以相关的拓展,还有面试中的算法题考察一定得撕得出来。另外不要一味地强调技巧,没有那么多捷径可以走的,还是要一步一个脚印,扎扎实实走好每一步。

C++后台与Server端的技术栈包括C/C++语言基础、计算机网络、操作系统原理、数据库原理、Linux操作系统、算法设计与分析、设计模式等几个模块。这些模块都要有了解,知识要有广度,这些基础最好多学习几遍,温故而知新,其实在每次学习的过程中又会无形之间发现知识间微妙的联系,甚至你也会在笔面试或者与小伙伴的交流中得到答案,当然顿悟的前提一定是大量的知识积累。其实这些模块不是每个都要非常精通(当然这样最好),而是在面试官提问时不会不知所云。对于基础的知识要答得很漂亮,但是对于关键的问题要有较深的理解,即知识要有深度,不能只浮于表面,一定要突出自己的亮点,例如你的算法功底比较好,或者你对Linux这块了解的很深,对于它的内存管理、进程管理都可以了解到内核级别等等。要建立起来知识的框架和体系,搞清楚它们之间的联系和区别,包括实际应用场景、优缺点等等。面试一定要展示出你的综合实力,要有与别人不同的地方,这些会是你面试的加分项。

推荐的书单

C/C++语言基础

  • 《C++ Primer 5》,C++入门的经典之作,时间充裕的话一定要过一遍,否则的话,就认真阅读重点章节,如泛型编程、继承与多态、模板与函数重载、C++11特性等。
  • 《深度探索C++对象模型》,这本书我感觉有点生涩,大家可以酌情翻阅,重点关注虚函数、多继承、虚继承的对象模型。
  • 《STL源码剖析》,STL基本是面C++岗位必问的内容,因此底层的源码还是要看看的,很重要,这本书非常经典。
  • 《Effective C++》、《More Effective C++》,这两本书属于工程经验,其中的一些条目在面试中也经常被提及,因此还是要阅读一下。
  • C语言方面:《C语言深度剖析》必读、《C专家编程》、《C和指针》、《C陷阱与缺陷》,都是很经典的书籍,要学好C++,那么C语言基础一定要非常扎实。

计算机网络原理

  • 《计算机网络 谢希仁》,计网的经典书籍了,很厚,也是我们的专业的网络课程教材,建议阅读。
  • 《TCP/IP详解 卷一》,深入理解TCP/IP协议栈内部的机制实现,进阶的书籍,必读,对于TCP协议、UDP协议一定要非常深入掌握。
  • 《UNIX网络编程》,强烈推荐,必读书籍,网络编程领域的神书,要学好网络编程一定要精读此书。
  • 《图解HTTP》,由于面试中有关HTTP协议的问题还是很多的,如果想深入了解底层机制的同学,可以阅读这本书。
  • 《图解TCP/IP》,这本书通俗易懂,帮助理解,可读性比较高一些,建议还是仔细阅读一下。

操作系统原理

  • 《深入理解计算机系统》,经典书籍,我自己买的是实体书,很厚,但是彩印的,阅读体验很好,网上也有很多电子版的,可以重点阅读一下关于编译链接章节。
  • 《操作系统设计原理与精髓》,这本书是Windows和Linux都进行讲解的,阅读时可以挑选自己想要重点了解的章节,其中进程管理、内存管理、文件系统非常重要。
  • 《UNIX环境高级编程》,系统编程的必读书籍,经典书籍,必读,掌握了这本书,面试中有关Linux系统的相关知识会游刃有余的解决。

SQL与数据库原理

  • 《高性能MySQL》,这本书还是建议主要阅读一下有关索引和SQL的章节就OK,真正的底层原理还是要阅读下面这本书。
  • 《MySQL技术内幕-InnoDB存储引擎》,这本书主要提供的是MySQL技术实现的原理和相关的理论知识,当然主要是Innodb存储引擎的,有关索引、事务、锁机制、MVCC等机制的底层实现讲解的非常清楚。

Linux操作系统

  • 《Linux高性能服务器编程》,Server端方向必读,建议多读几遍,书中对于基于TCP、HTTP协议的网络编程有详细讲解,包括线程池进程池等模块。
  • 《Linux程序设计》,Linux系统编程的必读书籍,很经典。
  • 《鸟哥的Linux私房菜》,这本书主要可以用来扩充一下了解的Linux命令,花上一周的时间读读,非常实用。
  • 《Linux内核设计原理与实现》,想要深入了解内核的话,建议首先先阅读这本书,这本书会给你一个整体的框架,可能细节剖析的不是非常深入,但是对于内核实现首先建立起来一个整体框架很重要。
  • 《深入理解Linux内核》,这本书可以配合上边的书籍来阅读,因为这本书对细节讲解的比较深入,分模块讲解的,可以重点关注文件管理、内存管理和进程管理三大模块。
  • 《Linux内核源代码情景分析》,这本书真的是将源码扣下来剖析,建议根据需要阅读相关章节即可。

算法

  • 《计算机算法设计与分析 王晓东》,建议阅读下,了解常用算法思想和编程技巧,算法非常要注重动态规划的学习,这是大厂笔面试考察的重点。
  • 《剑指Offer》,这本书上加上拓展题目大约70余道题目,堪称经典,简直就是面试算法大宝典,刷上两三遍都不过分,每道题一定要搞清楚算法的主要思想、时间空间复杂度、能否再进行优化等等。
  • LeetCode:不用讲了,提升算法能力必刷的,建议按照频率或者分类模块来刷,刷完后记得及时总结整理一下。

数据结构

  • 《数据结构 严蔚敏》,经典必读书籍,也是我们专业数据结构的指定教材。
  • 《大话数据结构》,这本书比上述的可读性更高,更通俗易懂一些,建议阅读。
  • 《数据结构-浙大视频教程-网易云课堂》,零基础必备,每节课的课后作业一定要自己写一遍。

设计模式

  • 《大话设计模式》,大话系列书籍,建议阅读,每个设计模式的讲解都通过一个故事来引入,比较好理解,可读性高一些。
  • 《设计模式-可复用面向对象软件的基础》,经典书籍,建议列为必读。

提升软实力,从容应对笔面试

上述的知识技能搞定了之后,技术方面应该问题不大了,可以根据自己的兴趣点再继续做拓展就OK了,然后每天要保持一定量的刷题频率,可以直接在牛客网/LeetCode上按模块做就OK。接下来向大家分享一下面试过程中的一些经验和技巧,当然前提是你的基础非常扎实,上述部分书单中的内容都有掌握。


软实力的比拼

其实面试不仅仅是一场个人solo,是个企双方的双向匹配选择,它不仅考察个人的硬实力,也就是知识储备和专业能力,也是个人综合素质的考验,即软实力的比拼,通俗的讲就是情商表现了。性格方面的东西其实是很难改变的,但是在面试过程中我们还是要尽可能的展现出自己的优势,掩盖住一些语言的锋芒或者不好的状态,也要讲究回答问题的技巧,简单总结如下:

  • 充分精力与充足自信。其实面试过程中应聘者回答问题的过程很容易就能看出他现在的状态,因此一定要保证精力充分,要有充足的自信,语言铿锵有力、坚定并连贯,不要萎靡不振、支支吾吾的。
  • 高度专注的注意力。面试过程中面试官提出的很多问题前后都是有连贯性的,都是具有联系的。因此在思考问题时不妨多思考一下与之前问题的联系,另外在HR面过程中这种情况更容易发生,主要用于考察面试者语言的逻辑性与准确性和真实性。
  • 谦卑好学的态度。其实经历过多场面试后,你会发现有很多重复的问题,因此有些同学再遇到这些相似的问题,就会很大意,展现出不屑的一面,之后肯定会导致问题回答的不到位,甚至面试失败。细节决定成败,无论何时保证谦卑的态度一定不会错。另外面试时最好能展现出自己好学、自学能力强等优点,例如遇到知识盲点或者问题回答的不好,及时告诉面试官,这方面还不是很了解,我下去再学习研究一下。
  • 优秀的临场应变能力。面试中遇到的大部分问题都是不可控的,不可能每个问题你之前都有遇到过,因此就要在面试中不断的锻炼自己的临场应变能力,包括知识的迁移能力、综合运用能力等,遇到场景题类似的难题或开放性题目,必要时可以向面试官寻求一些提示或者帮助,加上自己的思考,问题很有可能得到解决。
  • 适当的展现出自己的意向。面试过程就是个人与企业双向匹配的过程,因此在面试的最后适当的展现出对企业的渴望、包括对企业文化、企业影响力、企业产品的认可等等,也都能提高通过率,前提是你要对企业真正有一些了解,公司当然喜欢契合自己文化的应聘者了。

笔试经验技巧

  • 在牛客网上多刷刷各大互联网公司的历年笔试真题。掌握了考点的大致范围,也就知道了看书复习的话哪部分是重点,需要反复阅读,然后根据自己的弱点进行针对性的复习。所以一定要每天保持一定量的刷题频率很重要,刷题多了也就有手感了,遇到同类的问题也就有了正确的思考出发点。其实线上笔试题还是蛮有难度的,毕竟是筛选的第一关,所以还是要注重前期的刷题。
  • 参加笔试要注重归纳和总结。可以把高频问题、疑难问题都记录下来,我是每场线上笔试后台都开录屏的,因为编程题容易记,但是选择题数量多,有些题目比较重要,有可能面试也会问到,所以每场笔试遇到的疑难问题一定要在笔试结束后搞懂。
  • 整理出一些通用的算法模板。开发岗位的笔试免不了在线编程题,并且有些大公司的笔试也是只有编程题,如腾讯、网易这样的互联网大厂。对于在线笔试的编程题,其实和平常我们刷牛客和LeetCode有很大不同,因为平常我们的在线OJ平台不用自己处理输入输出,只完成核心方法即可,但是几乎所有的公司的在线编程题都是要自己处理输入输出的,所以经历过几场笔试后,最好自己能整理出一些通用的算法模板,如处理特殊输入输出、常见的动态规划题目、字符串题目、数组题目、子集/排列树等,下面我给大家提供一个我自己写的一个小模板。这个模板是用来处理输入是按指定分隔符分割的一行数据,但是不知道输入个数的情况:
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!


面经整理

趋势科技提前批(后台开发工程师 中国研发中心-南京 Get 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、你有什么要问我的

场景题答的确实有点差,二面两小时后,官网流程变灰,鹅厂拜拜~


深信服研发优招(C/C++软件开发工程师 长沙研究所 Get Offer)

面试方式:一面电话面试、二面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、你对薪资的要求和期望


360提前批

面试方式:牛客网视频面试

一面(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


BIGO

面试方式: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没撕出来,极其失落,回来手写了两个不同版本的智能指针的实现,之后的很多面试都问到了这个,可见复盘的重要性!


奇安信 (服务端开发工程师-系统开发 北京总部 Offer)

面试方式:西安现场面试

奇安信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模式、Preactor模式、半同步半异步线程池
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最后做面试总结,最后说我的逻辑思维和反向思维不错,笔试成绩还挺高的,性格也比较好,整体不错。


优必选(Wait Offer)

面试方式:西安现场面试

一面(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上看还是困难级别,但面试官最后竟然没给过,暴风哭泣~~~


CVTE(C/C++软件开发工程师 广州总部 Offer)

面试方式:西安现场面试

一面(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、反问环节


京东(C++开发工程师 北京 Offer)

面试方式:西安现场面试

一面(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)

二面是我全程在讲项目,面试官全程姨妈笑,,,秋招最差最差的面试体验,拉黑,因为下午有哈啰的面试,所以面试官让我先走了,极差的面试体验,两面基本是我在讲,面试官没问什么技术问题。


哈啰出行(嵌入式开发工程师 上海总部 Offer)

面试方式:西安现场面试

一面(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、未来的职业规划是什么


百度(Wait Offer)

面试方式:西安现场面试

百度的面试自己还是很幸运的,一路走完了三轮面试流程,期望十月能给个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点的数据


去哪儿网(Java开发工程师 北京 Offer)

面试方式:西安现场面试

一面(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、最后是你有什么想了解的吗


网易雷火(游戏研发工程师-服务端方向 杭州 Offer)

面试方式:杭州现场面试-网易大厦

一二轮交叉面试(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、反问环节


途家民宿(Java开发工程师 北京 Offer)

面试方式:西安现场面试

一面(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、反问环节


面经题库

一、C/C++

深入理解的四部分基础

程序编译、链接、装载、运行的过程
函数调用堆栈过程
32位虚拟地址空间布局
C++的内存管理机制


基础知识部分

32位、64位系统下各数据类型所占用的内存空间
C和C++的区别
struct和class的区别
指针和引用的区别
new与malloc的区别 / delete和free的区别
堆和栈的区别
const关键字的用法
static关键字的用法
sizeof和strlen的区别
define 和 const的区别
extern关键字的使用,解决了什么问题
volatile关键字的使用,解决了什么问题
malloc如何管理内存、分配内存?ptmalloc底层实现
结构体的内存对齐,为什么要进行内存对齐
内存泄露的定义,如何检测与避免内存泄露
程序寄存器的作用
C语言如何实现函数重载
main()函数之前会调用哪些函数,如何实现main()函数运行之前打印字符串
大小端问题,如何判断大小端及大小端的转换


C++特性部分

面向对象的三大特性
C++对象生命周期、对象模型与调用优化
内联函数的作用与适用场景,与define定义的宏函数的区别,什么函数不能内联
友元函数的作用、使用场景、使用的注意事项
this指针的功能,this指针是什么类型的
空类的大小,空类默认产生哪些成员函数
成员初始化列表,什么成员必须在初始化列表里初始化
什么时候会调用拷贝构造函数
深拷贝与浅拷贝,浅拷贝可能出现的问题
拷贝构造函数和赋值重载函数的形参为什么要传const引用
模板的用法、注意事项与使用场景
模板的typename和class的区别
重载、隐藏和覆盖(重写)
多态机制: 静多态与动多态
虚函数的底层实现原理、对象模型
静态绑定与动态绑定
多重继承存在的问题,虚继承的底层实现原理、对象模型
哪些函数不能实现成虚函数
析构函数什么时候应该实现成虚函数
纯虚函数、抽象基类的作用与适用场景


STL部分

STL六大组件
STL一二级空间配置器的底层实现原理
STL三类容器(顺序容器、关联容器、容器适配器)的底层实现,线程安全性
vector频繁调用push_back()带来的问题
vector调用push_back(),又调用pop_back(),它的内存大小会回退吗?
deque与vector的效率问题
Map的key是否可以是一个结构体,需要注意哪些问题
哈希表的原理,哈希函数,如何解决hash冲突,各类解决方法的优缺点
常见的泛型算法


C++ 11部分

C++ 四种强制类型转换机制,各自的用法、功能、特点、区别及使用场景
智能指针的作用及其底层实现原理
auto_ptr、scoped_ptr、unique_ptr各自的特点,都解决了哪些问题,底层是如何实现的
shared_ptr、week_ptr的特点,交叉(循环)引用问题,如何实现
右值引用、移动语义、完美转发
什么是左值,什么是右值
异常处理问题、异常的栈展开机制
构造函数、析构函数里抛出异常会怎么样
Lambda表达式、函数对象
bind绑定器


二、Linux

基础知识

Linux目录结构
Linux常用命令:文件管理、进程管理、用户管理、系统资源/内存/监测、Vi编辑器
GDB调试工具,常用的命令,多线程、多进程、指定进程调试命令
怎么知道程序死锁,GDB如何调试死锁。
Gdb的bt命令如何实现
Free命令下buffer、cache、used的区别
Linux文件系统(EXT4,XFS,BTRFS)、文件的分类、文件的权限
文件的三种时间,访问文件的过程
软连接和硬连接
makefile文件的作用、编写
静态库与共享库,如何创建(具体的命令与参数)、各自的作用与区别、存放的位置
Linux I/O模型、阻塞与非阻塞
同步I/O 与 异步 I/O,区别、应用场景
异步IO的缺点
同步和异步
I/O多路复用技术 select poll epoll 的深入理解,具体的区别、优缺点、内部原理、适用场景
ET模式与LT模式的区别,适用场景
为什么ET工作在非阻塞模式
如何实现一个定时器(Libevent定时器如何实现)
线程池的参数及实现
守护进程的作用及使用场景,如何创建一个守护进程


系统编程(操作系统原理相关)

系统调用与库函数的区别,中断的概念
异常与中断的区别
为什么要引入进程、线程
进程的状态、线程的状态,何时发生状态转换
进程与线程的区别、联系(Linux内核如何实现线程:用户级线程与内核线程、混合线程,线程的分类)
子进程共享父进程的哪些资源,线程共享进程的哪些资源,线程自己拥有哪些资源
vfork()和fork()的区别
一个进程可以创建多少线程,影响因素是什么
一个进程可以打开多少文件描述符,与什么有关
进程间通信/同步方式:管道、信号量、消息队列、共享内存、套接字,区别和原理。
如果一个进程的CPU占用太大,如何定位和调试这个进程
如果一个进程的CPU利用率很低,如何定位这个进程,如何提高其CPU利用率
两个进程并发,执行100次,前置++的值有哪些,后置++的值有哪些
如何回收进程,僵尸进程、孤儿进程的问题描述与解决方案
临界区、临界资源的概念
互斥与同步的区别
生产者消费者问题、读者写者问题、哲学家就餐问题(伪代码)
死锁问题,产生死锁的必要条件,如何检测死锁,如何避免和预防死锁
银行家算法的描述
线程间同步方式:信号量、互斥锁、条件变量、读写锁、CAS,区别与联系
CAS的原理,与互斥锁的区别,CAS存在的问题,如何解决
为什么要引入CAS?
多线程模型
线程安全问题与可重入函数


内存管理

内存管理的概念
段式内存管理与页式内存管理、内存如何寻址
Linux三级页表映射机制
虚拟内存机制
buddy system 伙伴系统算法、slab内存分配机制
分段和分页的区别
页面置换算法,如何实现LRU、LFU算法


网络编程(计算机网络相关)

OSI七层模型与TCP/IP四次模型的区别与联系
各个层的作用、功能、具体的协议有哪些
数据链路层ARP协议与RARP协议的工作原理
局域网内多主机通信的整个过程是怎样的
网络层的作用,常见的路由选择协议工作原理及其区别:RIP、OSPF、EGP、BGP
IP数据包首部大小,重要字段
IP分片的原因与具体实现,工作过程
MSS 和 MTU 的区别
Ipv4地址划分、子网掩码、NAT地址转换
路由器的功能,路由转发的过程
传输层协议TCP 与 UDP,区别与联系
无连接服务与面向连接服务的区别
字节流服务与数据报服务的区别
TCP首部大小、字段的具体含义
连接过程中需要协商什么,系统需要给TCP连接双方分配什么资源
TCP发送缓冲区、接收缓冲区
TCP三次握手与四次挥手的详细过程、状态、必要性、SYN泛洪攻击
TIME_WAIT状态何时出现、存在的原因、为什么要等于2MSL的时间
如何解决系统中存在大量的TIME_WAIT状态的问题
TCP的粘包、拆包问题的原因和解决方案
TCP的可靠传输实现:序号、确认号、超时重传、应答确认、流量控制、拥塞机制
流量控制:滑动窗口协议、选择确认机制,滑动窗口会有什么问题
拥塞控制:慢启动、拥塞避免、快速重传和快速恢复,整个过程,拥塞窗口何时变化、怎么变化、为什么要这样变化
TCP流量控制与拥塞控制的区别
TCP接收方窗口与发送方窗口的变化由谁来控制
TCP的Nagle算法
如何快速的判断网络拥塞已经发生
UDP协议的首部长度,字段含义
UDP为什么不可靠,如何实现可靠
TCP与UDP的适用场景有哪些
既然TCP是可靠的,为什么要有UDP,存在的意义是什么
Socket的tcp与udp编程流程
非阻塞socket、非阻塞connect,如何设置,作用是什么
recv、send可以用在UDP中吗
Sendfile零拷贝技术实现原理
浏览器中输入URL后到页面返回的详细过程,各层所用到的协议,数据的流动是怎样的
DNS的功能,查询的详细过程,具体的细节,DNS迭代查询与递归查询的区别,为什么DNS使用UDP
应用层使用TCP的协议有哪些,使用UDP的协议有哪些
知名端口号有哪些,用户能使用的端口号有哪些
http协议的功能、作用
http协议的请求报文、响应报文的首部格式
http的各种方法,get与post的区别
为什么get的效率比post高?
http的状态码
http 1.0、http 1.1、http 2.0,区别、改进了哪些地方
https与http的区别,由http升级为https需要做哪些操作
https用到的加密算法有哪些,如何确保安全性
https的具体的、详细的加密过程(SSL/TLS)
session和cookie的区别
URL 的组成,包含哪些部分
URL与URI的区别
对称加密与非对称加密算法
数字证书的了解
Ping命令的整个过程,用到了哪些协议,如何实现,与Traceroute命令的区别
traceroute命令的执行过程,用到的协议


三、数据结构与算法

数组与链表的区别,使用场景
栈和队列的特点,使用场景
单链表和二叉树的使用场景
用栈实现队列、用队列实现栈
八大排序算法,手撕算法,最好/最坏/平均的时间复杂度、空间复杂度、稳定性,算法的优化,何时最差何时最好
二叉树的前序、中序、后序遍历(递归与非递归实现),时间复杂度、空间复杂度
二叉搜索树BST、平衡二叉树AVL
红黑树的特点,插入与删除,使用场景
回溯算法(子集树、排列树),求子集、全排列、N皇后问题
动态规划(01背包、完全背包、LIS、LCS、最大子段和、硬币问题)
动态规划的思想,与贪心算法的区别
并查集
海量数据处理:TOP K问题、去重问题
Bitmap 与 布隆过滤器
一致性hash算法


四、数据库原理

关系型数据库与非关系型数据库的含义,常见的都有哪些,各自的优点
常用的SQL语句
内连接和外连接的区别,左连接和右连接的区别,连接查询和子查询的区别,效率问题,适用场景
MySQL的索引类型
聚集索引和非聚集索引的区别,唯一性索引和主键索引的区别
索引的底层实现,B-树与B+树的区别,为什么不采用红黑树
索引的最左前缀匹配问题
Hash索引与B+树索引的区别
数据库事务的ACID特性,具体的含义
数据不一致性的问题
数据库的隔离级别,MySQL和Oranle的默认隔离级别
MVCC多版本并发控制机制
分布式事务
隔离性如何实现,锁的种类、加锁的方式、锁的兼容性
大数据下如何分库分表,采用的策略有哪些
MySQL的主从复制、读写分离技术
MySQL的四类日志,功能是什么


五、设计模式部分

单例设计模式手写,设计思想,懒汉模式与饿汉模式,线程安全性的不同实现方式,资源释放的内部嵌套类,适用场景
简单工厂、工厂方法、抽象工厂的区别与联系,代码手写,适用场景
观察者模式、迭代器模式等常见设计模式的思想与适用场景