SSM框架及知识点

本文深入讲解Spring框架的核心技术,包括单例和多例对象的创建、三种实例化Bean的方式、IOC底层技术点、Bean作用域的区别等内容。同时,还探讨了Spring MVC的工作原理、依赖注入机制、AOP概念及其优势。
摘要由CSDN通过智能技术生成

1. Spring 如何创建单 例和多例对象?(必做)

答: scope=“singleton” 单例,使用该属性定义 Bean 时,IOC 容器仅创建一个 Bean 实例,IOC 容器每次返回的是同一个 Bean 实例。

scope=“prototype” 多例,使用该属性定义 Bean 时,IOC 容器可以创建多个 Bean 实例,每次返回的都是一个新的实例。

2.spring中三种实例化bean的方式(必做)

答: 1、构造器实例化bean

​ 2、静态工厂实例化bean

​ 3、实例工厂实例化bean

3.IOC底层使用到的技术点

① dom4j解析xml文档;

② 工厂模式

③ 采用反射设计模式创建对象

4:xml配置文件

4.Spring Bean的作用域之间有什么区别?(必做)

作用域包括:

singleton

全局只有一个实例

prototype

每次调用产生一个新的实例

request

每次请求产生一个bean

session

每个用户session可以产生一个新的bean,不同用户之间的bean互相不影响

5.简述什么是IOC 及IOC的作用?

IOC 就是控制反转,原来我们需要创建对象的,必须自己 new,但是现在有了 spring 容器,我们不需要再自己 new 了,有两个好处,解耦,因为对象自己 new 完之后,无法更改,如果依赖对象发生异常,则会对我们自己的类造成 影响。

springIOC,用户只需要进行配置,容器会在容器中自动实例化依赖对象,并且是单例模式,直接通过@autowired 直接注入即可。

ioc是一种设计思想不是一种技术

Spring的IOC和AOP

1.注解的概念?(必做)

注解(Annotation)提供了一种安全的类似注释的机制,为我们在代码中添加信息提供了一种形式化得方法,使我们可以在稍后某个时刻方便的使用这些数据(通过解析注解来使用这些数据),用来将任何的信息或者元数据程序元素(类、方法、成员变量等)进行关联。其实就是更加直观更加明了的说明,这些说明信息与程序业务逻辑没有关系,并且是供指定的工具或框架使用的。Annotation像一种修饰符一样,应用于包、类型、构造方法、方法、成员变量、参数及本地变量的申明语句中。

2.aop概述

AOP,一般称为面向切面,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共 行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码, 降低了模块间的耦合度,同时提高了系统的可维护性。可用于权限认证、日志、事务处理。

AOP 实现的关键在于 代理模式,AOP 代理主要分为静态代理和动态代理。静态代理的代表为 AspectJ;动态代理则以 Spring AOP 为代表。

在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP(面向对象)的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了****开发的效率

3. 两种依赖注入的类型是什么?

setter注入和构造方法注入

4.解释一下依赖注入Dependency Injection(DI)?(必做)

DI—Dependency Injection,即“依赖注入”:组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。

**5.写出aop常用术语?(**必做)

Authentication 权限

Caching 缓存

Context passing 内容传递

Error handling 错误处理

Lazy loading 懒加载

Debugging 调试

logging, tracing, profiling and monitoring 记录跟踪 优化 校准

Performance optimization 性能优化

Persistence持久化

Resource pooling 资源池

Synchronization 同步

Transactions 事务

6.spring框架的优势(必做)

(1)spring 属于低侵入式设计,代码的污染极低;

(2)spring 的 DI 机制将对象之间的依赖关系交由框架处理,减低组件的耦合性;

(3)Spring 提供了 AOP 技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用。

(4)spring 对于主流的应用框架提供了集成支持

1.低侵入式设计,代码污染极低

2.独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺

3.Spring的DI机制降低了业务对象替换的复杂性,提高了组件之间的解耦

4.Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用

5.Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问

6.Spring并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部

7、标注项目分层注解?

@Repository= @Component+说明是dao

@Service= @Component+说明是service

@Controller = @Component+说明是servlet

Mybatis基础

1.MyBaits运行原理

1、加载 sqlMapConfig 文件,创建 Configation 对象;

2、根据 Configation 创建 SessionFactory 对象;

3、通过 SessionFactory 生成 session,session 是恒程序员操作数据库的接口;

4、session 会话通过底层真正操作数据库的是 Excutor 接口操作数据库;

5、底层实际上是通过 MappedStatement 进行数据的操作,封装了 SQL 语句、输入参数、输出参数;

2 mybatis****的映射文件中 #{}和${} 作用?

#{}:占位符,使用 #{} 格式的语法会导致 MyBatis 创建 PreparedStatement 参数并安全地设置参数(就像使用 ? 一样);

${}:连接符,不对参数做任何解析,直接拼接 sql 语句,相当于 statment,有 sql 注入风险,一般需要使用 group by ,order by 必须使用列名时才使用;

3.写出mapper动态代理开发的几点规范:

1.映射文件mapper.xml的名字要和接口的名字一致

2.映射文件的namespace要和接口的全路径一致

3.映射文件的statement的id要和接口的方法名一致

4.映射文件的输入参数类型parameterType要和接口参数的类型要一致

5.映射文件的输出结果类型要和接口的返回类型要一致

Mybtais核心

mybtis里的#{}和${}的区别

#{}:占位符,使用 #{} 格式的语法会导致 MyBatis 创建 PreparedStatement 参数并安全地设置参数(就像使用 ? 一样);

${}:连接符,不对参数做任何解析,直接拼接 sql 语句,相当于 statment,有 sql 注入风险,一般需要使用 group by ,order by 必须使用列名时才使用;

2**.**简单的说一下MyBatis的一级缓存和二级缓存?

Mybatis 首先去缓存中查询结果集,如果没有则查询数据库,如果有则从缓存取出返回结果集就不走数据库。 Mybatis 内部存储缓存使用一个 HashMap,key 为 hashCode+sqlId+Sql 语句。value 为从查询出来映射生成的 java 对象.

Mybatis 的二级缓存即查询缓存,它的作用域是一个 mapper 的 namespace,即在同一个 namespace 中查询 sql 可以 从缓存中获取数据。二级缓存是可以跨 SqlSession 的。

3**.**延迟加载的作用?

a:提高数据库访问性能,查询速度变快。

b:保证缓存中的对象与数据库中的记录保持一致,缓存中的对象被称为持久化对象

c:当缓存中的对象存在关联关系时,session会不出现访问对象图的死循环,以及由死循环jvm堆栈异常

延迟加载含义:延迟加载(懒加载),

Mybatis高级

添加时如何获取自动生成的(主)键值?

在insert标签的insert语句之前加上selectkey标签,使用 select LAST_INSERT_ID()函数。

2.如何执行批量插入?

使用foreach标签:foreach主要用在构建in条件中,它可以在SQL语句中迭代一个集合。

insert into

​ tbl_employee(last_name,gender,email)

values

​ (#{emp.lastName},#{emp.gender},#{emp.email})

这种方式是使用foreach 标签进行sql执行语句的拼接以达到批量插入的操作,

但是这种方式是由限制的,根据使用的数据库服务器的不同可执行的sql长度是由限制的,处理大批量的数据是请慎用这种方式。

3**.**写出动态sql中常用的标签?

if 标签:判断是否符合条件。

foreach 标签:对一个集合进行遍历. collection:遍历集合 item:遍历集合元素 index:元素索 引值 open:遍历开始 close:遍历结束 separator:遍历元素的分隔符。

where 标签:补充相应的 where 的 sql 语句,解决了 if 标签在上面所容易造成错误的问题。更好地 简化了 where 的条件判断。

sql 标签:这个元素可以被用来定义可重用的 SQL 代码段,可以包含在其他语句中。它可以被静 态地 (在加载参数) 参数化. 不同的属性值通过包含的实例变化。

choose, when, otherwise 标签: 有时我们不想应用到所有的条件语句,而只想从中择其一项。针对这种情况,MyBatis 提供 了 choose 元素,它有点像 Java 中的 switch 语句。

springmvc基础

SpringMVC运行原理(图解也可)

在这里插入图片描述

1、用户发送请求至前端控制器 DispatcherServlet。

2、 DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。

3、 处理器映射器找到具体的处理器(可以根据 xml 配置、注解进行查找),生成处理器对 象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet。 北京积云教育大数据方向-面试话术总结 V1.1 49

4、 DispatcherServlet 调用 HandlerAdapter 处理器适配器。

HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器)。

Controller 执行完成返回 ModelAndView。

HandlerAdapter 将 controller 执行结果 ModelAndView 返回给 DispatcherServlet。

DispatcherServlet 将 ModelAndView 传给 ViewReslover 视图解析器。

ViewReslover 解析后返回具体 View。

DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中)。

DispatcherServlet 响应用户。

2.SpringMvc的控制器是不是单例模式

默认情况下是单例模式,

在多线程进行访问的时候,有线程安全问题.

但是不建议使用同步,因为会影响性能.

解决方案,是在控制器里面不能写成员变量.

Springmvc核心

1.讲下SpringMvc的执行流程(必做)

1、 用户向服务器发送请求,请求被 Spring 前端控制 Servelt DispatcherServlet 捕获(捕获)

2、 DispatcherServlet对请求 URL进行解析,得到请求资源标识符(URI)。然后根据该 URI,调用 HandlerMapping获得该Handler配置的所有相关的对象(包括 Handler对象以及 Handler对象对应的拦截器),最后以 HandlerExecutionChain对象的形式返回;(查找 handler)

3、 DispatcherServlet 根据获得的 Handler,选择一个合适的 HandlerAdapter。 提取Request 中的模型数据,填充 Handler 入参,开始执行 Handler(Controller), Handler执行完成后,向 DispatcherServlet 返回一个 ModelAndView 对象(执行 handler)

4、DispatcherServlet 根据返回的 ModelAndView,选择一个适合的 ViewResolver(必须是已经注册到 Spring 容器中的 ViewResolver) (选择 ViewResolver)

5、通过 ViewResolver 结合 Model 和 View,来渲染视图,DispatcherServlet 将渲染结果返回给客户端。(渲染返回)

2.springmvc转发和重定向关键字和区别

forward:转发页面和转发到的页面可以共享request里面的数据,效率高.

redirect:不能共享数据,效率低.

Springmvc应用

Springmvc 的三大组建及作用?

1.HandlerMapping处理器映射:

通过处理器映射,可以将web请求映射到正确的处理controller上,当接收到请求时,dispactherServlet将请求交给HandlerMapping处理器映射,让它检查请求并找到一个合适的HandlerExecutionChain,这个HandlerExecutionChain包含一个能处理该请求的处理器Controller,然后dispacherServlet执行在HandlerExecutionChain中的处理器Controller。

spring内置了许多处理器映射策略,如SimpleUrlHandlermapping或者BeanNameUrlHandlerMapping。

2.Controller处理器:

Spring提供了许多强大的Controller的实现,可以继承一个合适的Controller来简化代码。

3.ViewResolver视图解析器:

spring提供了视图解析器用在浏览器显示数据模型,而不必拘束再特定的视图技术上,spring内置了对jsp、Velocity、FreeMarker模板和XSLT视图等技术

2.SpringMvc里面拦截器如何实现(必做)

SSM整合

什么是Spring框架?Spring框架有哪些主要模块?

Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。

◆目的:解决企业应用开发的复杂性

◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

◆范围:任何Java应用

Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。

Spring有七大功能模块,分别是Spring Core,AOP,ORM,DAO,MVC,WEB,Context。

使用Spring框架能带来哪些好处?

(1)spring 属于低侵入式设计,代码的污染极低;

(2)spring 的 DI 机制将对象之间的依赖关系交由框架处理,减低组件的耦合性;

(3)Spring 提供了 AOP 技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用。

(4)spring 对于主流的应用框架提供了集成支持。

1**.低侵入式设计,代码污染极低**

2.独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的

承诺

3.Spring的DI机制降低了业务对象替换的复杂性,提高了组件之间的解耦

4.Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好

的复用

5.Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问

6.Spring并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部

3.什么是控制反转(IOC)?什么是依赖注入?

IOC 就是控制反转,原来我们需要创建对象的,必须自己 new,但是现在有了 spring 容器,我们不需要再自己 new 了,有两个好处,解耦,因为对象自己 new 完之后,无法更改,如果依赖对象发生异常,则会对我们自己的类造成 影响。 springIOC,用户只需要进行配置,容器会在容器中自动实例化依赖对象,并且是单例模式,直接通过@autowired 直接注入即可。 IOC 主要是通过反射实现,底层原理大概是这样的:

项目启动,加载 web.xml;

在 web.xml 根据 context-param 通过 contextListener 加载 spring 上下文, 加载 spring 配置文件;

我猜,spring 可能通过 dom4j 解析 xml 配置文件;

4、获取 bean 标签,一旦发现 bean 标签,则读取 class 属性;

5、通过反射,Class.forName,获取该类的 class 字节码对象;

6、调用通过 Constructor 的 newInstance()实例化对象;

7、说 IOC 就离不开 DI,所谓 DI 是依赖注入,spring 的依赖注入有两种方式: 构造注入和 setter 注入;

8、所谓构造注入,就是读取标签的, 通过 class 字节码文件对象,获取构造参数;

9,通过 Constructor,直接构造对象,并对依赖对象进行初始化;

10、setter 注入,就是通过反射的;

11、通过 Field,设置依赖对象的属性值,dom4j 读取 property 标签的 name 和 value 属性值, 根据 name 获取 Field 成员,一般来说会通过 setAccessible 暴力破解,然后通过 set 方法, 指定 field 的对象和属性值,完成 setter 注入。

总结:以上就是对于 spring 的 IOC 和 DI 的理解,大概就是通过反射和 dom4j 完成控制反转和依赖注入。

Spring 的 IOC 有三种注入方式 :构造器注入、setter 方法注入、根据注解注入。

EasyUI框架基础

SVN版本管理工具

面试题

1. 什么是SVN?

“SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。”

\2. 列举下SVN的常用操作

SVN插件安装及操作

1.如何解决SVN冲突?

1、可以将自己的代码拷贝走,然后版本回滚,回滚到别人修改的版本,再把自己修改的内容加进去,提交新版本;

2、通过 IDE 自带的 diff 工具,进行冲突对比,进行本地文件和远程仓库文件对比,进行文件编辑,然后标记冲突 已解决,提交即可。

\2. 如何实现SVN版本回退?

34. 如何实现SVN版本回退?

Revert to this revision

35.@Resource注解和@Autowired****注解有什么区别?

两个注解都是为类中的属性赋值

@Autowired注解可以自动为类中的属性赋值值,既可以通过类型注入也可以通过名称注入

@Resource(name=“XXX”)这个注解有个属性name,name的值必须写UserDao里@Component的值;

因为Resource是通过引用的方式注入的,引用的就是UserDao里@Component表示的对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值