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 支持的复制类型

java面经查缺补漏之二十四天(调整心态,继续前行)

 

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上执行一遍。

混合类型的复制,默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。