
语言
- strcpy 函数有什么缺陷,如何优化
- 指针和引用区别
- c++ 内存分区
- 结构体字节对齐
- 未初始化的全局变量放在哪里,编译后在二进制文件中有它的位置吗
- 什么是野指针,怎么检测
- 智能指针有哪些,实现原理,如何防止循环引用
- 能够使用 memcpy 判断两个结构体存的东西是一样的吗
- sizeof 和 strlen 的区别
- 用宏实现比较大小
- new 和 malloc 区别,如何判断是否申请到内存
- 函数模板与类模板的区别
- c++ 如何使用c实现的函数
- 多态的原理
- 虚函数的实现原理
- 纯虚函数
- 析构函数可以是虚函数吗,构造函数呢
- 拷贝构造函数取引用的原因
- 如何减少构造函数的开销
- static、const的作用
- 静态局部变量和局部变量的区别
- auto 类型推导的实现原理
- 如何判断结构体是否相等
- C++11 特性
- 函数指针和指针函数的区别
- 隐藏、重载、重写的区别
- C++ 的程序编译过程
计算机网络
- OSI 七层模型
- 三次握手和四次挥手
- 三次握手中的 time_wait 的作用
- TCP 与 UDP 的区别
- TCP 如何保证可靠传输
- TCP 超时重传的原理
- 如何基于 udp 实现可靠原理
- NAT 的原理
- get/post 区别
- IP 协议的作用
- 路由器和二层交换机的区别
- arp 协议的功能
- http 连接的全过程
- dns 为什么用 udp
- 浏览器输入 url 到显示网页的过程
- ping 的过程
- 如何解决 tcp 粘包问题
- 流量控制和拥塞控制的区别
数据结构
- stl 有哪些容器
- set 与 map 底层实现
- 二叉搜索树,平衡二叉树,红黑树的区别
- 什么是哈希表,怎么解决冲突
- 一个哈希表只有 32 个槽如何存放几千个数据
- vector 和 list 区别
- vector 的扩容机制
操作系统
- select,poll,epoll 的区别
- epoll 高效的原因
- 水平触发和边缘触发的应用场景
- 同步和异步 IO 的区别
- 什么是僵尸进程,孤儿进程,怎么回收
- 什么是守护进程,如何创建
- 什么是虚拟内存
- 物理内存和虚拟内存的区别
- 1G 的物理内存可以读取 2G 的数据吗
- 阻塞和非阻塞区别
- Linux 进程调度算法主要有哪些
- 进程与线程区别
- 内核线程了解吗,它和用户线程什么区别
- 进程间的通讯方式
- 互斥锁和自旋锁
- 大小端的区别
- 软链接,硬链接
- fork 子进程继承父进程什么资源
- 操作系统的加载过程
- 进程切换发生了什么
算法
- 大样本统计
- 反转链表
- 删除链表中的节点
- 二叉树的遍历方式及实现
- 假设 4 个人过河,每个人的过桥时间为1,2,5,8。只有一个手电筒,一次最多过两个,怎么过桥速度最快
- 快速排序的思想
- 前k个高频元素
- 网格中的最短路径
- 二叉树的最近公共祖先
- 环形链表
- 环形链表II
- 寻找两个正序数组的中位数
- 二分查找
- 实现strStr()
- 奇偶树
- 二叉树中和为某一值的路径
- 二叉树的中序遍历
- 首个公共祖先
- 统计词频
- 二叉树的深度
- 合并k个升序链表
- 栈排序
- 最长公共子序列
- 二叉搜索树的第k大节点
评论 (5)



