您的位置 首页 java

springMVC、控制反转、依赖注入、springBoot、Java多线程、Redis

什么是springMVC

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工作原理

springMVC、控制反转、依赖注入、springBoot、Java多线程、Redis

什么是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、设置缓存永不失效,就是采用定时任务对快要失效的缓存进行更新缓存和失效时间。

更多拓展资料推荐阅读 :

获取更多资源、知识分享、开源代码!

文章来源:智云一二三科技

文章标题:springMVC、控制反转、依赖注入、springBoot、Java多线程、Redis

文章地址:https://www.zhihuclub.com/179358.shtml

关于作者: 智云科技

热门文章

网站地图