刚拒了百度暑假实习的面试,来牛客分享之前的C++日常实习面经
很久很久之前通过牛客投了很多百度的日常实习,大搜好像投了几次,都没有消息,应该是我这种菜鸡不配吧。彡(-_-;)彡 感谢CDN部门给了我面试机会和offer。不过,因为某些原因,没有接收offer。我想着,已经面过百度了,而且即使我拿到暑假实习的offer也没办法接offer(太膨胀了,大概率拿不到,哈哈哈),所以就拒了今天下午的百度暑假实习面试。
实习一面
- 自我介绍
- 介绍项目,不同版本之间的区别
- 惊群问题以及解决方案,为什么选择使用锁的解决方案?
- 怎么派发socket fd给从Reactor?
- 怎么唤醒eventloop?(eventfd)如果内核版本低,还有其他方法吗?(pipe)
- epoll 水平触发和边缘触发的区别、优缺点?
- fd在处理之前相应的数据结构被删除,怎么处理?(不太懂题目)后面面试官问项目里epoll的
event.data.ptr
存的什么?(讲了项目里怎么怎么处理Connnection被删除后,Channel的处理) - 边缘触发模式下,在循环读fd一直到
EAGAIN
时,fd源源不断接受到数据,要怎么处理?(不太懂,说了边缘触发触发的条件,文档和linux下的不同,可以读一段时间,下一次有数据到来再读) - 第一种模式是一个Reactor负责监听新连接,新连接的处理交给其他Reactor处理。第二种模式是(nginx)多个Reactor都能接受新连接,接受新连接之后自己处理。这两种模式的优缺点?
- 介绍日志系统。生产者竞争锁很激烈,怎么解决?(每个线程一个buffer)消费者怎么知道多少有个线程呢?
- HTTP协议的格式和解析。
- HTTP怎么发文件?(mmap)为什么不用read?(零拷贝的好处)
- 说一下哈希表。扩容开销很大,怎么办?(渐进式rehash)
- 提问环节
实习二面
- 自我介绍
- 编程题
- 找二叉树路径和等于指定值的所有路径
- 随机洗牌
- extern c
- 怎么实现一个只能在堆上分配的对象?
- 初始化列表的理解,为什么不能在构造函数里面初始化成员变量?
- c++面向对象的理解
- 模板能在cpp文件写实现吗?为什么?
- c和c++编译时的命名不同之处?
- 编译的过程
- 进程和线程的区别?
- 进程、线程共享和私有的资源
- 进程通信方式
- 匿名管道的特点
- 共享内存使用方式
- 共享内存同步方式
- epoll原理
- 执行函数,得到EAGAIN的情况
- 读socket fd,阻塞和非阻塞的区别
- accept发生在TCP那个阶段?
- 半连接队列和全连接队列的区别
- 如果客户端不回第三次握手的报文,怎么办?
- 计网的分层
- tcp首部的字段
- ip首部字段
- 查询DNS的过程、DNS在哪一层、使用什么协议实现、为什么不使用TCP?
- 知道哪些设计模式?说说工厂模式。
- 提问环节
实习三面
- 自我介绍
- 详细介绍项目
- 做这个项目的目的
- (项目)多线程版本和多进程版本之间的区别
- 为什么选择socketpair发送文件描述符?(对比了pipe)
- 项目中的一个难点以及解决方案。(std::any的实现)
- 提问环节
总结
一面项目问得很细,虽然比不上腾讯teg那次面试问得那么细,但是有几个问题,teg面试的时候没有问到。面试官应该很熟悉网络编程,问的问题一针见血,基本上都是我的项目里一些应该注意而且是难点的问题。
二面有压力面的感觉,一些问题说了不会,面试官还让我按照自己的理解回答或者让我设计,会是怎样。这一面结束之后,我已经知道凉了。但是第二天hr打电话月三面了(懵)。
三面基本上都是我在讲,体验倒是很好。面试官很友善。甚至我在讲完std::any
原理之后,我说没讲得很清楚,面试官说他懂我的意思了。
面试的时候,我感觉这是我这两个月中最难的面试之一了。但是现在看来,问题都比较常规和基本,那应该应该是我比较菜吧。
我觉得,这篇面经对于C++er还是有一点价值的,分享给大家。希望大家可以拿到满意的offer!
#百度##C++工程师##实习##面经#