java面经查缺补漏之二十四天(调整心态,继续前行)
调整心态,继续前行,不断发现自己的不足。
1.Linux查看端口号的指令?
经常会发现,很多时候我们在运行一些带有端口的程序时,程序经常会报端口被占用的问题,比如Tomcat 8080,端口起不来。
如果发现某个端口被占用后,可以用命令查看,该端口到底是被哪个进程所占用。命令如下:
netstat -pan | grep 5623
#其中5623位端口号
结果出现:
发现5623的端口,被28425的进程id所占用,继续进一步跟踪,到底是哪个程序所占用了。
ps -aux | grep pid 查看,进程程序名称,
2.String StringBuffer 和 StringBuilder 的区别是什么?String 为什么是不可变的?
参考:https://blog.****.net/csxypr/article/details/92378336
这个博客讲的十分清楚
3. hashmap和hashtable的区别?
(1)继承的父类不同。
(2)安全性不同,hashmap是不安全的,hashtable是安全的,通过给方法加的synchronized来实现的安全性,正是因为这一点,使得它的效率比较低,所以就出现了concurrenthashmap。
(3)hashmap允许空,hashtable不允许空。
(4)hashmap有containskey和containsvalue方法,hashtable只有contains方法。
(5)扩容不同,hashmap初始大小16,当超过12的时候就进行扩容,扩大为原来的两倍。hashtable初始大小为11,每次扩容为它的二倍+1.
4.hashmap为什么初始大小是二的倍数,扩容也是二的倍数呢?
参考:https://blog.****.net/apeopl/article/details/88935422
总而言之,hashmap源码的添加和扩容操作存在(n-1)&hash,如果大小为二的倍数,就会出现011111。。。。可以使元素均匀分布在HashMap中的数组上,减少hash碰撞。
5.一次HTTP的完整请求过程?
域名解析(将域名解析为ip地址) --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户
6. 什么是swap分区?
当内存不够用时,我们使用 swap 分区的内存来临时用,不用的时候再还回去。
7. 线程池shutdown和shutdownnow的区别?
void shutdown():不会立即终止线程池,首先将线程池的状态设置成STOP,然后尝试停止所有的正在执行或暂停任务的线程。此时,则不能再往线程池中添加任何新的任务,否则将会抛出RejectedExecutionException异常。但是,此时线程池不会立刻退出,直到添加到线程池中的任务都已经处理完成,才会退出。
List<Runnable> shutdownNow():将线程池的状态设置成SHUTDOWN状态,立即终止线程池,并且尝试打断正在运行的线程,清空缓存队列中的任务,返回尚未开始的任务。
8. mysql 的复制原理以及流程,mysql 支持的复制类型。
1)在Slave 服务器上执行sart slave命令开启主从复制开关,开始进行主从复制。
2)Slave服务器的IO线程请求连接master服务器,并请求从执行binlog日志文件的指定位置之后开始发送binlog日志内容
3)Master服务器接收到请求后,二进制转储IO线程会根据Slave服务器的IO线程请求的信息分批读取指定binlog日志文件指定位置之后的binlog日志信息,然后返回给Slave端的IO线程。
4)当Slave服务器的IO线程获取到Master服务器上IO线程发送的日志内容、日志文件及位置点后,会将binlog日志内容依次写到Slave端自身的Relay Log(即中继日志)文件的最末端。
5)Slave服务器端的SQL线程会实时检测本地Relay Log 中IO线程新增的日志内容,然后及时把Relay LOG 文件中的内容解析成sql语句,并在自身Slave服务器上按解析SQL语句的位置顺序执行应用这样sql语句
支持的复制类型:
基于语句的复制,在Master上执行的SQL语句,在Slave上执行同样的语句。
基于行的复制,把改变的内容复制到Slave,而不是把命令在Slave上执行一遍。
混合类型的复制,默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。