滴滴c++
滴滴-基础架构部-c++研发工程师(北京)
20210725:
1、自我介绍
2、项目询问:
- 大概架构
- 为什么要分成两个网关层作用是什么
- 多路复用技术主要是用在两层网关之间,网关之间多线程和多路复用是怎么用的
- epoll如何跟多线程相结合,创建多个epoll绑定到线程上
- tcp连接如何获取
- 每个网关每个线程都有一个epoll,具体哪个线程获取连接状态
- 比如会首先创建一个fd,写一个网络程序的流程是什么,socket具体怎么用,有监听绑定fd
- 在监听绑定之前fd是怎么处理的,有专门一个线程负责监听,如何将fd分发给其他线程
- 对线程有负载均衡的处理:循环遍历线程、通过hash取模确定线程
- 线程之间如何交互,监听线程和处理的线程如何交互
- 两个线程之间的通信方式有哪些,进程之间的通信方式有哪些
- 多路复用的技术有哪些
- select、poll和epoll的性能哪个一般更高?
- 在什么情况下select、poll的效率更高
- epoll的两种模式,项目使用的是哪种
- 为什么使用水平触发,为什么会出现消息丢失
- 如何解决ET的特性,(我说在包后面有个结束标志)
- ET模式,有3000条数据,结束标志在最后,但一次只能读1000的数据,后面就不会再次触发了,这种情况怎么解决。即读操作阻塞,配合多路复用,读操作一般如何处理,(可以使用非阻塞的I/O方式,在读取没有数据的时候,会返回一个标识,告诉已经读完了)
- 负载均衡策略有哪些,怎么用的,为什么采用这样的hash取模方式
- 循环的连接策略,存在的问题:比如会更多分布到前面的服务器上面,而到达不了后面的
3、c++11:
- 智能指针介绍
- unique_ptr可以赋值吗
- move操作的作用
- 为什么不直接拷贝,有很多类有拷贝构造函数,既可以拷贝又可以移动,为什么要多一个这样的move操作
4、并发方面的编程题:给出3个线程,每个线程能输出0,1,2,怎么输出序列0102101(提到信号量实现)
- 并发api更了解哪种(linux和c++标准库)
- linux中常用的并发方法,面试官提示说有条件变量?、