计算机网络+Spring+SpringMVC
一、计算机网络:
(一)TCP/IP模型VSOSI模型:
TCP/IP:物链网传应。
OSI:物链网输会示用。
(二)三次握手:
(1)我要和你建立链接;
(2)你真的要和我建立链接么;
(3)我真的要和你建立链接
=》成功。
全过程:
1.客户端向服务端发送一个SYN报文表示客户端请求连接,并随机生成一个初始序列号。
2.服务端收到客户端的SYN报文后,向客户端发送一个SYN+ACK报文表示服务端同意连接,并随机生成一个初始序列号和确认号(表示服务端已经接收到客户端的SYN报文)。
3.客户端收到服务端的SYN+ACK报文后,向服务端发送一个ACK报文,表示客户端已经接收到服务端的SYN+ACK报文,确认连接已建立。
(三)四次挥手:
(1)我要和你断开链接;
(2)好的,断吧。
(3)我也要和你断开链接;
(4)好的,断吧
=》成功。
全过程:
1.第一次挥手:客户端向服务端发送一个FIN报文,表示客户端要关闭连接,但是客户端仍可以接收服务端的数据。
2.第二次挥手:服务端收到客户端的FIN报文后,向客户端发送一个ACK报文,表示服务端已经接收到客户端的FIN报文。
3.第三次挥手:服务端向客户端发送一个FIN报文,表示服务端要关闭连接,并且也不能再发送数据给客户端了。
4.第四次挥手:客户端收到服务端的FIN报文后,向服务端发送一个ACK报文,表示客户端已经接收到服务端的FIN报文,确认连接已关闭。
(四)为什么不能用两次握手进行连接:
3次握手两目的:
- 既要双方做好准备工作(双方都知道彼此已准备好) ②允许双方协商初始序列号,序列号在握手过程中被发送和确认。
- 改成两次握手,死锁是可能发生的。
举个例子:S和C之间的通信,C给S发送一个连接请求分组->S收到了这个分组->S发送了确认应答分组。
按照两次握手的协定,S认为连接已经成功地建立了,可以开始发送数据分组。可是,C在S的应答分组在传输中被丢失的情况下,将不知道S是否已准备好,不知道S建立什么样的序列号,C甚至怀疑S是否收到自己的连接请求分组。
在这种情况下,C认为连接还未建立成功,将忽略S发来的任何数据分组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。
(五)TCP|UDP区别:
(六)TCP可靠原因:
数据包校验,三次握手,超时重传,流量控制,拥塞控制。
数据包校验: 检测数据在传输过程中的变化,若有错,丢弃重发数据;
超时重发: 当TCP发出后,它启动一个定时器,等待确认收到。如果收不到确认,重发;
流量控制: TCP有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所数据,这可以防止较主机快使慢主机的缓冲区溢出。
(七)Http和Https的区别:
- Http协议运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份;
- Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。
不同:
- 资源消耗:Https由于加减密处理消耗更多的CPU和内存资源;
- 开销:Https通信需要证书,而证书需要向认证机构购买。
(八)Get与POST的区别:
以前看过一句话,把它们两个当成高速公路上的两辆车,都是用来装东西的,get是把东西放在车里,比较少,post是把东西放在车顶。Get把信息拼接在网址上裸露,post请求隐藏在协议中返回实体。
- 数据传输方式不同。
- 数据大小限制不同。
- 安全性不同。
(九)什么是XSS,怎么解决:
①定义:
XSS(Cross-Site Scripting)跨站脚本攻击是一种Web应用程序安全漏洞,攻击者通过在Web页面中插入恶意脚本,使这些脚本在用户浏览页面时执行。
②分类:
- 存储型XSS:攻击者将恶意脚本存储在Web应用程序的数据库中,然后让用户访问包含这些脚本的页面。
- 反射型XSS:恶意脚本通过URL参数传递给Web应用程序,然后被服务器反射到响应中,攻击者需要诱使用户点击包含恶意参数的链接。
- DOM-based XSS:攻击不涉及服务器,而是直接修改DOM(文档对象模型),通常通过JavaScript来实现。
③解决方法:
- 输入验证和过滤:对用户输入的数据进行验证和过滤,确保只允许合法的输入。这包括对HTML、JavaScript和其他脚本的转义或过滤。
- 设置CSP(内容安全策略):CSP允许您指定哪些资源和域名可以与您的网站进行交互,从而减少恶意脚本的执行。
- 最小特权原则:确保Web应用程序和服务器端代码以及数据库等都运行在最小权限的原则下,只授予必要的权限。
二、框架:
SPRING
(一)两大核心:
IOC和AOP。
(二)AOP:
面向切面编程,将跟业务逻辑没有关系的代码提取出来,在调用目标方法之前或者之后执行。常用的场景,事务,日志,权限控制,异常处理等方面。
(三)IOC:
全称:Inversion of Control控制反转。创建对象的权利,交给spring容器创建。
(四)DI:
如果一个对象A需要使用另一个对象B才能实现某个功能,这时就可以说A对象依赖于B对象,而Spring容器在创建A对象时,会自动将A对象需要的B对象注入到A对象中,此过程就是依赖注入。
(五)注入三种方式:
- 构造器注入
- setter方法注入
- 根据注解注入
<bean id = "c" class = "cn.spring.Cat"/>
<bean id = "dog" class = "cn.spring.Dog">
<property name = "token" value = "111"/> //set方法注入
<constructor-arg name = "cat" ref = "c"/> //构造方法注入
</bean>
(六)核心容器:
核心容器提供 Spring 框架的基本功能。
核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
(七)Aop写法:
第一步: 创建一个切面类,把它添加到ioc容器中并添加@Aspect注解。
第二步: 在切面类中写一个通知方法,在方法上添加通知注解并通过切入点表达式来表示要对哪些方法进行日志打印,然后方法参数为JoinPoint。
第三步: 通过JoinPoint这个参数可以获取当前执行的方法名、方法参数等信息,这样就可以根据需求在方法进入或结束时打印日志。
(八)spring用了哪些设计模式:
(24种设计模式还没看过)
BeanFactory用了工厂模式,AOP用了动态代理模式,RestTemplate用来模板方法模式,SpringMVC中handlerAdaper用来适配器模式,Spring里的监听器用了观察者模式
SpringMVC
(一)springMVC常用基本组件:
1.DispatcherServlet: 前端控制器,统一处理用户发来的请求并和响应,相当于一个中间转换器。
2.HandlerMapping: 处理器映射器,根据请求发来的url 和method找到对应的Handler(就是说在一个用到SpringMVC框架的项目中会有好多方法和逻辑这个组件的作用就是找到对应的方法和组件返回给前端控制器)。
3.Handler: 我们自己写的方法。
4.HandlerAdaper: 处理器适配器。根据前端控制器传过来的Handler找到自己对应的方法返回。
5.ViewResolver: 视图解析器。解析视图。
6.View: 视图:根据model对象的要求来渲染页面,然后返回渲染后的前端给用户。
(二)工作流程:
三、接下来的问题:
1、常见开发框架系列:SpringBoot,MyBatis,VUE,MyBatisPlus。
2、工具:说说工作中Linux,Git和SVN的常用命令。
3、整理目前所做的工作,详聊实现方式。
4、从来没了解过的:Redis,Zookerper,Spring Cloud,RocketMQ,Docker,24种设计模式。
5、数据结构学的太粗糙了。