5

springMVC、spring、控制反转、依赖注入、MyBatis、springBoot、springSecurity、Java...

 3 years ago
source link: https://blog.csdn.net/mzl_sx/article/details/117016319
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

什么是springMVC

springMVC是一个基于MVC架构的,用来简化WEB应用程序的框架;属于表现层的框架。

springMVC的工作原理

用户发送请求到前端控制器,前端控制器接受到请求调用处理器映射器,处理器映射器根据请求的URL找到具体的处理器,生成处理器对象及处理器拦截器(如果有则一并生成)返回给前端控制器,前端控制器通过处理器 适配器调用处理器,然后执行控制器,执行完成后返回视图和模型,处理器适配器将控制器执行结果视图和模型返回给前端控制器;前端控制器将视图和模型传给视图解析器,解析后返回具体视图,前端控制器对视图进行渲染视图(即将模型数据填充到视图中),前端控制器响应给用户。

springMVC的理解

springMVC的入口是一个servlet即前端控制器。
springMVC是基于方法开发(一个URL对于一个方法),请求参数传递到方法的形参,可以设计为单例模式或多例;建议用单例,默认是单例的。
为什么建议用单例?
	1、性能(不用每次请求都New对象)。
	2、不需要多例(不要在控制器中定义成员变量)。

什么是spring框架

	它是一个轻量级的开源的框架,创建性能好,易于测试,可重用代码;它基于IOC(反向控制)和AOP(面向切面)的架构多层Jzee(企业级应用)系统的框架。
	优点:
		1、能有效地组织中间层对象,不管是否使用了EJB(企业级JavaBean)。
		2、消除了在工作中对单例模式的过多使用,降低了系统的可测试性和面向对象。
		3、消除各种自定义格式的属性文件的需要,易于单元测试。
		4、把对接口编程而不是对类编程的代码减少,养成好的编程习惯。
		5、使用它创建的应用尽可能少的依赖于它的(APIS)编程接口。

spring的理解

它的两大核心:IOC(控制反转)和AOP(面向切面)。
1、IOC:降低了程序的耦合度,使项目成为可插拔的组件式工程。
2、AOP:使开发过程精力得到释放,更专注去解决客户需求,可维护性高。
3、它提供的事务管理机制,采用声明的方式来配置事务,从而维护时无需改动源代码,解决了程序硬编码的问题。
4、它提供的DAO(数据存取对象)模板使持久层多了一种用途。
5、它可以整合当前任何一种框架,使在管理项目时更清晰明确。
spring管理事务有2种方式。
	1、编程式事务,在代码中硬编码。
	2、声明式事务,在配置文件中配置;(推荐)
声明式事务分为2种:
	1、基于XML的声明式事务。
	2、基于注解的声明式事务。

什么是依赖注入

依赖注入是实现控制反转的一种思想(另一种是依赖查找)。
在开发的过程中,我们需要某个类的实例时,是由使用者为我们提供该类的实例,而不是自己去获取。
实现依赖注入的两种方式:
	1、使用构造方法注入。
	2、set方法注入。

什么是控制反转

IOC是spring的核心之一。
控制反转是指,我们在获取对象的时候,由之前的主动变成了被动接收;也就是说在编程某个类时,只需要提供一个接口类型的类成员,并不需要关系具体的实现类,而由使用者在使用时提供,降低了类与类之间的耦合度。

MyBatis

MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久框架。
消除了几乎所有的JDBC(Java数据库连接)代码和参数的手工设置以及对结果集的检索封装。可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(普通的Java对象)映射成数据库中的记录。

MyBatis工作原理

在这里插入图片描述

什么是springBoot

由pivotal团队提供的全新框架,目的是用来简化新spring应用的初始化搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不需要定义样板化的配置。
springBoot组件
	1、springBoot自动配置:spring启动能够检测某些框架的可用性,一旦检测到框架,它就自动配置它。
	2、springBoot Core:是其他spring模型基础,它提供了某些功能,可以通过验证自行完成。
	3、springBoot starters:帮助启动项目,它会自动添加启动  项目和依赖项。
springBoot 特点
	1、用来实现微服务
	2、自动配置
	3、自定义配置
	4、模块化
	5、独立打包,直接运行
	6、内嵌服务器(如:Tomcat服务器)
	7、spring Cloud的基础

spring Security安全框架

spring Security是一个强大的和高度可制定的身份验证和访问控制框架。它是保证基于spring的应用程序安全的实际标准。
主要功能:
	1、认证:验证用户名和密码是否合法(是否系统中用户)
	2、授权:是系统用户不代表你能使用某些功能,因为你没有对于的权限
	3、防御会话固定,点击劫持,跨站点请求伪造等攻击
	4、servlet API集成
	5、与springWebMVC的可选集成

Java多线程、集合、乐/悲观锁

什么是多线程
	一个进程中可以开启多条线程,每条线程可以并行(同时)执行不同的任务。
	如:进程A车间,线程A车间的工人;
	多线程技术可以提高程序的执行效率,多线程是属于一种并发手段,是多任务的一种特别的形式,但多线程使用了更少的资源开销。
三种创建线程的方法:
	1、实现Runnable接口
	2、继承Thread类本身
	3、通过Callable和Fature创建线程
多线程的原理
	1、同一时间,CPU只能处理一条线程,只有一条线程在工作(执行)
	2、多线程并发(同时)执行,其实是CPU快速地在多条线程直接切换
	3、如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象
如果线程非常多,会发生什么情况?
	1、CPU会在N多线程之间切换,CPU会累死,消耗大量的CPU资源
	2、线程的执行效率降低
线程的生命周期
	1、新建状态
	2、就绪状态
	3、运行状态
	4、阻塞状态:
			1、等待阻塞
			2、同步阻塞
			3、其他阻塞
	5、死亡状态
线程的几个主要概念:
	1、线程同步
	2、线程间通信
	3、线程死锁
	4、线程控制:挂起,停止和恢复
乐观锁和悲观锁
	1、乐观锁持乐观状态,就是假设我的数据不会被意外修改,如果修改了就放弃从头再来。
	2、悲观锁持悲观状态,就是假设我的数据一定会被修改,那干脆直接加锁得了。

Java集合简介
collection接口的三个子接口:
1、set
2、list
3、Queue
集合大致可分为以下四种体系:
1、set:无序,不可重复的集合
2、list:有序,可重复的集合
实现list接口常用的类有:LinkedList ArrayList Vector和Stack.
3、Map:则代表具有映射关系的集合
4、Queue:Java5中新增加了,代表一种队列集合实现
集合与数组的区别
1、数组长度初始化指定,只能保存定长的数据,集合可以保存数量不确定的数据,还可以保存具有映射关系的数据。
2、数组元素即可以基本类型的值,也可以是对象,集合只能是对象,实际保存对象的引用变量,基本类型的变量要转成对于的包装类才能放入集合中。

map和collection是Java集合框架的根接口。map里的key是不可重复的,用于保存具有映射关系的数据。

Redis

什么是缓存穿透
在正常情况下,查询的数据都存在,如果请求一个不存在的数据,也就是缓存和数据库都查不到这个数据,每次都会去数据库查询,机会造成数据库压力增大。
解决:
1、缓存空值,即就是将缓存中没有的key设置为对应只null。
2、布隆过滤器(BloomFilter),它类似于一个Hbase set用来判断某个元素(key)是否存在于集合中。我们把数据的key放在布隆过滤器中,每次查询都会进行判断,如果没有就直接返回null,它没有删除操作,可以结合缓存空值。
什么是缓存雪崩
当某一时刻发送大规模的缓存失效情况,比如缓存服务器宕机了。
解决:
1、利用集群,降低服务宕机的概率。
2、ehcache本地缓存+Hystrix限流和降级。
二级缓存本地考虑redis Cluster完全不可以的时候,可以支持一阵。
使用Hystrix进行限流或降级,如1秒5000请求,设置为2000请求,其余走逻辑流。
什么是缓存击穿
在高并发的情况下,大量的请求同时查询同一个key时,此时这个key正好失效了,就会导致同一时间这些请求都会去查询数据库,会造成某一时刻数据库请求量过大。
解决方法:
1、采用分布式锁
只有拿到锁的第一个请求(线程)去请求数据库,然后插入缓存,当然每次拿到锁的时候都要去查询一下缓存有没有。

解决热点数据集中失效问题

对于热点数据,当缓存失效以后会存在大量的请求过来,然后打到数据库去,从而导致数据库奔溃的情况。
解决方法:
	1、设置不通失效时间
	2、采用缓存击穿办法,加锁
	3、设置缓存永不失效,就是采用定时任务对快要失效的缓存进行更新缓存和失效时间。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK