1、tcp和udp的区别
- TCP面向连接(打电话需要先拨号);UDP是无连接的,即发送数据之前不需要建立连接
- TCP提供可靠的服务,也就是说,通过TCP连接传送的数据,无差错,不重复,且按序到达;UDP尽最大努力交付,不保证可靠交付
- TCP面向字节流,实际上是TCP把数据看成一连串的字节流;UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低
- 每一条TCP连接只是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
- TCP首部开销20字节;UDP的首部开销小,只有八个字节
- TCP的逻辑通信信道是双工的可靠信道,UDP则是不可靠信道
2、TCP/IP协议涉及哪几层架构
- 应用层:应用程序间沟通的层
- 传输层:负责传送数据,并且确定数据已经被送达和接收
- 互连网络层:提供基本的数据封包传送功能
- 网络接口层:接收IP数据报并进行传输
3、四次挥手,为什么是四次?
因为TCP是全双工通信的
- 第一次挥手 因此当主动方发送断开连接的请求(即FIN报文)给被动方时,仅仅代表主动方不会再发送数据报文了,但主动方仍可以接收数据报文。
- 第二次挥手 被动方此时有可能还有相应的数据报文需要发送,因此需要先发送ACK报文,告知主动方“我知道你想断开连接的请求了”。这样主动方便不会因为没有收到应答而继续发送断开连接的请求(即FIN报文)。
- 第三次挥手 被动方在处理完数据报文后,便发送给主动方FIN报文;这样可以保证数据通信正常可靠地完成。发送完FIN报文后,被动方进入LAST_ACK阶段(超时等待)。
- 第四挥手 如果主动方及时发送ACK报文进行连接中断的确认,这时被动方就直接释放连接,进入可用状态。
4、线程池的参数?
- corePoolSize:线程池的核心线程数。
- maximumPoolSize:线程池允许的最大线程数
- keepAliveTime:超过核心线程数时闲置线程的存活时间
- workQueue:任务执行前保存任务的队列,保存由 execute 方法提交
的 Runnable 任 务
5、线程池的拒绝策略有哪些?
- AbortPolicy:这是线程池默认的拒绝策略,在任务不能再提交的时候,抛出异常,及时反馈程序运行状态。如果是比较关键的业务,推荐使用此拒绝策略,这样子在系统不能承载更大的并发量的时候,能够及时的通过异常发现
- DiscardPolicy:丢弃任务,但是不抛出异常。如果线程队列已满,则后续提交的任务都会被丢弃,且是静默丢弃,使用此策略,可能会使我们无法发现系统的异常状态。建议是一些无关紧要的业务采用此策略。例如,本人的博客网站统计阅读量就是采用的这种拒绝策略。
- DiscardOldestPolicy:丢弃队列最前面的任务,然后重新提交被拒绝的任务。此拒绝策略,是一种喜新厌旧的拒绝策略。是否要采用此种拒绝策略,还得根据实际业务是否允许丢弃老任务来认真衡量
- CallerRunsPolicy:由调用线程处理该任务,如果任务被拒绝了,则由调用线程(提交任务的线程)直接执行此任务,我们可以通过代码来验证这一点
6、如何保证缓存和数据库一致性问题?
- 先删除缓存,在更新数据库
- 先更新数据库,再删除缓存
- 先删除缓存,再更新数据库,然后异步延迟一段时间后再去删除一次缓存(主从同步时间)
1、方案一:写请求串行化,更新缓存,需要获取分布式锁 2、方案二:数据库读写分离的时候,需要延时删除,因为有同步时间
7、线程的生命周期
- 新建 NEW
- 就绪 RUNNABLE
- 运行状态 RUNNING
- 阻塞 BLOCKED(wait(等待)、lock(同步阻塞)、sleep(其他阻塞))
- 死亡态:DEAD
8、网络的OSI七层模型
- 物理层:机械、电子、定时接口通信信道上的比特流传输
- 数据链路层:物理寻址,同时将原始比特流变为逻辑传输线路
- 网络层:控制子网的运行,如逻辑编址、分组传输、路由选择
- 传输层:接收上一层数据,在必要的时候把数据交给网络层,且保证这些数据段有效到达对端
- 会话层:不同机器上的用户之间建立及管理会话
- 表示层:信息的语法语义以及它们的关联,如加密解密、转换翻译、压缩解压缩
- 应用层:各种程序协议,如HTTP、FTP、SMTP、POP3
9、OAuth2.0
四种角色:
协议流程:
- 客户端向资源所有者发起访问资源的请求
- 资源所有者向客户端发送授权许可
- 客户端使用授权许可,向授权服务器请求token
- 授权服务器验证完成授权许可,客户端核发token
- 客户端使用从授权服务器获取的token,向资源服务器请求受保护的资源
- 资源服务器验证token之后,返回受保护的资源信息
四种模式:
- 授权码:最常用,请求token是在客户端进行的,很难截获,安全性高
a: 客户端通过用户浏览器将请求重定向到授权服务器,并携带客户端标识、重定向URI、请求作用域scope以及state,一旦授权服务器允许访问,会将用户浏览器重定向回 重定向URI b: 授权服务器向用户展示授权页面,进行用户身份验证,并确认用户是否授权客户端的访问请求 c: 假设用户授权,授权服务器使用重定向URI,将用户浏览器重定向到客户端,重定向URI包括授权码code和客户端可提供的state参数 d: 客户端通过上一步获取到的code,从授权服务器获取令牌token,在发出请求时,客户端需要携带client_id,client_secret,redirect_uri以及code e: 授权服务器对客户端及携带的参数进行验证,并确保此次携带的重定向URI与第三步URI相同,如果验证成功,授权服务器返回客户端token
10、OIDC
OIDC是基于OAuth2协议的身份认证标准协议 OAuth主要用在授权,做不到身份认证,所以,OIDC就是用来弥补OAuth这个身份验证空白的。 OIDC需要和OAuth2一起使用,底层授权用OAuth2,上层的身份认证用OIDC,相当于OAuth2的扩展
OIDC 增加了以下内容:
- ID token(JWT格式,包含部分用户信息)
- 如果需要更多用户信息,请求用户接口
- 标准的scope scope=openid email phone
- well-known接口
11、为什么OAuth2不能做认证?
OAuth2没有一个标准的说明来获取用户信息,如果我们想通过OAuth2使用邮件工具替我们发送邮件,这是很难做到的,邮件工具并不知道“我”是谁,没办法填写发件人,OAuth2协议中并没有侧重用户信息本身,而是针对于授权
12、JWT组成
- 头部:类型和算法
- 载荷
- 签名:头部和载荷编码后,.来隔开,形成签名 用来验证密钥,同一个密钥加密出来的结果才会一样
13、HTTP状态码
- 1**:信息,服务器收到请求,需要请求者继续执行操作
- 2**:成功,操作被成功接收并处理
- 3**:重定向,需要进一步的操作以完成请求
- 4**:客户端错误,请求包含语法错误或无法完成请求
- 5**:服务器错误,服务器在处理请求的过程中发生了错误
100 Continue 继续。客户端应继续其请求 101 Switching Protocols 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议 200 OK 请求成功。一般用于GET与POST请求 201 Created 已创建。成功请求并创建了新的资源 202 Accepted 已接受。已经接受请求,但未处理完成 203 Non-Authoritative Information 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本 204 No Content 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档 205 Reset Content 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域 206 Partial Content 部分内容。服务器成功处理了部分GET请求 300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择 301 Moved Permanently 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 302 Found 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI 303 See Other 查看其它地址。与301类似。使用GET和POST请求查看 304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 305 Use Proxy 使用代理。所请求的资源必须通过代理访问 306 Unused 已经被废弃的HTTP状态码 307 Temporary Redirect 临时重定向。与302类似。使用GET请求重定向 400 Bad Request 客户端请求的语法错误,服务器无法理解 401 Unauthorized 请求要求用户的身份认证 402 Payment Required 保留,将来使用 403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求 404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 405 Method Not Allowed 客户端请求中的方法被禁止 406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求 407 Proxy Authentication Required 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权 408 Request Time-out 服务器等待客户端发送的请求时间过长,超时 409 Conflict 服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突 410 Gone 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置 411 Length Required 服务器无法处理客户端发送的不带Content-Length的请求信息 412 Precondition Failed 客户端请求信息的先决条件错误 413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息 414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理 415 Unsupported Media Type 服务器无法处理请求附带的媒体格式 416 Requested range not satisfiable 客户端请求的范围无效 417 Expectation Failed 服务器无法满足Expect的请求头信息 500 Internal Server Error 服务器内部错误,无法完成请求 501 Not Implemented 服务器不支持请求的功能,无法完成请求 502 Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应 503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 504 Gateway Time-out 充当网关或代理的服务器,未及时从远端服务器获取请求 505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理
|