二叉树度为2的结点数为9,计算二叉树的叶子结点数
这题比较简单主要考察就是二叉树的度是啥,二叉树的度即子树的个数,即二叉树中有两个子树的节点的个数为9,先说结论,在任意一棵二叉树中,设叶子结点的个数为n0,度为2的结点数为n2,则n0=n2+1。
以下是证明:最简单的话来说,如果是某一支,子树数量均为1,那么它不会引入叶子节点数量的增加,可以直接减除到最上端的子树为2的节点,即子树为1的节点不会引入叶子节点数量的增加,因此我们可以直接使用一列满子树的二叉树,计算叶子节点进行近似。
数学证明:我们假设一个二叉树有n个结点(n=n0+n1+n2),则该二叉树总共会有n-1条边(单项连接一次),度为2的结点会延伸出两条边,
同理,度为1的结点会延伸出一条边,则可列公式:n-1 = 2*n2 + 1*n1 ,
合并两个式子可得:2*n2 + 1*n1 +1 =n0 + n1 + n2 ,则计算可知 n0=n2+1。
微内核操作系统
在了解微内核操作系统之前,我们需要了解内核。UNIX 将软件系统划分为内核(kernel)和用户态(userland programs)两部分。内核是一组中断处理程序的集合,把硬件的能力封装为操作系统功能调用(system calls),用户态程序通过系统调用使用硬件功能,用户态程序运行于各自的进程中,所有用户态进程都共享同一个内核,每当系统调用或中断发生,内核执行系统调用,与此同时,内核中的分时调度算法将决定把 CPU 交给哪个进程,并管理进程的切换。
但它要求所有对硬件的封装都要在内核态,因此内核中模块的 bug 会让整个系统受到影响。为了解决这类问题,微内核的本质是让操作系统的内核态只保留内存地址管理、线程管理和进程间通讯(IPC)等基本功能,而把如文件系统、设备驱动、网络协议栈、GUI 系统等功能都作为单独的服务。为了实现,用户态和内核的通信,仍然采用C/S的模式。机制与策略的分离,以及面向对象就不再赘述。
程序访问的局部性原理
程序局部性原理:是指程序在执行时呈现出局部性规律,即在一段时间内,整个程序的执行仅限于程序中的某一部分。相应地,执行所访问的存储空间也局限于某个内存区域,具体来说,局部性通常有两种形式:时间局部性和空间局部性。也正是因此,我们可以将部分程序加载到高速缓存中即可实现程序的运行,并根据时间的局部性,更替缓存中的内容。虚拟存储也依赖于此。
TCP、UDP
tcp和udp属实是老调重重重重重重重重重重重重重重重重弹。
在这里tcp和udp就不展开讲了,只讲讲常见的协议,那些基于udp,哪些是tcp。
注意!!!!!!!腾讯的QQ不是tcp,也不是udp,QQ是一个很复杂的程序,在不同情况下会启动或关闭不同的进程,每个进程对应的通讯协议都不同,英雄联盟也是。在登陆时,主要使用tcp的连接方式,在语音以及视频时,会启动新的进程并进行udp连接(这也符合人类对通讯协议的认知),麻烦的是打字,使用的是udp和QQ协议,自写的。。。。微信貌似又都是tcp。
Telnet协议用来远程登陆控制的,毫无疑问,tcp
FTP是远端下载文件的,讲道理,使用改进的udp也挺好,但我个人觉得有时代因素在内,这里我也没想太明白,理论上使用udp也是可行的?虽然通过TCP的可靠性连接,为数据传输提供可靠保证。值得注意的FTP会开启两个tcp连接,一个用于发送控制指令,一个用于文件传递。感觉负载不小。
SMTP,邮件协议,tcp没问题
累了,错题写的时间比自己看的时间久多了