一、Https非对称加密过程?
- 服务器端在发送https消息之前,先发送服务器的数字证书
- 客户端对证书加以验证,验证通过则继续(通过CA公钥的hash值验证),取出CA证书中的公钥
- 客户端随机产生一个随机值,作为后续数据传输的钥匙,用CA证书中的公钥加密后发送给服务端
- 服务端用私钥解密得到该随机值,之后用随机值进行数据的加密和解密
二、说一下Linux系统的fork()过程
- 在父进程中调用
fork ()
,系统会创建一个子进程。 - 在父进程中,
fork ()
返回子进程的进程号(pid) - 在子进程中,
fork ()
返回的是 0;如果创建失败,返回 - 1
PS:为了提高效率,fork ()
调用并不用立即复制所有的数据空间。这里采用了 COW(Copy-On-Write) 策略,即当父子进程任何一个需要修改数据段、堆、栈的时候,才把相应的数据复制(仅复制修改的区域)。
三、说一说Linux虚拟地址空间和物理地址空间
由于物理内存往往是不足以装下所有进程的,因此采用了虚拟内存技术来“扩大”可以使用的内存空间。
虚拟内存技术使得进程在运行的时候,只看到自己拥有独立的4GB内存,而具体物理内存的分配交给操作系统来考虑。这样开发人员就不需要考虑数据的存储、布局等问题,同一个物理空间在不同时刻可以分配给不同的进程使用,从而提高了内存使用的效率。
在程序创建加载的时候,内核只是初始化了相关的数据结构,并没有把程序数据拷入到内存中,只有在运行时真正访问数据时,才发生缺页中断,将对应的数据拷入内存中。
请求分页系统、请求分段系统和请求段页式系统都是针对虚拟内存的,通过请求实现内存与外存的信息置换。
四、说一说常见的缓存算法
- FIFO 先进先出。
- LRU 最近最久未使用。
- LFU 最不经常访问。
- LRU-K 最久未使用K次算法。
- 2Q 类似LRU-2。新访问的数据放入FIFO队列,如果在FIFO队列中再次被访问,则移到LRU头部。。。
五、说一下程序的内存空间结构
在冯诺依曼的体系结构中,一个进程必须有:代码段,堆栈段,数据段。

堆栈段:
为函数内部的局部变量提供存储空间。
进行函数调用时,存储“过程活动记录”。
用作暂时存储区。如计算一个很长的算术表达式时,可以将部分计算结果压入堆栈。
数据段(静态存储区):
包括BSS段(Block Started by Symbol)的数据段。BSS段存储未初始化或初始化为0的全局变量、静态变量,具体体现为一个占位符,并不给该段的数据分配空间,只是记录数据所需空间的大小。数据段存储经过初始化的全局和静态变量。
代码段:
又称为文本段。存储可执行文件的指令;也有可能包含一些只读的常数变量,例如字符串常量等。
六、二叉树和堆的区别
堆是一种特殊的完全二叉树,其父节点和子节点存在大小关系。如最大堆的父节点都大于子节点;最小堆的父节点都小于子节点。
相对于二叉搜索树来说,二叉搜索树的父节点比左子节点大,比右子节点小。
七、TCP可靠传输如何实现
- 三次握手四次挥手
- 拥塞控制
- 连续ARQ
- 超时重传
- …..(实在背不全
引申:拥塞控制的方法
慢开始、拥塞避免、快重传、快恢复