
语言
- C++ 三大特性
- C++ 内存管理
- 指针和数组的区别
- sizeof和strlen的区别
- 智能指针有哪些,使用场景和区别
- 智能指针引用计数的实现原理
- unique_ptr如何实现独占对象
- C++ 11特性
- 右值引用
- 类成员函数的函数指针怎么写
- 什么是多态,实现机制
- 什么是虚函数
- 虚函数表存放的内容
- 析构函数可以是虚函数吗
- 构造函数可以是虚函数吗
- 什么是纯虚函数
- C++是怎么实现接口的
- union和sturct的区别
- struct的位域
- sturct和class的区别
- 模板和宏的区别
- 什么是依赖注入
- 什么是泛型编程
- 什么是模板特化
- 什么是仿函数
- strcpy会拷贝字符串最后的/0吗
- memcpy和strcpy有什么区别
- memove和memcpy有什么区别
- new 和 malloc 的区别
- free 和 delete 的区别
- char*p和char p[]的区别
- 用sizeof去计算上述指针和数组的区别
- extern C的作用
- 内存对齐的原因
- const的应用场景 可以修饰的类型
计算机网络
- 三次握手和四次挥手
- TCP UDP的区别
- tcp怎么保证可靠传输
- 拥塞控制和流量控制的区别
- UDP协议的最大长度,超过最大长度会怎么样
- udp大量传输应该注意什么
- time_wait时间及原因
- TCP连接中,服务端网线拔掉会怎么样
- http请求头格式
- get和post方法的区别和使用场景
- 怎么解决TCP粘包问题
- SYN Flood 攻击
- 滑动窗口的原理
- 对称性加密和非对称性加密的区别
- 输入url 到浏览器显示的过程
数据结构
- vevtor 和 list 的区别
- vector 和 set 的区别
- vector删除元素,迭代器失效问题
- map和unordered_map的区别
- unordered_map底层数据结构
- 二叉搜索树,平衡二叉树,红黑树的区别
- 为什么红黑树速度快,红黑树的难点
- B树和B+树有什么区别
- B+ 树为什么快,为什么数据库使用 B+ 树
- 什么是跳表,什么时候用跳表
- 单向双向链表区别 各有什么好处
- iterator类型有哪些
数据库
- redis 数据结构
- redis rehash过程
操作系统
- 进程和线程的区别
- 进程间通信机制
- 线程同步机制
- 怎么实现一个守护进程
- 共享内存的原理,共享内存的大小限制
- 什么是协程
- 什么是僵尸进程,孤儿进程
- 什么是惊群效应
- g++如何链接动态库,如何生成动态库,库和二进制文件分别在哪些目录
- select、poll、epoll 的区别
- 多进程之间的通信方式
- 多线程开发需要注意的事情
- 多进程和多线程的优缺点
- 悲观锁和乐观锁
- 什么是CAS
- 单核cpu如何实现多线程
- 阻塞IO/非阻塞IO
- 如何设计线程池,是固定数量的线程吗
- 多核的情况下,如何让进程运行在指定核上
算法
- 数组实现队列
- 反转链表
- 快速排序实现,快排的时间复杂度,如何避免最坏复杂度
- 求根到叶子节点数字之和
- 堆排序的实现和原理,平均时间复杂度和最坏时间复杂度
- 哈希表的实现,线程安全问题
- 实现堵塞队列