CPP面经
暑期实习。面试语言主要是cpp。附带一些go和py。其实入职有一段时间了,但因为过程有点坎坷后面都懒得记面经了。现在端午稍微有点空就整理一下放出来吧QAQ
bg:双非本,有一些竞赛基础但没有acm牌子(太菜了),笔试大概是大部分middle随便做的水平。项目是牛客的webserver + MIT 6.824的前两个lab。
时间线:3月份开始投递。百度一面挂,美团二面挂(好像是终面),一堆笔试ak但是无下文。沉淀一会后5月初开始陆续收到图森未来,柠檬微趣,杭州默安,南京知能,CVTE,格灵深瞳的笔面试。参加了前面三个的面试,最后加入了图森未来,另外两个都过了一面但由于收到offer了所以二面被我拒了(x
百度(因为是第一次面试,非常紧脏,所以问了一些基础的问题就秒挂了。):
- golang管道怎么用
- golang的goroutue泄露
- tcp和udp的区别
- tcp三次握手四次挥手
- tcp四次挥手第二次和第三次不能合并吗
- 手写一个单例模式
- 设计模式几大原则
- 手撕单例模式(懒汉模式)
- 手撕二分查找。
美团(鸡架,无人机团队):
一面:
- 多态和继承在什么情况下使用
- 除了多态和继承还有什么面向对象方法
- 情景题。手机店。不同品牌的不同型号手机有不同的业务逻辑。怎么设计系统
- tcp/ip五层模型
- dns服务器用的是什么协议。
- ping命令 用的是什么协议。在哪一层。
- tcp拥塞控制实现。
- 模板元编程(简历上写了,但答的不好)
- 为什么要用多线程。多进程可以吗(webserver的)
- 进程和线程的区别。
- 为什么要用线程池
- 讲讲智能指针
- C++内存分布。什么样的数据在栈区,什么样的在堆区。
- C++内存管理(RAII啥的)
- C++从源程序到可执行程序的过程
- 编译阶段的过程(编译原理,词法分析啥的)。每个过程干啥的
- 为什么要用epoll
- 怎么debug,怎么看内存泄漏。
- 聊天
二面:
- epoll实现原理
- reactor和proactor的好处和坏处。为什么要用reactor而不用proactor
- 能详细讲一下有限状态机怎么解析http报文吗
- 小根堆定时器是怎么弄的。如果一次pop一个的话。高并发情况下会不会有问题
- 如果有两个服务器,一个服务器坏了,另一个服务器怎么判断并接手坏的服务器的用户数据(共用一个堆
- 堆和栈的区别。什么情况下会往堆里放
- 一个对象=另一个对象会发生什么(赋值构造函数)
- 如果new了之后出了问题直接return。会导致内存泄漏。怎么办(智能指针,raii)
- c++11的智能指针有哪些。weak_ptr的使用场景。什么情况下会产生循环引用
- 多进程fork后不同进程会共享哪些资源
- 多线程里线程的同步方式有哪些
后面的基本没有记录,只记得手撕和一些面试的时候卡住/不确定的问题。(主要是懒了)
图森未来:
一面(coding面):leetcode:694. 不同岛屿的数量。还有一题忘了。八股问题主要是cpp相关。
二面:手撕小根堆。手撕智能指针。八股问题忘了。
三面:
- select怎么用。底层原理
- select为什么只能支持1024个。poll和epoll是怎么解决这个问题的。
- epoll 底层为什么用红黑树不用hash
- py修饰器
柠檬微趣:
- size_of是在编译期还是在运行期确定
- 函数重载的机制。重载是在编译期还是在运行期确定
- hash表数据很大。rehash的代价很高,怎么办
- 如果解析http请求的时候,用户一次性没传完数据,(如果头部都没传完,请求报文长度字段都没传完,怎么办)
杭州默安:主要是面了golang。只记得一些。
- 数组和切片的区别
- GPM调度
- sync库用过哪些。
- golang的协程。py的协程。
- mysql的隔离级别和锁。
- k8s,一些其他的sql了解过吗。