JAVA Web知识点整理
资料收集来自互联网,比较杂,自己做了些简单的整理
Spring相关
Spring
IOC 控制反转
- 概念: 在传统的程序设计过程中,通常由调用者来创建被调用者的实例对象。但在spring中创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring的IOC容器来完成,然后注入调用者直接使用。
- 原理: IOC:控制反转也叫依赖注入。利用了工厂模式。将对象交给容器管理,你只需要在spring配置文件总配置相应的bean,以及设置相关的属性,让spring容器来生成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类(假设这个类名是A),分配的方法就是调用A的setter方法来注入,而不需要你在A里面new这些bean了。
(其实就是通过解析xml文件,或取到用户配置的bean,然后通过反射将这些bean挨个放到集合中,然后对外提供一个getBean(“beanID”)方法,以便我们获得这些bean。)
AOP
- 概念: 可以让容器中的对象都享有容器中的公共服务,将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
- 原理: 一个代理类(里面包含一个目标对象的引用)在调用目标对象方法前后,加入一些别的操作。如果被代理对象实现了接口,则采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行,代理类实现InvocationHandler接口,重写invoke()方法; 如果没有实现接口,使用CGLIB生成代理类。拦截器类实现其中intercept()方法
Spring Boot
概念
就是把 spring,spring mvc,spring data jpa等等的一些常用的常用的基础框架组合起来
- Spring boot对第三方技术进行了很好的封装和整合,提供了大量第三方接口;
- 内嵌了如Tomcat,Jetty和Undertow这样的容器,也就是说可以直接跑起来,用不着再做部署工作了。
- 无需再像Spring那样搞一堆繁琐的xml文件的配置;
- 可以自动配置Spring;
Spring 最初利用“工厂模式”( DI )和“代理模式”( AOP )解耦应用组件。大家觉得挺好用,于是按照这种模式搞了一个 MVC 框架(一些用 Spring 解耦的组件),用开发 web 应用( SpringMVC )。然后有发现每次开发都要搞很多依赖,写很多样板代码很麻烦,于是搞了一些懒人整合包( starter ),这套就是 Spring Boot 。
自动配置
- 使用@EnableAutoConfiguration注解,启动自动配置。
- 该注解导入了EnableAutoConfigurationImportSelector,其使用 SpringFactoriesLoader类加载所有META-INF下具有spring.factories文件(文件里面都是配置类)的jar包,并根据spring.factories文件中的配置,去加载相应的类。
HTTP协议相关
TCP
TCP特点
- TCP面向连接
- TCP面向字节流,TCP不关心应用程序一次把多长的报文发送到TCP缓存中,而是根据对方给出的窗口值大小和当前网络的拥塞情况来决定一个报文应该包含多少个字节(TCP可以决定发送的报文长度,少了多等一些,多了划分短一些)
- TCP保证可靠传输,无差错,不丢失,不重复,按序到达
- TCP支持全双工通信
- TCP支持端口到端口的连接,每一条TCP连接只能有两个端点(TCP连接的端点叫嵌套字socket = (IP地址:端口号))
TCP首部
20字节固定长度:
端口号:4字节
发送字节序号:4字节
确认号:希望方法下一个报文的第一个数据序号,若为401,表示前400个收到了,4字节
数据偏移:TCP首部长度(加上可选的部分)
窗口