编程技术是改变世界的力量。
本站
当前位置:网站首页 > 后端语言 > 正文

javaSSM高频面试题(附答案) java ssm面试题

gowuye 2024-04-04 11:56 13 浏览 0 评论

SSM

1 请写出 spring 常用的依赖注入方式

通过 setter 方法注入

通过构造方法注入

2 简述Spring中IOC容器常用的接口和具体的实现类

● BeanFactory SpringIOC容器的基本设置,是最底层的实现, 面向框架本身的.

● ApplicationContext BeanFactory的子接口, 提供了更多高级的特定. 面向开发者的.

● ConfigurableApplicationContext, ApplicationContext的子接口,扩展出了 close 和 refresh等 关闭 刷新容器的方法

● ClassPathXmlApplicationContext:从classpath的XML配置文件中读取上下文,并生成上下文定义。应用程序上下文从程序环境变量中取得。

● FileSystemXmlApplicationContext :由文件系统中的XML配置文件读取上下文。

● XmlWebApplicationContext:由Web应用的XML文件读取上下文。

3 简述Spring中如何基于注解配置Bean和装配Bean

(1)首先要在Spring中配置开启注解扫描

<context:component-scan base-package=” ”></ context:component-scan>

(2)在具体的类上加上具体的注解

(3)Spring 中通常使用@Autowired 或者是@Resource 等注解进行bean的装配

4 说出Spring 或者 Springmvc中常用的5个注解,并解释含义

@Component 基本注解,标识一个受Spring管理的组件

@Controller 标识为一个表示层的组件

@Service 标识为一个业务层的组件

@Repository 标识为一个持久层的组件

@Autowired 自动装配

@Qualifier(“”) 具体指定要装配的组件的id值

@RequestMapping() 完成请求映射

@PathVariable 映射请求URL中占位符到请求处理方法的形参

只要说出这几个注解并解释含义即可,如上答案只做参考

5 请解释Spring Bean的生命周期?

(1)默认情况下,IOC容器中bean的生命周期分为五个阶段:

● 调用构造器 或者是通过工厂的方式创建Bean对象

● bean对象的属性注入值

● 调用初始化方法,进行初始化,初始化方法是通过init-method来指定的.

● 使用

● IOC容器关闭时, 销毁Bean对象.

(2)当加入了Bean的后置处理器后,IOC容器中bean的生命周期分为七个阶段:

● 调用构造器 或者是通过工厂的方式创建Bean对象

● 给bean对象的属性注入值

● 执行Bean后置处理器中的 postProcessBeforeInitialization

● 调用初始化方法,进行初始化,初始化方法是通过init-method来指定的.

● 执行Bean的后置处理器中 postProcessAfterInitialization

● 使用

● IOC容器关闭时, 销毁Bean对象

只需要回答出第一点即可,第二点也回答可适当 加分。

6 简单的谈一下SpringMVC的工作流程?

● 用户发送请求至前端控制器DispatcherServlet

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

● 处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

● DispatcherServlet调用HandlerAdapter处理器适配器

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

● Controller执行完成返回ModelAndView

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

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

● ViewReslover解析后返回具体View

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

● DispatcherServlet响应用户

7 SpringMVC中如何解决POST请求中文乱码问题

Springmvc中通过CharacterEncodingFilter解决中文乱码问题.

在web.xml中加入:

<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

8 简述SpringMvc里面拦截器是如何定义,如何配置,拦截器中三个重要的方法

定义:有两种方式

● 实现HandlerInterceptor接口

● 继承HandlerInterceptorAdapter

配置:

<mvc:interceptors>
<!--默认是对所有请求都拦截 -->
<bean id="myFirstInterceptor" class="com.atguigu.interceptor.MyFirstInterceptor">
</bean>
<!-- 只针对部分请求拦截或者不拦截 -->
<mvc:interceptor>
<mvc:mapping path=" " /> <!—指定拦截-->
<mvc:exclude-mapping path=””/> <!—指定不拦截-->
<bean class=" com.atguigu.interceptor.MySecondInterceptor " /> </mvc:interceptor>
</mvc:interceptors>

拦截器中三个重要的方法:

● preHandle

● postHandle

● afterCompletion

9 MyBatis中 #{}和${}的区别是什么?

#{}是预编译处理,${}是字符串替换;

Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;

Mybatis在处理${}时,就是把${}替换成变量的值;

使用#{}可以有效地防止SQL注入,提高系统安全性。

10 Mybatis 结果集的映射方式有几种,并分别解释每种映射方式如何使用。

自动映射 ,通过resultType来指定要映射的类型即可。

自定义映射 通过resultMap来完成具体的映射规则,指定将结果集中的哪个列映射到对象的哪个属性。

11 简述MyBatis的单个参数、多个参数如何传递及如何取值。

MyBatis传递单个参数,如果是普通类型(String+8个基本)的,取值时在#{}中可以任意指定,如果是对象类型的,则在#{}中使用对象的属性名来取值

MyBatis传递多个参数,默认情况下,MyBatis会对多个参数进行封装Map,取值时在#{}可以使用0 1 2 .. 或者是param1 param2..

MyBatis传递多个参数,建议使用命名参数,在Mapper接口的方法的形参前面使用

@Param() 来指定封装Map时用的key. 取值时在#{}中使用@Param指定的key

12 MyBatis如何获取自动生成的(主)键值?

在<insert>标签中使用 useGeneratedKeys 和 keyProperty 两个属性来获取自动生成的主键值。

示例:

<insert id=”insertname” usegeneratedkeys=”true” keyproperty=”id”>
 insert into names (name) values (#{name})
</insert>

13 简述Mybatis的动态SQL,列出常用的6个标签及作用

动态SQL是MyBatis的强大特性之一 基于功能强大的OGNL表达式。

动态SQL主要是来解决查询条件不确定的情况,在程序运行期间,根据提交的条件动态地完成查询

常用的标签:

<if> : 进行条件的判断

<where>:在<if>判断后的SQL语句前面添加WHERE关键字,并处理SQL语句开始位置的AND 或者OR的问题

<trim>:可以在SQL语句前后进行添加指定字符 或者去掉指定字符.

<set>: 主要用于修改操作时出现的逗号问题

<choose> <when> <otherwise>:类似于java中的switch语句.在所有的条件中选择其一

<foreach>:迭代操作

14 Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?

不同的Xml映射文件,如果配置了namespace,那么id可以重复;如果没有配置namespace,那么id不能重复。

15 Mybatis 如何完成MySQL的批量操作,举例说明

MyBatis完成MySQL的批量操作主要是通过<foreach>标签来拼装相应的SQL语句.

例如:

<insert id="insertBatch" >
 insert into tbl_employee(last_name,email,gender,d_id) values
<foreach collection="emps" item="curr_emp" separator=",">
(#{curr_emp.lastName},#{curr_emp.email},#{curr_emp.gender},#{curr_emp.dept.id})
</foreach>
</insert>

16 简述Spring中如何给bean对象注入集合类型的属性

Spring使用 <list> <set> <map> 等标签给对应类型的集合注入值

17 简述Spring 中bean的作用域

总共有四种作用域:

● Singleton 单例的

● Prototype 原型的

● Request

● Session

18 简述Spring中自动装配常用的两种装配模式

byName: 根据bean对象的属性名进行装配

byType: 根据bean对象的属性的类型进行装配,需要注意匹配到多个兼容类型的bean对象时,会抛出异常。

19 请解释@Autowired注解的工作机制及required属性的作用

(1)首先会使用byType的方式进行自动装配,如果能唯一匹配,则装配成功,

如果匹配到多个兼容类型的bean, 还会尝试使用byName的方式进行唯一确定.

如果能唯一确定,则装配成功,如果不能唯一确定,则装配失败,抛出异常.

(2)默认情况下, 使用@Autowired标注的属性必须被装配,如果装配不了,也会抛出异常.

可以使用required=false来设置不是必须要被装配.

20 简述Springmvc中ContextLoaderListener的作用以及实现原理

作用:

ContextLoaderListener的作用是通过监听的方式在WEB应用服务器启动时将Spring的容器对象进行初始化.

原理:

ContextLoaderListener 实现了ServletContextListener接口,用于监听

ServletContext的创建,当监听到ServletContext创建时,在对应contextInitialized

方法中,将Spring的容器对象进行创建,并将创建好的容器对象设置到ServletContext域对象中,

目的是让各个组件可以通过ServletContext共享到Spring的容器对象

21 简述Mybatis提供的两级缓存,以及缓存的查找顺序

(1)MyBatis的缓存分为一级缓存和 二级缓存。

一级缓存是SqlSession级别的缓存,默认开启。

二级缓存是NameSpace级别(Mapper)的缓存,多个SqlSession可以共享,使用时需要进行配置开启。

(2)缓存的查找顺序:二级缓存 => 一级缓存 => 数据库

22 简述Spring与Springmvc整合时,如何解决bean被创建两次的问题

Bean被创建两次的问题是在组建扫描的配置中指定Springmvc只负责扫描WEB相关的组件,Spring扫描除了Springmvc之外的组件。

23 简述Spring与Mybatis整合时,主要整合的两个地方

(1)SqlSession创建的问题,通过SqlSessionFactoryBean来配置用于创建SqlSession的信息。例如: Mybatis的核心配置文件、Mapper映射文件、数据源等

(2)Mapper接口创建的问题, 使用MapperScannerConfigurer批量为MyBatis的Mapper接口生成代理实现类并将具体的对象交给Spring容器管理

24 简述Spring声明式事务中@Transaction中常用的两种事务传播行为

通过propagation来执行事务的传播行为

REQUIRED:使用调用者的事务,如果调用者没有事务,则启动新的事务运行

REQUIRES_NEW:将调用者的事务挂起,开启新的事务运行。

25 简述@RequestMapping注解的作用,可标注的位置,常用的属性

(1)该注解的作用是用来完成请求 与 请求处理方法的映射

(2)该注解可以标注在类上或者是方法上

(3)常用的属性:

value: 默认属性, 用于指定映射的请求URL

method: 指定映射的请求方式

params: 指定映射的请求参数

headers: 指定映射的请求头信息

26 简述Springmvc中处理模型数据的两种方式

● 使用ModelAndView 作为方法的返回值,将模型数据和视图信息封装到ModelAndView中

● 使用Map或者是Model 作为方法的形参,将模型数据添加到Map或者是Model中

27 简述REST中的四种请求方式及对应的操作

GET 查询操作

POST 添加操作

DELETE 删除操作

PUT 修改操作

28 简述视图和视图解析的关系及作用

  • ● 视图是由视图解析器解析得到的。
  • ● 视图解析器的作用是根据ModelAndView中的信息解析得到具体的视图对象
  • ● 视图的作用是完成模型数据的渲染工作,最终完成转发或者是重定向的操作

29 说出三个 常用的视图类

InternalResourceView

JstlView

RedirectView

30 简述REST中HiddenHttpMethodFilter过滤器的作用

该过滤器主要负责转换客户端请求的方式,当浏览器的请求方式为POST,并且在请求中能通过 _method获取到请求参数值。该过滤器就会进行请求方式的转换。

一般在REST中,都是将POST请求转换为对应的DELETE 或者是PUT

31 简述Springmvc中如何返回JSON数据

Step1:在项目中加入json转换的依赖,例如jackson,fastjson,gson等

Step2:在请求处理方法中将返回值改为具体返回的数据的类型, 例如数据的集合类List<Employee>等

Step3:在请求处理方法上使用@ResponseBody注解

这里再补充一个注意点:使用@ResponseBody注解需要开启注解驱动功能,也就是需要配置

32 简述如何在myBatis中的增删改操作获取到对数据库的影响条数

直接在Mapper接口的方法中声明返回值即可

33 Springmvc中的控制器的注解用哪个,可以是否用别的注解代替

使用@Controller注解来标注控制器,不能使用别的注解代替。

34 如何在Springmvc中获取客户端提交的请求参数

直接在请求处理方法中声明对应的形参,也可以是用@RequestParam注解来具体指定将那些请求参数映射到方法中对应的形参。

35 简述Springmvc中InternalResourceViewResolver解析器的工作机制

使用prefix + 方法的返回值 + suffix 生成一个物理视图路径。

36 Springmvc中如何完成重定向

在请求处理方法的返回值前面加 redirect: 前缀, 最终会解析得到RedirectView,RedirectView会完成重定向的操作。

37 简述Spring中切面中常用的几种通知,并简单解释

前置通知 在目标方法执行之前执行

后置通知 在目标方法执行之后执行,不管目标方法有没有抛出异常

返回通知 在目标方法成功返回之后执行, 可以获取到目标方法的返回值

异常通知 在目标方法抛出异常后执行

环绕通知 环绕着目标方法执行

38 解释MyBatis中 @Param注解的作用

通过该注解来指定Mybatis底层在处理参数时封装Map使用的key,方便在SQL映射文件中取参数。

39 简述Mybatis中使用Mapper接口开发,如何完成Mapper接口与SQL映射文件、方法与SQL语句的绑定

Mapper接口与SQL映射文件绑定:SQL映射文件中的namespace的值指定成Mapper接口的全类名

接口中方法与SQL语句的绑定:SQL语句的id 指定成接口中的方法名。

40 SpringMVC的工作原理

(1)用户向服务器发送请求,请求被springMVC 前端控制器 DispatchServlet 捕获;

(2)DispatcherServle 对请求 URL 进行解析,得到请求资源标识符(URL),然后根据该 URL 调用 HandlerMapping将请求映射到处理器 HandlerExcutionChain;

(3)DispatchServlet 根据获得 Handler 选择一个合适的HandlerAdapter 适配器处理;

(4)Handler 对数据处理完成以后将返回一个 ModelAndView()对象给 DisPatchServlet;

(5)Handler 返回的 ModelAndView() 只是一个逻辑视图并不是一个正式的视图, DispatcherSevlet 通过ViewResolver 视图解析器将逻辑视图转化为真正的视图View;

(6)DispatcherServle 通过 model 解析出 ModelAndView()中的参数进行解析最终展现出完整的 view 并返回给客户端;

41 谈谈你对Spring 的理解

Spring 是一个开源框架,为简化企业级应用开发而生。Spring 可以是使简单的JavaBean 实现以前只有EJB 才能实现的功能。Spring 是一个 IOC 和 AOP 容器框架。

Spring 容器的主要核心是:

控制反转(IOC),传统的 java 开发模式中,当需要一个对象时,我们会自己使用 new 或者 getInstance 等直接或者间接调用构造方法创建一个对象。而在 spring 开发模式中,spring 容器使用了工厂模式为我们创建了所需要的对象,不需要我们自己创建了,直接调用spring 提供的对象就可以了,这是控制反转的思想。

依赖注入(DI),spring 使用 javaBean 对象的 set 方法或者带参数的构造方法为我们在创建所需对象时将其属性自动设置所需要的值的过程,就是依赖注入的思想。

面向切面编程(AOP),在面向对象编程(oop)思想中,我们将事物纵向抽成一个个的对象。而在面向切面编程中,我们将一个个的对象某些类似的方面横向抽成一个切面,对这个切面进行一些如权限控制、事物管理,记录日志等公用操作处理的过程就是面向切面编程的思想。AOP 底层是动态代理,如果是接口采用 JDK 动态代理,如果是类采用CGLIB 方式实现动态代理。

42 Spring中常用的设计模式

(1)代理模式——spring 中两种代理方式,若目标对象实现了若干接口,spring 使用jdk 的java.lang.reflect.Proxy类代理。若目标兑现没有实现任何接口,spring 使用 CGLIB 库生成目标类的子类。

(2)单例模式——在 spring 的配置文件中设置 bean 默认为单例模式。

(3)模板方式模式——用来解决代码重复的问题。

比如:RestTemplate、JmsTemplate、JpaTemplate

(4)工厂模式——在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用同一个接口来指向新创建的对象。Spring 中使用 beanFactory 来创建对象的实例。

43 请描述一下Spring的事务管理

(1)声明式事务管理的定义:用在 Spring 配置文件中声明式的处理事务来代替代码式的处理事务。这样的好处是,事务管理不侵入开发的组件,具体来说,业务逻辑对象就不会意识到正在事务管理之中,事实上也应该如此,因为事务管理是属于系统层面的服务,而不是业务逻辑的一部分,如果想要改变事务管理策划的话,也只需要在定义文件中重新配置即可,这样维护起来极其方便。

基于 TransactionInterceptor 的声明式事务管理:两个次要的属性: transactionManager,用来指定一个事务治理器, 并将具体事务相关的操作请托给它; 其他一个是 Properties 类型的transactionAttributes 属性,该属性的每一个键值对中,键指定的是方法名,方法名可以行使通配符, 而值就是表现呼应方法的所运用的事务属性。

(2)基于 @Transactional 的声明式事务管理:Spring 2.x 还引入了基于 Annotation 的体式格式,具体次要触及@Transactional 标注。@Transactional 可以浸染于接口、接口方法、类和类方法上。算作用于类上时,该类的一切public 方法将都具有该类型的事务属性。

(3)编程式事物管理的定义:在代码中显式挪用 beginTransaction()、commit()、rollback()等事务治理相关的方法, 这就是编程式事务管理。Spring 对事物的编程式管理有基于底层 API 的编程式管理和基于 TransactionTemplate 的编程式事务管理两种方式。

相关推荐

嵌入式C语言中常量的应用实例(嵌入式c语言中常量的应用实例是什么)

常量,我们都知道,就是数值保持不变的量。在C语言中,常量一旦初始化了,它的值将在整个程序运行周期内,不允许发生任何变化。常量与变量是相对的,我们实际项目中经常会用到它。定义常量的两种方式C语言中主要有...

C语言编程基础知识汇总学习,适合初学者!更新常量知识

(二)整型常量整型常量有3种形式:十进制整型常量、八进制整型常量和十六进制整型常量。(注意:c语言中没有直接表示二进制的整型常量,在c语言源程序中不会出现二进制。)书写方式如下:十进制整型常量:123...

【C语言】第二章第六节:字符串常量

第二章第六节:字符串常量。下表C语言中的常用转义字符。·字符形式功能:ASCIl码(十进制形式)。→\t水平制表(横向跳格:跳到下一个tab位置)。→\b退格8。→\r回车(不换行,光标移到本行行首)...

「GCTT 出品」Go 系列教程——5. 常量

这是我们Golang系列教程的第五篇。定义在Go语言中,术语”常量”用于表示固定的值。比如5、-89、IloveGo、67.89等等。看看下面的代码:varaint=50v...

每日C语言-常量指针、指针常量、指向常量的指针常量

一、常量指针1)什么是常量指针?通过该指针不可以修改其所指向存储单元中的值指针本身即地址可以被修改2)定义:类型说明符const*指针变量;类型说明符表示指针所指向存储单元中的值得数据类型指针...

C语言-符号常量、常变量、变量之我见

更新内容:新增音频。音频和文章一起更配oHello,大家好,又和大家见面了~~相信很多朋友们听了C语言的“符号常量”、“常变量”、“变量”后还是对这三者一脸懵逼吧。不管老师怎么歇斯底里地讲解,同学们迷...

零基础带你学习C语言:四:探索常量与变量

前言常量与变量学习;一:分析:short、float、long类型#include<stdio.h>intmain(){shortage=18;floatweight=12...

C语言中是如何定义常量的?那定义字符串呢?

常量有整型常量、浮点型常量、字符型常量及字符串常量。‘常量定义是指定义符号常量,用一个标识符来代表一个常量,通过宏定义预处理指令来实现。常量的定义:#definecount60这就定义了一个常量...

C语言符号常量的优点,会是那几点?

符号常量是一个常量,是不变量,所以,在编译的时候,就把符号常量出现的地方,替换为符号常量对应的常量。符号常量一般用户定义一个全局使用的数据,而且要改变该数据的时候,只需要改变符号常量的值,代码中引用符...

嵌入式开发- C语言数据类型-常量(c语言嵌入式是干嘛的)

基本数据类型的常量-掌握**整型常量:**常量是指在程序运行期间其数值不发生变化的数据。整型常量通常简称为整数整数可以是十进制数、八进制数、十六进制数八进制06334十六进制0xd1...

c语言解剖课:只读变量、常量、字面量傻傻分不清?

写在前面本篇主题的缘起,是因为一个计算机专业的大学生在和我讨论c语言问题时,说const常量如何如何,我说变量被const修饰了,还是变量,不是“常量”。他给了我一个截图:他说大模型都是这样回答的,变...

C/C++编程笔记:C数组、字符串常量和指针!三分钟弄懂它

想弄懂C语言中数组和指针的关系吗?这篇文章就占据你三分钟时间,看完你肯定会有收获!数组数组声明为数据类型名称[constant-size],并将一个数据类型的一个或多个实例分组到一个可寻址的位...

C语言入门到精通【第008讲】——C语言常量

C语言常量常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。常量就像是常规的变量,只不过常...

这是C语言无法修改得东西,C语言基础教程之常量解析

常量是指程序在执行期间不会改变的固定值。这些固定值也称为文字。常量可以是任何基本数据类型,如整数常量,浮点常量,字符常量或字符串文字,还有枚举常量。常量被视为常规变量,除了它们的值在定义后无法修改。整...

C语言中的单精度、双精度、常量等都有什么意思?

刚接触C语言时,对于常量,变量,浮点,单精度,双精度等问题的理解,大都很模糊不清,其实在程序运行过程中,其值不能改变的量称为常量。如12、0、-3为整型常量,4.6、-1.23为实型常量,'a'、'...

取消回复欢迎 发表评论: