六.TCP的三次握手四次挥手机制?
1. TCP建立连接的过程。
三次握⼿手:
1. 第一次握手(客户端发送syn包到服务器端):客户端发送syn包到服务
器端,进入syn_send状态,等待服务器端的确认;
2. 第二次握手(服务器返回syn+ack包给客户端):服务器端收到客户端
的syn包,发送syn+ack包给客户端,进入syn_recv状态;
3. 第三次握手(客服端返回ack包给服务端):客户端收到服务器端的
syn+ack包,发送个ack包到服务器端,至此,客户端与服务器端进入
established状态;
4. 握手过程中传送的包不包含任何数据,连接建立后才会开始传送数
据,理想状态下,TCP连接一旦建立,在通信双方的任何一方主动关闭
连接前,TCP连接都会一直保持下去。
2. TCP断开连接的过程。
四次挥⼿:
1. 第一次挥手:主动关闭方发送fin包到被动关闭方,告诉被动关闭⽅方我
不不会再给你发送数据了了;
2. 第二次挥手:被动关闭方收到syn包,发送ack给对方,确认序号为收到序号+1;
3. 第三次挥手:被动关闭方也发送fin包给主动关闭方,告诉对方我也不会给你发送数据了;
4. 第四次挥手:主动关闭方收到syn包,发送ack给对⽅,至此,完成四次挥手;
七.Https原理?
HTTPS协议就是基于SSL的HTTP协议
HTTPS使用与HTTP不同的端口(HTTPM80 , HTTPSM443)
提供了身份验证与加密通信方法,被广泛⽤于互联⽹上安全敏感的通信。
1、客户端请求SSL连接,并将自⼰支持的加密规则发给网站。
2、服务器端将自己的身份信息以证书形式发回给客户端。证书里面包含了⽹站地址,加密公钥,以及证书的颁发机构。
3、获得证书后,客户要做以下工作
验证证书合法性
如果证书受信任,客户端会生成一串随机数的密码,并用证书提供的公钥进行加密。
将加密好的随机数发给服务器。
4、获得到客户端发的加密了的随机数之后,服务器用自己的私钥进行解密,得到这个随机数,把这个随机数作为对称加密的密钥。(利⽤⾮对称加密传输对称加密的密钥)
5、之后服务器与客户之间就可以用随机数对各自的信息进行加密,解密。
注意的是:证书是一个公钥,这个公钥是进行加密用的。而私钥是进⾏解密⽤用的。公钥任何都知道,私钥只有⾃⼰知道。这是非对称加密。而对称加密就是钥匙只有一把,我们都知道。之所以用到对称加密,是因为对称加密的速度更快。而⾮对称加密的可靠性更高。
客户端请求--服务端发送证书(公钥)--客户端验证证书,并生成
随机数,通过公钥加密后发送给服务端--服务端用私钥解密出随机数--对称加密传输数据。
八.Redis的数据类型有哪些?与Memcached的区别?
Redis目前⽀持5种数据类型,分别是:
String(字符串)
List(列列表)
Hash(字典)
Set(集合)
Sorted Set(有序集合)
区别
1、memcache支持k/v类型数据;
2、redis除了缓存k/v类型数据之外,还能缓存list、set、hash等数据结构
的数据;
3.redis的持久化,事务,master/salver这些虽然也是redis的优势,但实际应
用中发现这些其实是会托累服务器的性能,而我们全部都不能用.我们得自已做;memcached以上都不管,我们也得自已做;
4.如果需要在服务器端做一些聚合的运算,用redis;如果只是做缓存,redis虽
然可以,但性能很差.在要求高性能的环境下使用memcached更合适;
九.哪些对象会被存放到⽼年代?
1. 新生代对象每次经历一次minor gc,年龄会加1,当达到年龄阈值
(默认为15岁)会直接进入老年代;
2. ⼤对象直接进入老年年代;
3. 新生代复制算法需要一个survivor区进行轮换备份,如果出现大量对象在minor gc后仍然存活的情况时,就需要老年代行分配担保,让survivor无法容纳的对象直接进⼊老年代;
4. 如果在Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入⽼年代。
十. 什么时候触发full gc?
1.调用System.gc时,系统建议执行Full GC,但是不必然执行
2.老年代空间不足
3.方法去空间不足
4.通过Minor GC后进入老年代的平均大⼩大于⽼年代的可用内存
5.由Eden区、From Space区向To Space区复制时,对象大小⼤大于
To Space可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象⼤⼩