
{:align=left}
语言
- C 和 C++ 的区别
- 指针和引用的区别
- malloc 和 new,free 和 delete 的区别
- extern C 的作用
- 常用的容器有哪些
- volatile 关键字的作用
- 有哪几种强制类型转换以及使用场景
- c++11 新特性
- C++ 20 新特性
- C++ 的三大特性
- C++的多态实现原理
- 什么是虚函数
- 什么是纯虚函数
- 虚表指针的大小
- 虚函数表的存放内容
- 构造函数可以是虚函数吗
- 析构函数可以是虚函数吗
- 一个空类会生成哪些函数
- 左值和右值
- 什么是智能指针,有哪几种,作用,实现原理
- 如何避免循环依赖
- unique_ptr 中 std::move() 作用
- static 关键字的使用
- const 关键字的使用
- define 和 online 的区别
- 面向对象的设计原则
- C++ 编译过程
- 函数调用的具体实现
计算机网络
- 三次握手和四次挥手
- 四次挥手为什么要有 close_wait 状态
- tcp 长时间不断开连接会不会断连
- tcp 超时重传机制
- tcp 如何保证可靠传输
- TCP 和 UDP 的区别
- TCP 报文长度字段设置在哪里
- 哪些协议是 TCP 的,哪些是 UDP 的
- UDP 怎么实现可靠传输
- HTTP 请求报文结构
- http 和 https 的区别
- 怎么解决粘包问题
- 拥塞控制
- 流量控制
- 拥塞控制和流量控制的区别
- 如何判断网络拥塞
- GET 和 POST 的区别
- cookie 和 session 区别
- DNS 的原理
数据结构
- 什么是跳表
- 一个两层的跳表查询时可以降低倒多大的复杂度
- vector 和 list 的区别
- vector 的扩容原理
- map 底层实现
- map 和 unordered_map 的区别
- 如何计算循环链表的长度
- 二叉搜索树和平衡二叉树,红黑树的区别
- 红黑树删除数据是怎么调整的
- 什么是哈希表,哈希函数,怎么解决冲突
- stl sort 函数的实现
数据库
- redis 的数据类型
- redis 的缓存删除策略
- redis 怎么实现的定期删除
- mysql 中使用的锁有哪些?什么时候使用行锁,什么时候会使用表锁
- mysql 的 binlog 日志什么时候会使用
- undo 日志和 redo 日志分别是干嘛的
- 事务还没执行完数据库挂了,重启的时候会发生什么
- 数据库的 MVCC 的实现原理
- 事务隔离级别
操作系统
- 操作系统分段、分页
- 定时器的实现
- 读写锁
- 如果读写锁占用很长时间,并且后续还有读者不断占用读锁,这就造成了写者饥饿的问题,怎么解决?
- 自旋锁
- 乐观锁和悲观锁
- select、poll 和 epoll 的区别
- 为啥 epoll 为啥能突破文件上限大小
- 水平触发和边缘触发的区别
- 线程和进程的区别
- 进程之间的状态转换
- 如何创建多线程
- 如何实现线程同步
- 进程之间的通信方式
- 什么是协程,什么情况下可以使用协程
- 了解线程模型吗?用户态的线程怎么和内核态的线程映射的
- 动态链接和静态链接的区别
- 如何创建一个守护进程
- 孤儿进程和僵尸进程
- 系统是如何检测孤儿进程的
- Docker 的优缺点
- 虚拟内存的实现原理
- 内存泄漏和内存溢出是指什么,内存溢出有什么危害
算法
- 二叉树的层序遍历
- 反转链表
- 实现 strStr()
- 快速排序时间复杂度,实现原理
- 形成三的超大倍数
- 两数相加
- 回文链表
- 二叉树的最近公共祖先
评论 (27)



