title: C++ tags:
- code
C++
C++基础
参考书籍:《C++ Primer》、《STL源码剖析》、《深度探索C++对象模型》
- 面向对象的三大特性:封装、继承、多态
- 类的访问权限:private、protected、public
- 类的构造函数、析构函数、赋值函数、拷贝函数
- 移动构造函数与拷贝构造函数对比
- 深拷贝与浅拷贝的区别
- 空类有哪些函数?空类的大小?
- 内存分区:全局区、堆区、栈区、常量区、代码区
- C++与C的区别
- struct与class的区别
- struct内存对齐
- new/delete与malloc/free的区别
- 内存泄露的情况
- sizeof与strlen对比
- 指针与引用的区别
- 野指针产生与避免
- 多态:动态多态、静态多态
- 虚函数实现动态多态的原理、虚函数与纯虚函数的区别
- 继承时,父类的析构函数是否为虚函数?构造函数能不能为虚函数?为什么?
- 静态多态:重写、重载、模板
- static关键字:修饰局部变量、全局变量、类中成员变量、类中成员函数
- const关键字:修饰变量、指针、类对象、类中成员函数
- extern关键字:修饰全局变量
- volatile关键字:避免编译器指令优化
- 四种类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast
- 右值引用
- std::move函数
- 四种智能指针及底层实现:auto_ptr、unique_ptr、shared_ptr、weak_ptr
- shared_ptr中的循环引用怎么解决?(weak_ptr)
- vector与list比较
- vector迭代器失效的情况
- map与unordered_map对比
- set与unordered_set对比
- STL容器空间配置器
计算机网络
参考书籍:《计算机网络》(第5版)、《TCP/IP详解卷1:协议》、《图解HTTP》
-
OSI7层网络模型:应用层、表示层、会话层、运输层、网络层、链路层、物理层
-
TCP/IP四层网络模型:应用层、运输层、网际层、接口层
综合OSI与TCP/IP模型,学习五层网络模型:
从上向下架构:应用层、运输层、网络层、链路层、物理层
链路层
-
MTU
-
MAC地址
网络层
-
地址解析协议
-
为啥有IP地址还需要MAC地址?同理,为啥有了MAC地址还需要IP地址?
-
网络层转发数据报的流程
-
子网划分、子网掩码
-
网络控制报文协议ICMP
-
ICMP应用举例:PING、traceroute
运输层
-
TCP与UDP的区别及应用场景
-
TCP首部报文格式(SYN、ACK、FIN、RST必须知道)
-
TCP滑动窗口原理
-
TCP超时重传时间选择
-
TCP流程控制
-
TCP拥塞控制(一定要弄清楚与流量控制的区别)
-
TCP三次握手及状态变化。为啥不是两次握手?
-
TCP四次挥手及状态变化。为啥不是三次挥手?
-
TCP连接释放中TIME_WAIT状态的作用
-
SYN泛洪攻击。如何解决?
-
TCP粘包
-
TCP心跳包
-
路由器与交换机的区别
-
UDP如何实现可靠传输
应用层
-
DNS域名系统。采用TCP还是UDP协议?为什么?
-
FTP协议(了解)
-
HTTP请求报文与响应报文首部结构
-
HTTP1.0、HTTP1.1、HTTP2.0对比
-
HTTP与HTTPS对比
-
HTTPS加密流程
-
方法:GET、HEAD、POST、PUT、DELETE
-
状态码:1、2、3、4、5
-
cookie与session区别
-
输入一个URL到显示页面的流程(越详细越好,搞明白这个,网络这块就差不多了)
操作系统
参考书籍:《Unix环境高级编程》、《Linux多线程服务器端编程》
- 进程与线程区别
- 线程同步的方式:互斥锁、自旋锁、读写锁、条件变量
- 互斥锁与自旋锁的底层区别
- 孤儿进程与僵尸进程
- 死锁及避免
- 多线程与多进程比较
- 进程间通信:PIPE、FIFO、消息队列、信号量、共享内存、socket
- 管道与消息队列对比
- fork进程的底层:读时共享,写时复制
- 线程上下文切换的流程
- 进程上下文切换的流程
- 进程的调度算法
- 阻塞IO与非阻塞IO
- 同步与异步的概念
- 静态链接与动态链接的过程
- 虚拟内存概念(非常重要)
- MMU地址翻译的具体流程
- 缺页处理过程
- 缺页置换算法:最久未使用算法、先进先出算法、最佳置换算法
网络编程
参考书籍:《Unix网络编程》
- IO多路复用:select、poll、epoll的区别
- 手撕一个最简单的server端服务器(socket、bind、listen、accept这四个API一定要非常熟练)
- 线程池
- 基于事件驱动的reactor模式
- 边沿触发与水平触发的区别
- 非阻塞IO与阻塞IO区别
数据结构与算法
参考书籍:《大话数据结构》
- 数组
- 链表
- 栈
- 队列
- 堆
- 二叉树:二叉搜索树、平衡树、红黑树
- B树、B+树
- 哈希表及哈希冲突
- 排序算法:冒泡排序、简单选择排序、插入排序、希尔排序、归并排序、堆排序、快速排序
- 二分法:旋转数组找target
- 回溯法:全排列、复原IP地址
- 动态规划(掌握基本的动态规划的几个题如:斐波那契数列、接雨水、股票的最佳买入时机)
mySQL数据库
参考书籍:《高性能MySQL》
- 数据存储引擎:InnoDB、myISAM、Memory
- 数据库索引类型及原理:B+树索引、哈希表索引
- 锁:悲观锁、乐观锁
- 事务:事务的四大特性(ACID)、事务并发的三大问题、事务隔离级别及实现原理
- 多版本并发控制实现机制(MCVV)原理