面试汇总
一、tomcat的优化--jvm的内存工作原理
Java性能优化的原则:代码的运算性能和内存回收、应用配置。
代码层优化:避免多循环嵌套、调用和复杂逻辑
tomcat的调优的主要内容如下:
增加最大连接数,调整工作模式,启用gzip压缩,调整jvm内存大小,作为web服务器时,与apache整合或nginx,合理选择垃圾回收算法,尽量是由较新jdk版本
生产配置实例:
<Connectorport="8080"protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="1000" minSpareThreads="100" maxSpareThreads="200" acceptCount="900" disableUploadTimeout="true" connectionTimeout="20000" URIEncoding="UTF-8" enableLookups="false" redirectPort="8443" compression="on" compressionMinSize="1024" compressableMimeType="text/html,text/xml,text/css,text/javascript"/>
参数说明:
org.apache.coyote.http11.Http11NioProtocol //调整工作模式为Nio
maxThreads //最大线程数,默认为150,增大值避免队列请求过多,导致响应缓慢
minSpareThreads //最小空闲线程数
maxSpareThreads //最大空闲线程数,如果超过这个值,会关闭无用的线程
acceptCount //当处理请求超过此值时,将后来请求放到队列中等待。
disableUploadTimeout //禁用上传时间超时
connectionTimeout //连接超时,单位毫秒,0代表表不限制
URIEncoding //url地址编码使用utf-8
enableLookups //关闭dns解析,提高响应时间
compression //启用压缩功能
compressionMinSize //最小压缩大小,单位Byte
compressableMimType //压缩的文件类型
tomcat有三种工作模式:Bio、Nio和Apr,他们的工作原理是:
Bio(Blocking I/O):默认工作模式,阻塞式I/O操作,没有任何优化技术处理,性能比较低
Nio(New I/O Non-Blocking):非阻塞式I/O操作,有Bio有更好的并发处理性能
Apr(Apache Portable Runtime,Apaxhe可移植运行库):首选工作模式,主要为上层的应用程序提供一个可以跨越多操作系统平台使用的底层支持接口库。
tomcat利用基于Apr库tomcat-native来实现操作系统级别控制,提供一种优化技术和非阻塞式I/O操作,大大提高并发处理能力。但是需要安装apr和tomcat-native库。
二、进程和线程的关系
进程和线程的主要差别在于他们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩了之后,在保护模式下不会对戏他进程产生影响,而线程只是一个进程中不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
简单的来说,一个程序至少有一个进程,一个进程至少有一个线程。
线程的划分度小于进程,使得多线程程序的并发性高
另外,进程在执行的过程中拥有独立的内存单园,而多个线程共享内存,从而极大地提高了程序的运行效率。
线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中。由应用程序提供多个线程执行控制。
从逻辑角度来开,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行,但操作系统并没有将多个线程看作多个独立的应用,来实现进程的调度和管理以及资源的分配。这就是进程和线程的重要区别。
三、僵尸进程和孤儿进程
四、.查看目录下5天前的文件--find
五、top--load average: 0.00, 0.06, 0.07
六、磁盘空间使用--df
七、查看目录--du
八、端口占用--ss、netstat、lsof
九、软链接和硬链接的区别--ln
十、反引号、单引号、双引号的区别
十一、tcp和udp协议区别
tcp和udp的一个最大的区别所在tcp协议更可靠一些,upd的协议不是很可靠