1、同一个进程的不同线程,以下不能被共享的是? (C
)
A.全局变量
B.堆
C.栈
D.文件句柄
解析:jvm的内存结构,主要是5部分(注意是jvm内存结构、java内存模型)
线程共享:
1、方法区:存放常量、静态变量、全局变量、每个类的信息(包括类的名称、方法信息、字段信息)、编译器编译后的代码等
2、堆:java程序最主要的内存工作区域。几乎所有的java对象实例都存放在java堆中。
线程私有:
1、java栈:保存着局部变量、方法参数
2、本地方法栈
3、程序计数器
2、分页存储管理将进程的逻辑地址空间分成若干个页,并为各页加以编号,从0开始,若某一计算机主存按字节编址,逻辑地址和物理地址都是32位,页表项大小为4字节,若使用一级页表的分页存储管理方式,逻辑地址结构为页号(20位),页内偏移量(12位),则页的大小是( 4KB
)?页表最大占用( 4MB
)?
解析:
地址长度为32位,其中0~11位为页内地址(即页内偏移量),2^12 即每页大小为4KB;
同样地,12~31位为页号,地址空间最多允许有2^20 = 1M页,又页表项4字节, 所以页表最大占用 1M * 4 = 4MB
拓展点****:
逻辑地址结构:
物理地址把页号改成块号,页内偏移量改成块内偏移量
逻辑地址=页号×页的大小+页内偏移量
物理地址=块号×块的大小+块内偏移量
页的大小=2^(页内偏移量的位数)
页数=2^(页号的位数)
页表结构(数据只是举例)作为逻辑地址到物理地址的映射关系:
一个页号对应一个块号,对应一个页表项
3、JVM将堆分成了两个大区:新生代(Young)和老年代(Old),新生代又被进一步划分为Eden和Survivor区,其中Young区划分为Eden、Survivor1、Survivor2这三块,请问JVM的hotspot虚拟机三块默认分配的比例各是多少(8:1:1
)
解析:新生代(Young)和老年代(Old)1:2
Young区划分为Eden、SurvivorFrom、SurvivorTo 8:1:1
4、以下哪一个描述是正确的?
void waitForSignal() {
Object obj = new Object();
synchronized (Thread.currentThread()) {
obj.wait();
obj.notify();
}
}
A.需要处理InterruptedException。
B.代码能编译但可能运行时抛出IllegalStateExcepion。
C.运行10分钟后代码抛出TimeOutException。
D.需要把obj.wait()替换为((Thread) obj).wait()后代码才能通过编译。
E.把obj.wait()和obj.notify()这两句调换一下位置,能使代码执行。
解析:抛InterruptedException的方法有:
java.lang.Object 类的 wait 方法
java.lang.Thread 类的 sleep 方法
java.lang.Thread 类的 join 方法
5、以下哪种方法可以用来清理僵尸进程(C
)
A.向僵尸进程发送SIGKILL信号
B.向init进程发送SIGKILL信号
C.向僵尸进程的父进程发送SIGKILL信号
D.向僵尸进程发送SIGCHILD信号
解析:清理僵尸线程:把父进程杀掉,父进程死后,僵尸进程称为“孤儿进程”,过继给1号进程init,init始终负责清理僵尸进程,它产生的所有僵尸进程跟着消失.
参考:https://blog.csdn.net/weixin_46055693/article/details/123895719?spm=1001.2014.3001.5502
6、下列不属于线程状态的是(ESTABLISHED
)
解析:
线程的6中状态:①new:初始状态;②running/runnable:运行状态;③blocked:阻塞状态;④waiting:等待状态;⑤time_waiting:具有指定等待时间的等待;⑥terminated:终止状态
参考https://blog.csdn.net/worshipme/article/details/106460855
另:线程生命周期:新建,就绪,运行,阻塞以及死亡。
7、下面关于死锁的说法错误的是(D
)
A.死锁是指多个进程因抢占资源而发生的一种阻塞且相互等待的现象
B.死锁的产生源于系统资源不足和进程推进顺序不当
C.可以通过终止和撤销进程来解除死锁s
D.银行家算法用在预防死锁策略中
解析:银行家算法是避免死锁
8、若一进程有10个用户线程,则在系统调度执行时间上占用的时间片是(A
)
A.1
B.0
C.42014
D.10
解析:系统调用时间片是进程的个数。进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。同一个进程下的线程共享进程资源
由于用户线程不依赖于操作系统内核,因此,操作系统内核是不知道用户线程的存在的,用户线程是由用户来管理和调度的,用户利用线程库提供的API来创建、同步、调度和管理线程。所以,用户线程的调度在用户程序内部进行,通常采用非抢先式和更简单的规则,也无须用户态和核心态切换,所以速度很快。
由于操作系统不知道用户线程的存在,所以,操作系统把CPU的时间片分配给用户进程,再由用户进程的管理器将时间分配给用户线程。那么,用户进程能得到的时间片即为所有用户线程共享。
9、试写出JVM happens-before原则。
解析:参考https://blog.csdn.net/weixin_46055693/article/details/119183698?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164940219916782089368555%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=164940219916782089368555&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_ecpm_v1~rank_v31_ecpm-1-119183698.nonecase&utm_term=happens-before&spm=1018.2226.3001.4450
10、对一个文件的访问,常由(A)共同限制
A.用户访问权限和文件属性
B.用户访问权限和文件优先级
C.优先级和文件属性
D.文件属性和口令
解析:访问控制主要是由用户访问权限+文件属性决定。我们对文件附加rwx权限,这是改变文件的属性。这个行为是对特定用户或组进行,因此二者是紧密结合的:即用户获得权限,且把权限写到文件属性。
11、下面说法正确的是?(A
)
A.epoll ET模式必须配合non-blocking IO使用
B.epoll LT模式必须配合non-blocking IO使用
C.epoll ET可以配合blocking IO使用
解析:epoll的两种模式:LT和ET模式
1、LT模式(默认模式):epoll_wait函数检测到事件,通知应用程序处理,应用程序可以不处理该事件。支持block与non-block。
2、ET模式:epoll_wait函数检测到事件,通知应用程序处理,应用程序需要马上处理事件。支持non-block。
12、下面哪一个命令可以关机,而不重启?(CD
)
A.reboot
B.shutdown -r
C.halt
D.netstat
解析:
reboot:重启计算机
shutdown
shutdown -h now 立即关机
shutdown -h 10 10分钟后关机
shutdown -r now 重启计算机
13、下列属于Linux开机启动过程的是?(ABCD
)
A.运行第一个进程init(进程号永远为1)
B.读取MBR的引导文件(grub,lilo)
C.引导linux内核
D.进入相应的运行级别
14、下列关于inode说法正确的是?(AB
)
A.每一个文件都有对应的inode,里面包含了与该文件有关的一些信息
B.特殊文件(比如乱码文件名)可以通过inode的方式删除
C.inode节点是一个128字节长度的表
D.通过inode只能文件读取节点号,获取不到文件相关信息
解析:
1、inode定义
inode存储文件元信息的区域(包含元信息,但不包含文件名);block存储文件内容的区域。一个文件必须占用一个inode,但至少占用一个block。
2、inode号码(打开文件流程)
(1)找到文件名对应的inode号码;
(2)通过inode号码,获取inode信息;
(3)根据inode信息,找到文件数据所在的block,并读出数据。
3、inode大小
每个inode的大小,一般是128字节或256字节。
4、特有现象
(1)文件名包含特殊字符,直接删除inode,能够起到删除文件的作用;
find ./* -inum 节点号 -delete
(2)移动文件或重命名文件,只是改变文件名,不影响inode号码;
(3)打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。
15、关于bash中以下符号的说明哪些是正确的(ABC
)
A.$0代表脚本的名称
B.$@代表所有位置参数
C.$# 代表位置参数的数量
D.$11代表第11个位置参数的值
解析:参考https://blog.csdn.net/weixin_46055693/article/details/124555866
16、下列有关守护线程描述正确的有(ABCD
)
A.任何一个非守护线程没有结束,守护线程就全部工作
B.当最后一个非守护线程结束时,守护线程随着JVM一同结束工作
C.GC是守护线程
D.守护线程产生的新线程也是守护线程
17、以下说法正确的是:(ABCDE
)
A.在并行程度中,当两个并行的线程,在没有任何约束的情况下,访问一个共享变量或者共享对象的一个域,而且至少要有一个操作是写操作,就可能发生数据竞争错误。
B.原语Compare-and-swap(CAS)是实现无锁数据结构的通用原语。
C.获得内部锁的唯一途径是:进入这个内部锁保护的同步块或方法。
D.volatile变量具有synchronized的可见性特性,但是不具备原子特性。
E.减小竞争发生可能性的有效方式是尽可能缩短把持锁的时间
解析:A: 来自Thinking in java:如果你正在写一个变量,它可能接下在将被另一个线程读取,或者正在读取上一个已经被另一个线程写过的变量,那么你必须应用同步,并且,读写线程都必须用相同的监视器锁同步。–由此可以想到,如果多个线程都只读数据,则不会造成竞争错误,因为不会出现读脏数据或者数据不同步问题。
B. 无锁化编程常用方式之一
C. 当线程企图访问临界资源时,先会查看该临界资源当前是否已被加锁,如果没有被加锁,则对该临界资源加锁,并进入该同步块或方法,加锁后,其他线程也就无法访问该临界资源了。所以判定获取了一个内部锁的标准为:进入该同步区域
D. 保证可见性,调用volatile变量时,使用前都会刷新该变量,保证变量的值为最新的。不保证互斥性,所以不具备原子特性
E. 把持锁的时间短了,等待锁的时间也就短了,竞争可能性变小
18、以下关于进程、线程、协程的的说法错误的是(C
)
A.协程是用户态,进程是内核态
B.进程需要占用系统资源(内存,CPU)。进程是最小的系统资源分配单位,给线程提供执行环境。
C.一个线程中可以有任意多个协程,一个线程同一时刻可以有多个协程在运行,多个协程分享该线程分配到的计算机资源。
D.同一进程中的多个线程有各自的调用栈,寄存器环境和线程本地存储。
解析:
A正确 协程不是被操作系统内核所管理的,而是完全由程序所控制,也就是在用户态执行,所以A正确。这样带来的好处是性能大幅度的提升,因为不会像线程切换那样消耗资源。而线程既不是用户态也不是内核态而是介于两者之间的。
协程是一种用户态的轻量级线程,协程的调度完全由用户控制。从技术的角度来说,“协程就是你可以暂停执行的函数”。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。
B正确 操作系统进行资源管理的最小单位是进程,操作系统的最小调度单位是线程,进程给线程提供执行环境。
C错误 协程不是进程也不是线程,而是一个特殊的函数,这个函数可以在某个地方挂起,并且可以重新在挂起处继续运行。一个线程可以有任意多个协程,但某一时刻只能有一个协程在运行,多个协程分享该线程分配到的计算机资源。
D正确 一个进程中可以有多个线程,而线程独有的资源有栈和寄存器和线程局部存储Thread Local Storage(简称TLS),其实就是个线程私有的全局变量。