2019年秋招面试总结

假装没事ソ 提交于 2019-12-02 05:40:49

  2019年秋招算是告一段落了,从3月份找实习开始到现在也有大半年了,个人感觉秋招就是一个不断积累经验、提升自己的过程,简单总结下就是:基础、算法、项目、实习和表达能力。

一、个人基本情况

  本科双非,硕士末流985,本硕都是非科班,电子通信相关专业。个人比较爱折腾,属于闲不下来的那种,本硕阶段有两次实习经历和两个大的项目经历,还有若干比赛经历,实习和比赛都不是TOP级别,但基本也算是比上不足比下有余吧。技术栈主要是C++后端开发。

二、秋招面试情况

  秋招总共投递了近80家公司,收到面试通知的有30家,最后拿到offer的有7家,分别是字节跳动、深信服、金山云、跟谁学、盛趣游戏、大华股份、58同城,还有腾讯的微信事业群在等最后的offer call。拒绝面试的有:中兴、格力、思特沃克、阅文集团、斗鱼直播、平安科技、酷狗音乐、昆仑万维。

三、一大波面经来袭

  接下来发一下所有公司的面经吧,希望给以后找工作的师弟师妹可以提供一些帮助。注:很多公司经常问到的一些问题,后面不再重复了。

1、字节跳动(一、二、三面,offer)

map的key如果是结构体需要注意什么问题
构造函数和析构函数什么时候调用
为什么要进行内存对齐,具体讲解,内存对齐又会带来什么问题
详细讲解堆和栈的区别,new和malloc的区别,malloc底层原理
详细讲解虚函数,虚函数表放在哪里,虚表指针什么时候初始化
详细讲解static成员变量和static成员函数
进程间通信的方式,共享内存的原理​
自旋锁的原理,什么时候用自旋锁,什么时候用互斥锁​
详细讲解单例模式的实现
详细讲解select和epoll的底层实现,LT和ET模式的底层区别,ET模式下的读写注意事项
输入网址后的执行过程,详细讲解每一层
详细讲解HTTPS的原理,客户端为什么信任第三方证书
怎么实现DNS劫持
TCP和UDP的区别,TCP如何保证可靠性,UDP又有什么优势​
如何控制客户端的并发数​
详细讲解项目中用到的线程池,线程数应该设置为多大
MongoDB副本集实现高可用的原理,raft选举过程,投票规则,日志复制的过程,rocksdb引擎的优点,LSM树讲解
手撕代码:

  • XML格式解析
  • 有序数组找到第一个小于0的数和第一个大于0的数
  • fork和循环结合后打印多少个字符
  • 实现一个string类
  • 矩阵左上角到右下角的最短路径和
  • 实现一个智能指针
  • 合并两个排序数组并去重
  • 最长无重复子串
  • 两个排序数组找中位数
  • string转float

2、美团点评(一、二面,挂)

讲项目和实习
TCP三次握手、四次挥手,如何实现可靠性,拥塞控制,数据包发生乱序如何恢复
DNS解析的过程,DNS是基于TCP还是UDP
进程和线程的区别,进程调度算法,如何创建进程和线程,进程和线程的底层实现
MongoDB如何实现事务,事务的隔离级别
智能指针的思想,循环引用,unique_ptr的实现原理
介绍一下野指针
什么情况下会发生内存泄漏,怎么解决
HTTP长连接和短连接
用数组实现一个栈,并在O(1)时间复杂度内获取最小值,如果是队列该怎么做
实习遇到的难点
项目中的问题排查
手撕代码:

  • 最长连续子串
  • 基于快排的思想实现TOP K

3、百度(一、二、三面,挂)

虚表存放在哪里,虚表指针什么时候初始化
TIME_WAIT状态持续时间为什么是2MSL,不是1MSL、3MSL
MongoDB高可用架构的原理
服务器运行很慢怎么排查
详细讲解简历里的一个专利的实现原理和创新点
36辆车,6个赛道,最少次数得到速度最快的3辆车
详细讲解科研课题方面的研究成果,难点和创新点
怎么知道服务端出现了死锁?死锁和死循环的区别,怎么区分
手撕代码:

  • 求A^B的后三位数
  • 有一个日志系统,统计在某一段时间内某个IP出现的次数

4、腾讯(一、二、三面,等OC)

数据库死锁的场景,怎么解决,操作系统的死锁,怎么解决
如何实现一个CDN系统
数据库的ACID四种属性的底层实现原理
如何实现一个缓存系统
海量词汇统计出现频率
计算各种情况下的sizeof
虚函数以及虚表的作用,具体分析
HTTP如何实现状态化,cookie被禁用了怎么办
TCP流量控制中发送端和接收端滑动窗口大小是怎么确定的
手撕代码:

  • 实现一个string类

5、电信云计算(一、二面,挂)

自我介绍
讲项目和实习
redis有哪些数据类型,分别有什么应用场景,怎么读取redis里的数据并推送到前端的
项目中有哪些难点,有没有遇到什么问题,讲讲你是怎么排查的
HTTP请求的数据包格式
C++内存泄漏和野指针怎么解决
Linux的基本命令,netstat、top、grep、sed、awk应用场景
讲解MongoDB基本概念和高可用架构原理,适合存储哪些类型的数据
对云计算的认识
为什么想来电信云
期望薪资是怎么考虑的,工作地点呢

6、小红书(一、二面,挂)

详细讲解项目并画出项目架构图
B+树的插入和删除操作
Linux如何为普通用户提供root权限
MongoDB的增删改查操作
epoll原理、TCP三次握手原理、TCP可靠性如何保证
输入URL后的执行过程,画出必要的流程图
口述两个并发的sql语句,并分析隔离级别和加锁机制
手撕代码:

  • 链表反转

7、滴滴出行(一面,挂)

实习遇到的难点
TCP两次握手有什么问题
100亿个数找TOP 10
缓存击穿和缓存雪崩怎么处理

8、旷视科技(一、二面,挂)

拷贝和赋值的区别,深拷贝与浅拷贝的区别
QT信号与槽实现机制
实现一个线程安全的栈,并且实现其单例模式,
MongoDB存储int和string有什么区别
手撕代码:

  • IP地址转无符号32位整数
  • 链表的建立、插入和删除
  • 反转链表
  • 大数相加

9、58集团(一、二面,offer)

非阻塞connect怎么实现
accept与三次握手的联系
负载均衡怎么实现的
任务队列怎么实现的
定时器有什么用,怎么实现定时器
怎么处理高并发短连接造成的性能瓶颈
KNN是怎么实现的,特征有多少维,数据量有多大,时间复杂度是多少
wiredtiger引擎事务的实现原理
redis的有序集合是怎么实现的,跳表的增删改查复杂度是多少
手撕代码:

  • 字符串转int
  • 二叉树转换为单链表

10、招银(一、二面,挂)

项目中问题的排查
动态语言和静态语言的区别
手撕代码:

  • 单例模式的实现
  • memcpy的实现

11、追一科技(一、二面,挂)

Linux系统的启动过程
IP地址、子网掩码、默认网关、DNS的作用
如果你是老板,你会招什么样的员工
团队成员意见有分歧怎么处理
导师交给你一个任务,怎么去完成
画出项目架构图
MongoDB高可用架构的原理
添加一列索引,什么情况下索引并没有生效,如何改进

12、学而思(一面,挂)

面试体验非常非常差,和面试官直接怼起来了,不想多说了

13、猿辅导(一面,挂)

讲项目和实习
边缘触发和水平触发的区别,编码时有什么需要注意的
MongoDB副本集选主的过程是怎么样的
手撕代码:

  • 两个数组,数组的元素都是区间,将两个数组合并

14、作业帮(一、二面,挂)

讲项目和实习
常规的面试问题(不再重复)
手撕代码:

  • 合并两个排序链表
  • 分解因数(递归)

15、跟谁学(一、二面,offer)

虚析构函数的作用,内存泄漏问题
TCP每次走的链路是一样的吗
UDP如何实现可靠性,视频使用UDP传输有什么好处
动态链接库和静态链接库的区别,在链接的时候有什么不同
多线程的使用及其需要注意的问题
多线程中的“锁”用到哪些内核资源
面向对象的特性有哪些?说一下多态
说一下socket编程调用的函数
成绩排名、籍贯、高考分数、六级分数
说说自己的职业规划、优缺点、兴趣爱好、期望薪资
手撕代码:

  • 链表排序

16、盛趣游戏(一面,offer)

常规的面试问题(不再重复)
手撕代码:

  • 二分查找

17、深信服(一、二面,offer)

常规的面试问题(不再重复),项目和实习问得比较深

18、大华(一、二面,offer)

常规的面试问题(不再重复)

19、去哪儿网(一面,挂)

常规的面试问题(不再重复)
手撕代码:

  • 使用堆实现TOP K问题
  • 二叉树的层次遍历

20、Shopee(一、二面,挂)

讲项目和实习
常规的面试问题(不再重复)
了解哪些缓存,redis用过吗,跳表原理讲一下,LRU又是怎么实现的
客户端的登录验证过程,如何保存密码
cookie和session的区别
HTTPS中为什么需要第三方证书,客户端为什么信任第三方证书
手撕代码:

  • 实现一个堆,包括插入和删除元素函数的实现
  • 字符串按空格反转(I LOVE SHOPEE => I EVOL EEPOHS)
  • 链表按空格反转(I->’ ‘->L->O->V->E->’ ‘->S->H->O->P->E->E => I->’ ‘E->V->O->L->’ 'E->E->P->O->H->S)

21、BIGO(一、二面,挂)

讲项目和实习
常规的面试问题(不再重复)
进程切换时操作系统需要做哪些事
TCP流量控制发送端和接收端的窗口大小是怎么确定的
手撕代码:

  • 二叉搜索树转双向链表

22、金山云(一、二、三面,offer)

常规的面试问题(不再重复)
线程间通信的方式有哪些
分布式数据库的数据一致性怎么保证
C10K问题和C100K问题
创建死循环有哪些方式

23、HR面的面经

怎么证明你的自学能力
讲讲最近看的一本书,有什么收获
你认为什么是好的代码
你有什么优缺点
你遇到过的最大的问题,怎么解决的
你的职业规划是什么
能实习多久
对公司的了解
对自己最不满意的地方是什么
自己最骄傲的事情是什么
你觉得最成功的事是什么
你觉得最遗憾/失败的事是什么

四、最后来个总结

1、基础一定要扎实

  我找的工作基本都是C++后端开发,对于这个方向,基础尤为重要。基础知识大概可以分为这么几个部分:C++编程语言、算法与数据结构、操作系统原理、Linux系统编程、计算机网络编程、数据库。学习过程还是比较漫长的,在准备的过程中一定要多实践,光看书肯定不行。

  对于这个部分,我的经验就是早点准备基础知识,可以找一些经典书籍,比如C++四大名著、深入理解计算机系统、Unix环境高级编程、Unix网络编程、TCP/IP详解、MySQL必知必会等等。

  看书的过程中也可以配合一些博客和视频加深理解,刚开始看书的时候可能会比较枯燥,而且一时半会儿难以理解,这个很正常不用太在意,很多知识点现在不理解,以后可能某一个时刻就理解了。

  另外一个经验就是,在学习某个知识点的时候可以找相关的面经看看,这样有利于把这个知识点吃透,了解得更全面。

2、刷题一定要早

  今年秋招可能比任何时候都重视手撕代码了,手撕代码指的是面试官出一个编程题,然后在线(线上面试)或者白板(现场面试)编程。手撕代码题目的来源一般都是剑指offer和leetcode,由于题量比较大而且有些题目比较难,所以这个部分建议提前一年就开始准备,每天有意识地刷几道题。

  这个部分其实经验不多,因为手撕代码的题目太灵活了,唯一的建议就是按类型(数组、字符串、链表、二叉树、动态规划等)多总结,常见的比如反转链表、合并链表、二叉树层次遍历、快速排序等等一定要滚瓜烂熟。

3、面试经验一定要多积累

  第一个就是要100%熟悉简历上的任何一个知识点,甚至是延伸出来的知识点。自己的简历都不熟悉的话那就说不过去了,所以不熟练的知识点不要写,如果问到了答不出来就很难通过面试。光熟悉基本的还不够,因为面试官都是非常有经验的人,他们会问到很多简历以外的问题,有一些问题你可能都从来没有想过。对于这一点,我的经验是面试前期先找一些公司练练手,看看别人会问到什么问题,然后下来总结,另一点就是自己平时多猜想面试官会问到项目中哪些问题。最后如果实在答不出来,那就坦白吧,就说自己考虑不周,千万不要瞎说一通。

  第二个就是多看面经多总结,有很多问题是各大公司重复问的,对于这些问题一定要熟之又熟,比如虚函数原理、IO多路复用、智能指针、TCP/UDP等等,光了解基本的点还不够,平时要自己深挖这些知识点。

  第三个就是对于自己熟悉的知识点一定要学会扩展地讲,比如一个简单的问题,select和epoll的区别,你能答出多少?秋招刚开始的时候我遇到这个问题只能说一分钟,秋招后期关于这个问题我至少可以说上十分钟,甚至更久。这样的好处在于可以体现出你技术栈的深度,对于某些问题有自己独特的理解,更有利于压缩面试时间,主要是降低后面手撕代码的难度(面试都是有时间控制的,前面面得越久,后面的手撕代码题可能越简单)。我秋招面试小红书和盛趣游戏就是这样,最后面试官没时间了出了一个反转链表和二分查找,就很简单了。

4、能实习的话一定要去实习

  3、4月份一般是找实习的时间,我的建议是能实习的话尽量去实习,但是找实习之前一定要做好准备,别打乱仗。因为一些公司会有面试记录,比如阿里和华为等,面试评价不好可能会对后续秋招面试有一定影响,所以建议准备好了就一鼓作气拿下,尽量去大厂(对了,不建议去华为)。

  实习的好处一个是体验下大公司的工作流程和氛围,提前适应公司的工作节奏,也可以作为一个加分项,有利于通过简历筛选;另一个好处是今年很多公司都流行什么offer排序、offer池之类的,如何从池子里脱颖而出呢,如果有大厂实习就会是一个亮点了。

5、心态一定要好

  秋招是一个漫长的过程,一定要保持一个好的心态。面试通过的理由只有一个,那就是你很优秀,符合公司的各项要求;而面试不通过的理由则是千奇百怪,什么没有HC、面完之后无疾而终、卡本科学校、与面试官不合等等。所以一定要保持一个好的心态,相信自己。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!