Java面试题及答案(六)

Java面试题及答案(六)

目录

目录

Java面试题及答案(六)

目录

    51.Linux 系统下你关注过哪些内核参数,说说你知道的。

    52.Linux 下 IO 模型有几种,各自的含义是什么

    53.epoll 和 poll 有什么区别。

    54.平时用到哪些 Linux 命令。

    55.用一行命令查看文件的最后五行。

    56.用一行命令输出正在运行的 java 进程。

    57.介绍下你理解的操作系统中线程切换过程。

    58.进程和线程的区别。

    59.多线程的几种实现方式,什么是线程安全。

    60.volatile 的原理,作用,能代替锁么。

 


操作系统
    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ÿ

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值