网站首页 > 技术文章 正文
什么是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、设置缓存永不失效,就是采用定时任务对快要失效的缓存进行更新缓存和失效时间。
更多拓展资料推荐阅读 :
阿里架构师的Java知识地图(28个知识点),让我成了offer收割机获取更多资源、知识分享、开源代码!
猜你喜欢
- 2024-10-15 BATJ面试必会之 Spring 篇(30题) 面试spring的面试题
- 2024-10-15 Spring知识点提炼 spring题
- 2024-10-15 springmvc的核心是啥,请求的流程怎么处理,控制反转怎么实现
- 2024-10-15 spring源码分析——spring大纲 spring源码分析和总结简书
- 2024-10-15 Spring思维导图,让Spring不再难懂(ioc篇)
- 2024-10-15 Spring框架介绍及使用 spring框架的使用步骤
- 2024-10-15 架构师必知必会:Java内置的控制反转机制-Service Provider
- 2024-10-15 轻松理解 Spirng IoC/控制方向反转
- 2024-10-15 什么是控制反转(ioc),通过解释总结告诉你
- 2024-10-15 搞透IOC,Spring IOC看这篇就够了
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)