Java面试题及答案(六)
目录
目录
51.Linux 系统下你关注过哪些内核参数,说说你知道的。
操作系统
51.Linux 系统下你关注过哪些内核参数,说说你知道的。
52.Linux 下 IO 模型有几种,各自的含义是什么
1.同步阻塞IO模型
流程:线程发起IO系统调用后会被被阻塞,转到内核空间处理,整个IO处理完毕后返回数据。
优缺点:一般需要给每个IO请求分配一个IO线程,因此系统开销大。
典型应用:阻塞socket、Java BIO;
2.同步非阻塞IO模型
流程:线程不断轮询读取内核IO设备缓冲区,如果没数据则立即返回EWOULDBLOCK,有则返回数据。
优缺点:CPU消耗多,无效IO多。
典型应用:非阻塞socket(设置为NONBLOCK)
3.同步IO复用模型
流程:线程调用select/poll/epoll传入多个设备fd,然后阻塞或者轮询等待。如果有IO设备准备好则返回可读条件,用户主动调IO读写,如果没有则继续阻塞。
优缺点:相比前两种模型,IO复用可以监听多个IO设备,所以一个线程内可以处理多个网络请求。
典型应用:select、poll、epoll。nginx以及Java NIO基于此IO模型。
4.异步信号驱动IO模型
流程:利用linux信号机制,用sigaction函数将SIGIO读写信号以及handler回调函数存在内核队列中。当设备IO缓冲区可写或可读时触发SIGIO中断,返回设备fd并回调handler。
优缺点:这种异步回调方式避免用户或内核主动轮询设备造成的资源浪费,但是此方式会存在问题,首先handler是在中断环境下运行,多线程不稳定而且要考虑信号的平台兼容性,其次是SIGIO信号被POSIX定义为standard signals不会进入队列,所以同时存在多个SIGIO会只触发第一个SIGIO。
5.异步IO模型
流程:用户传入设备fd跟数据结构体,内核等设备缓冲区准备好后进行数据读写,最后通知用户完成。因为历史原因,linux aio有两种主流实现。
53.epoll 和 poll 有什么区别。
select的本质是采用32个整数的32位,即32*32= 1024来标识,fd值为1-1024。当fd的值超过1024限制时,就必须修改FD_SETSIZE的大小。这个时候就可以标识32*max值范围的fd。
对于单进程多线程,每个线程处理多个fd的情况,select是不适合的。
1.所有的线程均是从1-32*max进行扫描,每个线程处理的均是一段fd值,这样做有点浪费
2.1024上限问题,一个处理多个用户的进程,fd值远远大于1024
所以这个时候应该采用poll,
poll传递的是数组头指针和该数组的长度,只要数组的长度不是很长,性能还是很不错的,因为poll一次在内核中申请4K(一个页的大小来存放fd),尽量控制在4K以内
epoll还是poll的一种优化,返回后不需要对所有的fd进行遍历,在内核中维持了fd的列表。select和poll是将这个内核列表维持在用户态,然后传递到内核中。但是只有在2.6的内核才支持。
epoll更适合于处理大量的fd ,且活跃fd不是很多的情况,毕竟fd较多还是一个串行的操作
54.平时用到哪些 Linux 命令。
55.用一行命令查看文件的最后五行。
Tail -n 5 filename
56.用一行命令输出正在运行的 java 进程。
ps -ef|grep Java
57.介绍下你理解的操作系统中线程切换过程。
控制权的转换,根据优先级切换上下文(用户,寄存器,系统)
http://www.cnblogs.com/kkshaq/p/4544426.html
58.进程和线程的区别。
1、因为进程拥有独立的堆栈空间和数据段,所以每当启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这对于多进程来说十分“奢侈”,系统开销比较大,而线程不一样,线程拥有独立的堆栈空间,但是共享数据段,它们彼此之间使用相同的地址空间,共享大部分数据,比进程更节俭,开销比较小,切换速度也比进程快,效率高,但是正由于进程之间独立的特点,使得进程安全性比较高,也因为进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。一个线程死掉就等于整个进程死掉。
2、体现在通信机制上面,正因为进程之间互不干扰,相互独立,进程的通信机制****相对很复杂,譬如管道,信号,消息队列,共享内存,套接字等通信机制,而线程由于共享数据段所以通信机制很方便。
3、体现在CPU系统上面,线程使得CPU系统更加有效,因为操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。
4、体现在程序结构上,举一个简明易懂的列子:当我们使用进程的时候,我们不自主的使用if else嵌套来判断pidÿ