
语言
- 什么是指针
- 什么是野指针和悬空指针
- 指针和引用的区别
- struct 和 union 得区别
- 什么是内存对齐
- 什么是多态
- 单继承和多继承得虚表结构
- 传值和传指针的区别
- violatile 的作用,是否具有原子性,对编译器有什么影响
- 什么场景一定要使用 violatile
- violatile 能否和 const 一起用
- new 和 malloc 的区别
- 如果让你实现malloc,你回怎么实现
- 左值和右值的区别
- std::move() 函数的实现原理
- C++ 11 新特性
- inline 实现原理
- 知道哪些设计模式
- C++ 类的初始化顺序
- 怎么实现 malloc 和 free 方法
- define 和 const 的区别
- 构造函数可以申明为 virtual 的形式吗,如果声明会发生什么
- 深拷贝和浅拷贝
计算机网络
- tcp 三次握手和四次挥手
- tcp 实现可靠传输的机制
- ip 协议的作用
- socket() 套接字有哪些
- http 和 https 的区别
- select,poll,epoll的区别
- tcp 和 udp 的区别
- 拥塞控制的算法
- 拥塞控制和流量控制的区别
- 高并发服务器客户端主动关闭连接和服务端主动关闭连接的区别
- HTTP1.X 和 HTTP2.X 的区别
- HTTP3 了解吗
数据结构
- 堆和栈有什么区别
- vector 的扩容原理
- resize() 和 reserve() 的区别
- map 的底层是怎么实现的
- map 和 unordered_map的区别
- unordered_map 支持并发读取吗,如果要实现一个支持并发读取的 unordered_map 得话要怎么实现
- 解决哈希冲突 的方法有哪些
- 什么是智能指针
- 什么是跳表
- 遍历二叉树的方式
- map 容器如果 key 是类对象,对类有什么要求
- vector 和 list 的区别
数据库
- 什么是索引
- Mysql 的 B+ 树是什么样的一个索引
- B+ 树和 B 树有什么性能上的区别
- 数据库的并发安全是怎么做到的
- 事务的属性
- 事务的原子性怎么保证的
- 事务的提交过程
- 事务的隔离性怎么做到的
- MVCC 是什么
- 数据库的隔离级别
- 什么是幻读
- R级别 会不会有幻读
- mysql 的查询过程
操作系统
- 多线程什么时候需要同步
- 什么是缺页异常,什么情况下会缺页异常
- 进程间的通信机制
- 什么是共享内存
- 什么是线程安全,实现线程安全的机制
- 内核态线程的原理
- 什么是同步和异步
- cpu的流水线机制
- 缓存一致性协议
- 程序通过一个地址读取一个变量的过程
- 一个进程的地址空间分为几段
- 可执行文件的文件格式
- 编译和链接的过程
- 互斥锁和信号量的区别
- 自旋锁和乐观锁
- 怎么在用户空间实现一个定时器
- 进程优先级和cpu任务调度策略
- 死锁发生的必要条件
- 什么是内存泄漏,如何定位内存泄漏
- 除了 RAII 机制还有什么方法可以避免内存泄漏
- 多线程下载比单线程快的原因
- 什么是分布式
- 内存池的作用
- 用户态和内核态的理解
- 硬中断和软中断
算法