java 知识点突击-(141-150)

Posted 栗子~~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 知识点突击-(141-150)相关的知识,希望对你有一定的参考价值。

前言

  如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
  而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


java 知识点扫盲目录

https://blog.csdn.net/weixin_38316697/article/details/121991582

java 知识点突击-(141-150)

141 jwt的优缺点?

优点:
1、无状态;
token 自身包含了身份验证所需要的所有信息,使得我们的服务器不需要存储 Session 信息,这显然增加了系统的可用性和伸缩性,大大减轻了服务端的压力。

2、有效避免了CSRF 攻击(跨站请求伪造);
导致这个问题很大的原因就是: Session 认证中 Cookie 中的 session_id 是由浏览器发送到服务端的,借助这个特性,攻击者就可以通过让用户误点攻击链接,达到攻击效果。
3、适合移动端应用
因为只要 token 可以被客户端存储就能够使用,而且 token 还可以跨语言使用。
4、单点登录友好
使用 Session 进行身份认证的话,实现单点登录,需要我们把用户的 Session 信息保存在一台电脑上,并且还会遇到常见的 Cookie 跨域的问题。但是,使用 token 进行认证的话, token 被保存在客户端,不会存在这些问题。

缺点:
1、因为无状态,相要立即废除一个token或者更改权限,不会立即生效,一般需要等到有效期过后才可以,当然这个也可以通过设计解决。
2、注销登录等场景下 token 还有效
3、token 的续签问题


142 Get 和 Post 请求有哪些区别? Get 和 Post 请求有哪些区别?

  • GET在浏览器回退时是无害的,而POST会再次提交请求。
  • GET产生的URL地址可以被Bookmark,而POST不可以。
  • GET请求会被浏览器主动cache,而POST不会,除非手动设置。
  • GET请求只能进行url编码,而POST支持多种编码方式。
  • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
  • GET请求在URL中传送的参数是有长度限制的,而POST没有。
  • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
  • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
  • GET参数通过URL传递,POST放在Request body中。

143 开放式系统互联模型(网络的七层架构)?

概述:

序列层级名称举例用处单位协议
1物理层网线的接口类型、光纤的接口类型由 1、0 转化为【电流强弱】来进行传输,到达目的地后在转化为 1、0比特流V.35、EIA/TIA-232
2数据链路层交换机,网桥、网卡从物理层接收的数据进行【MAC 地址(网卡的地址)】的封装与解封装802.2、802.3ATM、HDLC
3网络层路由器,网桥路由器主要将从下层接收到的数据进行 【IP 地址(例 192.168.0.1)】的封装与解封装,常把这一层的数据叫做数据包。数据包IP(IPV4、IPV6) ICMP4
4传输层定义了一些【传输数据的协议和端口号】(WWW 端口 8080和TCP协议,UDP协议)将从下层接收的数据进行分段进行传输,到达目的地址后在进行重组数据段TCP,UDP
5会话层主要在你的系统之间发起会话或或者接受会话请求通过传输层(端口号:传输端口与接收端口)建立数据传输】的通路。数据流FTP SSH TLS HTTP(S) SQL
6表示层 把计算机能够 识别的东西转换成人能够能识别的东西(如图片、声音等)/数据流CSS GIF html JSON XML GIF
7应用层 终端的应用展示我们在电脑屏幕上可以看到的东西数据流Telnet、FTP、HTTP、SNMP等

个人认为,作为一个开发者来说,在开发阶段,主要在意后四个阶段【传输层】,【会话层】,【表示层】,【应用层】 就可以了。


144 post为什么是两次TCP连接?

GET和POST本质上就是TCP链接,服务类别(GET, POST, PUT, DELETE等等)就相当于TCP连接中的交通规则,
GET和HTTP最大的区别就是GET产生一个TCP数据包,POST产生两个TCP数据包

即 对于POST,浏览器先发送header,服务器响应【100 continue】,浏览器再发送data,服务器响应【200 ok】(返回数据),因此POST是两次TCP连接


145 相比http1.x,http2.x最大的特点

1)、最大的特点就是http 2.x 采用二进制格式而非文本格式,完【全多路复用】 ,而非有序并阻塞的、只需一个连接即可实现并行;
2)、【完全二进制协议】 HTTP1.1 版的头信息肯定是文本(ASCII编码),数据体可以是文本,也可以是二进制,http2.x 完全是二进制;
3)、【报头压缩】 HTTP 协议是没有状态,导致每次请求都必须附上所有信息。所以,请求的很多头字段都是重复的,比如Cookie,一 样的内容每次请求都必须附带,这会浪费很多带宽,也影响速度。
  对于相同的头部,不必再通过请求发送,只需发送一次,HTTP 2.x 对这一点做了优化,引入了头信息压缩机制
一方面,头信息使用gzip或compress压缩后再发送,另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,产生一个索引号,之后就不发送同样字段了,只需发送索引号。
4)、【服务器推送】 HTTP协议通常承载于TCP协议之上,在HTTP和TCP之间添加一个安全协议层(SSL或TSL),这个时候,就成了我们常说的HTTPS。


146 http1.0和http1.1缺陷

1)http1.0:
浏览器的每次请求都需要与服务器建立一个【TCP连接】,成本太高
2)http1.1:
虽然允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是【按次序进行】的。服务器只有处理完一个请求,才会接着处理下一个请求。如果前面的处理特别慢,后面就会有许多请求排队等着。这将导致“【队头堵塞】”
避免方式 :一是减少请求数,二是同时多开持久连接。


147 https过程?

1)、客户端使用HTTPS的URL访问Web服务器,要求与WEb服务器建立SSL连接;
2)、Web服务器收到客户端的请求后,会将网站信息(证书中包含公钥)传送一份给客户端;
3)、客户端的浏览器与Web服务器协商SSL/TSL连接的安全协议等级,也就是信息加密的等级;
4)、客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将对话的密钥加密并·传送网站;
5)、Web服务器利用自己的私钥密出会话密钥;
6)、web服务器利用会话密钥加密与客户端之间进行通信;


148 http状态码?

一、状态码分类

序号状态码范围原因
1100+ /<200消息响应
2200+ /<300成功响应
3300+ /<400重定向
4400+ /<500客户端错误
5500+ /<600服务端错误

二、状态码详情
1、消息响应(100+ /<200)

序号状态码原因
1100Continue(继续)
2101Switching Protocol(切换协议)

2、成功响应(200+ /<300)

序号状态码原因
1200OK(成功)
2201Created(已创建)
3202Accepted(已创建)
4203Non-Authoritative Information(未授权信息)
5204No Content(无内容)
6205Reset Content(重置内容)
7206Partial Content(部分内容)

3、重定向(300+ /<400)

序号状态码原因
1300Multiple Choice(多种选择)
2301Moved Permanently(永久移动)
3302Found(临时移动)
4303See Other(查看其他位置)
5304Not Modified(未修改)
6305Use Proxy(使用代理)
7306unused(未使用)
8307Temporary Redirect(临时重定向)
9308Permanent Redirect(永久重定向)

4、客户端错误(400+ /<500)

序号状态码原因
1400Bad Request(错误请求)
2401Unauthorized(未授权)
3402Payment Required(需要付款)
4403Forbidden(禁止访问)
5404Not Found(未找到)
6405Method Not Allowed(不允许使用该方法)
7406Not Acceptable(无法接受)
8407Proxy Authentication Required(要求代理身份验证)
9408Request Timeout(请求超时)
10409Conflict(冲突)
11410Gone(已失效)
12411Length Required(需要内容长度头)
13412Precondition Failed(预处理失败)
14413Request Entity Too Large(请求实体过长)
15414Request-URI Too Long(请求网址过长)
16415Unsupported Media Type(媒体类型不支持)
17416Requested Range Not Satisfiable(请求范围不合要求)
18417Expectation Failed(预期结果失败)

5、服务端错误(500+ /<600)

序号状态码原因
1500Internal Server Error(内部服务器错误)
2501Implemented(未实现)
3502Bad Gateway(网关错误)
4503Service Unavailable(服务不可用)
5504Gateway Timeout (网关超时)
6505HTTP Version Not Supported(HTTP 版本不受支持)

149 TCP 三次握手?

TCP 传输前进行三次沟通,简称为【三次握手】
知识点:

1、当建立一个新的连接时, 【SYN】 标志变 1
2、【顺序号 seq】( 32 位):用来标识从 TCP 源端向 TCP 目的端发送的数据字节流,它表示在这个 报文段中的第一个数据字节的顺序号。如果将字节流看作在两个应用程序间的单向流动,则TCP 用【顺序号】对每个字节进行计数
3、【确认号 ack】( 32 位):包含发送确认的一端所期望收到的下一个顺序号。因此,确认序号应当 是上次已成功收到数据字节顺序号加 1 。只有 【ACK】 标志为 1 时确认序号字段才有效。
4、【SYN 】同步序号为 1 表示连接请求,用于建立连接和使顺序号同步( synchronize )

【第一次握手】【主机 A】 发送位码为 syn=1,随机产生 seq number=1234567 的数据包到服务器, 【主 机 B】
由 SYN=1 知道, 【主机 A】 要求建立联机;
【第二次握手】【主 机 B】 收 到 请 求 后 要 确 认 联 机 信 息 , 向 【主机 A】发 送 ack number=( 【主机 A】 的 seq+1),syn=1,ack=1,随机产生 seq=7654321 的包
【第三次握手】【主机 A】 收到后检查 ack number 是否正确,即第一次发送的 seq number+1,以及位码 ack 是否为 1,若正确, 【主机 A】 会再发送 ack number=(主机 B 的 seq+1),ack=1【主 机 B】 收到后确认seq 值与 ack=1 则连接建立成功。


150 TCP 四次挥手?

TCP 传输完数据断开的时候,进行四次沟通,简称【四次挥手】
知识点:

【FIN】 :用于释放连接,为 1 表示发送方已经没有数据发送了,即关闭本方数据流。

1) 关闭客户端到服务器的连接:首先客户端 A 发送一个 FIN,用来关闭客户到服务器的数据传送, 然后等待服务器的确认。其中终止标志位 FIN=1,序列号 seq=u
2) 服务器收到这个 FIN,它发回一个 ACK,确认号 ack 为收到的序号加 1。
3) 关闭服务器到客户端的连接:也是发送一个 FIN 给客户端。
4) 客户段收到 FIN 后,并发回一个 ACK 报文确认,并将确认序号 seq 设置为收到序号加 1。
首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

四次挥手描述:

主机 A 发送 FIN 后,进入终止等待状态, 服务器 B 收到主机 A 连接释放报文段后,就立即 给主机 A 发送确认,然后服务器 B 就进入 close-wait 状态,此时 TCP 服务器进程就通知高 层应用进程,因而从 A 到 B 的连接就释放了。此时是“半关闭”状态。即 A 不可以发送给 B,但是 B 可以发送给 A。此时,若 B 没有数据报要发送给 A 了,其应用进程就通知 TCP 释放连接,然后发送给 A 连接释放报文段,并等待确认。A 发送确认后,进入 time-wait,注 意,此时 TCP 连接还没有释放掉,然后经过时间等待计时器设置的 2MSL 后,A 才进入到 close 状态。


创作不易、点关注、不迷路

点击主页、更精彩 !!!

以上是关于java 知识点突击-(141-150)的主要内容,如果未能解决你的问题,请参考以下文章

java 知识点突击-(121-130)

java 知识点突击-(101-110)

java 知识点突击-(171-180)

java 知识点突击-(161-170)

java 面试知识点突击-(61-70)

java 知识点突击-(111-120)