数据结构
图
- 无向图可能的顶点度数组合(边数满足
0
<
=
e
<
=
n
(
n
−
1
)
/
2
0<=e<=n(n-1)/2
0<=e<=n(n−1)/2, 而总度数=2e)
因此:(1)总度数一定为偶数
(2)0<=总度数<=n(n-1)
二叉树
- 二叉树的结点总数: n = n 0 + n 1 + n 2 n=n_0+n_1+n_2 n=n0+n1+n2,且有 2 n 2 + n 1 + 1 = n 0 + n 1 + n 2 2n_2+n_1+1=n_0+n_1+n_2 2n2+n1+1=n0+n1+n2,因此有 n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1
- 深度为k的完全二叉树的结点总数为: 2 k − 1 2^k-1 2k−1
- 根节点的深度/层次为1
算法
二叉树
- 求两个结点的最近公共祖先
字符串
- 最长公共连续子串
操作系统
-
进程与线程的区别:进程是资源分配和调度的独立单元,线程是CPU调度的基本单元;一个进程可以包含多个线程,线程共享整个进程的资源,一个进程至少包括一个线程;线程创建和销毁所需时间少;
-
进程间通信(IPC,InterProcess Communication)方式:管道、信号量、消息队列、共享内存
共享内存效率最高,不需要数据拷贝;
共享内存原理:将一份物理内存映射到不同进程各自的虚拟地址空间中,这样每个进程可以读取同一份数据,从而实现进程间通信。 -
线程间通信方式:全局变量、消息、事件
-
线程间同步方式:临界区、互斥量、信号量、事件
-
死锁:两个或两个以上的进程在执行过程中由于资源竞争或彼此通信导致的阻塞现象,若无外力作用,这些进程将永远互相等待。
死锁产生条件:互斥条件、请求和保持条件、不剥夺条件、环路等待条件、 -
银行家算法:避免死锁
算法原理:先预分配资源->采用安全性算法判断是否处于系统是否安全状态(依次查看剩余资源是否可以使得队列中)->决定分配还是回收资源 -
同步与异步,阻塞与非阻塞
同步的线程仍处于激活状态,阻塞的线程会被挂起
计算机网络
- 网址的基本结构是: [协议]: // [域名] / [路径],其中协议和域名部分不分大小写。路径部分是否区分大小写则不一定(window不区分,linux区分)。
- TCP连接机制:确认应答,超时重传、滑动窗口、拥塞控制
确认应答:接收方收到数据需要进行确认,返回的ACK中带有确认序列号,告诉发送方已经收到数据,且你下一个应该发送的数据序列号时多少。
超时重传:发送方在一定时间内没有收到确认应答,就会重发。
滑动窗口:在确认应答中,每发送一个数据段都需要等待确认应答才能发送下一个数据段,性能较差。TCP采用滑动窗口机制可以一次发送多条数据。 - TCP和UDP的区别:
TCP面向连接的,可靠的,倾向于传输大量数据,速度慢,http / ftp / smtp /使用了TCP;
UDP是无连接的,不可靠的,倾向于传输少量数据,速度快,dns / tftp / rip 使用了UDP