欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

部分真题整理5

发布时间:2025/10/17 47 豆豆
生活随笔 收集整理的这篇文章主要介绍了 部分真题整理5 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
1、 java关于异常处理机制的叙述哪些正确(BC)
catch部分捕捉到异常情况时,才会执行finally部分
当try区段的程序发生异常时,才会执行catch区段的程序
在try区段不论程序是否发生错误及捕获到异常错误,都会执行finally部分
以上都是
解析:
1.try和catch语句
●将要处理的代码放入try块中,然后创建相应的catch块的列表。如果生成都异常与catch中提到的相匹配,那么catch条件中的块语句就被执行。try块后可能有许多catch块,每个都处理不同的异常。每个catch中的参数都是Exception的子类。
2.finally语句
●finally语句定义一个总是执行的代码,而不考虑异常是否被捕获。
3.throw引起一个异常
●调用申明抛出异常
●throw语句强制抛出异常

2、下面哪一个选项是应用层的协议(B)
TCP
FTP
UDP
ARP
解析:
看下面图就一切了然了。
最下面的一层是网络层,包括IP,ICMP,ARP等等。
第二层是传输层,包括TCP,UDP
第三层是应用层,包括BGP,FTP,TELNET等等(MTME是通用因特网邮件扩充,是在电子邮件协议SMTP的基础上提出的。也是应用层协议)。


3、浏览器和服务器在基于https进行请求链接到数据传输过程中,用到了如下哪些技术:(ABCD)
非对称加密技术
对称加密技术
散列(哈希)算法
数字证书
解析:
HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议不仅仅是一套加密传输的协议,更是一件经过艺术家精心设计的艺术品,TLS/SSL中使用了非对称加密,对称加密以及HASH算法。握手过程的简单描述如下:
1.浏览器将自己支持的一套加密规则发送给网站。
2.网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
3.获得网站证书之后浏览器要做以下工作:
a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
b) 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。
c) 使用约定好的HASH计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。
4.网站接收浏览器发来的数据之后要做以下的操作:
a) 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
b) 使用密码加密一段握手消息,发送给浏览器。
5.浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。
这里浏览器与网站互相发送加密的握手消息并验证,目的是为了保证双方都获得了一致的密码,并且可以正常的加密解密数据,为后续真正数据的传输做一次测试。另外,HTTPS一般使用的加密与HASH算法如下:
非对称加密算法:RSA,DSA/DSS
对称加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256
转自: http://www.guokr.com/post/114121/


4、爸爸去哪儿中的3对父子站成一排,各自父子之间不能相邻,比如石头不能和郭涛挨着,以此类推,共有几种站法?(C)
120
48
240
144
解析:
假设三对父子分别是Aa、Bb、Dd;
第一个位置有6种选择,假设为A;
第二个位置有4种选择(因为不能为a),假设为B;
第三个位置需要分类讨论一下,如果为a,则可以确定后面三位只有两种选择了,如果不为a,第三个位置有两种选择(D和d),假设为D,进而再确定后面三个位置的选择数。
那么结果是:6*4*(2+2*4)=240。




5、请找出下面程序中有哪些错误:(C)
int main() { int i=10; int j=1; const int *p1;//(1) int const *p2=&i; //(2) p2=&j;//(3) int *const p3=&i;//(4) *p3=20;//(5) *p2=30;//(6) p3=&j;//(7) return 0; }1,2,3,4,5,6,7
1,3,5,6
6,7
3,5
解析:
const在前,内容不能变;
const在后,指针不能变;
const* ,指针指向为常量;
*const ,指针本身为常量。
constint*p1表示p1的内容为常量不可变
intconst*p2表示p2的内容为常量不可变
int*constp3表示p3指针本身为常量不可变
其中(6)改变了p2的内容(7)改变了p3的指针,所以错误


6、 设k1,k2是矩阵A的两个不同的特征值,a与b是A的分别属于k1,k2的特征向量,则由a与b是:(B)
线性相关
线性无关
对应分量成比例
可能有零向量
解析:
不同特征值得特征向量不是正交吗,既然正交当然是线性无关的。


7、有如下C++代码:
struct A{ void foo(){printf("foo");} virtual void bar(){printf("bar");} A(){bar();} }; struct B:A{ void foo(){printf("b_foo");} void bar(){printf("b_bar");} };那么
1
2
3 A *p=new B;
p->foo();
p->bar();
输出为: (A)
barfoob_bar
foobarb_bar
barfoob_foo
foobarb_fpp
解析:
A *p=newB;// A类指针指向一个实例化对象B, B类继承A类,先调用父类的无参构造函数,bar()输出bar,B类没有自己显示定义的构造函数。
p->foo();//执行B类里的foo()函数,因为foo不是虚函数,所以直接调用父类的foo函数,输出foo
p->bar();//执行B类的bar()函数, 该函数为虚函数,调用子类的实现,输出b_bar

8、哪些设计模式是降低资源使用率:(BC)
prototype
singleton
flyweight
abstract factory
解析:
首先单例模式肯定降低了资源使用率,保证该类的实例永远只有一个!

原型模式适用于在初始化信息不发生变换的情况,克隆的方法比较适合,主要的目的是避免重新初始化对象,如果后面需要对新对象进行,还需要区分深拷贝和浅拷贝。无论是深拷贝还是浅拷贝只是复制了资源,并没有降低资源使用率。

享元模式(Flyweight): 基于共享技术用于把一些共同的信息(或模块)抽象出来,避免了大量相似类的开销,也降低了资源的使用率。

如Java和C++ 初始化一个string类的信息,以C++为例: string s ="hello"; string p = "hello"。(这个在C++中有问题,容易混淆,特此说明,也有考察C++中string实现的问题。建议用C来描述 char *s = "hello"和char *p = "hello",s和p指向同一个地址),他们其实是一个相同的实例,字符串对象在内存中的共享
BC吧 单例和享元
降低资源使用率 应该是强调代码的复用
A是原型模式,每个类都要有一个克隆方法
D抽象工厂就是换了个地方


9、 n个顶点,m条边的全连通图,至少去掉____边才能构成一棵树?(C)
n-1
m-1
m-n+1
m-n-1
解析:
Google面试题,n个顶点的树一定有n-1条边(证明可以看任何一本图论书),所以需要去掉m-(n-1)=m-n+1条边


10、以下代码是否完全正确,执行可能得到的结果是____。(C)
class A{ int i; }; class B{ A *p; public: B(){p=new A;} ~B(){delete p;} }; void sayHello(B b){ } int main(){ B b; sayHello(b); }程序正常运行
程序编译错误
程序崩溃
程序死循环
解析:
默认的拷贝构造函数是浅拷贝,直接把指针的值复制了一份。
调用sayHello,离开作用域,调用析构函数delete了一次。main函数中,又delete了一次。因此程序崩溃。


11、 在C++面向对象编程语言中,以下阐述不正确的是:(AD)
接口中可以用虚方法
一个类可以实现多个接口
接口不能被实例化
接口中可以包含已经实现的方法
解析:
这道题正确答案AD,首先所谓的接口是指只包含纯虚函数的抽象类,和普通的抽象类含不一样。所以A不对,必须是纯虚函数。然后B是正确的没有问题。然后是C,刚才说接口是特殊的抽象类,抽象类的唯一左右就是创建派生类,不能定义抽象类的对象,所以C是正确的。对于D,接口即只包含纯虚函数的抽象类,所以D是不对的。


12、下面关于HTTP协议的说法正确的是:(AC)
HTTP是基于TCP协议之上的应用层协议
HTTP是一个普通用在浏览器和web服务器之间进行数据交换的流式二进制协议
HTTP协议的ETAG响应头主要用于信息的过期验证
HTTP1.0中的cache-control响应头主要用于控制信息在浏览器的缓存
解析:
HTTP是文本协议,不是二进制协议,B是错的;cache-control是在HTTP1.1中才有的,D是错的。答案是AC


13、关于多线程和多进程编程,下面描述正确的是(ACD):
多进程里,子进程可获得父进程的所有堆和栈的数据;而线程会与同进程的其他线程共享数据,拥有自己的栈空间
线程因为有自己的独立栈空间且共享数据,所有执行的开销相对较大,同时不利于资源管理和保护
线程的通信速度更快,切换更快,因为他们在同一地址空间内
线程使用公共变量/内存时需要使用同步机制,因为他们在同一地址空间内
因多线程里,每个子进程有自己的地址空间,因此相互之间通信时,线程不如进程灵活和方便
解析:
线程和进程的区别联系:
1,进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。
2,线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。
两者都可以提高程序的并发度,提高程序运行效率和响应时间。
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。
根本区别就一点:用多进程每个进程有自己的地址空间(address space),线程则共享地址空间。所有其它区别都是由此而来的:
1、速度:线程产生的速度快,线程间的通讯快、切换快等,因为他们在同一个地址空间内。
2、资源利用率:线程的资源利用率比较好也是因为他们在同一个地址空间内。
3、同步问题:线程使用公共变量/内存时需要使用同步机制还是因为他们在同一个地址空间内



14、已知n阶矩阵A的行列式满足|A|=1,求|A^(-1)|(A^(-1)表示A的逆矩阵)=?(C)
正无穷
0
1
-1
解析:
|A|等于他的|逆矩阵|的倒数还是1

15、已知一对夫妇有两个孩子,如果知道有一个是男孩,那么两个都是男孩的概率?(B)
0.25
0.33
0.50
0.40
解析:
一对夫妇有两个孩子,有大有小,孩子可能性有 A男B女、A女B男、A男B男、A女B女
已知其中有一个男孩,所以只有 A男B女、A女B男、A男B男 三种情况
两个都是男的概率1/3

若改为第一个小孩是男的,则只有 A男B女、A男B男
两个都是男的概率1/2
A:都是男孩
B:一个男孩

P(A | B) = P(B | A)*P(A) / P (B)
= 1* (1/4) / (3/4)
=1/3


16、人工批量种植盆景虎皮兰,已知它们植株高度平均70cm,标准差5cm。现在从中随机输出100盆景到市场销售,则下面说法错误的是(C):
估计100盆中至少有75盆高度在60到80cm之间
有较高把握估测这100盆的平均高度在69到72cm之间
估计100盘中至少有70盆高度在65到75cm之间
解析:
正态分布曲线性质中有 :P(μ-σ<X≤μ+σ)=68.3%P(μ-2σ<X≤μ+2σ)=95.4%P(μ-3σ<X≤μ+3σ)=99.7%;依照题意,落在 [65,75]之间 平均有 有68盆,落在[60,80]之间 平均 有95盆,


17、给定初始点x0=(1,1),用最速下降法求函数f(x)=4*x1+6*x2-2*x1^2-2*x1*x2-2*x2^2的极大值,则迭代一次后x1=?(B)
(-1/2,1)
(1/2,1)
(-1,1)
(2,1)
解析:
对x1求偏导 4-4x1-2x2 代入(1,1)结果为-2
对x2求偏导 6-2x1-4x2 代入(1,1)结果为0
所以x1为 【1+2a,1】
代入原来的方程 4(1+2a)+6-2(1+2a)^2-2(1+2a)-2=4-8a^2-4a
求导 -16a-4=0 a=-1/4;
迭代一次之后x1为(1-1/2,1)=(1/2,1);



18、一个盒子装有6只乒乓球,其中4只是新球(即:未使用过的球)。第一次比赛时随机从盒子中取出2只乒乓球,使用后放回盒子。第二次比赛时又随机地从盒子中取出2只乒乓球。求:第二次取出的球全是新球的概率(B)
13%
16%
11%
5%
解析:
分类别判断:第一次全是新球,6/15,此时还有两个新球,第二次全是新球的概率为1/15, 6/15*1/15
第一次一个新球,8/15,此时还有三个新球,第二次全是新球的概率为3/15, 8/15*3/15
第一次没新球,1/15,此时还有四个新球,第二次全是新球的概率为6/15, 1/15*6/15
所以结果是加起来,36/225 = 16%
C(2,2)*C(4,2)=6
C(2,1)*C(4,1)*C(3,2)=24
C(4,2)=6
总共C(6,2)*C(6,2)=15*15
result=36/(15*15)=0.16


19、在相同样本量下,重复抽样与不重复抽样的抽样平均误差大小关系是(A)
重复抽样误差大
不重复抽样误差大
二者相同
不确定
解析:




20、u检验的应用条件是(A)
样本例数n较大或样本例数数量虽小但总体标准差已知
两样本来自得总体符合正态分布
两样本来自得总体符合正态分布,且两样本来子的总体方差齐性
两样本方差相等
解析:
t检验,主要运用于样本含量较少(一般n<30),总体标准差σ未知的正态分布资料。
适用条件:
(1) 已知一个总体均数;
(2) 可得到一个样本均数及该样本标准差;

(3) 样本来自正态或近似正态总体。

U检验应用条件和t检验应用条件基本一致, 只是大样本时用u检验 ,小样本时用t检验,t检验可以代替U检验。


21、客户端C和服务器S之间建立了一个TCP连接,TCP最大段长度为1KB,客户端C当前的拥塞窗口是16KB,向服务器S连续发送2个最大段之后,成功收到服务器S发送的第一段的确认段,确认段中通告的接受窗口大小是4KB,那么此时客户端C还可以向服务器S发送的最大字节数是:(A)
3KB
4KB
15KB
16KB


22、假设某商品需求函数为y1=B0+B1x1+u, 为了考虑包装外观因素(黑,蓝,白,金四种不同的颜色),引入4个虚拟变量形式形成截距变动模型,则模型的参数估计量(D)
是有偏估计量
是非有效估计量
是非一致估计量
无法估计
解析:
当定性变量含有m个类别时,模型不能引入m个虚拟变量。最多只能引入m-1个虚拟变量,否则当模型中存在截距项时就会产生完全多重共线性,无法估计回归参数。商品包装外观因素有4种颜色,所以这是一个含有4个类别的定性变量,应该向模型引入3个虚拟变量,如果引入4个,则无法估计回归参数。


23、对文件名为Test.java的java代码描述正确的是(C)
class Person { String name = "No name"; public Person(String nm) { name = nm; } } class Employee extends Person { String empID = "0000"; public Employee(String id) { empID = id; } } public class Test { public static void main(String args[]) { Employee e = new Employee("123"); System.out.println(e.empID); } }输出:0000
输出:123
编译报错
输出:No name
解析:
Java中子类默认调用父类的无参构造函数,此时父类已经定义了自己的构造函数,这时要显示的调用父类的构造函数publicEmployee(String id) {
super(id);
empID = id;
}


24、数据库设计里,视图(View)可以使得我们为一个或多个数据表定义一个特殊的表现形式,视图在行为上与数据表没啥特别区别,可以使用基本的select,insert,update等命令修改数据,但对于update操作,也有一些限制,下面那些是受限的原因(AB)
初始View定义的Select语句里如果包含了GROUP BY,DISTINCT,LIMIT或HAVING等命令时
如果视图里数据来自多张字表时
如果视图里缺少主键索引,唯一索引,外键约束条件锁涉及的全部数据列时
当Creat View之后又使用Replace View对已存在视图做了更名操作后
解析:
视图包含下列结构是不可以更新的
1:集合运算符 union,union all, intersect,minus
2:distinct关键字
3:group by,order by,connect by,或者start with
4:子查询
5:分组函数
6:需要更新的列不是视图定义的
7:具有连接查询(可以更新键值保存表的数据)
8:违反基表的约束条件;连接视图是指基于多表连接查询创建的视图(一般不容易修改,但通用instead of触发器可以实现修改的功能)


25、我们常说的mvc框架是指的什么的?(D)
模块(module)-视图(view)-组件(component)
模型(model)-视图(view)-组件(component)
模块(module)-视图(view)-控制器(controller)
模型(model)-视图(view)-控制器(controller)


26、有一个如下的结构体:
struct A{ long a1; short a2; int a3; int *a4; };请问在64位编译器下用sizeof(struct A)计算出的大小是多少?(A)
24
28
16
18
解析:
Win64下:long 8字节、short 2字节、int 4字节、int* 8字节,C++中内存对齐,按最大长度对齐:8+(2+4+2(补齐2字节))+8 = 24字节


27、以下不属于tcp连接断开的状态是?(C)
TIME_WAIT
FIN_WAIT_1
SYNC_SENT
FIN_WAIT_2
解析:
当某个连接的一端处于TIME_WAIT状态时,该连接将不能再被使用。fin_wait1状态是在server端主动要求关闭tcp连接,并且主动发送fin以后,等待client端回复ack时候的状态。Server端强制断开Socket时向客户端发送了FIN请求,客户端已经没有能力继续回复ACK,造成了服务器端大量的端口处在FIN_WAIT_2状态,


28、下面关于ICMP协议的描述中,正确的是(C)
ICMP协议根据MAC地址查找对应的IP地址
ICMP协议把公网的IP地址转换为私网的IP地址
ICMP协议用于控制数据报传送中的差错情况
ICMP协议集中管理网络中的IP地址分配
解析:
A 是RARP协议完成的
B 是NAT协议完成的
D 是DHCP协议完成的
ICMP是(Internet Control Message Protocol)Internet控制 报文 协议。它是 TCP/IP协议族 的一个子协议,用于在IP 主机、 路由 器之间传递控制消息。控制消息是指 网络通 不通、 主机 是否可达、 路由 是否可用等网络本身的消息
在IPv4协议中最常用的ICMP消息类型有以下几种:
• 回显应答(类型0)和回显请求(类型8):这是Ping程序发送的信息。
•目标不可达(类型3)
•源抑制(类型4):这是一种用于通知发送者路由器或者主机出现阻塞现象的ICMP消息,发送者需要降低发送速度。
•重定向(类型5):这个消息用来向可以访问两台路由器的主机说“请使用另一台路由器”。
•路由器信息应答(类型9)和路由器信息请求(类型10)
•超时(类型11):这个消息有两种用途。第一,当超过IP生存期时向发送系统发出错误信息。第二,如果分段的IP数据报没有在某种时限内重新组合,这个消息将通知发送系统。


29、22.在一个单CPU的处理机中,有P1,P3,P5三个作业,有两个IO设备IO1,IO2,并且能够实现抢先式多任务并行工作的多道程序环境中,投入运行优先级由高到低P5,P1,P3三个作业,他们使用设备的先后顺序和占用设备的时间分别为:P1:IO2(10ms) CPU(10ms) IO1(30ms)CPU(10ms)P3:IO1(30ms) CPU(10ms) IO2(30ms)CPU(10ms)P5:CPU(20ms) IO1(30ms) CPU(10ms) IO2(15ms)忽略其他的时间损耗,3个作业投入到全部完成的情况下。请问下列哪些选项为IO2的设备利用率?(E)
0.55
0.26
0.48
0.5
0.39
解析:




30、C语言里i=5,j=7,请问i|j等于多少?(D)
1
3
5
7
解析:
i=2^2+2^0
j= 2^2+ 2^1+ 2^0
---------------------------------
2^2+ 2^1+ 2^0=7
位操作符,转化为二进制再运算
int a = i | j; //令a等于i和j按位或
int b = j & j;//令b等于i和j按位与


31、如下代码,result变量的输出结果是多少?(B)
#include<iostream> using namespace std; int i=1; class MyCls{ public: MyCls():m_nFor(m_nThd),m_nSec(i++),m_nFir(i++),m_nThd(i++){ m_nThd=i; } void echo(){ cout<<"result:"<<m_nFir+m_nSec+m_nThd+m_nFor<<endl; } private: int m_nFir; int m_nSec; int m_nThd; int &m_nFor; }; int main() { MyCls oCls; oCls.echo(); return 0; }10
11
9
12
8
解析:
首先要明白变量初始化的顺序是其声明的顺序,跟初始化列表中的顺序无关。所以变量的初始化顺序为m_nFir(i++),m_nSec(i++),m_nThd(i++),&m_nFor(m_nThd);
i初始值为1,所以经过初始化列表初始化以后m_nFir=1,m_nSec=2,m_nThd=3,m_nFor为m_nThd的一个引用。
并且此时i的值为4,构造函数中执行语句m_nThd=i后,m_nThd=4,m_nFor是它的一个引用,自然值也为4。
输出结果m_nFir+m_nSec+m_nThd+m_nFor=1+2+4+4=11


32、某一速率为100M的交换机有20个端口,其一个端口上连着一台笔记本电脑,此电脑从迅雷上下载一部1G的电影需要的时间可能是多久?(DE)
10S
20S
40S
100S
200S
解析:
交换机为独占带宽,即每个端口数据通过率为为最大100Mb/s。注意单位是Mb。因此最短时间为:
1GB/(100Mb/s)=1024MB/(12.5MB/s)=81.92s。


33、在linux编程中,以下哪个TCP的套接字选项与nagle算法的开启和关闭有关?(B)
TCP_MAXSEG
TCP_NODELAY
TCP_SYNCNT
TCP_KEEPALIVE
解析:
当有一个TCP数据段不足MSS,比如要发送700Byte数据,MSS为1460Byte的情况。nagle算法会延迟这个数据段的发送,等待,直到有足够的数据填充成一个完整数据段。也许有人会问,这有什么影响呢?没有太大的影响,总体上来说,这种措施能节省不必要的资源消耗。但是要发送的总体数据很小时,这种措施就是拖后腿了。比如,用户请求一个网页,大约十几KB的数据,TCP先发送了八九个数据包,剩下几百字节一直不发送,要等到另一个RTT才发送,这时候前面发送数据的ACK已经返回了。这样的用户体验是很不好的。 所以,现在很多服务器都选择主动关闭nagle算法,因为带宽够大,资源消耗不是问题,速度反而是个大问题。
从上述描述中,禁用 nagle,实质就是不在延迟 TCP_NODELAY


34、某二叉树的先根遍历序列和后根遍历序列正好相反,则该二叉树具有的特征是(A)
高度等于其结点数
任一结点无左孩子
任一结点无右孩子
空或只有一个结点
解析:
先序遍历顺序是:M-L-R;
后序遍历顺序是:L-R-M;
可以看到,只有中间的结点(M)顺序变化了,左右结点相对位置是不变的。那可以推断出,要满足题意的话“二叉树的先序序列与后序序列正好相反”,说明整个二叉树左子树或者右子树有一个没有(遍历就成了,先:M-L ;后:L-M 或者 先:M-R ;后:R-M )也就是必然是一条链。



35、若系统中有五台打印机,有多个进程均需要使用两台,规定每个进程一次仅允许申请一台,则在不发生死锁的情况下至多允许______个进程参与竞争(B)
5
4
3
2
解析:
哲学家就餐问题:当5个进程的时候如果都同时申请到了1台,就发生死锁了。如果是4个进程,那必然有一个能申请到2台。


36、在正方体上任取三个顶点连成三角形,则所得的三角形是直角非等腰三角形的概率为?(D)
1/14
4/7
2/7
3/7
解析:
共有8个顶点,总有C(8,3);
任取一顶点,过该顶点取其中一个面的对角线,仅有一条过该顶点并且垂直于该面的边,每个顶点共有3个面,故共有3个三角形,总数为,8*3
如下图A点

37、关于红黑树和AVL树,以下哪种说法不正确?(D)
两者都属于自平衡二叉树
两者查找,插入,删除的时间复杂度相同
包含n个内部节点的红黑树的高度是O(log(n))
JDK的TreeMap是一个AVL的实现
解析:
关于红黑树和AVL树,来自网络:

1 好处 及 用途
红黑树 并不追求“完全平衡 ”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。
红黑树能够以 O(log2 n) 的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。当然,还有一些更好的,但实现起来更复杂的数据结构 能够做到一步旋转之内达到平衡,但红黑树能够给我们一个比较“便宜”的解决方案。红黑树的算法时间复杂度和AVL相同,但统计性能比AVL树更高。

当然,红黑树并不适应所有应用树的领域。如果数据基本上是静态的,那么让他们待在他们能够插入,并且不影响平衡的地方会具有更好的性能。如果数据完全是静态的,例如,做一个哈希表,性能可能会更好一些。

在实际的系统中,例如,需要使用动态规则的防火墙系统,使用红黑树而不是散列表被实践证明具有更好的伸缩性。
典型的用途是实现关联数组


2 AVL树是最先发明的自平衡二叉查 找树。在AVL树中任何节点的两个儿子子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者 G.M. Adelson-Velsky 和 E.M. Landis,他们在 1962 年的论文 "An algorithm for the organization of information" 中发表了它。

引入二叉树的目的是为了提高二叉树的搜索的效率,减少树的平均搜索长度.为此,就必须每向二叉树插入一个结点时调整树的结构,使得二叉树搜索保持平衡,从而可能降低树的高度,减少的平均树的搜索长度.

AVL树的定义:
一棵AVL树满足以下的条件:
1>它的左子树和右子树都是AVL树
2>左子树和右子树的高度差不能超过1
从条件1可能看出是个递归定义,如GNU一样.

性质:
1>一棵n个结点的AVL树的其高度保持在0(log2(n)),不会超过3/2log2(n+1)
2>一棵n个结点的AVL树的平均搜索长度保持在0(log2(n)).
3>一棵n个结点的AVL树删除一个结点做平衡化旋转所需要的时间为0(log2(n)).

从1这点来看 红黑树是牺牲了严格的高度平衡的优越条件 为 代价红黑树能够以O(log2 n)的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。当然,还有一些更好的,但实现起来更复杂的数据结构 能够做到一步旋转之内达到平衡,但红黑树能够给我们一个比较“便宜”的解决方案。红黑树的算法时间复杂度和AVL相同,但统计性能比AVL树更高.



38、客户端C和服务器S之间建立一个TCP连接,该连接总是以1KB的最大段长发送TCP段,客户端C有足够的数据要发送。当拥塞窗口为16KB的时候发生超时,如果接下来的4个RTT往返时间内的TCP段的传输是成功的,那么当第4个RTT时间内发送的所有TCP段都得到了ACK时,拥塞窗口大小是:(C)
7KB
8KB
9KB
16KB
解析:
16KB超时,阈值变为8KB,客户端从1KB开始穿(执行快开始算法)
1RTT 结束,1KB->2KB
2RTT 结束,2KB->4KB
3RTT 结束,4KB->8KB(到达阈值,执行拥塞避免算法)
4RTT 结束,8KB->9KB
当拥塞发生时(超时或收到重复确认),慢启动门限ssthresh被设置为当前拥塞窗口cwnd大小(题目为16)的一半,即8。同时cwnd重置为1。新的数据被接收,则cwnd增加,规则为ssthresh之前,慢启动,即cwnd指数增长;到达ssthresh之后,拥塞避免,即cwnd加1。




39、关于epoll和select的区别,哪些说法是正确的?(ABC)
epoll和select都是I/O多路复用的技术,都可以实现同时监听多个I/O事件的状态
epoll相比select效率更高,主要是基于其操作系统支持的I/O事件通知机制,而select是基于轮询机制
epoll支持水平触发和边沿触发两种模式
select能并行支持I/O比较小,且无法修改
解析:
epoll,select,poll是io复用技术中常见的,具体可google解释,a正确
select查询速度较慢,因为他每次产生fd时候会有整体fdset的拷贝,而且每次有回送,select要查询整个fdset
epoll查询速度较快,因为他为每个fd都regist了一个单独的回调函数,b正确
c选项不是很清楚
select支持io较少,这个是根据操作系统支持的数量定的,不过记得那个数值可以用sysctl修改,所以觉得d不对。



40、TCP链接中主动断开链接netstat观察可能出现的状态流转是:(CD)
ESTABLISHED->CLOSE_WAIT->TIME_WAIT->CLOSED
ESTABLISHED->TIME_WAIT->CLOSE_WAIT->CLOSED
ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
ESTABLISHED->FIN_WAIT_1->TIME_WAIT->CLOSED



41、以下涉及到内存管理的代码段中,有错误的是:(ABD)
int *a=new int(12); //..... free(a); int *ip=static_cast<int*>(malloc(sizeof(int))); *ip=10; //..... delete ip; double *a=new double[1]; //.... delete a; int *ip=new int(12); for(int i=0;i<12;++i){ ip[i]=i; } delete []ip;解析:
new 和delete 配套使用 free和malloc配套使用 AB错误
D是因为申请的是一个元素,后面跟的12是初始化值,而不是数组,所以错误。
new和delete与free和malloc的差别是前面2个会分别调用构造函数和析构函数



42、下面哪些特性可能导致代码体积膨胀:(ABC)
宏定义
模板
内联函数
递归
解析:
A宏定义会单纯的替换,也就是如果宏定义替换的内容会成倍复制,所以会导致代码膨胀
B模板的调用,会根据调用的参数,生成模板对应的实际调用的函数体,如果调用的参数不同,会生成不同的代码,所以会导致代码膨胀
C内联函数会拷贝至调用的位置,如果调用多次回导致代码膨胀
d选项,递归不会导致体积膨胀,但是大量递归会导致栈区溢出



总结

以上是生活随笔为你收集整理的部分真题整理5的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。