春招实习上岸,整理分享心得及面经,感谢牛客回馈牛油


春招战线拉到比较长,从二月底开始整理项目、制作简历,3月初开始投递第一家,接下来笔试、面试、总结、复习、等待……持续了差不多整整两个月,直到五一放假前才正式收到第一个心仪的offer。这期间从牛客网牛油们身上学习获取了很多,现在我将心得及面经稍微梳理一下,希望我的分享也能够帮助到大家。

前后投递了二十余家,其中有的笔试没过,有的投递后或者笔试完就没有消息了,真正参加面试的有十家。目前offer情况(时间顺序):CVTE,远景,斗鱼,华为(排序中),百度(oc),头条,腾讯。

心得

先谈谈自己遇到的问题与从中总结的心得,不一定对每一个人都有用,当参考参考吧。

  • 大家在找实习找工作时,可以稍微利用一些时间关注各个公司的招聘动态,据此编写一个进度表,如果有新的笔试、面试安排能够及时调整和筛选,大概什么时间点会面哪些公司,做到心中有数

  • 如果复习的差不多了,我认为可以早点投

    • 一是因为,投递完简历之后,会有筛选、笔试或者捞了简历一直没发起面试等操作,要过一阵子才会真正开始面试,在这一段等待的时间里,其实也是可以复习的

    • 二是因为,你在复习,别人也在复习,等你复习差不多了,别人也复习差不多了,这时可能有很多HC就已经发出去了,越往后走可能难度越大

    • 我觉得我身边的同学、师弟一个月前就拿到了心仪offer时,我还在持续战斗的原因之一 ,可能就是投的比较晚了

  • 有时候可能会接到没有预约的突然来电面试,此时如果允许的话,最好稍微推迟一点,做好心理准备、拿好纸笔、戴上耳机、尽快调整好进入状态、找一个较为安静的地方再开始面试,不然可能会影响面试质量

  • 每次面试时最好是能够带上纸笔,面试官提问后,将其关键点在纸上做好记录

    • 一是因为,这样有助于思考,不熟悉的问题,可以有一小段时间回忆联想相关知识点,即使是很熟悉的问题,也不用急着马上回答,可以稍加梳理,快速在心里列出几个点,有条理有逻辑的述说

    • 二是因为,这些问题可能当时回答不完全,或者是根本不太会,在纸上记录后,可以在一定程度上复盘不会的点,从而利用闲余时间再将这些不足之处补上

  • 在听到面试官问题后,最好先问清楚已知条件,根据已知条件作答,但同时也不要把条件问的太细,因为可能有反效果,把自己的思路、知识点限制得太窄(后续面经有提及)

  • 有一些开放性问题,不要觉得不熟悉、没听过,就想放弃,要敢于去尝试,去思考

    • 一是因为,根据自己的所学,慢慢回顾,以及在面试官的引导之下,是有可能回答出来的

    • 二是因为,有的开放性问题,本来就是面试官为了考察学生的知识广度、深度的,即使不会,在回答的过程也可以往自己会的知识点上引导,向面试官展现自己会的东西(后续面经有提及)

  • 心态很重要

    • 在招聘持续过程中,会经常与同学们交流,大家一起交流学习、面试心得是极好的,共同成长进步,但也难免会提到一些offer情况,不由自主的就比较一下啊,如果别人拿了好offer,而自己却不如意,心态上会很受影响,所以我觉得。。。(道理咱都懂。。。但调整起来真的不是那么容易的。。。)

      • 一是要调整自己的动机:比如说我们找实习,最主要的还是能够有一个锻炼自己,让自己成长进步的机会,攒一份实践经历,在秋招中更具有竞争力

      • 二是要保持一个平常心:知足常乐,能拿一个还可以offer就已经很不错了,接下来再接再厉

      • 虽然我嘴上这么说,但是心里真正能这样做还是很难的,希望也能听到大佬们的解惑吧

  • 状态很重要

    • 面试摆在面前,我们经常是为了面试而复习,有时候会比较浮躁。对于简单的知识过了一遍又一遍,觉得看了也没太大的作用了,实在是有点不想看了;对于较难的知识感觉之前明明看过的看懂了,这时又忘记了,很难沉下心来再去深入;感觉自己好像这段时间没有成长,没有进步,没有学到什么新东西,以致于状态变得很低迷

    • 我觉得这个情况是很正常的,不要刻意的给自己制造恐慌,不要给自己徒增压力;因为对于一些较为简单的知识,经历过了好几场面试之后,相当于已经起到了巩固作用,并且在回答的叙述上应该也比之前更有逻辑更清晰了,可以不必再花过多时间再反复的看;但一些较难的知识,还是得有针对性的各个击破,经历了好几场面试后,心里应该清楚自己哪些点比较薄弱,哪些点是重点,有针对性的去深入复习,调整好自己的状态,争取下一场能够做到更好

面经

接下来是大家最喜欢的面经环节,按照第一面开始的时间先后顺序整理,大家可以参考时间线;另外其中有一些当时记录的总结感想也一起贴上了,由于是面后再次回忆记录,不一定是准确的措辞和顺序,还请见谅。

CVTE

3.8 实习一面
  • 了解高并发网络编程吗

  • 虚函数表中,函数的位置怎么确定

  • TCP为什么要进行握手

  • std::move了解吗

  • function了解吗?迟疑了一下,转而让我说lambda表达式

  • map用find和[]的区别,我说[]会返回一个左值引用,就算key不存在,也会用默认构造函数创建一个临时对象并返回它的引用,接着问如果这个对象的类没有默认构造函数怎么办?我说这样应该编译不会通过

  • 构造函数是否可以为虚函数

  • 说说用C++写的项目的内容,项目还有什么不足

  • 用过哪些STL容器,说一说vector的实现,内存扩充问题、涉及深拷贝浅拷贝

  • 智能指针,引用计数,什么时候++,--,werk_ptr有什么用,怎么用

  • 讲一讲this指针

  • 是否熟悉网络编程,讲了socket等函数的使用

  • 函数对象或仿函数

  • 写一个函数,判断是否是质数

  • 怎么实现互斥和同步

  • TCP粘包问题的处理

  • TCP连接的两方,某一方突然断网了,怎么办,嫌keepalive的时间太长的怎么办?回答的应该可以通过设置套接字选项将时间设置短一点

  • 平时除了日常的学习,还有什么其他提升自己的方法

  • 自己有没有写博客或看开源项目

另外,同学有被问到一些其他的题目

  • auto怎么实现

  • unique_ptr怎么实现,独占,数组等

3.10 实习终面

一对三,提一个问题,三个人轮流答,不规定顺序,问的基本上都是补充简历上的问题,例如:

  • 你想去什么样的企业,如果华为和CVTE都给了你offer,你怎么抉择

  • 最近遇到的压力最大的事,身体心理上有什么状况,怎么解决的

  • 期望毕业后的工作地点、工作时间、薪资待遇等,为什么

  • 介绍家庭状况,父母对自己的期望

  • 如果CVTE给了你offer,你若不去的话,会是因为什么

  • 等等

状态

3月底收到offer call,4月初发正式通知

远景

3.15 实习一面
  • 实习时间

  • 专业以及其他知识的学习情况

  • 介意换岗位之类的吗

  • 说一说滑动窗口

  • 在main函数中定义了a和b两个int变量,调用sum函数求其和,说一下其压栈过程

  • 操作系统中和内存管理等相同等级的功能模块,说了下进程调度算法

  • 介绍一下vector内存扩充的机制

  • 有什么要问我的吗

总结一下:

  • 状态很重要,因为是突然一个电话过来,没怎么准备就开始面了,正式回答第一个问题时,感觉脑袋还有点懵,说的声音有点抖,并且逻辑叙述方面没有自己练习时的好

  • 因此如果是没有预约的突然来电面试,最好是能够稍微调整一下,让自己进入状态后再开始面

  • 然后面的时候,适当的紧张时必要的,但是不要过于紧张,需要把语速平稳下来,声音尽量不要抖,不紧不慢,有条理有逻辑的说,说的过程中能够思考后续的内容

3.20 实习二面
  • 自我介绍

  • 1亿个手机号,判断其***有多少种?(一开场就尬住了,我知道怎么做,但是先套路了一句,说这应该是一个海量数据问题,不能一次性装入内存处理,然后就被打断,被问:为什么不能?你给我算算。我说如果用十进制表示手机号的话,一个手机号11位大概是一百多亿,unsigned int 4字节最多可以表示40多亿,那需要8个字节,用long long表示;然后又被问,是啊,那有没有更好的方式。。。已经远远脱离了最开始的问题,蒙蔽了。。。)

  • 有一个服务,然后有10个客户去调用这个服务,但是调用过程可能会失败,需要重新调用,问怎么写这个业务逻辑。。。(题目都没听懂什么意思)

总结一下:

  • 感觉一个电话过来突然面试,确实有一点不好找状态,没准备好,没调整好,如果可以的话,还是适当推迟吧

  • 当被问到一个问题时,不要觉得是自己熟悉的问题,就急着去回答,应该先问好相关的已知条件,比如第一题内存限制是多少、手机号用什么类型来表示,之类的,问清楚了再回答。

状态

3月底收到offer call,接着发正式通知

阿里

3.25 实习一面

突然来电,问了基础情况,没问是否方便,直接开面。。。还没有准备好。。体验较差,有些问题没记录了

  • 海量数据top k问题,如何优化?哈希划分小文件时涉及很多io操作,io量是多少(minHeap的时间复杂度是nlogk,可以用partition降低至n,另外,read的io量比较大,可以使用mmap直接内存映射进来,一次性读很多而不超出内存限制,应该可以满足要求)

  • select及epoll的了解,epoll添加一个描述好还是添加多个好?

  • 虚函数机制,虚函数调用和普通函数调用,效率谁快

  • 算法题:最长不重复子串

  • 算法题:两个字符串的交集,不是排序的

  • socket网络编程函数使用

  • 项目介绍

ps:大家都说阿里的面试体验比较好,可我实在是忍不住想吐槽一下

  • 晚上9点多突然来电,没有预约,也不问现在是否方便,直接开问,我拿着手机,没带纸笔不好记录,没戴耳机有时听不清楚,没穿外套又站在风吹的大厅里面了一个小时,但自己也有原因,敬畏是阿里大佬,没有提出稍等的申请

  • 一上来就问,我们这边是阿里云搞数据库、底层方面的,你这个专业报我们是什么意思(我:???,这种语气和态度,我也是醉了)

  • 问了个算法题,两个字符串的交集,我说可以用哈希表来做,遍历其中一个字符串,做hash_map[ch]++操作,接着遍历另一个字符串,做hash_map[ch]--操作,如果hash_map[ch]-- > 0,说明这个ch属于交集部分,他一直问我hash_map[ch]--中的“--”是什么意思,我以为他没听懂,再叙述了一遍,又继续问,那这个“--”到底是什么意思呢(我:???)

  • 可能比较晚了,工作一天了还要面试,状态有点不好还是怎么,反正问了一个问题,回答完了,等个几十秒不说话,再继续问下一个

  • 估计这次面试给我的评价比较差,过了十几天后显示回绝,官网重新投递做了笔试,也再没有其他面试官捞了

状态

笔试前显示已回绝,官网重新投递、完成笔试后,一直简历评估中,估计没有后文了

腾讯

3.27 实习一面

约的视频面试,面试官很好,给人感觉很舒服,问问题的时候会给一定的解释,让人理解清楚题意,适当的时候还会提醒,如果没答上来或者不完整,会稍加讲解

  • 数组和链表的区别

  • 一个数组int arr20,起始地址为100,求arr11的地址

  • 给定1G的大文件,内存限制是100M,怎么排序

  • 归并排序的过程

  • ctrl+z,ctrl+y,用什么数据结构好

  • 实现pow,最佳的时间复杂度是多少

  • #include 包含文件的时候,尖括号和双引号有什么区别,如果双引号中是库文件的话,会发生什么(答对一半,面试官解答,双引号是优先在工程文件makefile标识的文件夹中寻找,找不到再去库文件夹中找)

  • C++中struct和class当作类使用时的区别

  • C++虚函数的实现机制

  • 如果基类的析构函数没有声明为虚函数,会发生什么

  • TCP与UDP的区别

  • TCP怎么确保数据传输可靠性

  • STL中map和unordered_map的应用场景区别

  • linux中基本的操作命令,一个日志文件很大,vim打开很费时间,怎么快速搜索某个内容

  • 查看端口号情况

  • 抓包工具,有没有使用过tcpdump

  • 查看进程id、内存使用情况等

  • 查看打开的文件or描述符

  • 进程间通信机制

  • linux用的多吗,平时怎么调试

  • 做题:strcpy,需要自己输入测试用例,char strDest[],与char strSrc[]

  • 做题:excel表格列表头与数字之间的转换,strToNum和numToStr,两个都要实现

  • 有什么要问我的吗

  • 确认实习时间等

总结:做题的时候有点小紧张,可能会有敲错字母等情况,还是得细心一点;用的宿舍的网,断网了一次,面试官人很好,打电话询问后转而使用热点连接

3.28 实习二面

约的视频面试,感觉有点像压力面,我面的时候有一段时间比较紧张、有点慌乱

  • 自我介绍

  • 项目中的亮点

  • 再说说第三个项目

  • 知道写makefile吗

  • 了解数据库吗

  • 知道写shell脚本吗

  • 常用哪些linux命令,查看线程用哪个命令,会用vim吗

  • epoll的机制,什么时候用ET

  • 析构函数可以为虚函数吗,构造函数呢

  • 看过STL源码吗,说一说map的实现,红黑树的介绍

  • vector的内存扩充

  • 说说MTU,跟着扩展到网络层分片

  • 进程间通信方式

  • TCP连接释放连接的过程及状态变化

  • 说说滑动窗口

  • 了解共享内存吗(说了下虚拟页面到物理页帧的映射),后问如果这两个进程都终止了,共享内存还在吗

  • 洗牌算法,平时做题吗

  • 怎么创建线程

  • 有什么要问我的

总结:视频面试,网线又断网了一次,用手机热点也断了一次,最后加QQ用视频面,不知道是电脑出问题还是宿舍网络有问题,老是断网,好在面试官没有太介意这个

4.24 实习三面

应该是总监面,面试官人很好,主要问的是开放性非技术问题

  • 自我介绍

  • 不是科班的,怎么学习

  • 游戏研发,你会怎么做

  • 三年的工作规划

  • 有什么要问我的

  • 面试官说大家热情很高,有很多人面试,会做总体评估,一段时间后再给通知

总体而言,各个方面也都尽可能的去答了,不管怎么样,还是给了机会的,还是基本上都完成了,已经没有遗憾抱怨啥的了,暂时就先不管那么多了,就静静地等待结果通知吧

4.29 实习HR面

HR小姐姐声音很甜,没有问啥刁钻的问题为难

  • 自我介绍

  • 了解你所面的部门和岗位吗

  • 你觉得你做这个方向的工作怎么样

  • 在其他业务上有相关的学习吗

  • 主要是实验室的项目,没有其他实习经历吗

  • 工作地点有什么想法

  • 还有面其他公司吗

  • 这些公司都给你offer,会去哪一家,为什么

  • 有什么要问我的吗

总体来说,HR面所问的问题比较常规,没有刻意刁难,还比较顺利,HR说如果通过,会在5月中旬发通知

状态

五月初收到offer call,接着发录用函

斗鱼

3.29 实习一站式面试
一面

问了许多基础问题,大部分直接说了,没有用笔做记录,可能写不全

  • 自我介绍

  • 项目都是自己做的吗

  • 还有用其他语言吗,C++与python有什么区别

  • 虚函数机制

  • 虚构造函数

  • TCP三次握手

  • 拥塞控制

  • linux用的多吗,会哪些基本命令

  • 进程间通信

  • 线程同步与互斥哪些机制

  • 互斥锁和读写锁有什么区别

  • 项目设计思路图绘画一下

  • 平时做些什么事

  • 对BAT什么看法

  • 对斗鱼什么看法

  • 刷弹幕贡献值抽奖怎么设计

二面

二面没怎么问问题,简单聊了一下

  • 上一轮面试怎么样

  • 怎么样可以知道武汉市总共有多少个下水管井盖

  • 有什么要问我的吗

HR面

主要聊天,HR人也很好

  • 对工作地点有什么要求

  • 什么时候可以实习

  • 老师管的严格吗

  • 老家哪里

  • 家庭情况

  • 有想过去哪里定居吗

  • 你觉得想做哪方面的事情(前端、中间件、底层)

  • 最近这个新项目涉及之前无相关的东西,是怎么做的

  • 有什么要问我的

总结:斗鱼面试感觉还是很舒服的,面试官人都很好,比较轻松,不紧张;HR小姐姐很客气,面试完直接说薪资,而且也不错

状态

四月初收到offer call,四月上旬收到正式邮件

字节跳动

3.31 实习一面

面试官很年轻,给人感觉也很好

  • 自我介绍,过程中稍微问了下项目中的个别细节怎么做的

  • 多态讲一下

  • 虚析构函数

  • 进程与线程的区别

  • 进程间通信有哪些

  • 线程间通信呢

  • 自旋锁是什么,怎么实现的

  • 低地址到高地址说一下进程的虚拟地址空间

  • 共享库的映射区是做什么的,讲了下mmap映射到文件对象,设置为有效位无效,访问时再按需调页

  • TCP了解多少

  • 那什么时候会收到RST报文段

  • 那报文段为什么会滞留呢

  • 那说一说四次挥手

  • 服务器大量处于TIME_WAIT状态,可能的原因,造成什么影响,怎么解决(解决方案没答上来)

  • 那大量处于close_wait呢(答错了,理解成LAST_ACK状态了,但面试官也没说)

  • 做算法题:反转链表

  • 做算法题:二叉搜索树找到第k小的节点

  • 问了下,是否平常这些题都做过,说像这种二叉树遍历层次、深度遍历基本的都会

  • 接着准备让做难度大点的:大概就是有向图中判断是否出现环了,只给出依赖关系,问了下是否给出总的节点个数,说没给,正在纸上写画准备思路,面试官说这题先放下,没什么时间了,再问下别的

  • 数据库会不会

  • 存储or队列了解吗(说了一下一致性哈希),那如果服务器节点很少也这样做吗(说可以用虚拟节点)

  • 有什么要问我的

总结:有个别题目深入下去没答上来,但总体还好,放松心态,语速较慢逻辑清晰的说。

4.2 实习二面

面试官人也很好,遇到不会的,老实说不会,他说没关系;但似乎他网络不太好,开始调了差不多十分钟

  • 主要用什么语言,还有用其他语言吗

  • IO模型有哪些

  • 用的最多的应该算IO多路复用模型,讲讲它的优缺点

  • 知道正则吗

  • linux命令了解吗

  • 怎么查看端口号占用情况

  • 有一个日志文件,里面每一行都有ip、time、context等信息,怎么查询某个ip有多少个

  • C++11里面auto有什么用,不给初始值可以吗

  • volatile有什么用

  • const和#define的区别

  • 进程虚拟地址空间分布

  • 堆和栈的区别

  • 设计模式了解吗

  • 那写一个单例模式吧,写一个好点的(写了饿汉模式)

  • 那这种模式有什么不好之处呢

  • 那再写一个懒汉模式(问了是否需要考虑线程安全,说尽可能写好的,还问了下,加锁解锁部分可以用伪代码)

  • 给定a=1,b=2,不给定其他变量,怎么交换它们俩的值

  • 算法题:给定一个数组,有若干个数,找到a+b+c=99,找到所有abc的组合

4.3 实习三面

面试官应该是主管或者级别更高的领导,但是也很和蔼,没有表现的很气势压人一等

  • 主要用什么语言,还有用其他语言吗

  • STL中的map怎么实现的

  • 那map的插入效率是多少呢

  • 基于比较的查找,最好的性能上logn,还有什么查找能突破这个限制

  • 排序算法里面最好的性能上nlogn,能突破这个限制吗

  • inline内联函数是否可以递归

  • 构造函数中是否能抛出异常

  • linux中CPU调度怎么做的

  • 这个进程队列是什么队列

  • 操作系统内存分配与释放

  • 算法题:根据前序遍历序列和中序遍历序列求出后续遍历序列

  • 后续问了下其他问题,什么时候可以来实习

  • 有其他师兄在头条吗

  • 毕业之后有什么打算

  • 最近有什么打算(学习、实践两个方面)

  • 还面了哪些公司,offer情况

  • 有什么要问我的

总结:总的来说,一面二面的问题基本上都答上来了,有一点点小瑕疵;三面的话,有个别不知道的,但根据自己的情况调节了问题的导向及做出相关回答,面试题有点小可惜,只是两条语句顺序调整一下就正确了,但没给时间继续调了;有时候面试官问问题,需要适当的去询问一下问题的详情,但有时候也要注意,不要问的太细了,问得太细又容易把自己的思路、表达等限制住

4.30 实习四面(加面)

换了另外一个部门,leader说要加面,只问了几个技术问题

  • 自我介绍

  • C++内存分配有哪些

  • 算法题,数组中的数字都属0~n-1,无序,看是否有重复

  • 如果是0~n呢

  • 什么时候毕业,毕业后的打算

  • 平时怎么学习

  • 工作地点

  • 实习时间

  • 有什么要问的

状态

四月初面试完成后,过了两个星期没有收到拒信也没收到offer,等到的却是又让我做笔试,完成笔试后,接着又让我参加面试。已是四月中旬,不想再来一次高强度的三面了,所以之后询问HR,说这是两个不同的渠道,一个部门直招,一个公司统招,互不影响,之前没有再联系我,是因为内部综合考虑觉得我的实习时间不够而拒绝,但却没有发出明确的拒信(解释道,跟同学们说过,如果一周内无任何消息,就是默认拒绝,但没有人跟我说过,我并不知道这个规则,所以就默默等待了两个星期)。后来HR说如果可以多申请些实习时间就帮我走offer流程,嗯。。。最后走了offer流程,一个星期后无任何答复,我主动询问后,被告知:审批未通过(已是四月下旬,整个春招都快结束了,还没拿到一个心仪offer的我。。。情绪低落到极点。。。)。HR说帮我恢复统招流程,还可以继续面,当时已经准备放弃了,不想再面了,真的心累。。。

幸运的是,后续深圳部门的HR看到了我的简历及面试记录,把我捞了上来,本来准备直接发offer的,后来部门leader说要加面,也很幸运的是,可能leader只是不好直接录一个没有接触过的学生,只是想了解一下我的状况,所以只简单的聊了聊不像之前强度那么大了,最终也在五一放假前正式收到了第一个心仪offer,让我过了一个愉快的五一假期,真的很感谢那位HR小姐姐。

依图

4.8 实习一面

面试官很好,觉得我不是非科班,但也没有怎么为难

  • 自我介绍

  • 问项目,三个都大概了解式的问了

  • 平时调试用什么,linux的gdb用过没

  • 当发现内存泄漏或CPU占用满了,怎么办

  • 主要还是用C++,谈一谈对C++的认识

  • C++还有什么好的

  • #define和const的区别

  • 可执行文件的内容分布

  • 代码段存放哪些数据,还细致的问到了未初始化的、已初始化的区域

  • 进程线程区别

  • 同步互斥机制有哪些措施

  • 条件变量应用场景

  • 网络编程的函数调用套路,客户端服务器端(还说了一些连接队列)

  • 那listen函数的backlog参数是什么意思

  • 客户端是是否可以使用bind

  • 阻塞与非阻塞,IO模型

  • 了解哪些数据结构

  • stack和vector的区别

  • 算法题:strcmp

  • 算法题:二分查找firstK

  • 有什么要问我的

总结:假期玩了几天,收假回来第一场面试,心态上还好,但是感觉面的过程中,说话有点卡顿或者思路没很快跟上,逻辑有点不清晰,感觉下次还是要理清楚了再说,有条不紊的、细致的慢慢说,不要着急,语速也不要过快。

状态

面试表现感觉还可以,不过后续没啥动静了,估计觉得不太对口吧

快手

4.13 一面

面试官很年轻,平易近人,还和我一起讨论算法某段是什么意思

  • 自我介绍,其中有一个关键词“最优路径”,然后让我谈谈最优路径的看法,我以为是问项目中这个最优路径是什么意思,说了近一分钟后被打断,说最优路径相关的算法

  • 接着就说关于最优路径,了解图中的最短路径算法dijkstra,然后介绍了一下主要思路,接着问现在写是否能够写出来,就手撕了一遍,然后对着代码解释和讨论

  • 看过哪些C++的书,说到了STL源码剖析,接着就让说一说allocator,涉及到了内存池机制(优点、怎么做的)

  • 了解哪些设计模式,然后写了两种模式的单例模式

  • 问pthread_once是否了解(说实际中不会像lock那样子用,而是用这个)

  • 网络编程是否了解,接着说道了select、poll和epoll优缺点

  • ET/LT模式的区别

  • 算法题:给定一个BST,和一个Key,删除这棵BST中Key所在的节点

4.13 二面

面试官应该是更高级别的,但人也很好

  • 自我介绍

  • 看了哪些C++的书,说到了STL源码剖析,接着就问vector和list的区别

  • 进一步说到了vector和list,哪一个对于***是更友好的,刚开始还以为是这两种结合,形成LRU

  • 上一题没听懂什么意思,面试官就准备解释一下,说到了多级存储缓存,问是否了解,我说了一下存储器山

  • 接着就说对于***哪个更友好,意思就是从命中率的角度,谁的命中率更高,问了一下面试官是不是从局部性原理分析,说是的,然后就说了一下空间局部性

  • 单链表排序该怎么做,分析一下时间复杂度,接着写代码实现

  • 线程安全队列该怎么实现,说了一下生产者消费者模型

  • 我们有一个***,其容量是固定大小size的,如果里面元素满了,再加元素,需要牺牲掉一个元素(刚开始还以为是LRU,但说,跟最近使用没关系,主要看频率)

    • 先问了下时间复杂度有没有要求,说当然越快越好

    • 然后说可以使用最小堆,将元素出现的频率作为比较规则,频率最小的作为堆顶,接着说时间复杂度(好像说错了,说了个nlogn,但删除操作是1,直接建堆是n,除非是挨个挨个插入建堆才是nlogn,不记得具体说的是哪一种效率了)

    • 问查找一个元素的时间复杂度,说要查找的话那只能挨个遍历了,n的操作,接着问是否可以优化(问了一下,是不可以用最小堆这个结构吗,说最小堆还是可以的,怎么优化查询)

    • 说可以用hash_map,key是这些节点元素的key,value是对应节点的迭代器或指针,指向那个节点,那查询可以优化为1

  • 分布式系统有了解吗,说了下不了解,只知道有个一致性哈希算法,介绍一下

  • 设计问题:有一个库,里面可以存放很多商品,有成千上万的商品,也有很多分布式服务器,这些服务器可以向库中添加这些商品,但添加需要有一个counter service,用于为添加的商品设计一个编号id,怎么设计

    • 说的是,暂时只考虑到了一点,这个编号id需要是唯一的,那可以通过ip+time+商品类型+计数的一种形式实现唯一

    • 之后涉及了很多问题都是基于这个背景的,感觉一方面考察对于设计问题的思路、眼界和思维等,另一方面考察与其相关的基础知识

    • 因为是分布式服务,那应该会用到IO多路复用,将了一下select、poll和epoll

    • 为什么不直接计数,直接计数的话,这个计数相当于是一个临界区资源,大家访问时需要实现互斥,每次都阻塞等待、进程切换、进程调度等操作开销大,降低性能

    • 那还知道什么锁机制,如果在临界区中操作时间非常短的话,用自旋锁忙等待的方式,效率更高

    • 从可靠性的角度来分析,刚开始以为是数据的可靠传输(TCP)和加密安全传输(https),准备从这两个方面说,结果面试官说,如果是单点服务器,崩了,那怎么办(那可以用一致性哈希算法,就算崩了,也只需要将某一段较为少量的数据进行迁移),那对商品编号id是否有影响呢(好像是有影响的,因为之前说编号id有一部分是用ip地址组成的,如果数据迁移至其他服务器节点,那么ip相应的就有改变了,当时说的是会有影响,但是没细想啊,现在又感觉就算存储的服务器节点ip变了,好像对原本存放进去的数据也没有太大的影响吧。。。或者是编号id中删除ip那一个部分。。。总之还是推翻了之前那个方案),接着问还有其他方案吗,暂时想不出来了,就没有再继续说这个问题了

  • 有什么要问我的

总结:

  • 一二面的面试官人都挺好的,聊的来,有不会的,直接说不会也不会说什么,直接跳下一个

  • 并且二面面试官,在我提出一个方案之后,给予了一定的肯定,虽然不怎么好,但也没有全盘、立即否定,而是顺着我的思路,一步一步推导,从而让我意识到,这样做在哪里行不通或者不太好,在这个推导的过程中,聊到了我会的一些知识,相当于向面试官展示了自己知道的一面,也拓展了自己的眼界,在对这个问题的思考中,需要考虑哪些之前没有考虑到的方面

  • 二面完成之后,可能下班了,就没有后续的继续面试了,但听说有三轮技术面

状态

面试表现感觉还可以,在牛客网上投的简历,状态显示第2轮通过,但也没有后续消息了

华为

4.16 实习一面

面试官应该是搞技术的,问了很多项目以及一些技术问题

  • 自我介绍,涉及到项目的事情,许多问题都是根据项目展开的

  • 面试官具体问题忘记了,回答是将神经网络模型稍微介绍了一下,其训练流程代码大致框架走了一遍

  • 可能有些影响影响因子并不会影响到部分输出参数怎么办

  • 有没有对神经网络进行相关的优化

  • Qt当中信号与槽机制是怎么实现的

  • 进行的相关操作,槽函数没有响应会因为什么

  • 类MVC模式是怎么实现的讲一下

  • 什么时候需要将析构函数定义成虚函数

  • 多线程如何实现同步与互斥,针对一个问题具体讲一下怎么用

  • 如果不用锁怎么实现,说的自旋锁忙等待

  • 学过哪些数学课

  • 条件概率知道吗

  • 怎么把条件概率应用到模型训练这个项目中

4.16 实习二面

面试官应该是一个不专门搞技术的主管或者领导,气场很足

  • 自我介绍

  • 详细介绍了一下其中一个项目软件开发的情况

  • 项目中有什么创新点

  • 这个项目主要解决什么问题,多少人一起做,负责哪个部分

  • 接着一起聊这个项目的详情,提出其中一些问题讨论

  • 面试官提出了一个缺点,说那怎么检测出来生成的最优路径是不是正确的呢,无法验证等

  • 有什么要问我的

总结:

  • 华为的面试也没有传说中的玄学与水啊,两轮面试都超过三十分钟,近四十分钟,既问了项目,也问了技术问题

状态

录用排序中

百度

4.21 实习一面

一面面试官很好很随和,问的很基础

  • 看你不是科班的学生,自己学过哪些知识看过哪些书

  • 说说哈希表的实现方式以及怎么解决哈希冲突

  • 说一说多态机制怎么实现的

  • 纯虚函数

  • 模板了解多少

  • 模板偏特化了解吗

  • C++11了解多少

  • 左值右值的区别

  • std::enable_if了解吗

  • 调用fork,发生了些什么事情

  • 协程了解吗

  • 32位机器,一个程序可以用的内存有多少

  • epoll相对于select的优点是什么

  • 线程同步与互斥实现机制有哪些

  • 二分查找复杂度是多少,实现一下最基本的二分查找,更改一下题目,做一下变种题(12345 变为 45123)

  • shell脚本了解吗

  • 数据库了解吗

一面比较偏重基础,把基本上各大知识块重要的点都过了一下,像是摸清楚学生大概掌握的知识面的广度

4.21 实习二面

中午吃了饭之后,HR就打电话说让上线,面试官在等了(可一面面试官说的是让我1点上线开始等),上线后二面面试官后续才达到,没有说等的事情

可能是中午刚吃了饭,没有午休,继续工作有点困乏,大家状态都有点不佳,面试官问问题,我回答问题也没有之前那么有激情了,有几道题回答的时候,感觉面试官都捂着头不想听了。。。而且自己说的也很乱,语速、逻辑有点不清

另外,感觉二面面试官问的问题,有好几个我都没理清楚什么意思。。。以至于答了半天,打断了重新说了一下,让我从另外的角度答

  • 自我介绍

  • 斐波那契序列知道吗,实现一下

  • 多线程之下,访问一个全局变量可能会有什么问题

  • 有什么机制可以确保不会出这个问题

  • 互斥锁会有一些性能开销,不想用怎么办

  • 那你知道自旋锁是怎么实现的吗

  • 除了这个(回答的,专用机器指令compare_and_swap),还有其他方法吗,原子操作了解吗

  • 什么时候会发生死锁(面试官接着上一个问题问的,我以为从使用锁的机制去讲,结果把生产者消费者模型讲了,结果他说,不是指这个,而是指什么时候会发生,死锁的条件)

  • 在代码实现上怎么解决死锁呢

  • 有些线程处于死锁状态了,怎么在另一个线程中检测出来

  • 线程栈通常是多少

  • 那一个线程可以访问另一个线程的线程栈吗,会发生什么

  • 链表了解吗,跳表呢

  • 进程虚拟地址空间划分,分别存储什么

  • static修饰全局变量和局部变量的效果

  • 最大连续子数组和

总体上感觉,大部分还是答出来了,但是感觉没讲清楚,语速、逻辑有点乱,有点急躁、状态不佳。。。

4.21 实习三面

面试官是代表公司的,通用能力考查,人很好,有问题没答出来,也做了相关的解释

  • 问项目,每个项目都稍微细致的说介绍了一下情况,在其中的职责,做了哪些事

  • 讲一讲你做的项目中的一个难点

  • 内存4G,malloc申请4.1G会发生什么

  • 内存4G,已经有其他进程申请了2.5G了,此时malloc申请4G,会发生什么

  • 有什么要问我的

总结:三面是通用能力考察,后来也解释道,问的问题没有标准答案,具体实现不同,答案不同,想看看学生们的知识广度和深度,能够根据提问发散思维想到多少东西

状态

4.30收到offer call

最后

最后来个offer求比较,目前比较满意的是

  • 字节跳动,后台开发,base深圳,部门主端PC端,业务应该是头条号方面,需要转Go语言

  • 百度,C++软开,base北京,部门忘记问了,听群里小伙伴说那天打oc的应该是智能云或凤巢

  • 腾讯,后台开发,base深圳,部门IEG天美,业务应该是游戏服务器研发方面

可以从转正率、秋招加成等方面分析,想听听大家的意见或建议,谢谢大家啦!


#腾讯##百度##华为##字节跳动##实习##面经##C++工程师#
全部评论
恭喜恭喜 百度如果是凤巢的话,应该很核心了吧
2 回复 分享
发布于 2019-05-08 10:59
这个面经说实话太棒了。。。关于那个嫌keeplive时间太长的话,可以修改那两小时的时间间隔吗?我看到的好像都是自己写应用层心跳。
点赞 回复 分享
发布于 2019-05-08 11:38
百度这两个都不错
点赞 回复 分享
发布于 2019-05-08 11:01
膜大佬,投百度一票,腾讯那个部门对于以后从事游戏方向有加成吧
点赞 回复 分享
发布于 2019-05-08 12:21
我鹏牛批
点赞 回复 分享
发布于 2019-05-08 14:07
大鹏哥牛逼
点赞 回复 分享
发布于 2019-05-08 15:13
大鹏哥牛逼
点赞 回复 分享
发布于 2019-05-08 15:28
大定哥到此一游
点赞 回复 分享
发布于 2019-05-08 17:12
66
点赞 回复 分享
发布于 2019-05-08 18:11
厉害哦!我投Q币一票
点赞 回复 分享
发布于 2019-05-14 16:27
羡慕大佬
点赞 回复 分享
发布于 2019-05-14 17:47
&哇,我20年腾讯天美面试 一面二面问题和楼主是一模一样的!
点赞 回复 分享
发布于 2020-04-09 09:19

相关推荐

49 322 评论
分享
牛客网
牛客企业服务