
语言
- const 关键字的使用场景
- static 关键字的使用场景
- explict 关键字的使用场景
- volatile 关键字的使用场景
- 什么是多态
- 虚函数的实现原理
- 构造函数可以是虚函数吗
- 析构函数可以是虚函数吗,应用场景
- 智能指针有哪些,实现原理以及用法
- 什么是模板特化
- new 和 malloc 区别
- C++ 内存空间布局
- 如何限制对象只能在堆上创建
- 如何限制对象只能在栈上创建
- 如何让类不能被继承
- 什么是单例模式,工厂模式
- C++ auto 类型推导的原理
- 泛型编程如何实现的
- 指针和引用的区别
计算机网络
- 三次握手和四次挥手
- TIME_CLOSE 和 TIME_WAIT 的状态和意义
- TCP 如何保证可靠传输
- 流量控制和拥塞控制
- CRC 循环校验的算法
- 如何使用 UDP 实现可靠传输
- 为什么不能是两次握手
- SYN FLOOD 是什么
- HTTPs 和 HTTP 的区别
- HTTPS 的原理,客户端为什么信任第三方证书
- HTTP 方法了解哪些
- HTTP 异常状态码知道哪些
- HTTP 长连接短连接使用场景是什么
- Arp 攻击
- NAT 原理
- DNS 服务器与提供内容的服务器的区别
- 怎么实现 DNS 劫持
- 对称加密和非对称的区别,非对称加密有哪些
- AES 的过程
- 安全攻击有哪些
- DDOS 有哪些,如何防范
数据结构
- vector 底层实现
- 如何控制 vector 的内存分配
- map, hashmap 底层实现
- map 的 key 如果是结构体需要注意什么问题
- hash冲突如何解决
数据库
- mysql 索引
- B 和 B+ 区别
- Redis 的数据结构
- Redis持久化
- AOF 重写
- 一致性 Hash
- Redis 集群哈希槽
- Redis 集群高可用
- Redis KEY 过期策略
- 数据库注入的过程,如何防范
操作系统
- 进程和线程的区别
- 进程间的通讯方式
- 进程切换的上下文细节
- 线程切换的上下文细节
- CPU 的最小调度单位
- 多线程同步、多进程通信方式
- 操作系统的栈和堆的区别
- 用户态和内核态的区别
- 用户态和内核态切换的代价
- fork 的过程
- 内存置换算法
- 什么是虚拟内存,作用
- Select,poll,epoll的区别
- epoll 的 LT 和 ET 的区别
- 什么情况下会发生缺页中断,具体流程
- 如何判断逻辑地址是否已经映射在物理地址上了
- 页表所在的位置
- 环形缓冲区的好处
- 动态链接和静态链接
- 怎么查看端口号占用情况
算法
- 反转链表
- 多线程交替打印
- 实现单例模式
- 最小栈
- 给定几十万个ip集合,判断任意一个ip是否属于这个集合
- 给定一个字符串,判断该字符串是否是环等的(字符串首位相连,如果能找到一个位置,从这个位置顺时针得到的字符串和逆时针得到的字符串相等,即为环等)
- 合并两个排序链表
- 快排和归并的复杂度分析
- 排序链表
- 二叉树中和为某一值的路径
- 有事洗牌
- 打家劫舍II
- LFU 缓存
- 乘积最大子数组
- 车队
- 用 Rand7() 实现 Rand10()
- 大整数加法
- 三数之和
- k个不同整数的子数组
- 快速查找 IP
- 最小的k个数
- 二叉搜索树的第k大节点
- 数组中的重复数字
- XML 格式解析
- 有序数组找到第一个小于0的数和第一个大于0的数
- 实现一个 string 类
- 实现一个智能指针
- 两个排序数组找中位数
- 无重复字符的最长字串
- string 转 float
其他
- rebase 和 merge 用法(git)
- 为了 B 站视频加载更快,可以怎么做
评论 (15)



