面试知识点汇总

 

面试常考知识点汇总

计算机网络

  • 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缓存表。

  1. 解析baidu.com的域名对应的IP地址
    1. 确定默认网关的MAC地址
      1. 使用arp获取默认网关的MAC地址或者在arp缓存表中寻找
    2. 组织数据发送给默认网关,目标IP地址是DNS服务器的IP,MAC地址是默认网关的MAC地址。
    3. 默认网关拥有转发数据的能力,把数据转发给路由器。
    4. 路由器根据路由协议,选择一个较快的路径转发给目的网关。
    5. 目的网关把数据转发给DNS服务器。
    6. DNS服务器解析域名对应的IP地址,并把结果原路返回给客户端
  2. 获取了域名对应的IP地址后,进行TCP三次握手,建立连接。
  3. 使用http协议发送请求数据给web服务器。
  4. web服务器查询请求结果后,将结果原路返回给客户端。
  5. 浏览器收到数据后,通过浏览器渲染数据。
  6. 四次挥手,关闭连接。
  7. 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++