滴滴 | C++ 工程师|面经汇总|2020|
6483
2020.11.17
发布于 未知归属地

didi.jpg

语言

  • C++的三大特性
  • 指针和引用的区别
  • 什么是多态,多态的实现方式
  • 动态多态和静态多态
  • 虚函数的工作原理
  • 什么是纯虚函数
  • 虚函数表存放的内容
  • 虚表指针和虚函数表的存放位置
  • 构造函数可以是虚函数吗,为什么
  • 析构函数可以是虚函数吗,为什么
  • 什么是智能指针,有哪些,实现原理
  • 怎么避免循环引用
  • C++内存管理
  • 函数调用机制
  • C++11 新特性
  • malloc 底层原理
  • new 和 malloc 的区别;delete 和 free 的区别
  • 有哪些强制类型转换,使用的区别
  • 什么是函数重载,实现原理
  • const 关键字的使用
  • static 关键字的使用
  • 浅拷贝和深拷贝
  • i++是原子操作吗
  • C++类对象从编写代码定义到生成可执行文件的全过程描述
  • 类对象的内存分布与生存周期

计算机网络

  • TCP和UDP 区别
  • TCP和UDP首部字节数以及其相应的字段含义
  • TCP如何保证可靠性和有序性
  • 如何使用UDP实现可靠性
  • 三次握手过程
  • 为什么不是四次握手和两次握手?
  • time_wait为什么等待2msl,time_wait过多怎么解决
  • 四次挥手过程
  • 抓包的实现原理
  • Fin_wait2状态
  • 拥塞控制算法
  • 拥塞控制和流量控制的区别
  • 滑动窗口最大值
  • http 和 https 的区别
  • 了解哪些 http 状态码

数据结构

  • 什么是双链表
  • 二叉搜索树,平衡二叉树,红黑树的区别
  • B Tree和B+ Tree的区别
  • map和unordered_map 的区别

数据库

  • 数据库索引的作用,应用场景
  • ACID 特性
  • 如何优化 SQL 语句

操作系统

  • 进程和线程的区别
  • 什么是协程
  • 进程间通信方式
  • 线程之间的同步方式
  • socket 本地通信需要通过 TCP/IP 协议栈吗
  • 多线程编程要考虑什么
  • 进程和线程的使用怎么进行选择
  • 线程切换需要消耗资源,怎么高效的切换线程
  • 什么是惊群效应
  • Linux 虚拟内存方式
  • Linux 页大小
  • 什么是页表,同一进程的不同线程是否共享页表
  • 32位机和64位机的区别
  • 基本I/O模型
  • 有哪些 IO复用模型
  • select,poll,epoll 的区别
  • 如何用select实现一个定时器
  • epoll 高效的原理
  • epoll数据在内核态和用户态之间是怎么切换的
  • epoll,水平触发和边缘触发的区别
  • 内核态和用户态的区别
  • 一致性哈希算法
  • 自旋锁和互斥锁区别
  • 什么是内存对齐,为什么需要内存对齐
  • 什么方式可以减少内存碎片
  • 虚拟内存机制
  • 虚拟内存mmap的概念,原理,应用场景,与系统调用比的优缺点
  • 死锁的必要条件
  • 如何避免死锁
  • 银行家算法

算法

评论 (3)