滴滴C++(一、二、三面,连着三面)
  一面:(45min) 
   1、自我介绍 
   2、项目难点 
   3、epoll原理
 
   4、Reactor和Proactor区别  
   3、Reactor在代码层面怎么实现的 
   4、主线程代码写下 
   5、子线程代码写一下 
         项目代码只写出了大框,面试官针对我写的代码提出很多问题,讨论很久 
   二面:(40min)
 
   1、自我介绍
 
   2、epoll和select区别 
   3、select有哪些优点(文件描述符少且比较活跃时用它、跨平台性) 
   4、select所检测的文件描述符最大限制为1024可以改变吗(系统参数可改) 
   5、raii机制是什么,解决了什么问题 
   6、tcp、udp区别 
   7、tcp拥塞控制四种算法  
   8、如果现在网络已经出现拥堵了,窗口怎么样变化(回答的会减半)  
   9、GET和POST作用,还知道什么请求方法都说说,说了HEAD和PATCH  
   10、多态介绍下  
   11、定义一个基类A,里面有两个成员函数m和n(均为虚函数),定义派生类B,里面两个成员函数n和p(均为虚函数)  
           两个类定义对象后的的内存模型怎么样 
   12、怎么获得一个类中成员的偏移(没答出来)  
   13、分别介绍下线程和进程  
   14、多线程和多进程区别  
   15、多线程怎么保护的共享资源 
           说了互斥锁,追问,如果使用互斥锁,当一个线程获得锁,会阻塞其他活跃线程,影响并发量怎么解决,好像是惊群效应,  
           回答:CAS操作,取消互斥锁。或者给每个线程单独搞一个队列  
           追问:CAS原理、为什么CAS可以保证原子性 
   16、8个线程全部去处理高码任务,低码任务得不到处理,怎么设置多个线程对任务的处理模式,在Reactor模式下用哪个系统调用来设置?(不清楚) 
   17、进程间通信方式都有什么? 
   18、说说信号量原理,解决什么问题? 
   19、手写代码:快排、最好最坏时间复杂度、如何优化 
   三面:(45min) 
    1、自我介绍
  
     2、这次是epoll、poll、select区别(滴滴是真爱问这个问题)  
     3、select有哪应用场景,为什么文件描述符少的时候适合用select  
           面试官说是因为epoll是用回调方式处理代码,存在一定的系统开销  
 4、select为什么最大限制是1024、如果要修改用到哪个系统参数         (进程默认设置的文件描述符的上限是1024、修改FD_SETSIZE)
 
   5、介绍定时器实现原理 
   6、介绍小根堆原理,为什么使用小根堆,还有什么其他数据结构可以使用 
   7、介绍智能指针,分别说说auto_ptr、unique_ptr、shared_ptr、weak_ptr 
   8、unique_ptr解决了auto_ptr哪些问题  
   9、什么是循环引用计数,weak_ptr怎么解决的  
   10、vector底层怎么实现的  
   11、vector什么时候会扩容?怎么扩容的?每次扩容的大小是多少?  
          回答:capacity==size时,扩容大小是1.5~2,追问:什么情况下是1.5,什么情况下是2, 
          回答:应该是和编辑器 追问:具体情况是怎样的 
          追问:除了capcity==size会扩容,还有什么时候会扩容 
          回答:迭代器失效的时候 
          追问:那要是想缩容呢? 
          回答:resize。面试官表示不对,让自己回去查查 
   12、代码题:给你一颗完全二叉树,如何找到最后一层最右边的节点。(说思路即可,没让写) 
#滴滴校招##滴滴##面试题目#
查看23道真题和解析