1:下列关于类的描述,正确的是?
A.在Java中类只允许单一继承
B.在Java中接口只允许单一继承
C.在Java中一个类只能实现一个接口
D.在Java中一个类不能同时继承一个类和实现一个接口
【答案解析】Java中,一个子类只能有一个父类,也就是”单继承",但一个父类可以有多个子类Java中,一个类可以实现多个接口,这个没有限制,也称作"多实现”Java中,一个类既可以继承一个类,也可以同时实现多个接口Java中,接口既可以单继承,也可以多继承,没有限制
2:定义接口用什么关键字?
A.interface
B.implements
C.extends
D.abstract
【答案解析】interface是定义接口的关键字,extends是建立继承关系的关键字,implements是实现接口的关键字,abstract表示抽象
3:下列哪个方法可以返回指定字符串的一部分?
A.Substring()
B.toString()
C.substring()
D.concat()
【答案解析】可以通过substring方法来截取某一段的字符串
4:分支结构switch(expr),若jdk为jdk1.8,那么expr可以是以下哪种类型?
A.byte
B.Integer
C.int
D.String
【答案解析】选择结构switch小括号中expr的类型可以是:byte short char int String enum(枚举类型)Integer类型也可以的原因是包装类型可以自动拆箱成基本类型
5:下列关于Eclipse说法正确的是?
A.在源文件编写的时,Ctrl+s会触发Eclipse调用Java编译器编译该文件
B.Eclipse中的Workspace是用于存储工程的路径
C.Eclipse下载完成后,不需要特殊的安装,仅需解压即可
D.Eclipse是开放源代码的Java开发平台
【答案解析】以上关于Eclipse的描述都是正确的
6:下列方法重载说法正确的是?
A.如果方法的参数个数相同,需要逐一确认对应位置上参数的类型
B.如果方法的参数个数不同,一定构成重载
C.方法的重载与方法的参数名无关,而与参数的个数&类型&顺序有关
D.方法的重载要求两个方法必须在同一个类中
【答案解析】方法名称必须相同,参数列表必须不同(包括类型,个数和顺序)
7:对于异常(Exception),下列描述正确的是?
A.异常可以不做任何处理,直接抛给外层的main()函数
B.如果某异常继承 RuntimeException,则该异常可以不被声明
C.异常可以用 try{…}catch(Exception e){…}来捕获并进行处理
D.异常的基类为Exception,所有异常都必须直接或者间接继承它
【答案解析】异常的继承结构中,父级是Throwable,下一级才是Error与Exception我们可以选择抛出异常,但是异常不能直接抛给main()因为调用main()的是JVM,没人处理了
1:有关MVC的处理过程,描述不正确的是
A.视图将模型返回的数据呈现给用户
B.模型确定调用哪个视图进行数据展示
C.首先控制器接收用户的请求,决定调用哪个模型来进行处理
D.模型处理用户的请求并返回数据
【答案解析】模型会返回一个Modelandview,视图解析器能够解析并决定调用哪个视图进行数据展示
2:以下哪个不是SpringMVC框架提供的注解
A.Controller
B.RestController
C.PathVariable
D.RequestMapping
【答案解析】SpringMVC框架提供了很多注解,包括:RequestMapping 、PathVariable、RestController。但是Controller注解是Spring框架提供的而非SpringMVC
3:在Mybatis中,下列关于ResultType说法错误的是
A.resultType表示返回值类型为:完整类名或者别名,mybatis也允许使用基本数据类型,比如String,int
B.如果Pojo属性名和sql语句查询出来的字段不一致,也能用resultType进行结果映射
C.resultType和resultMap不能同时使用
D.resultType返回值有基本类型,对象类型,List类型,Map类型等
【答案解析】当pojo的属性名与sql语句查询出来的字段名不一致的时候,需要使用resultMap来进行结果的映射,不能使用resultType
4:MyBatis的mapper接口调用时哪些描述是错误的
A.Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的resultType的类型相同
B.Mapper接口的全路径即是Mapper.xml文件中的namespace的值
C.Mapper接口方法名和mapper.xml中定义的每个sql的id相同
D.Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
【答案解析】Mapper.xml文件中的规范很多,其中namespace的值应该和接口的全路径保持一致。SQL的ID值应该和接口中的方法名称一致。方法的返回值应该和SQL的resultType一致。而方法的参数应该和parameterType一致但是parameterType可以省略
5:下面的标记用于使HTML文档中表格里的单元格在同行进行合并的是
A.colspan
B.rowspan
C.cellpadding
D.cellspacing
【答案解析】cellspacing是单元格之间的间距;cellpadding是单元格内文字与边框的距离;rowspan是纵向合并行;colspan是横向合并行
6:v-show和v-if指令的共同点和不同点
A.v-show 本质就是通过设置 css 中的 display 设置为 none,控制隐藏
B.v-show 只编译一次,然后控制 css,而 v-if 不停的销毁和创建,故 v-show性能更好
C.都能控制元素的显示和隐藏
D.v-if 是动态的向 DOM 树内添加或者删除 DOM 元素
【答案解析】Vue的指令很多,以上两种指令作用类似用来控制元素显示或者隐藏,只是实现方式不同
7:以下事务的说法,正确的是?
A.事务具有ACID特性
B.事务通常以start transaction开始,以commit或rollback结束
C.用户不能控制事务的开始与结束
D.事务是用户定义的一个操作序列,这些操作要么全部做要么全部不做,是一个不可分割的工作单位
【答案解析】用户能控制事务的开始与结束,当要操作多个sql语句共用一个事务时必须手动开启并结束
8:Mybatis中哪些属性可以完成ORM
A.resultType
B.column
C.property
D.resultMap
【答案解析】resultType可以完成简单的ORM映射关系,resultMap完成复杂的。column用来描述表里的字段名,property用来描述类里的属性名
9:${} 和 #{}的区别哪些是正确的
A.#使用预编译
B.#可以防止SQL注入,而$不可以
C.$使用预编译
D.#可以高效完成SQL,$是普通查询
【答案解析】#底层使用了预编译的工具类,可以高效的完成SQL处理。会把参数转成?再编译执行,可以有效的防止SQL注入攻击问题
10:关于Mybatis中的#占位符,用法不正确的是?
A.select id,name from user where name = #{userName}
B.select id,name from user where #{name} = #{userName}
C.select id,name from user where name = userName
D.select id,#{filedName} from #{userTable}
【答案解析】select id,name from user where #{name} = #{userName}解析后的sql语句为 select id,name from user where 'name' = 'userName';select id,name from user where #{name} = #{userName}解析后的sql语句为 select id,name from user where name = userName;select id,#{filedName} from #{userTable}解析后的sql语句为 select id, 'filedName' from 'userTable'这三项解析后的sql语句都不正确
11:在商品管理系统中,使用jQuery ajax发送请求,实现查询所有商品信息并显示至界面,最少需要在jQuery ajax中设置哪些属性()。
A.success
B.data
C.type
D.url
【答案解析】url地址 发送请求的地址。必须,需要访问查询所有商品信息接口; type 请求方式 ,必须,http请求方式,是post还是get提交等 ; data 发送到服务器的数据,由于我们这个是查询,不是提交数据,故不是必须项;success请求成功后调用的回调函数,必须成功后,见商品信息显示在页面
12:下面是关于Maven的说法正确的是×
A.Maven必须安装JDK(JRE),否则不能使用.
B.Maven必须设置环境变量,否则不能在eclispe中使用.
C.Maven必须配置本地仓库路径,用于存放jar包
D.Maven不自定义镜像仓库,默认从中央仓库下载jar包
【答案解析】使用maven不用配置环境变量,而且本地仓库路径是有默认指定位置也不必要配置
1:关于Linux说法正确的是
A.Linux中有盘符的概念
B.cd /user/local 是相对路径
C.cd user/local 是绝对路径
D.Linux中没有盘符的概念 以/开头
【答案解析】Linux系统中没有盘符的概念,是树形结构,以/开头. 有/的是绝对路径 没有/的是相对路径
2:关于MybatisPlus中条件构造器说明正确的是?
A.条件构造器不能为null
B.条件构造器用来拼接where条件
C.条件构造器只能用于查询操作
D.所有的查询操作都必须添加条件构造器
【答案解析】MP中的条件构造器用来动态拼接where条件MP可以用在CURD的方法中,并且不是必须的/可以为null
3:下列请求中属于RESTFul结构的是?
A.http://localhost:8090/deleteUserById?id=200
B.http://localhost:8090/getUserById?id=100
C.http://localhost:8090/finduser/tomcat/18/男
D.http://localhost:8090/user/100
【答案解析】RESTFul的请求中要求不能出现动词,并且以/分割
4:MybatisPlus中的BaseMapper中的更新方法有几个?
A.2个
B.3个
C.4个
D.1个
【答案解析】MybatisPlus中的BaseMapper中的更新方法只有2个 update/updateById
5:MybatisPlus中的BaseMapper中的新增方法有几个?
A.4个
B.3个
C.2个
D.1个
【答案解析】MybatisPlus中的BaseMapper中的新增方法只有1个 insert()方法,详情查看BaseMapper接口
6:关于MariaDB开放权限说明正确的是?
A.默认权限都是关闭的,需要手动开启
B.默认权限都是开放的,所有人都能访问
C.开放远程访问权限的关键字是?号
D.开放远程访问权限的关键字是*号
【答案解析】默认权限是关闭的,需要手动开启, 开放权限的关键字是 %号
7:git中创建分支结构的命令是?
A.git merge
B.git checkout -b
C.以上都不对
D.git branch
【答案解析】git branch表示选择分支; git中创建分支结构的命令是 git checkout -b "新分支的名称"git merge合并分支
8:关于JSON结构写法错误的是?
A.[1,2,3,4,5]
B.{"id"=1,name="tomcat"}
C.{"id":1, name:"tomcat"}
D.["1","2","3","4"]
【答案解析】[1,2,3,4,5]数值类型写法 ["1","2","3","4"]字符串类型写法 {"id":1, name:"tomcat"}对象类型写法{"id"=1,name="tomcat"}:JSON的key-value应该使用:号连接
9:Linux中关闭防火墙的命令是?
A.systemctl -stop firewalld.service
B.systemctl stop firewalld
C.systemctl stop firewalld.service
D.systemctl disable firewalld.service
【答案解析】disable表示关闭防火墙的配置,不代表关闭防火墙
10:用户执行 git commit -m "xx"的作用是?
A.将代码提交到本地仓库
B.将代码提交到远程仓库中
C.将代码提交到缓存区
D.将代码提交到工作区中
【答案解析】commit的作用是将代码提交到本地仓库中.
11:SpringBoot中为属性赋值的常用注解是?
A."@Value("${key}")"
B."@Value("#{key}")"
C."@Value("{key}")"
D."@Value("{{key}}")"
【答案解析】SpringBoot中为属性赋值的常用注解是"@Value("${key}")",其他的都不满足语法 这是概念题
12:SpringBoot整合Mybatis中关于@MapperScan说法正确的是?
A.该注解将指定路径下的接口为其创建代理对象,交个Spring管理
B.这个注解是将Spring交给Mybatis管理
C.该注解来自 org.spring.mybatis.annotation.MapperScan
D.该注解将Mybatis交给Spring管理
【答案解析】注解@MapperScan是Spring管理Mybatis接口的注解,不是管理框架本身.注解@MapperScan来自 org.mybatis.spring.annotation.MapperScan;
13:Linux中查询JDK的命令是
A.java --version
B.java -version
C.jar -version
D.java version
【答案解析】考察Linux中常用命令 java -version为显示JDK的指令
14:关于JS中模版字符串的用法说明正确的是?
A.使用双引号"进行标识
B.使用${}获取变量
C.使用#{}获取变量
D.使用反引号` 进行标识
【答案解析】本题目考察模版字符串的用法, 使用反引号`进行标识,取值使用$ 不能使用#号
15:关于JSON说明正确的是?
A.JSON的本质就是字符串
B.JSON有3种基本结构
C.JSON有2种基本结构
D.一种轻量级的数据交换格式
【答案解析】本地考察JSON的概念是否理解, JSON中只有2种基本结构 1.array 2.object 嵌套结构不属于基本结构
16:关于JSON结构写法正确的是?
A.{"id"=1,name="tomcat"}
B.["1","2","3","4"]
C.[1,2,3,4,5]
D.{"id":1, name:"tomcat"}
【答案解析】{"id"=1,name="tomcat"}中使用=号连接,不属于JSON的语法,[1,2,3,4,5]和["1","2","3","4"]都是JSON格式 一种是数值JSON,一种是字符串JSON. {"id":1, name:"tomcat"}为常见对象格式
17:关于SpringBoot中 YML文件的语法说明正确的是
A.数据结构采用key-value结构
B.写法: key:(空格)value
C.字符默认加载采用UTF-8的编码格式
D.key与key之间有层级结构,所以写的时候需要注意缩进
【答案解析】上述四项都是YML文件的基本语法.是一道概念题
18:关于@SpringBootTest注解说明正确的是?
A.该注解可以将Spring容器中的对象自动注入.
B.该注解在任何位置都能使用
C.该注解需要配合@Test注解使用
D.该注解只能在测试包中使用
【答案解析】注解@SpringBootTest的只能用到测试包下
19:关于SpringBoot parent标签的作用
A.parent标签定义了所有第三方的jar包,所以任何jar包都不要添加版本号
B.parent标签定义了当前SprinBoot版本依赖的jar包版本信息
C.parent标签可以不指定
D.parent标签定义的版本都是官方测试过的,几乎没有版本冲突问题
【答案解析】SpringBoot中的parent标签指定了其他依赖版本信息,并且解决了版本冲突,但是springBoot不可能整合所有的第三方框架,Parent标签是所有SpringBoot项目都应该有的
1、【单选题】
4. Spring 将每个 bean 实例放在一个作用域中。默认的作用域是什么?(选择一项)
A.request
B.session
C.prototype
D.singleton
【答案解析】Spring 管理对象默认的作用域是单例的,即 singleton。
2、当使用 Spring Boot 配置和运行 Web 应用程序时,你应包含哪个依赖项以在开发过程中更改代码时启用应用程序的自动重启?
A.spring-boot-starter-devtools
B.spring-boot-restart
C.spring-boot-devtools
D.spring-boot-initializr
3、在应用程序的初始化过程中,这些事件将以什么顺序发生?请选择最佳答案。(1. Setter 依赖注入 2. Bean 构造函数 3. 调用 BeanFactoryPostProcessors 4. 调用 BeanPostProcessors)
A.2,1,3,4
B.2,1,4,3
C.3,1,2,4
D.3,2,1,4
E.4,2,1,3
【答案解析】Configuration Lifecycle: Bean detection (read @Bean method signature / @Component scanning) --> BeanFactoryPostProcessor --> Bean instantiation and dependency injection (call @Bean method implementations / instantiation & @Autowired on constructor & Injection of @Autowired methods and fields) --> BeanPostProcessor
4、关于以下代码,哪个说法是正确的?
ClientService service = applicationContext.getBean(ClientService.class);
A.这个语法是无效的,因为 getBean()方法调用的结果应该显式地投向 ClientService
B.这个语法是无效的,因为 bean id 必须被指定为方法参数
C.它返回名为"ClientService"的 bean
D.它返回的是一个类型为 ClientService 的 bean(不管它的 id 或名称是什么)
【答案解析】以上代码是从 Spring 容器中获取对象的代码,当使用类作为 getBean()参数时,会尝试从 Spring 容器中获取匹配类型 的对象,原题和各选项中没有说明其它前提条件,则视为获取成功,返回匹配类型的对象,对象的 Bean id/name 是默认 名,即将类名的首字母改为小写的名称(如果类/接口名的前 2 个字母均是大写的,则 Bean id/name 与类/接口名完全相 同)。 源码中的方法签名: public T getBean(Class requiredType) throws
5、以下哪个说法最能说明"After Returning" advice 类型?(选择一项)
A.通常用于防止任何由 advice 方法抛出的异常在调用栈中传播
B."After Returning" advice 允许在方法返回后添加行为,即使它抛出了一个异常
C.该 advice 对方法的调用具有完全的控制权,它甚至可以完全阻止方法的调用
D.该 advice 只有在方法成功返回时才会被调用,如果该方法抛出异常则不会被调用
【答案解析】A:该 Advice 并不针对异常有特殊的处理; B:该 Advice 仅当方法返回了某个值之后才会执行,如果抛出异常,必然没有返回值; C:不在方法之前执行的 Advice 显然无法阻止方法的调用.
6、关于 Spring 的 JUnit 4 或 JUnit 5 集成测试支持,以下哪个说法是正确的?(选择一项)
A.为每个测试方法初始化并创建一个新的 ApplicationContext
B.在一个应用程序中,你必须使用 JUnit 4 或 JUnit 5 进行所有的测试
C.你可以通过@ContextConfiguration 来说明测试类将使用哪些配置类
D.为了获取要测试的 Spring Bean 的引用,你需要在提供的 Application Context 上调用 getBean()
7、以下哪个说法最能定义"pointcut"?
A.选择一个或多个 join point 的表达式
B.囊括 advice 的模块
C.程序执行中的点,如方法调用或字段分配
D.在每个选定的 join point 执行的代码
【答案解析】An expression that selects one or more Join Points
8、考虑下面的 Java 配置类,声明的 bean 的 id/名称是什么? @Configuration public class AppConfig{ @Bean public ClientService clientService(){ return new ClientServiceImpl(); } }
A.clientServiceImpl(以小写"c"开头)
B.clientService(以小写"c"开头)
C.ClientServiceImpl(以大写"C"开头)
D.ClientService(以大写"C"开头)
【答案解析】默认的 Bean id/name 是@Bean 方法名称,也可通过@Bean 注解的方法
9、在ApplicationContext中定义使用singleton作用域的两个MyBean类型的bean,id为"myBean"1和"myBean2"。getBean(String id)方法对每个bean被调用一次。关于返回的两个引用,哪个说法是正确的?
A.两个引用指向同一类型的不同实例
B.两个引用指向同一个bean实例
C.当ApplicationContext被初始化时,将抛出RuntimeException
D.其中一个引用将是null
10、以下哪个说法最能定义"aspect"?
A.程序执行中的一个点,如方法调用或字段分配
B.选择一个或多个 join point 的表达式
C.在被 pointcut 选中的 join point 上执行的代码
D.与 pointcut 结合的 advice 的囊括
【答案解析】Aspect: A module that encapsulates pointcuts and advice
11、你希望应用一个 aspect 来阻止异常在堆栈中传播,并返回一个错误值。你会使用哪种类型的 advice?
A."After Returning"
B."After Throwing"
C."After"
D."Around"
E."Before"
【答案解析】After Throwing:Only invokes advice if the right exception type is thrown, The @AfterThrowing advice will not stop the exception from propagation, However it can throw a different type of exception. If you wish to stop the exception from propagating any further, you can use an @Around advice.
12、如果你用@Component 来注解一个类,你应该做以下哪项才能让 Spring 自动检测到注解的类并将其加载为 bean?
A.确保为该类指定一个有效的@Scope
B.确保在 Java 配置中指定一个有效的@ComponentScan 注解
C.确保在@Component 注解中指定一个有效的 bean 名称
D.确保为类指定一个有效的@Bean
【答案解析】A:@Scope 用于指定作用域; C:Spring 管理 Bean 可以生成默认的名称,不一定需要显式的指定名称; D:@Bean 注解不是用于类的。
13、要注册一个 bean 销毁回调,可以:(选择一项)
A.配置 bean 实例,以使用"prototype"作用域
B.用@PostDestroy 注解回调方法
C.用@PreDestroy 注解回调方法
D.在 bean 配置中添加@Lazy 注解
【答案解析】A:prototype 只确定作用域,与回调无关 B:无此注解 D:@Lazy 只确定“懒加载”,与回调无关
14、默认情况下, Spring Boot 将自动在以下哪个地方查找属性文件?(选择一项)
A.与 Application 的主@Configuration 类名称相匹配的一个 properties 文件
B.application. properties 或 application.yml,通常位于根 classpath 中
C.config.properties 或 config.yml,通常位于根 classpath 中
D.Spring Boot 不会自动查找任何属性文件,除非特别指示(例如使用@PropertySource)
【答案解析】Spring Boot looks for application.properties in these locations (in this order) : "/config" sub-directory of the working directory; The working directory; "config" package in the classpath; classpath root
15、考虑以下来自 @Configuration 类的代码,并应用 Spring 的默认行为,选择正确答案(选择一项) @Configuration public class MyConfig { @Bean public AccountRepository accountRepository(){ return new JdbcAccountRepository(); } @Bean public TransferService transferService(){ TransferServiceImpl service = new TransferServiceImpl(); service.setAccountRepository(accountRepository()); return service; } @Bean public AccountService accountService(){ return new AccountServiceImpl(accountRepository()); } }
A.两个 AccountRepository bean 将被实例化,因为 accountRepository()方法将被调用两次
B.三个 AccountRepository bean 将被实例化,因为 accountRepository()方法将被调用三次
C.一个 AccountRepository bean 将被实例化,因为默认的作用域是 Singleton
D.许多 AccountRepository bean 将被实例化取决于调用 accountRepository(),transferService()和 accountService()的频率
【答案解析】C:Spring IoC 的底层是基于代理模式的,即带@Bean 注解的方法是被 Spring 代理的,不会反复创建对象。
16、考虑下面的配置示例。以下哪个说法是正确的?(选择一项) @Configuration public class ApplicationConfig { @Bean public RewardNetwork rewardNetwork() { return new RewardNetworkImpl(accountRepository()); } @Bean public AccountRepository accountRepository() { return new JdbcAccountRepository(); } }
A.这种配置是正确的
B.这个配置是无效的,因为第一个 bean 应该有一个 id,可以使用@Bean("rewardNetwork")来设置它
C.这个配置是无效的,因为第二个 bean 应该有一个 id,可以使用@Bean("accountRepository")来设置它
D.这个配置是无效的,因为两个 bean 都应该有一个用@Bean 指定的 id
【答案解析】Spring 并不要求为每个 Bean 显式的指定 id/name,即使没有显式的指定,Spring 也会自动为 Bean 设置 id/name。
17、入门 POM 最恰当的描述是什么?
A.一个特定的 POM,你必须构建它来控制 Boot 的意见运行时
B.一种简单的方法,可以包含多个与特定技术相关的、协调的依赖项,如 web 或 JDBC
C.一种设置,用于指定你希望 Spring Boot 生成的代码
D.一个已有的模型项目,供你下载并作为项目的基础
18、已给出下面的 pointcut,下列哪些关于 Spring AOP 的说法是正确的? execution(@com.mycomp.MyCustomAnnotation void *(..)) 1. Spring 不支持其 pointcut 表达式语言内部的注解 2. 这将选择代表被@com.mycomp.MyCustomAnnotation 注解的 void 方法的 join point 3. 这将选择代表只位于根包中的类的方法的 join point 4. 这个 pointcut 将永远无法选择任何 join point
A.说法 2 和 3 是正确的
B.说法 2 是正确的
C.都是错误的
D.说法 4 是正确的
E.说法 1 是正确的
【答案解析】说法1:About Pointcuts: Spring AOP uses AspectJ’s pointcut expression language, Spring AOP supports a practical subset.说法3:在execution表达式中,如果是 *(..) 格式,可以通配所有包(含各级子包),如果指定了包名,仅用于选择指定的包,并不包含子包,如果指定包名且需要通配子级包,需要在包名处使用 .. 进行通配。
19、当 Spring 容器正常关闭时,要在 bean 上调用"cleanup"方法,可以使用以下哪种技术?(选择两项)
A.用@PreDestroy 注解该方法
B.任何方法名为 preDestroy 的方法都会被自动调用
C.在@Configuration 类中,用@Bean(destroyMethod="cleanup")来注解创建该 bean 的方法
D.定义一个 id="shutdown"的 bean,让它调用 cleanup 方法
【答案解析】BeanFactoryPostProcessor --- Can modify the definition of any bean in the factory before any objects are created. --- Applies transformations to bean definitions, before objects are actually created. --- Most Common Example : Recall @Value and ${..} variables, use a PropertySourcesPlaceholderConfigurer to evaluate them, this is a BeanFactoryPostProcessor.
20、关于@RequestMapping 注解,以下哪些说法是真的?
A.利用 method 属性,它可以替代@GetMapping 或@PutMapping
B.你可以使用它在一个@Controller 注解的类中注解一个方法
C.它是一个将网络请求映射到 Controller 方法的注解
D.不支持 HEAD 方法
E.可用于将 Controller 方法映射到 View
21、哪些说法表明使用 Spring 的依赖注入的潜在优势:
A.应用组件之间的依赖项可以在组件本身的外部进行管理
B.配置可以外部化并集中在一小组文件中
C.测试变得更容易,因为在单元测试时,可以很容易地将 mock dependency 对象注入到依赖对象中
D.依赖注入帮助 IDE 生成一些代码
E.依赖注入可以减少应用程序的启动时间
【答案解析】D:Spring 并不能作用于 IDE; E:应用程序的启动时间与依赖注入机制没有关系,一定程度上来说,由于 Spring 默认以饿汉式管理 Bean,由于有了依赖 注入,启动时间反而更久一些
22、关于@Controller 注解类,以下哪些说法是正确的?(选择三项)
A.@Controller 注解是@Component 注解的一种类型
B.它们有资格在 Spring MVC 中处理请求
C.@Controller 与@ RestController 可以互换的,类里面的方法不需要额外的代码修改
D.可以通过组件扫描发现
E.不能注入依赖项
23、以下哪些注解是由@Spring Boot Application 组成的注解的元注解?(选择两项)
A.@SpringBootConfiguration
B.@Autowired
C.@SpringApplication
D.@ComponentScan
【答案解析】@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan( excludeFilters = {@Filter( type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class} ), @Filter( type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class} )} ) public @interface SpringBootApplication { }
24、如何访问 application. properties 或 application.yml 文件中定义的属性?(选择两项)
A.通过调用 ApplicationContext 对象的 getProperty(...)方法
B.通过自动创建的 Properties 对象
C.通过 Spring Environment 对象
D.通过一个@Value 注解的构造函数参数
25、关于 advice 类型和异常处理,以下哪些说法是正确的?(选择两项)
A."After Returning" advice 类型可以吞没或阻止目标方法抛出的异常的传播
B.如果"Before" advice 方法抛出异常,则不会调用目标方法
C."Around"advice 类型可以吞没或阻止目标方法抛出的异常的传播
【答案解析】A:After Returning -- 先执行目标方法,当成功返回某个值后才会触发; B:Before -- 在目标方法之前触发; C:Around -- 在目标方法之前触发,且在触发后自行调用目标方法,则调用时可处理异常。
26、关于 Spring Boot,以下哪些说法是正确的?(选择两项)
A.Spring Boot 会生成你的应用程序所需的所有应用程序级别的配置文件
B.Spring Boot 允许不同的打包选项,例如将 Tomcat 打包为应用程序 JAR 文件中的嵌入式容器
C.Spring Boot 是一个苛刻的运行时,它要求遵守规定的方法,不能有任何偏差
D.Spring Boot 试图让开发者摆脱最可预测的低级设置
27、以下哪项注解将一个类标记为组件扫描器的 Spring bean?
A.@Autowired
B.@Configuration
C.@Service
D.@Controller
E.@Aspect
F.@Component
【答案解析】A:@Autowired 是用于属性、Setter、构造方法的,并不用于类;E:@Aspect 只表示类是一个“切面类”,需结合@Component 或其它组件注解才可以被 Spring 扫描。
28、关于 pointcut 表达式,以下哪些说法是正确的?
A.pointcut 表达式的方法名不能有通配符
B.pointcut 表达式可以包括以下运算符:&&(and)、ll(or)、!(not)
C.pointcut 表达式可以用来选择已被特定注解的 join point
D.pointcut 表达式不能指定参数的类型
29、关于创建 bean,以下哪些说法是正确的?
A.通过@Autowired 注解方法或字段,显式创建 Spring Bean
B.通过@Bean 注解类,并使用组件扫描器扫描它的包,隐式创建 Spring bean
C.使用@Component 注解类,并使用组件扫描器扫描它的包,隐式创建 Spring bean
D.在 Spring 配置文件中使用@Bean 注解方法,显式创建 Spring bean
【答案解析】当需要 Spring 管理某个类的对象时,可以:--- 在类的声明之前添加组件注解(@Component、@Service 等),且类必须在组件扫描的包或其子孙包中; --- 自定义方法返回类的对象,在方法上使用@Bean 注解,并确保该方法所在的类会被 Spring 上下文加载。
30、以下代码显示了一个将用于创建ClientService bean的Java配置类。对该类还需要做哪些工作?(选择两项) public class AppConfig{ public ClientService clientService(){ return new ClientServiceImpl(); } }
A.该方法应该用@Autowired 进行注解
B.该方法应该用@Bean 进行注解
C.该类应该用@Configuration 进行注解
D.该类应该用@ComponentScan 进行注解
【答案解析】如果要使得方法的返回对象被 Spring 管理,该方法必须添加@Bean 注解,且该方法所在的类必须被 Spring 上下文加载,例如该类添加@Configuration 作为配置类,或被其它类@Import 导入,甚至直接作为创建上下文对象时的参数。
31、关于构造函数注入,以下哪些说法是正确的?(选择两项)
A.使用构造函数注入可以实现不变性
B.如果只有一个构造函数,则不需要使用@Autowired 注解
C.在一个目标 bean 中,构造函数注入和字段注入不能同时使用
D.从测试的角度看,字段注入优于构造函数注入
【答案解析】A:不变性:Spring 不提倡使用字段注入(即声明依赖项属性并添加@Autowired),因为存在 NPE 的风险,主要表现为 在执行单元测试时(单元测试:无任何其它环境,包括 Spring 环境,如果测试时加载 Spring 或其它环境,则称之为集成 测试,甚至可能是系统测试),如果没有对依赖项属性赋值,则会因为依赖项属性值没有值而导致 NPE,所以 Spring 鼓励 使用构造方法注入,当使用构造方法注入时,不需要 Setter,对于类的外部而言,则没有了修改依赖项属性值的入口,从 而达成“不变性”,同时,也消除了 NPE 风险,除非你显式的传递一个 null 到构造方法的调用中。 B:Spring 会自动调用无参数构造方法(如果存在)来创建对象;如果缺失无参数构造方法,当仅 1 个构造方法时, Spring 也会自动调用;当存在多个构造方法时,Spring 仍会自动尝试调用无参数构造方法(如果存在),如果需要 Spring 调用特定的构造方法,需要在指定的构造方法上添加@Autowired 注解; C:错误,可以同时使用构造方法、Setter 方法和字段注入; D:同 A 的解析,使用字段注入存在 NPE 风险。
32、关于 Spring Boot 自动配置,以下哪些说法是正确的?(选择两项)
A.当缺少 bean 时,可能会发生自动配置。但当存在 bean 时,不会发生自动配置
B.自动配置是通过处理 Spring Boot 提供的自动配置类列表来执行的,每个自动配置类都使用不同的条件集
C.只有在应用级配置完成后,才会出现自动配置的情况
D.自动配置发生在应用级配置之前和之后
【答案解析】Auto-configuration classes processed after explicitly created beans are defined.
33、关于基于 Spring Boot 的 Web 应用程序的"fat"jar,以下哪些说法是正确的?(选择两项)
A."fat"jar 必须是 JAR 文件,不能是 WAR 文件
B."fat"jar 可以包含多个嵌入式服务器
C."fat"jar 会被 Spring Boot Maven 插件或 Gradle 插件构建起来
D."fat"jar 可以在容器和云平台上轻松部署
34、以下哪些可以作为 controller 方法的参数?(选择三项)
A.Locale
B.Principal
C.HttpSession
D.Language
E.Session
35、关于基于 Spring Boot 的 Spring MVC 应用程序,以下哪些说法是正确的?(选择两项)
A.Jetty 是默认的嵌入式 Web 服务器
B.Spring Boot 默认启动嵌入式 Web 服务器
C.你可以在运行时让两台嵌入式服务器共享同一个端口
D.你可以用你选择的服务器替换默认的嵌入式 Web 服务器
36、假设你想将所有的 Spring bean 类定义在一个名为"com.mycomp.service"的包下。要启用组件扫描,你必须执行以下操作:
A.确保所有的 bean 类都用@ Autowired 来注解
B.在你的 Java 配置中添加@ComponentScan("com.mycomp.service")
C.确保所有的 bean 类都用@Bean 进行注解
D.确保所有的 bean 类都用@Component 或其中的一个定型注解(@Service,@Controller...)来注解
【答案解析】当需要 Spring 管理某个类的对象时,可以: --- 在类的声明之前添加组件注解(@Component、@Service 等),且类必须在组件扫描的包或其子孙包中; --- 自定义方法返回类的对象,在方法上使用@Bean 注解,并确保该方法所在的类会被 Spring 上下文加载
37、当多个 bean 与依赖项的类型相匹配时,以下是可能的自动布线机制。其中哪个是正确的?
A.只在 setter 方法中使用@Qualifier 注解(@Autowired 对于 setter 是可选的)
B.使用@Qualifier 和@Autowired 注解以及 setter 方法
C.在字段上同时使用@Qualifier 和@Autowired 注解
D.只在字段上使用@Qualifier 注解(@Autowired 对字段是可选的)
【答案解析】自动布线:Autowired,即自动装配。 本题考察如果有多个类型相同的 Bean 时,如何实现自动装配。 除了构造方法以外,无论是通过 Setter 还是字段注入,都必须使用@Autowired 注解,当存在多个类型相同的 Bean 时, 还必须配合@Qualifier 一起使用,即在同一处同时使用这 2 个注解
38、以下哪些是 controller 方法参数的有效注解?
A.@RequestBody
B.@ResponseBody
C.@ResponseStatus
D.@PathVariable
E.@RequestParam
F.@RequestHeader
39、以下哪些会影响 Spring Boot 的自动配置?
A.classpath 的内容
B.特定 bean 的预先存在
C.你的应用程序的包结构
D.在 application.properties 或 application.yml 文件中设置的特定外部属性,如 spring.datasource.*属性等
E.无论你的应用是否是一个多模块对象
【答案解析】AutoConfiguration can be controlled by : properties; explicit bean definition; disabling of auto configuration; altering dependency versions.
40、关于 Spring MVC,以下哪些说法是正确的?
A.Controllers 通常可以委托给 service bean 的 business 方法,因为 service bean 可以注入到 Controller 中去了
B.用@Controller 注解的类可以通过组件扫描检测到,并以 Spring bean 的形式加载
C.数据可以通过使用特殊的 Model 参数从 Controller 传递到 View 中
D.你不能在 Controller 类上使用构造函数注入
E.Controllers 必须注入@Service bean 或@Repository bean
41、以下哪些关于 BeanFactoryPostProcessors 的说法是正确的?(选择两项)
A.检测@PostConstruct 和@PreDestroy 注解,然后调用适当的行为
B.允许在实例化 Spring bean 之前转换 bean 定义
C.允许在实例化 Spring bean 后转换 bean
D.PropertySourcesPlaceholderConfigurer 是 BeanFactoryPostProcessor 接口的实现,用于读取 Spring Environment 中的属性值
【答案解析】BeanFactoryPostProcessor --- Can modify the definition of any bean in the factory before any objects are created. --- Applies transformations to bean definitions, before objects are actually created. --- Most Common Example : Recall @Value and ${..} variables, use a PropertySourcesPlaceholderConfigurer to evaluate them, this is a BeanFactoryPostProcessor.
42、关于下面的 pointcut 表达式,下列哪些说法是正确的:(选择两项)execution(@javax.annotation.security.RolesAllowed * rewards.restaurant.*.*(..))
A.类名可以被任意命名
B.目标方法可以有零个或多个参数
C.所有的方法参数都应该用@RolesAllowed 来注解
D.目标方法的返回类型是 RolesAllowed
【答案解析】A:表达式中倒数第 2 个星号即是通配类名的,则类名可以是任意名称; B:表达式末尾的括号中的 2 个小数点即是通配方法参数的,则方法的数量可以是 0~N 个; C / D:表达式中的@RolesAllowed 注解表示匹配的方法必须添加了该注解,而不是参数或返回值。
43、给定一个 ApplicationContext 包含三个类型为"Foo"的 bean 定义,其 bean id 分别为 foo1、foo2 和 foo3,以下哪些@Autowired 方案是有效的,并允许 ApplicationContext 成功初始化?
A.@Autowired @Qualifier("foo3") Foo foo;
B.@Autowired public void setFoo(@Qualifier("foo1") Foo foo) {...}
C.@Autowired public void setFoo(Foo foo) {...}
D.@Autowired private Foo foo2;
E.@Autowired private Foo foo;
【答案解析】由于存在 3 个类型相同的 Spring Bean,在自动装配时,必须保证 Spring 框架知晓装配哪一个,选项 AB 使用了 @Qualifier 注解并显式的指定 Bean id,是正确的,选项 D 通过属性名匹配了其中 1 个 Bean id,也是可行的,而选项 C 和选项 E 都没有指定有效的 Bean id,按类型又无法装配,这样的代码会导致初始化 Spring 环境时的运行时错误。
44、关于 Spring Boot 自动配置的自定义,以下哪些说法是正确的?
A.你可以通过将自动配置类子类化,明确地禁用一些自动配置
B.你可以通过在 application. properties 文件中设置一个属性或使用@EnableAutoConfiguration 注解上的 exclude 属性来明确地禁用一些自动配置
C.如果某些自动配置不适合你的需要,你可以明确地禁用它
D.你只能禁用所有的自动配置。即,你不能只禁用部分自动配置
【答案解析】AutoConfiguration can be controlled by : properties; explicit bean definition; disabling of auto configuration; altering dependency versions.
45、以下关于@Autowired 注解的哪些说法是正确的?
A.可以使用 Autowired 将多个参数注入到一个方法中
B.默认情况下,如果一个依赖项不能用@Autowired 来满足, Spring 会抛出一个 RuntimeException
C.它不能用来注解字段,只能用来注解构造函数和方法
D.如果在一个类上使用了@Autowired,则会自动对所有的依赖项进行字段注入
【答案解析】C:不能用于注解字段,错误; D:@Autowired 不是用于类上的。
46、关于 Spring AOP,以下哪些说法是正确的?
A.横切关注点的例子包括安全、缓存、事务
B.Spring AOP 不使用 AspectJ 的 pointcut 表达式语言
C.无论方法是否成功返回或抛出异常,都会调用"After"advice 类型
D.在 Spring AOP 中,一个 join point 代表一个方法执行或属性访问
【答案解析】A:Cross-Cutting Concerns:Logging and Tracing, Transaction Management, Security, Caching, Error Handling, Performance Monitoring, Custom Business Rules. C:Called regardless of whether an exception has been thrown by the target or not.
47、图片显示的是一个 Java 配置类。哪些说法是正确的?(选择两项) @Configuration public class AppConfig { @Bean public ClientService clientService() { ClientServiceImpl clientService = new ClientServiceImpl(); clientService.addClientDao(new ClientDao()); return clientService; }
A.该 bean 不能使用以"add"开头的方法来注入依赖项
B.这个 Java 配置可以通过使用@Profile 注解来指定配置文件
C.该 bean 的类型为 ClientService
D.声明的 bean 默认是一个 prototype
【答案解析】A:对名称没有要求; D:只要没有显式的指定作用域,默认的就是 singleton。
48、关于 BeanPostProcessor 扩展点,以下哪些说法是正确的?(选择两项)
A.BeanPostProcessors 在 bean 生命周期的 init 阶段被调用
B.可以实现自定义 BeanPostProcessor
C.在注入依赖项之前,BeanPostProcessors 就被调用
D.在 BeanFactoryPostProcessors 被调用之前, BeanPostProcessors 就被调用
【答案解析】--- Bean Initialization Steps: Load Bean Definition --> Post Process Bean Definition --> Find/Create its Dependencies --> Instantiate Beans --> Perform Setter Injection --> BeanPostProcessor --> Initializer --> BeanPostProcessor --> Bean Ready For Use. --- BeanPostProcessor is an interface, Spring provides several implementations, you can write you own (not common), typically implements the after initialization method. --- Configuration Lifecycle: Bean detection (read @Bean method signature / @Component scanning) --> BeanFactoryPostProcessor --> Bean instantiation and dependency injection (call @Bean method implementations / instantiation & @Autowired on constructor & Injection of @Autowired methods and fields) --> BeanPostProcessor
49、关于@EnableAutoConfiguration 注解,以下哪些说法是正确的?(选择两项)
A.如果没有 application. properties 或 application.yml 文件,就不能使用它
B.它是由@SpringBootConfiguration 合成的注解的元注解
C.它是由@SpringBootApplication 合成的注解的元注解
D.它使 Spring Boot 自动创建它认为应用程序需要的 bean
50、下面显示了在"META-INF/spring.factories"文件中指定的自动配置类 @Configuration @ConditionalOnClass(HelloService.class) public class HelloAutoConfig{ @ConditionalOnMissingBean(HelloService.class) @Bean HelloService helloService(){ return new TypicalHelloService(); } 以下哪些说法是正确的?(选择两项)
A.只有当 ApplicationContext 中没有其他 HelloService bean 时,才会从 helloService()方法中创建一个新的 HelloService bean
B.只有当 HelloService.class 在 classpath 中时,才会使用这个自动配置类
C.从 helloService()方法中将创建一个新的 HelloService bean,如果 ApplicationContext 中已有一个 HelloService bean,它将替换现有的 HelloService bean
D.即使 HelloService.class 不在 classpath 中,也会从 helloService()方法中创建一个新的 HelloService bean
【答案解析】--- @ConditionalOnClass:是 Spring Boot 实现自动配置的重要支撑之一。其用途是判断当前 classpath 下是否 存在指定类,若是则将当前的配置装载入 spring 容器; --- @ConditionalOnMissingBean:在容器加载它作用的 bean 时,检查容器中是否存在目标类型 (ConditionalOnMissingBean 注解的 value 值)的 bean 了,如果存在跳过原始 bean 的 BeanDefinition 加载动作