目录

161. MySQL 中 myisam 与 innodb 的区别。

162. 画出OSI和TCP/IP协议栈的对应关系.

163. 简述停止-等待协议(ARQ)的工作原理?

164. redis的持久化有哪几种方式?不同的持久化机制都有什么优缺点?

165. 如何理解Paxos算法?

166. 如何理解raft算法?

167. 如何理解一致性哈希算法?

168. voip都用了那些协议?

169. 阅读下面代码,回答问题?

170. IP Phone的原理是什么?

171. 1号信令和7号信令有什么区别,我国某前广泛使用的是那一种?

172. 请问交换机和路由器分别的实现原理是什么?分别在哪个层次上面实现的?

173. 请问C++的类和C里面的struct有什么区别?

174. 8086是多少位的系统?在数据总线上是怎么实现的?

175. 请你详细的解释一下IP协议的定义,在哪个层上面,主 要有什么作用? TCP与UDP呢?

176. 全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?

177. 操作系统中的进程调度策略有哪些?

178.将二叉树的两个孩子換位置,即左变右,右变左。(不能用递规)

179.网球中心共有100个网球场,每个单位可以来申请1到 100的场地,申请的场地编号必须是连续的,如果场地已经 被其他单位占用,就不能再次使用,而且单位在使用完场地 后必须归还。请设计一个完整的系统(c语言)。(限时5分 钟)

180.输入四个IP端,前两个为第一个IP段的起始和终止地址, 后两个是第二个IP段的起始和终止地址,判断这两个IP段 是否存在交集.


161. MySQL 中 myisam 与 innodb 的区别。

1、 存储结构
每个MvISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始, 扩展名指岀文件类型。
. frin文件存储表定义。
数据文件的扩展名为.MYD (MYDat a)
素引文件的扩展名是.MYI (MYIndex)。

2、 存储空间
MylSAJL可被压缩,存储空间较小。
InnoDB:需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于 高速缓冲数据和索引。
MvIS皿的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提 高了不少。能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有 使用压缩从而会造成Innodb比MylSAM体积庞大不小

3、 事务处理
类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不支 持外键、不提供事务支持。
InnoDB提供事务支持事务,外部键(foreign key)等高级数据库功能。 SELECT、UPDATE^ INSERT、Delete 操作
如果执行大量的SELECT, MylSAM是更好的选择。
如果你的数据执行大量的INSERT或UPDATE,岀于性能方面的考虑,应该使 用 InnoDB 表。
DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。而 则是重新建立表。在innodb上如果要清空保存有大量数据的表,最 好使用truncate table这个命令。
AUTO_INCREMENT
MvISAJL可以和其他字段一起建立联合索引。引擎的自动増长列必须是索引, 如果是组合索引,自动増长可以不是第一列,他可以根据前面几列进行排序 后递増。
InnoDB: InnoDB中必须包含只有该字段的索引。引擎的自动増长列必须是索 引,如果是组合索引也必须是组合索引的第一列。

4、 表的具体行数
MylSAJL保存有表的总行数,如果select count (*) from table;会直接取 岀该值。
InnoDB:没有保存表的总行数,如果使用select count (*) from table;就 会遍历整个表,消耗相当大,但是在加了 where后,myisain和innodb处理 的方式都一样。

5、 全文索引
Myl SAJ】'土持FULLTEXT类型的全文索引。不支持中文。
InnoDB:不支持FULLTEXT类型的全文索引,但是innodb可以使用sphinx 插件支持全文索引,并且效果更好。

6、 表锁差异
My I SAIL只支持表级锁,只支持表级锁用户在操作myisain表时,select, update, delete, insert语句都会给表自动加锁。
InnoDB:支持事务和行级锁,是innodb的最大特色。行锁大幅度提高了多 用户并发操作的新能。但是InnoDB的行锁也不是绝对的,如果在执行一个 SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如 update table set nuirnl where name like aaa%”


162. 画出OSI和TCP/IP协议栈的对应关系.

OSI/RM共分为七层,TCP/IP分为四层。TCP/IP中的网络接口层相当于0SI 的物理层和数据槌路层,TCP的应用层相当于0SI的应用层、表示层和会话 层。其余层次基本对应。见图,其中外围深颜色的是0SI层次,内部白颜色 的是TCP层次。


163. 简述停止-等待协议(ARQ)的工作原理?

全双工通信的双方既是发送方也是接收方。为了讨论方便,仅考虑A发送数 据而B接收数据并发送确认。A叫发送方,B叫接收方。“停止等待”就是 每发送完一个分组就停止发送,等特对方的确认。在收到确认后再发送下一 个分组。

1、 无差错情况
A发送分组Ml,发送完后就暂停发送,等待B的确认。B收到Ml后就向A发 送确认。A在收到对Ml的确认后,就继续发送下一个分组M2。同样,在收 到B对M2的确认后,再继续发送下一个分组。

2、 岀现差错
A只要超过一段时间后仍没有收到确认,就认为刚发送的分组丢失,因而重 侍前面发送过的分组。实现这个功能应该保证:
—、A在发送完一个分组后,必须暂时保留已发送的分组的副本。只有在收 到相应的确认后才能清除暂时保留的分组副本。
二、 分组和确认分组都必须进行编号。
三、 超时计时器设置的重传时间应当比数据在分组侍a输的平均往返时间更 长一些。

3、 源丢失和确认迟到
假设当B发送的对M2确认丢失后,A在设定的超时重传时间内没有收到M2 的确认,但并不知道是自己发送的分组岀错、丢失,或者B发送的确认丢失。 因此A在超时计时器到期后就要重传分组M2。B在收到M2后应釆取的两个 动作:
—、丢弃这个重复的分组M2。
二、向B发送确认。
这种可靠传输协议称为自动重传请求ARQ (Automatic Repeat reQuest), 可以在不可靠的传输网络上实现可靠的通信。


164. redis的持久化有哪几种方式?不同的持久化机制都有什么优缺点?

redis持久化的两种方式
RDB: RDB持久化机制,是对redis中的数据执行周期性的持久化。
AOF: AOF机制对每条写入命令作为日志,以append-only的模式写入一个 日志文件中,在redis重启的时候,可以通过回放AOF日志中的写入指令 来重新构建整个数据集。
通过RDB或AOF,都可以将redis内存中的数据给持久化到磁盘上面来, 然后可以将这些数据备份到别的地方去,比如说阿里云等云服务。
如果redis挂了,服务器上的内存和磁盘上的数据都丢了,可以从云服务 上拷贝回来之前的数据,放到指定的目录中,然后重新启动redis, redis就 会自动根据持久化数据文件中的数据,去恢复内存中的数据,继续对外提供 服务。
如果同时使用RDB和BOF两种持久化机制,那么在redis重启的时候, 会使用AOF来重新构建数据,因为BOF中的数据更加完整。

RDB优缺点
RDB会生成多个数据文件,每个数据文件都代表了某一个时刻中redis的数 据,这种多个数据文件的方式,非常适合做冷备,可以将这种完整的数据文 件发送到一些远程的安全存储上去,比如说Amazon的S3云服务上去,在 国内可以是阿里云的ODPS分布式存储上,以预定好的备份策略来定期备份 redis中的数据。
RDB对redis对外提供的读写服务,影响非常小,可以让redis保持高性 能,因为redis主进程只需要fork —个子进程,让子进程执行磁盘10操 作来进行RDB持久化即可。
相对于AOF持久化机制来说,直接基于RDB数据文件来重启和恢复redis 进程,更加快速。
如果想要在redis故障时,尽可能少的丢失数据,那么RDB没有AOF好。 —般来说,RDB数据快照文件,都是每隔5分钟,或者更长时间生成一次, 这个时候就得接受一旦redis进程宕机,那么会丟失最近5分钟的敬据。 RDB每次在fork子进程来执行RDB快照数据文件生成的时候,如果数据 文件特别大,可能会导致对客户端提供的服务暂停数毫秒,或者甚至数秒。 AOF优缺点
AOF可以更好的保护数据不丢失,一般AOF会每隔1秒,通过一个后台线 程执行一次fsync操作,最多丢失1秒钟的数据。
AOF日志文件以append-only模式写入,所以没有任何磁盘寻址的开销, 写入性能非常高,而且文件不容易仮损,即使文件尾部破损,也很容易修复。

A0F日志文件即使过大的时候,岀现后台重写操作,也不会影响客户端的读 写。因为在rewrite log的时候,会对其中的指导进行压缩,创建岀一份 需要恢复数据的最小日志岀来。再创建新日志文件的时候,老的日志文件还 是照常写入。当新的merge后的日志文件ready的时候,再交换新老日志 文件即可。
AOF日志文件的命令通过非常可读的方式进行记录,这个特性非常适合做灾 难性的误删除的紧急恢复。比如某人不小心用flushall命令清空了所有数 据,只要这个时候后台rewrite还没有发生,那么就可以立即拷贝AOF文 件,将最后一条flushall命令给删了,然后再将该AOF文件放回去,就 可以通过恢复机制,自动恢复所有数据。
对于同一份数据来说,AOF日志文件通常比RDB数据快照文件更大。
AOF开启后,支持的写QPS会比R3B支持的写QPS低,因为M1F 一般会 配置成每秒fsync —次日志文件,当然,每秒一次fsync,性能也还是很 高的。(如果实时写入,那么QPS会大降,redis性能会大大降低) 以前AOF发生过bug,就是通过A3F记录的日志,进行数据恢复的时候, 没有恢复一模一样的数据岀来。所以说,类似AOF这种较为复杂的基于命 令日志/merge/回放的方式,比基于RDB每次持久化一份完整的数据快照文 件的方式,更加脆弱一些,容易有bug。不过AOF就是为了避免rewrite过 程导致的bug,因此每次rewrite并不是基于旧的指令日志进行merge 的,而是基于当时内存中的数据进行指令的重新构建,这样健壮性会好很多。


165. 如何理解Paxos算法?

Paxos算法解决的是一个分布式系统如何就某个值(决议)达成一致。一个 典型的场景是,在一个分布式数据库系统中,如果各个节点的初始状态一致, 每个节点执行相同的操作序列,那么他们最后能够得到一个一致的状态。为 了保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“一致 性算法”以保证每个节点看到的指令一致。zookeeper使用的zab算法是该 算法的一个实现。在Paxos算法中,有三种角色:Proposer (提议),Acceptor (接受者),Learners (记录员)
Proposer提议者:只要Proposer发的提案Propose被半数以上的Acceptor 接受,Proposer就认为该提案例由value被选定了
Acceptor接受者:只要Acceptor接受了某个提案,Acceptor就认为该提 案例的value被选定J
Learner记录员:Acceptor告诉Learner哪个value就是提议者的提案被 选定,L e arner就认为哪个val ue旅选定。
Paxos算法分为两个阶段,具体如下:
阶段一(進leader确定):
(a) Proposer选择一个提案编号N,然后向半数以上的Acceptor发送编号 为N的Prepare请求。
(b) 如果一个Acceptor收到一个编号为N的Prepare请求,且N大于 该Acceptor已经响应过的所有Prepare请求的编号,那么它就会将它已 经接受过的编号最大的提案(如果有的话)作为响应反馈给Proposer,同 时该Acceptor承诺不再接受任何编号小于N的提案。
阶段二(leader确认):
(a) 如果Proposer收到半数以上Acceptor对其发岀的编号为N的 Prepare请求的响应,那么它就会发送一个针对風V]提案的Accept请求 给半数以上的Acceptor。注意:V就是收到的响应中编号最大的提案的 value ,如果响应中不包含任何提案,那么V就由Proposer自己决定。
(b) 如果Acceptor收到一个针对编号为N的提案的Accept请求,只要 该Acceptor没有对编号
大于N的Prepare请求做岀过响应,它就接受该提案。


166. 如何理解raft算法?

Raft算法包括三种角色:Leader (领导者)、Candidate (候选领导者)和 Follower (眼随者),决策前通过选举一个全局的leader来简化后续的决策 过程。Leader角色十分关键,决定日志(log)的提交。日志只能由Leader 向Follower单向复制。
典型的过程包括以下两个主要阶段:
Leader选举:开始所有节点都是Follower,在随机超时发生后未收到来自
Leader或Candidate消息,则转变角色为Candidate,提岀选举请求。最近 选举阶段(Term)中得票超过一半者被选为Leader;如果未选岀,随机超时后 进入新的阶段重试。Leader负责从客户端接收log,并分发到其他节点; 同步日志:Leader会找到系统中日志最新由记录,并强制饼有的Follower 来刷新到这个记录,数据的同步是单向的。


167. 如何理解一致性哈希算法?

简单来说,一致性哈希是将整个哈希值空间组织成一个虚拟的圆环,如假设 哈希函数H的值空间为0-272-1 (哈希值是32位无符号整形),整个哈希 空间环如下:

整个空间按顺时针方向组织,0和2^32-1在零点中方向重合。
接下来,把服务器按照IP或主机名作为关键字进行哈希,这样就能确定其 在哈希环的位置。

然后,我们就可以使用哈希函数H计算值为key的数据在哈希环的具体位置 h,根据h确定在环中的具体位置,从此位置沿顺时针滚动,遇到的第一台 服务器就是其应该定位到的服务器。
例如我们有A、B、C、D四个数据对象,经过哈希计算后,在环空间上的位 置如下:
2八32・1 0

根据一致性哈希算法,数据B会被定为到Server 1上,数据B被定为到Server 2上,而C、D被定为到Server 3上。


168. voip都用了那些协议?

H. 323协议簇、SIP协议、Skype协议、H. 248和MGCP协议


169. 阅读下面代码,回答问题?

unsigned char *pl;
unsigned long: *p2;
pl= (unsigned char *)0x801000;
p 2= (unsigned long *)0x810000;

请 |5]:pl+5=? p2+5=?

0x801005(相当于加上5位);0x810014(:相当于加上20位);


170. IP Phone的原理是什么?

IP电话(又称IP PHONE或VoIP)是建立在IP技术上的分组化、数字化传 输技术,其基本原理是:通过语音压痛算法对语音数据进行压缩编码处理,然 后把这些语音数据按IP等相关协议进行打包,经过IP网络把数据包传输到 接收地,再把这些语音数据包串起来,经过解码解压处理后,恢复成原来的语 音信号,从而达到由IP网络传送语音的目的。


171. 1号信令和7号信令有什么区别,我国某前广泛使用的是那一种?

1号信令接续慢,但是稳定,可靠。
7号信令的特点是:信令速度快,具有提供大量信令的潜力,具有改变和増 加信令的灵活性,便十升放新业务,在通话时可以、随意处理信令,成本低。 目前得到广泛应用。


172. 请问交换机和路由器分别的实现原理是什么?分别在哪个层次上面实现的?

接下来,把服务器按照IP或主机名作为关键字进行哈希,这样就能确定其 在哈希环的位置。
—般意义上说交换机是工作在数据捲路层。但随着科技的发展,现在有了三 层交换机,三层交换机已经扩展到了网络层。也就是说:它等于“数据槌路 层+部分网络层” O交换机中传的是帧。通过存储转发来实现的。路由器 是工作在网络层。路由器中传的是IP数据报。主要是选址和路由。


173. 请问C++的类和C里面的struct有什么区别?

整个空间按顺时针方向组织,。和2^32-1在零点中方向重合。
结构是一种将数据集合成组的方法,类是一种同时将函数和数据都集合成组 的方法。结构和类在表面上的唯一区别是:类中的成员在默认情况下是私有 的,而结构中的成员在默认情况下是公用的。

class foo
private:
int dat al; public:
void func();
};
可以写成:
class foo
int dat al;
public:
void func();
);

因为在类中默认的是私有的,所以关键字private就可以不写了
如果想用结构完成这个类所作的相冋的事,就可以免去美槌字public,并将 公有成员放置在私有成员之前:

struct foo
void func();
private:
int dat al;
};

174. 8086是多少位的系统?在数据总线上是怎么实现的?

8086微处理器初次发布时,这块16位芯片仅包含29000个晶体管,运行速 度为5M H N。而当今基于x 86架构的奔腾4处理器,已经包含5500万个 晶体管,运行速度提高了 600倍以上,高达3. 06GHzo
8086是高性能的第三代微处理器,是Intel系列的16位微处理器,它是釆 用HM0S工艺制造的,内部包含约29, 000个晶体管。
8086有16根数据线和20根地址线,因为可用20位地址,所以可寻址的地 址空间达220即1M字节。8086工作时,只要一个5V电源和一相时钟,时钟 頻率为5MHz。后来,Intel公司推岀的8086-1型微处理器时钟频率高达 10MHz, 8086-2型微处理器时钟频率达8MHz。


175. 请你详细的解释一下IP协议的定义,在哪个层上面,主 要有什么作用? TCP与UDP呢?

UDP, TCP在传输层,IP在网络层,TCP/IP是英文Transmission
ControlProt ocol /Int ernet Prot ocol的缩写,意思是〃传输控制协议/网际 协议〃。
TCP/IP协议组之所以流行,部分原因是因为它可以用在各种各样的信道和底 层协议(例如T1和X. 25、以太网以及RS-232串行接口)之上。
确切地说,TCP/IP协议是一组包括ICP协议和IP协议,UDP (User Datagram Protocol)协议、ICMP (Internet Control MessageProtocol)协议和其他 —些协议的协议组。
TCP/IP协议并不完全符合0SI的七层参考模型。传统的开放式系统互连参考 模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任 务。
该如型的目的是使各种硬件在相同的层次上相互通信。
这7层是:物理层、数据槌路层、网路层、传输层、话路层、表示层和应用 层。
而Tcr/ir通讯协议采用了 4层的层级结构,每一层都呼叫它的下一层所提 供的网络来完成自己的需求。这4层分别为:
应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协 议(FTP)、网络远程访问协议(Telnet)等。
传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、 用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到 下一层中,这一层负责传送数据,并且确定数据已被送达并接收。
互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到 达目的主机(但不检查是否被正确接收),如网际协议(IP)
网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如 Ethernet s Serial Line 等)来传送数据。


176. 全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?

从作用域看:
全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用 于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern关 键字再次声明这个全局变量。
局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不 是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变 量被撤销,其所占用的内存也被收回。
从分配内存空间看:
全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部 变量在桟里分配空间
全局变量和局部变量的区别是作用域不同,全局变量从定义位置开始到程序 结束,而局部变量只限定义的函数内可使用,全局变量在数据段,而局部变量 在栈,局部变量在函数结束时内存空间就被系统收回,所以要返回的数组或 字符串不要用局部变量定义
全局都放在静态存储区,局部一般临时分配在桟里,生命周期到,自动释放内存!


177. 操作系统中的进程调度策略有哪些?

1. 先来先服务调度算法:
先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业 调度,也可用于进程调度。当在作业调度中釆用该算法时,每次调度都是从 后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存, 为它们分配资源、创建进程,然后放入就绪队列。在进程调度中釆用FCFS 算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之 分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后 才放弃处理机。

2. 短作业(进程)优先调度算法:
短作业(进程)优先调度算法SJ(P)F,是指对短作业或短进程优先调度的算 法。它们可以分别用于作业调度和避程调度。短作业优先(SJF)的调度算法 是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内 存运行。而短进程优先(SPF)调度算法则是从就绪队列中选岀一个估计运行 时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或 发生某事件而被阻塞放弃处理机时再重新调度。

3. 高优先权优先调度算法: 为了照顾紧迫型作业,使之在进入系统后便获得优先处理,引入了最高优先 权优先(FPF)调度算法。此算法常被用于批处理系统中,作为作业调度算法, 也作为多种操作系统中的进程调度算法,还可用于实时系统中。当把该算法 用于作业调度时,系统将从后备队列中选择若干个优先权最高的作业装入内 存。当用于进程调度时,该算法是把处理机分配给就绪队列中优先权最高的 进程,这时,又可进一步把该算法分成如下两种。

(3.1) 非抢占式优先权算法:在这种方式下,系统一旦把处理机分配给就绪 队列申优先权最高的进程后,该进程便一直执行下去,直至完成;或因发生 某事件使该进程放弃处理机时,系统方可再将处理机重新分配给另一优先权 最高的进程。这种调度算法主要用于批处理系统中;也可用于某些对实时性 要求不严的实时系统中。
(3. 2)抢占式优先权调度算法:在这种方式下,系统同样是把处理机分配给 优先权最高的进程,使之执行。但在其执行期间,只要又岀现了另一个其优 先权更高的进程,进程调度程序就立即停止当前进程(原优先权最高的进程) 的执行,重新将处理机分配给新到的优先权最高的进程。因此,在釆用这种 调度算法时,是每当系统中岀现一个新的就绪进程i时,就将其优先权Pi 与正在执行的进程j的优先权Pj进行比较。如果Pi<Pj,原进程Pj便继 续执行;但如果是Pi>Pj,则立即停止Pj的执行,做进程切换,使i进程 投入执行。显然,这种抢占式的优先权调度算法能更好地满足紧迫作业的要 求,故而常用于要求比较严格的实时系统中,以及对性能要求较高的批处理 和分时系统中。
(3. 3)容易岀现优先级倒置现象:优先级反转是指一个低优先级的任务持有 —个被高优先级任务所需要的共享资源高优先任务由于因资源缺乏而处于 受阻状态,一直等到低优先级任务释放资源为止。而低优先级获得的CPU时 间少,如果此时有优先级处于两者之间的任务,并且不需要那个共享资源, 则该申优先级的任务反而超过这两个任务而获得CPU时间。如果高优先级等 待资源时不是阻塞等待,而是忙循环,则可能永远无法获得资源,因为此时 低优先级进程无法与高优先级进程争夺CPU时间,从而无法执行,进而无法 释放资源,造成的后果就是高优先级任务无法获得资源而继续推进。
(3. 4)优先级反转案例解释:不同优先级线程对共享资源的访问的同步机制。 优先级为高和低的线程tall和线程需要访问共享资源,优先级为中等 的线程mid不访问该共享资源。当正在访问共享资源时,tall等待该共 享资源的互斥锁,但是此时1 w被nid抢先了 ,导致mid运行tall阻塞 即优先级低的线程mid运行,优先级高的tall被阻塞。
(3. 5)优先级倒置解决方案:
(3.5.1) 设置优先级上限,给临界区一个高优先级,进入临界区的进程 都将获得这个高优先级,如果其他试图进入临界区的进程的优先级都低于这 个高优先级,那么优先级反转就不会发生。
(3. 5. 2)优先级继承,当一个高优先级进程等待一个低优先级进程持有 的资源时,低优先级进程将暂时获得高优先级进程的优先级别,在释放共享 资源后,低优先级进程回到原来的优先级别。嵌入式系统VxWorks就是釆用 这种策略。
(3. 5. 3)第三种方法就是临界区禁止中断,通过禁止中断来保护临界区, 釆用此种策略的系统只有两种优先级:可抢占优先级和中断禁止优先级。前 者为一般进程运行时的优先级,后者为运行于临界区的优先级。火星探路者 正是由于在临界区中运行的气象任务被中断发生的通信任务所抢占才导致 故障,如果有临界区的禁止中断保护,此一问题也不会发生。

4、 高响应比优先调度算法:
在批处理系统中,短作业优先算法是一种比较好的算法,其主要的不足之处 是长作业的运行得不到保证。如果我们能为每个作业引入前面所述的动态优 先权,并使作业的优先级随着等待时间的増加而以速率a提高,则长作业在 等待一定的时间后,必然有机会分配到处理机。该优先权的变化规律可描述 为:在利用该算法时,每要进行调度之前,都须先做响应比的计算,这会増 加系统开销。

5、 时间片轮转法:
在早期的时间片轮转法中,系统将所有的就绪进程按先来先服务的原则排成 —个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。 时间片的大小从几ms到几百ms。当执行的时间片用完时,由一个计时器发 岀时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就 绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也 让它执行一个时间片。这样就可以保证就绪队列中的所有进程在一给定的时 间内均能获得一时间片的处理机执行时间。换言之,系统能在给定的时间内 响应所有用户的请求。

6、 多级反馈队列调度算法:
前面介绍的各种用作进程调度的算法都有一定的局限性。如短进程优先的调 度算法,仅照顾了短进程而忽略了长进程,而且如果并未指明进程的长度, 则短进程优先和基于进程长度的抢占式调度算法都将无法使用。而多级反馈 队列调度算法则不必事先知道各种避程所需的执行时间,而且还可以满足各 种类型进程的需要,因而它是目前被公认的一种较好的进程调度算法。在釆 用多级反馈队列调度算法的系统中,调度算法的实施过程如下所述。
(6.1) 应设置多个就绪队列,并为各个队列赋予不同的优先级。第一个队列 的优先级最高,第二个队列次之,其余各队列的优先权逐个降低。该算法赋 予各个队列中进程执行时间片的大小也各不相同,在优先权愈高的队列中, 为每个进程所规定的执行时间片就愈小。例如,第二个队列的时间片要比第 —个队列的时间片长一倍,……,第i+1个队列的时间片要比第i个队列的 时间片长一倍。
(6. 2)当一个新进程进入内存后,首先将它放入第一队列的末尾,技FCFS原 则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可進 备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转 入第二队列的末屋,再同样地按FCFS原则等待调度执行;如果它在第二队 列中运行一个时间片后仍未完成,再依次将它放入第三队列,……,如此下 去,当一个长作业(进程)从第一队列依次降到第n队列后,在第n队列便釆 取技时间片轮转的方式运行。
(6.3)仅当第一队列空闲时,调度程序才调度第二队列中的进程运行;仅当 第1〜(i-l)队列均空时,才会调度算i队列中的进程运行。如果处理机正在 第i队列中为某进程服务时,又有新进程进入优先权较高的队列(第1〜(i-1) 中的任何一个队列),则此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回到第i队列的末尾,把处理机分配给新到的高 优先权进程。


178.将二叉树的两个孩子換位置,即左变右,右变左。(不能用递规)

〃二叉树的两个孩子换位置
/倦二叉槌表下的交换操作
void exchange(BiTree BT)
[
BiTree r, p;
BiTree stack[100];
int tp=0;
stack[O]=BT;
while(tp >= 0)
[
p=stack[tp]; tp=tp-l; if(p!二NULL)
[
r=p-> 1chiId;
p-> lchild=p-> rchiId;
BT-> rchild=r;
stack[tp+l]=p-> 1chiId;
tp=tp+l;
stack[tp+l]=p-> rchiId;
tp=tp+l;
}

179.网球中心共有100个网球场,每个单位可以来申请1到 100的场地,申请的场地编号必须是连续的,如果场地已经 被其他单位占用,就不能再次使用,而且单位在使用完场地 后必须归还。请设计一个完整的系统(c语言)。(限时5分 钟)

Tennis, h
struct TennisGround
int num; char *agentName;
};
typedef struct TennisGround TG; void mallocTG(TG *total); void freeTG(TG ;
Tennis, c
《include <stdio. h>
《include <stdlib. h>
《include <malloc. h>
《include〈string. h>
# i nc1ude 〃T ennis. h〃
void mallocTG(TG *total)
[
int size, start, count = 0;
char *agentNaine = (char*) mal 1 oc (si zeof (char) *10);
printf("Please input your agentName:/?);
scanfagentName);
printf("Please input the size of the TennisGround:〃)j
scanf(〃%d〃, &size);
printf ("Please input the TennisGround number you want to start :〃); scanf(〃%d〃, &start);
i f((t ot al+st art) ->agentNaine 1="")
[
print f ("mal lo c failed I \n?/);
exit(-1);
}
else
[
while(count < size)
{
(t ot al+st art+count)->agentName - agentName;
count++;
void freeTG(TG* total)
[
char *an = (char*) mal loc (si zeof (char) *10);
printf ("please input agentName you want to free:/?); scanf(〃%s”, an);
int count - 0;
while(count < 100)i f(strcrop((t ot al+count)->agentName, an) = 0) (t ot al+count)->agentName = 〃 〃: count++;
int main。
int i;
int sw;
TG *total = (TG*)real1oc(sizeof(TG)*100); for(i=0; i<100; i++)pr i nt f(〃*******T ennis Ground Mai1ocat i on******************\n"). for(i=0; i<100; i++)print f(〃%d(%s) 〃,(total+i)->nuin, (total+i) ->agentNaine); if(i%5 = 0) printf (侦);
printf(〃\n〃);
printf(〃**************************************************
\n〃); 〃 〃
printf ("Please input your chooser!: (linalloc, 2-free) :/?); scanf(〃%d〃, &sw);if(sw = 1)
mallocTG(total);
else
freeTG(total);
return 0:

180.输入四个IP端,前两个为第一个IP段的起始和终止地址, 后两个是第二个IP段的起始和终止地址,判断这两个IP段 是否存在交集.

输入描述:输入4个IP
输岀描述:如果存在交集,输岀Overlap IP ;如果不存在交集,输岀No
#include<iostreairi>
#include<stdio. h>
#include<stdlib. h>
#include<cassert>
using namespace std;
int *dec2bin(int decnuin)
[
int i, a, *b = { 0 };
a = decnum;
for (i = 7; i >= 0; i—)
[
b[i] = a % 2;
a = a / 2;
}
return b;
}
int ipToInt(char *ipString)
[
assert(ipString 1= NULL);
int i = 0, j, n, count - 0, return_nuiri - 0;
char *tinp;
int *tinp_nuirHNULL, *nuirFNULL, *d2b;
char *s = ipString, *s_tinp=NULL;
if (*s =='.')
count++;
count++;
if (count 1= 4)
return 0;
while (*s 1= ' \0")
if (*s 1 = n = s - s_tinp;
trap = (char*)mal1oc(n*si zeof(char)); memcpyCtinp, s, n);
tinp_nuin[i] - atoi(tirp):
d2b = dec2bin (tinp_nu[n [i ]); for (j = 0; j<8; j++)
num[8 * i + j] = d2b[j];
s++;
i++;
s_tinp = s;
}
s++;
}
if (*s = ' \0‘)
[
n = s - s_tinp;
trap = (char*)mal1oc(n*sizeof(char)); memcpyCtinp, s, n);
tinp_nuin[i] - atoi (trap);
d2b = dec2bin (tinp_nuin [i ]); for (j = 0; j<8; j++)
num[8 * i + j] = d2b[j];
}
for (j = 0; j<32; j++)
return_nuiri = return_num * 2 + nuin[j];
return return_nuin;
}
int main (void)
(
char *sl, *s2, *s3, *s4;
si - new char;
s2 - new char;
s3 - new char:
s4 - new char;
cin » si » s2 » s3 » s4;
int nl, n2, n3, n4, i;
nl = ipToInt(sl);
n2 = ipToInt(s2);
n3 = ipToInt(s3);
n4 = ipToInt(s4);
if (n4<nl || n3>n2)
cout « "No Overlap IP〃 « endl; else
cout « "Overlap IP〃 « endl;
system("pause");
return 0;

秋招大厂经典面试题及答案整理不断更新中,感兴趣且正在学习的同学可以点个关注;狮会不断更新文章连载,有问题或者见解可以评论区讨论。

2023秋招大厂经典面试题及答案整理归纳(161-180)校招必看相关推荐

  1. 2023秋招大厂经典面试题及答案整理归纳(201-220)校招必看

    目录 201.数组al[O,mid-l]和al[mid,num-l],都分别有序.将其 merge成有序数组al[O,num-1],要求空间复杂度0(1). 202. 一个url指向的页面里面有另一个 ...

  2. 2023秋招大厂经典面试题及答案整理归纳(141-160)校招必看

    目录 141. 动态连接库的两种方式? 142. IP组播有那些好处? 143. 列举几种进程的同步机制及优缺点 144. 什么是预编译,何时需要预编译? 145. int(*s[10])(int)表 ...

  3. 2023秋招大厂经典面试题及答案整理归纳(1-20)校招必看

    目录 前言 1. 使用mysql索引都有哪些原则?索引什么数据结构? 1). 对于查询频率高的字段创建索引: 2). 对排序.分组.联合查询频率高的字段创建索引: 3). 索引的数目不宜太多 4). ...

  4. 【2023秋招大厂真题】携程校招-2022.9.28-k-好数组

    2023大厂真题提交网址(含题解): www.CodeFun2000.com(http://101.43.147.120/) 最近我们一直在将收集到的机试真题制作数据并搬运到自己的OJ上,供大家免费练 ...

  5. 【2023秋招大厂真题】科大讯飞校招-2022.10.14-奖品发放

    2023大厂真题提交网址(含题解): www.CodeFun2000.com(http://101.43.147.120/) 最近我们一直在将收集到的机试真题制作数据并搬运到自己的OJ上,供大家免费练 ...

  6. 【2023秋招大厂真题】华为校招-2022.10.11-字母加密

    2023大厂真题提交网址(含题解): www.CodeFun2000.com(http://101.43.147.120/) 最近我们一直在将收集到的机试真题制作数据并搬运到自己的OJ上,供大家免费练 ...

  7. 2023最新Web前端经典面试试题及答案-史上最全前端面试题(含答案)

    近期总结一一些面试题 都是企业的面试题笔记题 感觉薪资10k-15k的常见面试题 个人录制的最新Vue项目学习视频:B站 小胖梅-的个人空间_哔哩哔哩_Bilibili 红色为常见面试题 ====== ...

  8. 2022年最新互联网大厂前端面试题及答案-前端工程必备技能(持续整理更新中【关注收藏不迷路】)

    对于做前端的朋友,或者做了前端几年了,基础不好的,或者想进大厂的想了解深入,下面的知识点很多前端朋友都没有深入了解.很重要,看完有种茅塞顿开感觉,**关注+收藏哦,总有一天用的得.** 涉及到知识点: ...

  9. 大疆秋招IBG后端笔试题 2023

    大疆秋招IBG后端笔试题 2023 题型 编程 计算时间差(Leetcode359) 最小偏移量(Leetcode1657) 题型 单选:20道:(不可修改答案好像,我没找到返回上一题的界面) 多选: ...

最新文章

  1. tensorflow学习笔记(二十五):ConfigProtoGPU
  2. AJAX 传值数据类型问题
  3. android studio 使用CMAKE
  4. 2010年12月blog汇总:敏捷个人
  5. 为什么我又喜欢过年了
  6. C/C++ strict-aliasing
  7. Linux下Apache自动监测重启脚本
  8. Win7系统隐藏文件恢复的方法
  9. ie浏览器修复_IE 11浏览器被爆严重漏洞,Windows系统均有中招风险!
  10. 简单了解Tomcat与OSGi的类加载器架构
  11. Windows程序设计学习-API-SetBkMode
  12. 串口 浮点数 结构体_quot;结构体quot;和quot;共用体quot;在单片机中的妙用
  13. python设计模式
  14. ad输出光绘文件_AD输出文件教程
  15. 野火Linux内核编译
  16. 将docx转为pdf文档
  17. java guardedby_JAVA多线程(五)模式-Guarded Suspension
  18. 实验:跨域VPN-OptionC方式-方案二
  19. 通过数组指针给二维数组赋值
  20. 两年JAVA经验,非科班菜鸡的我是如何拿下字节、美团、腾讯等offer的?吃透这份面经,大厂不再是梦!

热门文章

  1. SVG中插入HTML标签
  2. matlab抢占时隙算法,ALOHA anti-collision、二进制数搜索算法以及帧时隙算法
  3. linux svn 查看忽略文件
  4. android 输入法 sd卡,关于安卓手机内置或外置SD卡中各文件夹的名称和作用
  5. 微软预览word_如何在Microsoft Word中更改语言
  6. 数字故宫(360全景+纪录片+数据库+公开课)
  7. Reso | mysql、SQLServer、Oracle的区别
  8. Unity 游戏的String interning优化
  9. 同宇新材再更新招股书:继续冲刺创业板上市,计划募资13亿元
  10. 路由器和交换机简单总结(cisco设备)