[单选题]
下列不属于网络层协议的是?
- TCP
- IP
- IPX
- ICMP
【
答案】A
【
解析】
TCP 属于传输层协议
ICMP是
TCP/IP协议
族的一个子协议,属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP
路由器
无法按当前的传输速率转发
数据包
等情况时,会自动发送ICMP消息。ICMP报文在IP帧结构的首部协议类型字段(Protocol 8bit)的值=1.
[不定项选择题]
对于根元素为最小值的二叉堆,下面说法正确的是
- 删除最小元素的复杂度是o(lgn)
- 插入新元素的复杂度是o(1)
- 合并两个堆的复杂度是o(lgn)
- 查询最小元素的复杂度是o(1)
【答案】ACD
【解析】
关于A选项,删除最小元素之后不需要继续调整堆使其保持堆的性质吗?调整堆的O(lg n)的时间复杂度也得算在删除操作里面吧
根元素为最小值的二叉堆:
插入节点时间复杂度为O(log n)
删除节点时间复杂度为O(log n)
查询最小元素的复杂度是o(1)
合并两个堆的复杂度是o(lgn)
[单选题]
以下是java concurrent包下的4个类,选出差别最大的一个
- Semaphore
- ReentrantLock
- Future
- CountDownLatch
【答案】C
【解析】
A、Semaphore:类,控制某个资源可被同时访问的个数;
B、 Future:接口,表示异步计算的结果;
C、ReentrantLock:类,具有与使用synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大;
D、 CountDownLatch: 类,可以用来在一个线程中等待多个线程完成任务的类。
A B D是并发编程的锁机制相关,Future是一个线程任务的返回结果的‘欠条’。
1、答案选C。
它是个接口。
别的类都处理线程间的关系,处理并发机制,但该类只用于获取线程结果。
2、Future表示获取一个正在指定的线程的结果。对该线程有取消和判断是否执行完毕等操作。
3、CountDownLatch 是个锁存器,他表示我要占用给定的多少个线程且我优先执行,我执行完之前其他要使用该资源的都要等待。
4、 Semaphore,就像是一个许可证发放者,也想一个数据库连接池。证就这么多,如果池中的证没换回来,其他人就不能用。
5、 ReentrantLock 和 synchronized一样,用于锁定线程。
[不定项选择题]
在mysql中,以下哪种方式可以开启一个事务?
- START TRANSACTION
- START
- BEGIN
- BEIGN TRANSACTION
【答案】AC
【解析】
- BEGIN或START TRANSACTION;显示地开启一个事务;
- COMMIT;也可以使用COMMIT WORK,不过二者是等价的。COMMIT会提交事务,并使已对数据库进行的所有修改称为永久性的;
- ROLLBACK;有可以使用ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;
- SAVEPOINT identifier;SAVEPOINT允许在事务中创建一个保存点,一个事务中可以有多个SAVEPOINT;
- RELEASE SAVEPOINT identifier;删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;
- ROLLBACK TO identifier;把事务回滚到标记点;
- SET TRANSACTION;用来设置事务的隔离级别。InnoDB存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。
[不定项选择题]
下面描述中,正确的是
- 虚函数是没有实现的函数
- 纯虚函数的实现是在派生类中
- 抽象类是没有纯虚函数的类
- 抽象类指针可以指向不同的派生类
【答案】BD
【解析】
用关键字virtual修饰的成员函数叫做虚函数,虚函数是为了实现多态而存在的,必须 有函数体
纯虚函数的声明,是在虚函数声明的结尾加=0,没有函数体。在派生类中没有重新定义虚函数之前是不能调用的
如果一个类中至少含有一个纯虚函数,此时称之为抽象类。所以抽象类一定有纯虚函数
基类类型的指针可以指向任何基类对象或派生类对象
[不定项选择题]
以下有关Http协议的描述中,正确的有?
- post请求一般用于修改服务器上的资源,对发送的消息数据量没有限制,通过表单方式提交
- HTTP返回码302表示永久重定向,需要重新URI
- 可以通过206返回码实现断点续传
- HTTP1.1实现了持久连接和管线化操作以及主动通知功能,相比http1.0有大福性能提升
【答案】ABD
【分析】
HTTP /302 redirect: 302 代表暂时性转移(Temporarily Moved )。
HTTP/206 “Partial Content”响应是在客户端表明自己只需要目标URL上的部分资源的时候返回的.这种情况经常发生在客户端继续请求一个未完成的下载的时候(通常是当客户端加载一个体积较大的嵌入文件,比如视屏或 PDF文件 ),或者是客户端尝试实现带宽遏流的时候.
HTTP/206 “Partial Content”响应是在客户端表明自己只需要目标URL上的部分资源的时候返回的.这种情况经常发生在客户端继续请求一个未完成的下载的时候(通常是当客户端加载一个体积较大的嵌入文件,比如视屏或 PDF文件 ),或者是客户端尝试实现带宽遏流的时候.
301是永久重定向,302是暂时重定向。
[不定项选择题]
假设系统按单值方式运行且采用最短作业优先算法,有J1,J2,J3,J4共4个作业同时到达,则以下哪几种情况下的平均周转时间为10分钟?
这语句的意图是:调用对象 pA
的 test
成员函数。如果这句话在Java或Python等动态绑定的语言之中,编译器生成的代码大概是:
找到 pA 的 test 成员函数,调用它。(注意,这里的找到是程序运行的时候才找的,这也是所谓动态绑定的含义:运行时才绑定这个函数名与其对应的实际代码。有些地方也称这种机制为迟绑定,晚绑定。)
但是对于C++。为了保证程序的运行时效率,C++的设计者认为凡是编译时能确定的事情,就不要拖到运行时再查找了。所以C++的编译器看到这句话会这么干:
1:查找 pA 的类型,发现它有一个非虚的成员函数叫 test 。(编译器干的)
2:找到了,在这里生成一个函数调用,直接调A:: test ( pA )。
所以到了运行时,由于 test ()函数里面并没有任何需要解引用 pA 指针的代码,所以真实情况下也不会引发segment fault。这里对成员函数的解析,和查找其对应的代码的工作都是在编译阶段完成而非运行时完成的,这就是所谓的静态绑定,也叫早绑定。
正确理解C++的静态绑定可以理解一些特殊情况下C++的行为。
- 执行时间J1:1分钟 J2:5分钟 J3:9分钟 J4:13分钟
- 执行时间J1:1分钟 J2:4分钟 J3:7分钟 J4:10分钟
- 执行时间J1:2分钟 J2:4分钟 J3:6分钟 J4:8分钟
- 执行时间J1:3分钟 J2:6分钟 J3:9分钟 J4:12分钟
【答案】BC
【分析】
首先,短作业优先则短时间的作业利用资源,其余的作业等待
根据平均周转时间概念,将所有作业"等待时间"加上"运行时间"除以"作业数量"即可得到平均周转时间
A: (J1执行1分钟 + J2等待1分钟 + J2执行5分钟 + J3等待6分钟 + J3执行9分钟 + J4等待15分钟 + J4执行13分钟) / 4 = 50/4 = 12.5
B: (J1执行1分钟 + J2等待1分钟 + J2执行4分钟 + J3等待5分钟 + J3执行7分钟 + J4等待12分钟 + J4执行10分钟) / 4 = 40/4 = 10
C: (J1执行2分钟 + J2等待2分钟 + J2执行4分钟 + J3等待6分钟 + J3执行6分钟 + J4等待12分钟 + J4执行8分钟) / 4 = 40/4 = 10
D: (J1执行3分钟 + J2等待3分钟 + J2执行6分钟 + J3等待9分钟 + J3执行9分钟 + J4等待18分钟 + J4执行12分钟) / 4 = 50/4 = 12.5
选BC
20
头文件已经正常包含,以下代码在VS IDE上编译和运行结果是
|
1
2
3
4
5
6
7
8
|
class
A{
public
:
void
test(){
printf
(
"test A"
);}
};
int
main(){
A*pA=NULL;
pA->test();
}
|
正确答案: C 你的答案: B (错误)
【解析】
这道题目应该选C,能够正常运行。
test函数作为非虚函数,在编译时就确定了。即使pA为null,但是已经声明了类型,就知道pA有个test函数,且test函数里没有用到成员变量,单单一个打印语句是可以运行成功的。
自己去vs敲好运行下就知道了。
其实这个是可以正常运行的
原因如下:
因为对于非虚成员函数,C++这门语言是静态绑定的。这也是C++语言和其它语言Java, Python的一个显著区别。以此下面的语句为例:
|
1
|
pA->test();
|
找到 pA 的 test 成员函数,调用它。(注意,这里的找到是程序运行的时候才找的,这也是所谓动态绑定的含义:运行时才绑定这个函数名与其对应的实际代码。有些地方也称这种机制为迟绑定,晚绑定。)
但是对于C++。为了保证程序的运行时效率,C++的设计者认为凡是编译时能确定的事情,就不要拖到运行时再查找了。所以C++的编译器看到这句话会这么干:
1:查找 pA 的类型,发现它有一个非虚的成员函数叫 test 。(编译器干的)
2:找到了,在这里生成一个函数调用,直接调A:: test ( pA )。
所以到了运行时,由于 test ()函数里面并没有任何需要解引用 pA 指针的代码,所以真实情况下也不会引发segment fault。这里对成员函数的解析,和查找其对应的代码的工作都是在编译阶段完成而非运行时完成的,这就是所谓的静态绑定,也叫早绑定。
正确理解C++的静态绑定可以理解一些特殊情况下C++的行为。
本文解答了网络层协议、二叉堆操作复杂度、Java并发类对比、MySQL事务控制、面向对象特性、HTTP协议细节及作业调度算法等多个信息技术问题。

7466

被折叠的 条评论
为什么被折叠?



