面试常考知识点汇总
计算机网络
- ISO模型分为七层,TCP/IP分为是四层
在OSI模型中,第三层网络层负责 IP地址,第二层数据链路层则负责 MAC地址。因此一个主机会有一个MAC地址,而每个网络位置会有一个专属于它的IP地址
- TCP与UDP的区别(UDP:DNS)(TCP:SMTP FTP)
- 滑动窗口协议(发送与确认)
- 拥塞控制(慢开始、拥塞避免、快重传和快恢复)拥塞控制
- 超时重传(增加重传时间)
- 三次握手四次挥手
第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接
客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。
- IP地址、子网掩码、默认网关、DNS服务器(域名解析)
- socket
- 访问百度的过程(视频解析)
arp作用就是把一个已知的IP地址解析成mac地址,以便可以在mac地址层(osi的第二层)进行通信。arp -a可以显示windows的arp缓存表。
- 解析baidu.com的域名对应的IP地址
- 确定默认网关的MAC地址
- 使用arp获取默认网关的MAC地址或者在arp缓存表中寻找
- 组织数据发送给默认网关,目标IP地址是DNS服务器的IP,MAC地址是默认网关的MAC地址。
- 默认网关拥有转发数据的能力,把数据转发给路由器。
- 路由器根据路由协议,选择一个较快的路径转发给目的网关。
- 目的网关把数据转发给DNS服务器。
- DNS服务器解析域名对应的IP地址,并把结果原路返回给客户端
- 确定默认网关的MAC地址
- 获取了域名对应的IP地址后,进行TCP三次握手,建立连接。
- 使用http协议发送请求数据给web服务器。
- web服务器查询请求结果后,将结果原路返回给客户端。
- 浏览器收到数据后,通过浏览器渲染数据。
- 四次挥手,关闭连接。
- DHCP动态主机配置协议服务器
数据库
- 数据库基本的增删改查
- 数据库的三大范式3NF
- 连接查询(左连接,右连接,内连接,全连接)
- 数据库的事务有哪些特性(ACID,原子性、一致性、隔离性、持久性)
- 数据库中的隔离等级
- 数据库索引及其实现原理(B+树)索引优化
操作系统
- 进程和线程的区别
进程是资源分配的基本单位。线程是独立调度的基本单位。
1.资源:线程不占有资源,共享父进程的资源,进程有独立的地址空间,一个进程至少有一个线程。
2.调度:CPU切换进程要保存原进程的上下文,然后载入要切换的进程的上下文,进程间切换的开销远比线程间切换的开销大的多。
3.通信:IPC:管道(无名和有名)、消息队列、Socket、共享内存、信号、信号量。线程程间通信:全局变量、静态变量、锁机制(互斥锁、读写锁、条件变量)
4.系统开销:由于进程有独立的地址空间,占有资源,开启一个线程时操作系统要为进程分配内存空间、I/O等,所以开启一个进程远比开启一个线程的开销要大。
- 进程与线程间的通信方式
管道
FIFO
消息队列
信号量
共享存储
Socket
- 用户态与内核态
- 死锁的四个必要条件
互斥条件、不可剥夺条件、请求和保持条件、循环等待条件
- 进程状态的切换(就绪状态(等待CPU时间)–运行状态–等待状态(等待资源))
- 进程同步
- 什么是缓存缓存更新算法LRU
- 基本的linux命令
- 读写锁的实现原理(count_mutex锁住读计数,data_mutex锁住数据,第一个读的锁住数据,读完后释放)
示例
typedef int semaphore;
semaphore count_mutex = 1;
semaphore data_mutex = 1;
int count = 0;
void reader() {
while(TRUE) {
down(&count_mutex);
count++;
if(count == 1) down(&data_mutex); // 第一个读者需要对数据进行加锁,防止写进程访问
up(&count_mutex);
read();
down(&count_mutex);
count--;
if(count == 0) up(&data_mutex);
up(&count_mutex);
}
}
void writer() {
while(TRUE) {
down(&data_mutex);
write();
up(&data_mutex);
}
}
数据结构与算法
- 链表、队列、栈、树、图、堆
- 树的三大遍历的递归与非递归算法。图的广度优先与深度优先搜索算法
- 动态规划
- 递归与回溯
- 常用的排序算法及其时间复杂度与空间复杂度
语言
- C++的对象模型
- 虚函数表与多态
- 内存对齐
- 初始化列表的初始化顺序
- effective c++ 与more effective c++