笔试题卷

单选

1.主机甲与主机乙之间已建立一个TCP连接,主机甲向主机乙发送了两个连续的TCP段,分别包含300B和500B的有效载荷,第一个段的序列号为200,主机乙正确接收到这两个数据段后,发送给主机甲的确认序列号是

A.200;B.500;C800;D.1000
答案:D
解析:
确认序列号=原始序列号+TCP段的长度
第一次的确认序列号为200+300=500,第二次确认序列号为500+500=1000

2.在支持多线程的系统中,进程P创建的若干个线程不能共享的是

A.进程P的代码段
B.进程P中打开的文件
C.进程P的全局变量
D.进程P中某线程的栈指针
答案:D
解析:
1.堆 由于堆是在进程空间中开辟出来的,所以它是理所当然地被共享的;因此new出来的都是共享的(16位平台上分全局堆和局部堆,局部堆是独享的)
2.全局变量 它是与具体某一函数无关的,所以也与特定线程无关;因此也是共享的
3.静态变量 虽然对于局部变量来说,它在代码中是“放”在某一函数中的,但是其存放位置和全局变量一样,存于堆中开辟的.bss和.data段,是共享的
4.文件等公用资源 这个是共享的,使用这些公共资源的线程必须同步。Win32 提供了几种同步资源的方式,包括信号、临界区、事件和互斥体。
独享的资源有
5.栈 栈是独享的
6. 寄存器 这个可能会误解,因为电脑的寄存器是物理的,每个线程去取值难道不一样吗?其实线程里存放的是副本,包括程序计数器PC

3.排序算法的效率取决于元素的比较次数与元素的位置移动次数,现需要对数组进行升序排序,已知一数组的元素为{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},问下面哪种排序算法的效率最高?
A.插入排序;B.选择排序;C.快速排序;D.冒泡排序
答案:A
解析:
插入排序在数组有序时效率最高,因为每次只需要和上一个元素比较,不用移动元素
就这道题目而言,
1.如果插入排序每次插入都是在已有序序列的头部开始向后移动比较的话,需要比较(1+9)*9/2=45次;如果插入排序每次插入都是在已有序序列的尾部开始向前移动比较的话,需要比较9次。
2.选择排序需要比较(1+8)*8/2=36次。
3.优化的冒泡排序可以做到序列事先有序的情况下比较9次返回。

4.一个栈的入栈序列是a b c d e,则栈的输出序列不可能是

A.dceab
B.decba
C.edcba
D.abcde
答案:A

5.对数据库,关于索引的理解正确的是

A.创建索引能提高数据插入的性能
B.索引应该根据具体的检索需求来创建,在选择性好的列上创建索引
C.索引并非越多越好
D.建立索引可加速查询
答案:B C D

6.用浏览器访问一个Internet网站,可能使用到的协议有

A.PPP;B.HTTP;C.POP;D.ARP
答案:A B D
解析:
物理层:RJ45、CLOCK、IEEE802.3(中继器,集线器,网关)
数据链路:PPP、FR、HDLC、VLAN、MAC(网桥,交换机)
网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、(路由器)
传输层:TCP、UDP、SPX
会话层:NFS、SQL、NETBIOS、RPC
表示层:JPEG、MPEG、ASII
应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS
访问网络时,会用到以下协议。
PPP:点对点协议
ARP:地址解析协议
HTTP: 超文本传输协议
但是不会用到POP:电子邮箱协议

7.查找或删除性能较低的数据结构有

A.有序数组
B.有序链表
C.AVL树
D.Hash表
答案:A B

8.以下哪些与编译器的任务有关?

A.公共子表达式合并
B.运行程序前加载其依赖的动态库
C.尾递归优化
D.常量、不变式预计算
答案:A C D
解析:
这道题目涉及到编译方面的内容,代码转变到可执行文件过程经过编译器,汇编器和链接器,他们各自的任务如下:
1.编译器:读取源程序,进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,中间还进行优化等处理;
2.汇编器:把汇编语言代码翻译成目标机器指令,关键是目标代码的分段处理;
3.链接器:将有关的目标文件彼此相连接生成可加载、可执行的目标文件。

9.现有代码如下,则 func(5)的返回值为:

int func(int n){
    
    
	if(n <= 1){
    
    
		return 1;
	}else{
    
    
		return n * func(n-1);
	}
}

答案:120

10.下面C程序的运行打印结果是:

#include <stdio.h>
int main(int argc, char** argv) {
    
    
	char* array[] = {
    
    "hello", "my", "world", "goodbye"};
	char** p = array;
	p = p + 2;
	printf("%s", *p);
	return 0;
}

答案:world

11.一个长度为100的循环链表,指针A和指针B都指向了链表中的同一个节点,A以步长为1向前移动,B以步长为3向前移动,最少需要同时移动1步A和B才能再次指向同一个节点
答案:50
解析:
设X步后相遇,必定是B比A多跑一圈那么就有3X - 100 = X,X=50

12.一棵完全二叉树中有33个结点,则该完全二叉树的深度为1
答案:6

13.{0, 2, 1, 4, 3, 9, 5, 8, 6, 7}是以数组形式存储的最小堆,删除堆顶元素0后的堆的新结果是1(结果需要英文逗号分隔)

答案:1,2,5,4,3,9,7,8,6
解析:
最小堆的下层是将两个子节点较小的与之比较,然后交换,依次向下比较交换

13.已知关键字序列为(51,22,83,46,75,18,68,30),进行快速排序,第一趟按关键码字51进行,完成后的序列为
答案:30,22,18,46,51,75,68,83

14.LRU的cache长度为3,初始为空。依次访问如下元素后,cache里的内容是(结果需要英文逗号分隔)
A,A,B,C,A,D,C,E

答案:E,C,D

15.已知一算数表达式的中缀表达式为 a-(b+c/d)*e,其后缀形式为
答案:abcd/+e*-

16.从1 - 1001中,能被数字2或者数字3或者数字5整除的数字有1个

答案:734
解析:
1-1001之间被2整除的数字有500个,被3整除的数字有333个,被5整除的数组有200个,共1033个
我们要去掉一些重复的,能被2整除且能被3整除的也就是能被6整除的共166个
能被2整除且能被5整除的也就是能被10整除的共100个
还有能被3整除且能被5整除的也就是能被15整除的共66个
如果直接用1033减去这三个值,我们会多减去能被2同时能被3同时能被5整除的也就是能被30整除的数字(共33),所以我们最后必须加上这33个.
1033-166-100-66+33 = 734

17.5个盒子每个里面各有一个球,把球全拿出来打乱再放回去,每个球都不在自己原来的盒子里,有1种可能

答案:44
解析:
排除法。包括球在原来自己的盒子的可能一共是5的阶乘=120种。
1、有五个球都在自己的盒子里,1种。
2、有四个球在自己的盒子里,不存在,0种。
3、有三个球在自己的盒子里,只有两个对调了,5×4/2,10种。
4、有二个球在自己的盒子里,5×4/2×2,20种。
5、有一个球在自己的盒子里,5×(24-1-6-4×2),45种。(递归)
120-45-20-10-1=44种。

18.当用分支覆盖法对以下流程图进行测试时,至少需要设计1个测试用例
在这里插入图片描述
答案:6
解析:
b可能有3个值 b=0;b>0;b<0;
a可能有2个值 a>=0;a<0;
2*3=6 ,一共有6种情况

问答题

1.考虑一个网络服务,希望具备防刷的安全特性。假设要求策略是对每次请求访问,如果该请求的来源IP,在当前的前N秒内已经请求过了M次,则拒绝服务X秒。请设计方案,无需写出完全代码,描述清楚设计实现即可。并请针对设计出的方案分析利弊

答案:
每个IP关联一个最近访问时间戳T,和一个链表L,链表元素为一个细粒度时间段内的访问次数,比如粒度定为500毫秒,则链表内元素依次代表了该IP当前500毫秒的(开始时间,结束时间,请求次数),往前的500毫秒中(开始时间,结束时间,请求次数),再往前500毫秒的(开始时间,结束时间,请求次数)…相邻元素的时间段不一定需要连续。

用hash关联IP保存所有T和L

对每一个来访请求,按IP从hash中找到关联的链表L,将最新的元素计数加1(根据当前时间决定是否创建新元素),将N秒前的元素删除,如果剩余元素的计数之和大于等于M,并且最近访问时间戳T到当前未超过X秒,则拒绝服务,否则更新T并提供服务。

定时器将过期IP数据从hash中删除

处理过程中使用同步结构,保证并发安全。

你用微信(或QQ)app给中意的她(他)发送了一句表白,很快收到了一句回复“呵呵”。从你输入完消息点下“发送”按钮,到“呵呵”呈现出来的这段时间,你的手机系统里发生了哪些事情?请根据你所学的计算机知识,尽可能详细的解释。(提示:从软硬件的尽量多的层次考虑和描述。)

答案:
键盘硬件中断;OS处理中断,转换为特定消息放入浏览器程序的事件队列;浏览器的消息循环处理该消息,请求网址;OS请求本地域名缓存或域名服务器解析网址中的域名,得到IP;浏览器向该IP建立TCP连接(默认80端口);浏览器发送GET请求,包含网站的路径,TCP协议栈组装为TCP包,通过网卡发送;浏览器等待网站回复,进程被OS切换为等待状态;网站返回的数据到来,网卡产生中断;OS处理中断,TCP协议栈将数据读入buffer;浏览器获得数据,处理HTTP头,显示HTML网页

更多:OS发ARP包获得网关MAC地址,所有DNS请求、网站TCP等数据包均发向该网关;浏览器IO等待期间OS切换运行系统中其他进程;浏览器将HTTP头中解析出的cookie保存到文件系统;根据网页内容发起更多的HTTP请求获取图片、运行内嵌的javascript脚本等;将网页按照HTTP 头的指示缓存;将网址加入浏览历史保存到文件系统;浏览器整个处理过程中,运行库和OS对内存做相应分配释放,磁盘做相应的IO操作;。。。

猜你喜欢

转载自blog.csdn.net/qq_42748009/article/details/115166047