-
什么是TCP?
TCP:
1.面向连接的、可靠的、基于字节流的传输层的通信协议;
2.将应用层的数据流分割成报文段并发送给目标节点的TCP层。
3.数据包都有序号,对方收到则发送ACK确认,未收到则重传;
4.使用校验和来检验数据在传输过程中是否有误;
标志确定:
1.ACK:确认标志;
2.SYN:同步标志;
3.FIN:结束标志;
4.PSH:推标志;
5.RST:复位标志; -
TCP三次握手过程?
过程:
1.建立连接时,客户端发送SYN包给服务器,并进入SYN_SEND状态,等待服务器确认;
2.服务器收到SYN包,必须确认客户的SYN,同时自己也发送一个SYN+ACK包,此时服务器进入SYN_RECV状态;
3.客户端收到服务器端的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入established状态,完成三次握手;
3. 四次挥手?
1.第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
2.第二次:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1,Server进入CLOSE_WAIT状态;
3.第三次:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态;
4.第四次:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到的序号+1,Server进入Closed状态,完成四次挥手。
-
为什么需要三次握手才能建立连接/四次才能断开连接?
why三次握手?为了初始化Sequence Number(序列号)的初始值,要通知双方数据包的序号,作为以后通讯的序号,以保证在网络传输过程,不会以为网络原因而导致乱序;
why四次挥手:因为全双工,发送方和接收方都需要FIN报文和ACK报文。 -
HTTP和HTTPS的请求过程?
HTTP:
1.tcp建立连接后,客户端会发送报文给服务端;
2.服务端接收报文并作出响应;
3.客户端收到响应后解析给用户;
HTTPS:
1.客户端发送请求到服务端;
2.服务器返回证书和公钥;
3.客户端验证证书和公钥的有效性,如有效,则生成对称密钥并使用公钥加密发送到服务端;
4.服务端使用私钥解密报文,并使用收到的对称密钥加密报文,发送到客户端;
5.客户端使用对称密钥解密报文;
6.SSL加密建立。 -
创建线程的方式?
1.通过继承Thread类创建线程。
2.通过实现Runnable接口创建线程。
3.通过实现callable接口创建线程。
4.使用Executor框架来创建线程池。 -
常用的JVM调优的参数?
XX比X的稳定性更差,并且版本更新不会进行通知和说明。
-Xms: S为starting,表示堆内存起始大小;
-Xmx:x为max,表示最大堆内存,(一般xms与xmx设置相同大小,因为heap自动扩容时,会发生内存抖动,影响程序稳定性)
-Xmn:n为new,表示新生代大小;
-Xss:规定了每个线程虚拟机栈(堆栈)的大小;
-XX:SurvivorRator=8 表示堆内存中新生代、老年代、永久代的比为8:1:1;
-XX:PretenureSizeThreshold=3145728表示当创建(new)的对象大于3M的时候直接进入;
-XX:MaxTenuringThreshold=15表示当对象的存活的年龄(minor gc 一次加1)大于多少时,进入老年代。
-XX:-DisableExplicirGC表示是否(+表示是,-表示否)打开GC日志