1. 关于java的异常处理机制,以下说法正确的是:
A. 当某个线程抛出OutOfMemoryError时,其他线程有可能不受影响
B. 当大量抛出RuntimeException时,不会影响系统的吞吐量
C. java.lang.Exception是java.lang.Error的父类
D. finally块代码一定会被执行
A. 只有抛出 OOM 的线程会结束,不会影响其他线程
B. 大量异常的抛出必然会导致系统吞吐量的大小
C. Exception 和 Error 都继承自 Throwable
D. try 中如果存在 System.exit(0),则不会执行 finally 代码块里面的内容
2. 函数a定义如下:
int a(int tab){
int n=tab-1;
n |= n >> 1;
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
return n;
}
调用函数a(666)返回的结果是:
A. 666
B. 512
C. 1023
D. 511
665的二进制数为:1010001111
n >> 1 — 0101000111 右移一位
n |= n >> 1 — 1010001111 | 0101000111 同0才为0,其他情况都为1,即 n |= n >> 1 等于 1111001111
n >> 2 — 0011110011 右移两位
n |= n >> 2 — 1111001111 | 0011110011 = 1111111111,此时已经全为1了,后续结果不变即最后结果为1023
3. 关于mysql,下面说法不正确的是:
A. mysql中的“utf8”类型最大只支持3个bytes
B. desc关键字可以作为table的字段名
C. filesort是通过读取磁盘文件进行排序,会极大降低查询性能
D. smallint占用2个bytes的存储空间
A. utf8不是真正的utf-8,它占3bytes ,utf8mb4才是真正的utf-8,它占4 bytes
B. 关键字可以作为字段名,但是在hibernate 和 Mybatis 框架中会出现查询出错
C. 文件排序是通过相应的排序算法,将取得的数据在内存中进行排序。文件排序分为双路排序和单路排序,双路会执行两次磁盘 io,单路会执行一次磁盘 io。大量使用 filesort 会降低系统性能
D. smallint 2byte,int 4byte
4. 在几进制下,123*234=28560是成立的?
A. 6
B. 10
C. 12
D. 14
5. 查找表结构用以下哪一项( )
A. FIND
B. SELETE
C. ALTER
D. DESC
6. 如何强制垃圾回收器立即回收一个对象?
A. 调用System.gc()方法
B. 调用Runtime.gc()方法
C. 将对象赋值null
D. 无法强制垃圾回收器立即执行
A.B — 调用 System.gc() 或 Runtime.gc() 只能通知 JVM 进行垃圾回收,不能强制回收。
C — JVM对于对象是否立即回收存在两次筛选,第一次在当前对象没有其他引用时(例如给对象赋值 null),第二次会判断 JVM 是否调用过 finalize 方法或者对象是否重写过 finalize 方法。如果在重写的 finalize 方法中重新给对象添加引用,就可以完成逃逸,不被立即回收。
7. 关于sleep()和wait(),以下描述错误的一项是( )
A. sleep是线程类(Thread)的方法,wait是Object类的方法;
B. sleep不释放对象锁,wait放弃对象锁;
C. sleep暂停线程、但监控状态仍然保持,结束后会自动恢复;
D. wait后进入等待锁定池,只有针对此对象发出notify方法后获得对象锁进入运行状态。
如果线程调用了对象的 wait()方法,那么线程便会处于该对象的等待池中,等待池中的线程不会去竞争该对象的锁。 当有线程调用了对象的 notifyAll()方法(唤醒所有 wait 线程)或 notify()方法(只随机唤醒一个 wait 线程),被唤醒的的线程便会进入该对象的锁池中,锁池中的线程会去竞争该对象锁。 优先级高的线程竞争到对象锁的概率大,假若某线程没有竞争到该对象锁,它还会留在锁池中,唯有线程再次调用 wait()方法,它才会重新回到等待池中。而竞争到对象锁的线程则继续往下执行,直到执行完了 synchronized 代码块,它会释放掉该对象锁,这时锁池中的线程会继续竞争该对象锁。
8. 下列协议中,将MAC地址转为IP地址的协议是
A. ARP
B. RARP
C. ARQ
D. ICMP
A. IP地址转MAC地址是 ARP
C. ARQ — 自动重传请求(Automatic Repeat-reQuest,ARQ)是OSI模型中数据链路层的错误纠正协议之一。它包括停止等待ARQ协议和连续ARQ协议,错误侦测(Error Detection)、正面确认(Positive Acknowledgment)、逾时重传(Retransmission after Timeout)与负面确认继以重传(Negative Acknowledgment and Retransmission)等机制。
D. ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
9. 从通信协议的角度来看,路由器是在哪个层次上实现网络互连的?
A. 物理层
B. 链路层
C. 网络层
D. 传输层
集线器:物理层
交换机:链路层
路由器:网络层
10. 在TCP/IP体系结构中,直接为ICMP提供服务的协议是___。
A. PPP
B. IP
C. UDP
D. TCP
ICMP使用IP的基本支持,就像它是一个更高级别的协议,但是,ICMP实际上是IP的一个组成部分,必须由每个IP模块实现。
11. 下列关于进程和线程的叙述中,正确的是______。
A. 不管系统是否支持线程,进程都是资源分配的基本单位
B. 线程是资源分配的基本单位,进程是调度的基本单位
C. 系统级线程和用户级线程的切换都需要内核的支持
D. 同一进程中的各个线程拥有各自不同的地址空间
C. 进程的切换需要内核支持,线程的切换不需要
D. 一个进程中的所有线程共享该进程的地址空间、堆。
扩展:线程私有的部分
- 线程ID — 每个线程都有自己的线程ID,这个ID在本进程中是唯一的。进程用此来标识线程。
- 寄存器组的值 — 由于线程间是并发运行的,每个线程有自己不同的运行线索,当从一个线程切换到另一个线程上时,必须将原有的线程的寄存器集合的状态保存,以便 将来该线程在被重新切换到时能得以恢复。
- 线程的堆栈 — 堆栈是保证线程独立运行所必须的。线程函数可以调用函数,而被调用函数中又是可以层层嵌套的,所以线程必须拥有自己的函数堆栈,使得函数调用可以正常执行,不受其他线程的影响。
- 错误返回码 — 由于同一个进程中有很多个线程在同时运行,可能某个线程进行系统调用后设置了errno 值,而在该线程还没有处理这个错误,另外一个线程就在此时被调度器投入运行,这样错误值就有可能被修改。 所以,不同的线程应该拥有自己的错误返回码变量。
- 线程的信号屏蔽码 — 由于每个线程所感兴趣的信号不同,所以线程的信号屏蔽码应该由线程自己管理。但所有的线程都共享同样的信号处理器。
- 线程的优先级 — 由于线程需要像进程那样能够被调度,那么就必须要有可供调度使用的参数,这个参数就是线程的优先级。 涉及多线程程序涉及的时候经常会出现一些令人难以思议的事情,用堆和栈分配一个变量可能在以后的执行中产生意想不到的结果,而这个结果的表现就是内存的非法被访问,导致内存的内容被更改。理解这个现象的两个基本概念是:在一个进程的线程共享堆区,而进程中的线程各自维持自己堆栈。
12. 若某单处理器多进程系统中有多个就绪态进程,则下列关于处理机调度的叙述中,错误的是_____。
A. 在进程结束时能进行处理机调度
B. 创建新进程后能进行处理机调度
C. 在进程处于临界区时不能进行处理机调度
D. 在系统调用完成并返回用户态时能进行处理机调
在进程处于临界区时并不影响处理机调度中的高级调度和中级调度。
13. 关于TCP协议的描述,以下错误的是?
A. 面向连接
B. 可提供多播服务
C. 可靠交付
D. 报文头部长,传输开销大
TCP与UDP的区别:
1.基于连接与无连接;
2.对系统资源的要求(TCP较多,UDP少);
3.UDP程序结构较简单;
4.流模式与数据报模式 ;
5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
6.广播和多播仅应用于UDP
14. 元素 a,b,c,d,e 依次进入初始为空的栈中,若元素进栈后可停留、可出栈,直到所有元素都出栈,则在所有可能的出栈序列中,以元素 d 开头的序列个数是
A. 3
B. 4
C. 5
D. 6
① decba
② dceba
③ dcbea
④ dcbae
15. 有关C++程序运行时的函数地址,下列说法正确的是
A. 每个函数的地址都是固定的,同一个程序重复运行多次,每次函数地址都一样
B. 每个函数的地址是不固定的,但在操作系统版本、硬件版本不变的情况下是固定的,同一个程序重复在相同软硬件环境下运行多次,每次函数地址都一样
C. 地址是否固定要看系统配置和编译选项,如果开启了地址随机化,那地址是每次都变的,如果没开启,那么地址每次都一样。
D. 每个函数的地址都是不定的,同一个程序重复运行多次,每次地址都不同
数据区(全局变量、常量、静态变量),代码区每次运行时在内存中地址由链接选项决定。
如果选择固定基址,则每次运行时函数地址固定。但是堆和栈会不一样。
如果开启随机基址。随机基址可以提高程序安全性,保护关键代码数据地址,提高黑客入侵难度。
16. 下列有关于关键字“堆”的描述中,错误的是
A. 堆是优先级队列的底层实现形式,有N个元素的优先级队列进行一次结构调整的时间复杂度为logN
B. 堆内存是一种动态分配的内存,其实际占用内存空间的大小随着程序的运行可以动态调整
C. 堆栈是一种线性数据结构,其特点是先进后出
D. 在C语言中,堆内存是线程隔离的,不同线程访问的是各自的堆空间,无法互相访问
线程通信依靠堆的共享
17. 关于TCP协议状态描述正确的是
A. 只有执行主动关闭端才会出现TIME_WAIT
B. 当接受到FIN报文时,会进入CLOSING状态
C. 数据传输完成后发送FIN报文后进入TIME_WAIT状态
D. client和server端最终都会经历TIME_WAIT状态
四次挥手
- 当主机A完成数据传输后,将控制位FIN置1(FIN_Wait1),提出停止TCP连接的请求,发送FIN给主机B
- 主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1,发送ACK给主机A,进入 close_wait 状态
- 由B端再提出反方向的关闭请求,将FIN置1 (FIN_wait2),发送FIN给主机A,进入 last_ack 状态。主机A接收到进入 time_wait 状态
- 主机A对主机B的请求进行确认,将ACK置1,发送ACK给主机B,有2MSL的等待时间,保证连接的关闭,主机A进入close状态,主机B接收到进入close状态。双方向的关闭结束.
三次握手
18. 关于epoll和select的区别,哪个说法是错误的?
A. epoll和select都是I/O多路复用的技术,都可以实现同时监听多个I/O事件的状态。
B. epoll相比select效率更高,主要是基于其操作系统支持的I/O事件通知机制,而select是基于轮询机制。
C. epoll支持水平触发(LT)和边沿触发(ET)两种模式。
D. select能并行支持I/O比较小,且无法修改。
select默认的句柄数量为1024,但可通过修改宏定义或编译内核修改句柄数量
19. 给定一个整型数组L,数组长度为n,数组元素取值范围[1,n],(n>2000),请问最快速找出一个缺失值的时间复杂度是多少?
A. O(log(n))
B. O(n)
C. O(n*log(n))
D. O(n^2)
数组无序,需要全部遍历一遍
20. 已知一个线性表(38,25,74,63,52,48),假定采用散列函数h(key) = key%7计算散列地址,并散列存储在散列表A【0…6】中,若采用线性探测方法解决冲突,则在该散列表上进行等概率成功查找的平均查找长度为
A. 1.5
B. 1.7
C. 2.0
D. 2.3
平均查找长度=总的查找次数/元素数
总的查找次数: 38%7=3 (第1次出现3,无冲突,放在位置3,查找次数为1)
25%7=4(第1次出现4,无冲突,放在位置4,查找次数为1)
74%7=4(第2次出现4,有冲突,放在位置5,查找次数为2)
63%7=0(第1次出现0,无冲突,放在位置0,查找次数为1)
52%7=3(第2次出现3,有冲突,发现冲突3,4,5,故只能放到6,查找次数为4)
48%7=6 (第1次出现6,有冲突,发现冲突6,0,故只能放到1,查找次数为3)
1+1+2+1+4+3=12
元素数=6
所以:平均查找长度=12/6=2