
语言
- 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的概念,原理,应用场景,与系统调用比的优缺点
- 死锁的必要条件
- 如何避免死锁
- 银行家算法
算法