容易遗忘的知识点总结

主要是工作中不常用,导致记得不是很清晰。但是很重要的知识点,慢慢积累...

1.七层协议

  • 从上到下是:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层;
  • 协议类型:
应用层中,有FTP:文件传输协议;  http:超文本传输协议;  SMTP:邮件传输协议;  DNS:域名系统;
传输层中,有TCP:传输控制协议;  UDP:用户数据协议

2.Http的工作过程

对于请求的地址,从地址中分离出协议名、主机名、端口、对象路径等

  1. 地址解析
    使用域名系统DNS解析域名,得到主机的IP地址

  2. 封装HTTP请求数据包
    把解析出的信息结合自己本机的信息,封装成一个HTTP请求数据包

  3. 封装成TCP包,建立TCP连接
    (三次连接)

  4. 客户机发送请求命令
    建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后面是MIME信息。

  5. 服务器响应

  6. 服务器是否关闭TCP连接
    若在请求头中加入了Connection:keep-alive,则表示仍然保持连接


3.API网关的作用

身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理、限流控制等

  • 性能:API网关高可用,负载均衡,容错机制。
  • 安全:权限身份认证、脱敏,流量清洗,后端签名(保证全链路可信调用),黑名单(非法调用的限制)。
  • 日志:日志记录(spainid,traceid)一旦涉及分布式,全链路跟踪必不可少。
  • 缓存:数据缓存。
  • 监控:记录请求响应数据,api耗时分析,性能监控。
  • 限流:流量控制,错峰流控,可以定义多种限流规则。
  • 灰度:线上灰度部署,可以减小风险。路由:动态路由规则。

Nginx和Api Gateway的说明

Nginx和Api gateway在功能上是有一些重叠的,都可以做服务转发。但是网关在大型微服务系统中是一个很重要的角色

  • Api网关是转为网关的角色而设计的,功能强大,在大型系统开发中基本上都会选用次组件
  • Nginx只能实现一些上面说的部分用牛奶,一般都是选用Nginx做静态资源缓存和前端调用接口的负载均衡

总结:现在前后端分离的系统一般都会如下设计:Nginx做静态资源服务器,前端页面调用后端接口时先请求到Nginx,Nginx做负载君合路由到后端网关,然后网关做请求身份验证,日志记录等操作,再转发业务处理接口,处理完返回数据。


4.拦截器和过滤器的区别

Filter过滤器:本质是基于函数回调
1.修改字符编码(CharacterEncodingFilter)、在过滤器中修改HttpServletRequest的一些参数
2.过滤低俗文字、危险字符
3.对URL地址做处理
缺点:只能对controller请求进行拦截,对于其他直接访问的静态资源的请求无法进行拦截处理。

Interceptor拦截器:本质是基于Java的反射机制
1.Filter能做的都可以做
2.在请求前和请求后都可以拦截,比较灵活。


5.关于前端提交格式【Content-Type】与后端接受格式 互相对应点

  1. 前端格式为 Content-Type:application/x-www-form-urlencoded;charset=UTF-8 时(表单提交方式),
    后端接受时,在路径的RequestMapping上,加上consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE;接受的参数可以通过@RequestParam成功获取(不可用@RequestBody接受),后端如下图:

采用其他格式或参数接受,会报如下错误,Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported

  1. 当前端格式为 Content-Type:application/json 时(Payload提交方式),后端接受方式为 consumes = MediaType.APPLICATION_JSON_VALUE,参数可通过@RequestBody接受,如下所示:

注:@RequestParam和@RequestBody接受参数,@ReqeustParam底层是通过request.getParameter方式获得参数的,get和post提交都可以接受到;@RequestBody接受的是json对象的字符串,而不是json对象。


6. 运算符

关于运算符,总是容易混淆和遗忘。特总结如下:

  1. 位运算符
  • & 与运算符:参与运算的两个值,如果两个相应位都是1,则该位的结果位1,否则为0;
  • | 或运算符:参与运算的两个值,如果其中有一个位是1,则该位的结果为1,否则为0;
  • ^ 异或运算符:当两对应的位相异时,结果为1;
  • ~ 取反运算符:对数据的每个二进制为取反,即把1改为0,把0改为1;
  • << 左移运算符:各二进制位全部左移若干位,由“<<” 右边的数指定移动的位数,高位丢弃,低位补0;相当于乘以2的n次方
  • >> 右移运算符:与左移刚好相反。例:11 >> 2,11右移2位,11的二进制为:1011,右移的结果为:0010,即对应的十进制为2。右移n位相当于除以2的n次方,值取商,余数舍弃。
  • >>> : 无符号右移,忽略符号位,空位都以0补齐

不断积累中,未完待续...


若觉得博文不错或对你有帮助,请点击【推荐】,感谢你的支持

本文来自博客园,作者:黄小葱,转载请注明原文链接:https://www.cnblogs.com/sun-flower1314/p/15233497.html

原文地址:https://www.cnblogs.com/sun-flower1314/p/15233497.html