2018阿里、腾讯音乐、百度面经
还记得阿里一面信心严重不足,讲到自己的协程库一直在自黑,面试官直接跟我说我们是在探讨这个问题,不要把自己的东西说的这么不好…哎呀眼泪哗哗的,感动啊(逃
不过总的来说,面试难度最高的还是阿里,会问的非常详细,有的问题恨不得让你把硬件层的东西说出来(
面试的时候问题还是集中在项目和基础,项目你要烂熟于心,有哪些优化点提前想一想;基础也要好,最起码虚函数三次握手这些月经题目还能流畅的用自己的语言表达出来,对于一些底层的东西了解的越多越好,说出来的越多越好,也不要太怕说错,别太离谱就行…
如果不会就直接说不会,不懂的不要强行挣扎,一个追问问过来瞬间萎掉打脸就太尴尬了…
但是问你十个问题九个说不会那肯定也凉了…
平时有面试多总结一下还是有好处的,一些日经问题会很熟,没有准备到的就找几篇文章甚至源码仔细研究一下,据我观察如果一面被问到一个问题,二面是很容易被再问到的,比如腾讯两次都问到gdb和非侵入式查看进程堆栈,所以一面完哪些问题被问住了一定要好好看看,同一个部门的面试官平时关注的点也很容易重合的。
我能总结的也就这些了,感谢12位面试官不杀之恩没让我手撕太多代码(逃
好了废话不多说上面经…
阿里五面
一面电话1h40min
Q:做个自我介绍吧
A:聊项目
……(聊了挺久)
Q:我看你这边github上有一个协程库,能介绍一下协程的概念吗?
A:协程,用户级,轻量,快,效率高,但是不结合多线程难以利用多核
Q:能说一下怎么实现的吗?
A:讲了一下基于ucontext怎么切换上下文
Q:协程和线程的区别?
A:调度比较快,不用进内核。单Schedual难以利用多核?
Q:内存上有什么区别?
A:同一个CPU上多个协程不会产生临界区竞争。
Q:协程切换的时机?
A:定时器,文件阻塞,拿到锁阻塞,函数调用的时候。
Q:你写的库的对于使用者有什么优势?
A:……你可以用我的APIbalabala……
Q:给我一个用你的协程库的场景吧??
A:YY了一个轮询读文件的场景。
Q:你这个说到了你维护了一个栈,这个栈是干什么的?栈的维护是你自己做的吗?
A:维护每个协程的上下文。我就只需要管理这块内存就可以。不是很完善……
Q:上个读文件的场景,什么时候才会阻塞?
A:设一个NONBLOCK位,在出错读到EAGAIN的时候就切换出去。
Q:如果两个都阻塞了呢?
A:那就没辙了……举了一个很多fd用epoll轮询的场景。
Q:从你个人角度有没有遇到过比较困难的场景?
A:balabala……
Q:说说你实习的项目?
A:balabala……
Q:说说map with mutex和sync.Map的区别?
A:Mutex是悲观锁,而且那个粒度比较大。sync.Map是带缓存的,体验和CAS差不多。
Q:聊点基础的吧
A:好……
Q:sizeof和strlen的区别?
A:你们都懂得
Q:一个int大概多大?
A:32位4个字节,64位8个字节
Q:int在内存中字节排布?
A:小端序
Q:虚函数指针什么时候会出现?
A:在有虚函数的时候~
Q:static的作用?
A:都懂得,这里不展开了
Q:多个进程同时监听一个UDP端口会怎么样?
A:不懂……
Q:你可以了解一下这方面。进程的内存结构?
A:内核、栈、动态链接库、堆、静态区、代码段、保留区
Q:静态变量和全局变量在哪个区?
A:静态区……
Q:++i和i++的区别?
A:++i效率比较高。
Q:虚基类和普通基类的区别?
A:菱形继承问题
Q:空类的大小?
A:1byte
Q:为啥?
A:不懂…
Q:引用和指针的区别?
A:都是用指针实现的。
Q:进程间通信?
A:socket, 管道,消息队列,共享内存
Q:TCP三次握手?
A:讲了讲(忘了讲状态转移)
Q:TIME_WAIT?
A:讲了讲……感觉面试官不是很满意?
Q:CLOSE_WAIT呢?
A:讲了讲……吐槽了一下一般都是代码写得有问题(逃
Q:epoll有几种类型?
A:ET,LT。
Q:调试程序用什么?
A:gdb,log,valgrind, vs
Q: CPU高了怎么看?
A:free+pprof,看火焰图
Q:其实C/C++也有类似地工具
A:嗯
Q:coredump有了解过吗?
A:只用过,不知道原理
Q:你可以再了解一下呀。这个还是很重要的。
A:好的
Q:hash冲突怎么解决?
A:拉链和线性探查
Q:还有啥要问我的?
A:你们这边比较青睐有什么技术积累的人?
Q:balabala…C/C++
阿里二面 1h10min
-
手写反转单链表
-
讲讲堆和栈的区别
-
讲讲TCP三次握手
-
讲讲C语言的static
-
内存泄漏是怎么回事?有什么影响?
-
啊?内存泄漏会是提示segmentation fault吗?
-
不是吧,那你讲讲segmentation fault产生的过程吧,从底层这块。
-
讲讲TCP三次握手
-
线程和进程的区别
-
你写过网络服务吗?你的是单线程还是多线程的?
-
多线程程序对单线程程序有什么优势?
-
如果要计算0~1000000所有的质数,我用单线程和多线程计算有什么区别?
-
来讲讲epoll
-
讲讲你的协程库
-
如何利用协程实现写代码是同步阻塞的,底层实现是异步的?
-
讲讲你的实习
-
讲讲你对CDN的理解
-
你期望在杭州办公还是北京办公
-
你还有什么问题
阿里三四面
三四面相对于一二面目的就是要问到你不会为止的那种狠劲,更像是闲聊,没有特别细节的问题,大多数是项目的延展,这里我挑几个有参考价值的问题。
- 协程相对于线程的区别?
- 协程和epoll有什么区别,他们是为了解决什么问题?
- 你觉得协程相对于线程,进程有什么共同点?
我发现阿里的面试官对我的携程库特别感兴趣……在腾讯和百度面试都没有这样的情况,也不知道是不是这个部门也在自研协程相关的东西。
阿里HR面 30min
- 你的缺点是什么?
- 你平时都是怎么学习的?
- 你最崩溃的时候是什么?
- 你的底线是什么?
- 你未来的规划?
- 阿里云未来的图景YY一下?
大概就这些…还有很多针对性的问题没法说,原谅则个。
腾讯音乐四面
腾讯音乐一面 30min
-
介绍一下自己
-
CDN的概念有了解吗?
-
某一个节点特别繁忙,怎么解决?
-
sync.Map怎么实现的
-
goroutine原理了解吗
-
epoll和select的区别
-
epoll ET和LT的区别
-
排序算法有哪几种,时间复杂度?
-
map和hash_map的区别?
-
vector和list的区别?
-
C++析构函数为什么要设成虚的?
-
C++多态的实现方式?
-
如何追踪运行期间进程的堆栈?
-
gdb的原理有了解吗?
腾讯音乐二面 30min
-
了解CDN的一些业务数据吗
-
无锁数据结构有了解吗
-
CAS讲一讲
-
goroutine原理讲一讲
-
go和C的对比
-
go就没有哪里不如C吗
-
非侵入式查看运行时堆栈
-
无锁hash表怎么解决rehash
-
epoll原理讲一讲
-
排序算法了解吗
-
链表怎么排序
-
链表不能用快排吗?
-
stl的容器用过哪些
-
std::sort用的哪种排序算法
-
socket有用过吗
-
进程间通信手段
-
共享内存用法
-
go怎么共享内存
-
调试会用哪些手段
-
gdb的原理有了解吗
腾讯音乐三面 30min
- 项目
- 了解哪些分布式协议?
- 一致性hash了解吗?
- 一致性hash能否用在存储层?
- 怎么用?
- 堆排序了解吗?
- 堆排序的复杂度,证明一下?
-三次握手? - 一道古典概型概率题
- awk, sed,nohup?
- 怎么看一个进程占用了哪些端口?
- TIME_WAIT?
- two sum?
- 我讲了双指针法,他问怎么证明正确性。
- 虚函数是什么?怎么用?怎么实现?
腾讯音乐HR面
- 基本闲聊吧,问我平时有什么爱好,怎么学习的,对未来的规划,平时看什么日剧
- 腾讯音乐已经和腾讯拆分,是否可以接受
百度三轮游
百度目测是凉了,答得挺差的,现场面,三位面试官轮流上,扛不住扛不住
百度一面
- 项目
- linux命令常用哪些?
- 如果要统计access_log的日志里出现了几个IP,怎么做
- 超大文件的字符串排序怎么做
- http有几种方法
- http的返回值有哪些
- 是否有了解node或者php
- 秒杀系统有了解吗
- tcp三次握手
- 协程和线程的区别
百度二面
- 项目
- 秒杀系统设计
对就是秒杀系统设计,这个问了有半个小时,差不多我设计一个出来他就会提出一个场景,让我做相应的优化。问得我这个没咋做过分布式系统设计的人脑子都要炸了……
- linux下线程和进程的区别
- golang里协程如何实现
- OSI七层模型,我做的应用分别都在哪一层
百度hr面
- 人生规划
- 和其他部门合作的时候有什么让你觉得有点困扰的
- 如何处理多项目并行
- 平时如何规划时间
- 你在很忙时遇到了其他部门的协作请求,如何分配
- 有什么爱好