快手提前批 一面挂(8.8 一个半小时)
1.自我介绍
2.介绍一个最好的项目
3.C++和C的区别
4.纯虚函数和虚函数
5.共享指针和弱指针
6.什么叫同步io和异步io
7.什么是回调异步
8.设计题:100w个用户访问服务器,要求:读写互斥、不能用锁和信号量、不能等待(答的无锁编程,实际要队列)
9.tcp怎么保证可靠性(重传机制)
10.tcp怎么判断丢包了(超时、3次ack)
11.超时时间怎么计算的
12.拥塞控制
13.窗口阈值怎么确定的
算法
- A类中注册B类的回调函数,如何保证在A析构时回调函数不会发生野指针 (在下列中加入lock和unlock保证多线程安全)
class A{ public: B b; A() {b.Register(f);} ~A() {b.dele();} callback f(); }; class B{ public: void Register(callback f) {m_call = f;} // 删除时保证回调函数没有运行 void dele() { //lock() m_call = null; //unlock() } void do() { //TODO // 运行时保证回调函数没有被删除 // lock(); if(m_call != null) { m_call(); ... } // unlock //TODO } }
- 非递归前序遍历树(自建树,用栈依次放入根、右、左)
- 找硬币,有1、3、5、7、9分的无限硬币,找到n分,要求二维数组实现和一维数组实现