2020-12-5知识整理

1.tcp/ip协议
传输控制/网络协议,指tcp和ip协议为代表的的一系列协议,只是tcp和ip协议最具代表性,在通信上,用socket(套接字,只是其中一种方式)进行进程间的访问,而socket=ip地址+端口号,比如IP地址是192.168.0.1,而端口号是13,那么得到套接字就是(192.168.0.1:13)。跟http协议的主要区别为**(tcp/ip)长连接(http)短连接**。
2.http协议
超文本传输协议,是一个简单的请求和响应协议,架构在tcp协议上,由浏览器请求,服务器响应。
提到http协议就不得不说到三次握手:
1).建立连接时,客户端发送确认请求到服务器,等待服务器确认。
2).服务器接收到确认请求后响应回客户端。
3).客户端在收到服务器的确认信息后再向服务器发送客户端确认信息。
至此完成三次握手,客户端和服务器可以开始传输数据。
3.servlet:
为什么要使用servlet?
web服务器擅长于提供静态的页面,web服务器不能做的两件事:不能提供动态即时页面,不能往数据库保存数据),如果需要一个动态的内容,则需要web服务器上另外一辅助程序帮助(web服务器会调用这个辅助程序实现动态内容的展现)。而servlet扮演了辅助应用程序的角色。这就是为什么需要servlet。访问静态页面就不用配置servlet了。
servlet只是一个普通的java类,在容器中时,通过容器提供的servlet接口,把自定义servlet交给容器管理。servlet主要功能在于交互式的浏览和修改数据,生成动态web内容,这个过程分为:
1)客户端发送请求给服务器。
2)服务器将请求信息转发给servlet进行处理。
3)servlet处理后动态的生成响应内容并传给服务器。
4)最后再由服务器将响应返回给客户端。
servlet的生命周期
实例化(第一次访问)–>初始化–>等待服务–>服务结束销毁
4.web数据交互的革新
1)业务逻辑和html网页全部由后端拼接代码实现,再由后端返回完整的html。缺点:不利于维护,html代码和java代码耦合在一起,开发起来难度大。(最早交互方式)
2)前端html页面由模板提供,模板也提供了动态的占位数据,后端只需要提供替换这些占位的数据(通过jsp和tymeleafe),就可返回完整的html。缺点:html代码和java代码还是耦合在一起,模板提供了专门的语法,也增加了代码的上手度和阅读难度。(真正前后端分离的过渡阶段)
3)浏览器渲染html,后端完全不管,只需要提供相应的请求路径,浏览器通过js(比如ajax)获取后端数据,再动态的在静态网页上动态的生成数据。(真正实现前后端分离)
5.springmvc:
mvc只是一种思想,spring框架的实现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1)springmvc只有一个servlet(DispatcherServlet),统一获取数据返回数据。
2)自定义的controller类只是一个普通类默认实现了hander接口
3)业务预处理操作
4)把自定义controller交回给spring框架
5)spring把获取到数据放入你的预处理代码中,并执行
6.springboot:
一句话概括:我知道你要这样做,我已经给你做了。我不知道的,你可以通过简单的配置信息告诉我。springboot 我知道你要按照这个标准来做,我已经给你做了,预装载功能,无需装配直接使用,注意:需要声明基本配置。
目的:简化新Spring应用的初始搭建以及开发过程
7.在spring中过滤器和拦截器的区别:
1)使用方法类似,都是为了增强业务,过滤器是servlet的,拦截器是aop的。
2)拦截器是基于Java的反射机制的,而过滤器是基于函数回调。
3)拦截器不依赖于servlet容器,过滤器依赖于servlet容器。
4)拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
5)拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
6)在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
7)拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。
8)在mvc中,过滤器只能拦截中心控制器,而拦截器在中心控制器之后,可以拦截各个controller。
7.hibernate的三个状态:
1)瞬时状态---->内存中存在,和hibernate、db都无关联。
2)持久化状态---->内存中存在,DB中也存在,并且需要保持同步。
3)游离状态—>内存中存在。DB中不一定存在–session已经关闭,从新执行查询语 句。游离状态就变为持久状态。
8.服务器数据传输:
1)http(httpclient,restTemplet,feign,webservice)或TCP/IP (socket,dubbo)
2)restful风格—>后端的数据都被看成一种静态资源
3)feign—>属于cloud的远程调用—>调用远程就和调用本地接口一样。
4)token–>jwt
9.微服务基本组件
1)网关—Zuul和Gateway (过滤、路由、向外部提供一个IP和端口)
2)远程调用–>fegin、 dubbo(tcp/ip–socket)、resttemplet
3)注册服务器:ZooKeeper、Eureka、Consul 、Nacos 用来做服务发现,用别名访问其他服务器。并且可以做负载均衡。
4)配置服务器config—>集中配置,实现:把application改为bootstrap,根据别名加后缀的方式分配配置文件,注意:先开启配置服务器。
5)熔断hystrix---->防止服务器雪崩。如果远程服务器调用不到,就转换服务器或做服务降级处理。
10.MQ
1)队列 ———>线型结构,先进先出
2)生产者、消费者模式---->共享资源(队列)<----多线程----->线程安全问题------>java提供了安全队列(加锁)—>阻塞式队列和非阻塞式队列
3)MQ(消息队列)---->rabbitmq–>中间件---->N个队列,消息存在中间件中------>异步
4)消费者与MQ一个心跳程序保持连接,队列中有数据消费者就会获取到数据。
MQ与RPC (远程调用)的区别主要在 异步和同步上,MQ可以在大并非情况下消峰
5)rabbitmq,分为交换机和队列,消息先投递到交换机,由交换机决定投递到哪个队列(routingkey决定)。
(1)默认交换机 direct —>交换机名字+routingKey
(2)主题交换机topic---->交换机名字+routingKey(模糊匹配,* -1个单词,#-0到多个 )
(3)散型交换机fanout---->交换机名
(4)confirm ack 死信 (dead message) 幂等性
幂等性:就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额发现多扣钱了,流水记录也变成了两条。在以前的单应用系统中,我们只需要把数据操作放入事务中即可,发生错误立即回滚,但是再响应客户端的时候也有可能出现网络中断或者异常等等。
confirm—>生产者(携带关联数据)---->MQ , 写一个回调函数来接受投递情况(true,flase–>返回关联数据)
ACK—>消费者---->MQ <---- 手动确认。如果不确认客户端一样收到消息,但是消息还存在于队列中。确认了队列数据就消失。不确认人—>循环从队列中获取数据----->注意幂等性
死信---->防止数据丢失,可是网络问题造成的数据没消费,在某个时间后投递到死信队列。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值