Java框架核心笔试题(含详细答案)_第1页
Java框架核心笔试题(含详细答案)_第2页
Java框架核心笔试题(含详细答案)_第3页
Java框架核心笔试题(含详细答案)_第4页
Java框架核心笔试题(含详细答案)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java框架核心笔试题(含详细答案)适用场景:Java后端实习生、初级开发岗位笔试考察范围:Spring、SpringMVC、MyBatis核心基础、原理与实战问题题型:选择题、简答题、问答题、实操题一、单项选择题(共10题)1.Spring框架的核心思想是?()A.面向对象编程B.控制反转与依赖注入C.面向切面编程D.模块化编程答案:B解析:Spring两大核心是IOC(控制反转)和DI(依赖注入),AOP是Spring重要拓展功能,并非核心思想。2.以下不属于SpringBean作用域的是?()A.singletonB.prototypeC.globalD.request答案:C解析:Spring标准Bean作用域包含singleton(单例)、prototype(多例)、request、session、application,无global作用域。3.SpringMVC的核心分发器是?()A.HandlerMappingB.DispatcherServletC.ControllerD.ViewResolver答案:B解析:DispatcherServlet是SpringMVC的前端控制器,负责接收所有请求、分发请求、调度整个流程,是核心入口。4.MyBatis中用于实现动态SQL的标签不包括?()A.<if>B.<foreach>C.<switch>D.<choose>答案:C解析:MyBatis动态SQL常用标签:if、choose、when、otherwise、foreach、trim、where、set,无switch标签。5.Spring中事务默认的传播级别是?()A.REQUIREDB.REQUIRES_NEWC.SUPPORTSD.MANDATORY答案:A解析:REQUIRED为默认传播级别,当前有事务则加入,无事务则新建事务。6.以下关于SpringBean单例的说法正确的是?()A.SpringBean单例是线程安全的B.SpringBean默认单例,由IOC容器管理C.单例Bean每次请求都会创建新对象D.原型Bean默认全局唯一答案:B解析:Spring默认Bean为单例,由IOC容器统一创建管理;单例Bean非线程安全,原型Bean每次获取都会新建对象。7.SpringAOP中,在目标方法执行前后都会执行的通知是?()A.@BeforeB.@AfterC.@AroundD.@AfterReturning答案:C解析:@Around环绕通知,可以在目标方法执行前、后自定义逻辑,还能控制方法是否执行;其余通知仅执行单次节点。8.MyBatis中#{}和${}的核心区别是?()A.无区别B.#{}防止SQL注入,${}直接拼接字符串C.${}防止SQL注入D.#{}只能传字符串答案:B解析:#{}是预编译参数占位符,会做参数转义,杜绝SQL注入;${}直接拼接SQL语句,存在注入风险,多用于表名、字段名动态拼接。9.SpringMVC中@RequestParam注解的作用是?()A.获取路径变量B.获取请求参数C.获取请求体JSON数据D.设置响应参数答案:B解析:@RequestParam用于获取URL拼接的请求参数、表单参数;@PathVariable获取路径变量,@RequestBody获取JSON请求体。10.以下哪种情况Spring事务会失效?()A.public方法上加@TransactionalB.同类中普通方法调用事务方法C.事务方法抛出运行时异常D.事务方法独立调用答案:B解析:Spring事务基于AOP动态代理实现,同类内部方法调用不会触发代理,事务无法生效。二、简答题(共6题,基础核心)1.简述SpringIOC的原理和作用?参考答案:IOC即控制反转,核心是将对象的创建、依赖管理、生命周期管控,从开发者手动new对象的方式,反转交给SpringIOC容器统一管理。核心作用:1.解耦:彻底解除组件之间的硬编码依赖,降低代码耦合度;2.统一管理:容器统一创建、初始化、销毁Bean,无需手动管理对象生命周期;3.便于拓展:配合依赖注入,轻松实现组件替换、功能拓展,适配业务迭代。2.说说SpringDI依赖注入的三种方式?参考答案:1.构造器注入:通过类的构造方法传入依赖对象,Spring官方推荐,能保证对象初始化完成后依赖完全就绪,安全性高;2.Setter方法注入:通过set方法赋值依赖,适合对象创建后需要动态修改依赖的场景;3.字段注入:通过@Autowired直接注入字段,写法简洁,但耦合度较高,不利于单元测试,企业开发中谨慎使用。3.SpringAOP的应用场景有哪些?参考答案:AOP即面向切面编程,基于动态代理对方法进行增强,不修改原有业务代码,常用场景:1.统一日志记录:接口请求、方法执行日志统一打印;2.事务控制:通过@Transactional统一管理方法事务;3.权限校验:接口访问权限、登录状态统一校验;4.性能监控:统计方法执行耗时;5.缓存处理、限流拦截等通用功能。4.详细说明MyBatis中#{}和${}的使用场景?参考答案:1.#{}:预编译占位符,参数会被MyBatis自动转义,杜绝SQL注入,日常查询、新增、修改的参数传递优先使用,支持传入实体类、基本数据类型;2.${}:字符串直接拼接,无预编译、无转义,存在SQL注入风险,仅用于动态拼接表名、字段名、排序字段等无法使用预编译的场景;注意:使用${}时必须手动做参数校验,防止恶意注入。5.SpringMVC完整执行流程?参考答案:1.客户端发起HTTP请求,请求统一被前端控制器DispatcherServlet拦截;2.DispatcherServlet调用HandlerMapping处理器映射器,根据请求URL匹配对应的Controller处理器;3.获取处理器适配器HandlerAdapter,执行匹配到的Controller业务方法;4.Controller处理业务逻辑,返回数据和视图信息给DispatcherServlet;5.视图解析器ViewResolver解析视图,渲染页面(前后端分离项目直接返回JSON数据,无需视图渲染);6.DispatcherServlet将最终响应结果返回给客户端。6.为什么Spring事务推荐用RuntimeException?参考答案:Spring事务默认只对运行时异常(RuntimeException)和Error触发回滚,对编译时异常(CheckedException)默认不回滚。原因:编译时异常需要开发者手动try-catch捕获,属于可预期、可处理的异常,框架不会擅自回滚事务;而运行时异常多是代码bug、数据异常等不可预期问题,必须回滚保证数据一致性。如需让编译时异常触发回滚,可手动配置@Transactional(rollbackFor=Exception.class)。三、进阶问答题(共3题,面试高频)1.SpringBean的生命周期?参考答案:1.实例化:IOC容器扫描Bean定义,通过反射创建Bean实例;2.属性填充:完成依赖注入,给Bean的属性赋值;3.初始化前置处理:执行BeanPostProcessor的前置处理方法;4.初始化:执行InitializingBean的afterPropertiesSet方法、自定义init方法;5.初始化后置处理:执行BeanPostProcessor的后置处理方法,完成Bean增强(AOP代理在此阶段生成);6.就绪可用:Bean完成初始化,放入单例池,供业务调用;7.销毁:容器关闭时,执行DisposableBean的destroy方法、自定义destroy方法。2.说说Spring事务失效的常见场景?参考答案:1.方法权限问题:@Transactional注解加在非public方法上,AOP无法代理,事务失效;2.内部调用:同类中普通方法直接调用事务方法,未经过代理对象,事务不生效;3.异常类型错误:方法抛出编译时异常,且未手动指定rollbackFor,默认不回滚;4.异常被捕获:事务方法内部try-catch捕获异常,未向上抛出,框架无法感知异常,不会回滚;5.传播级别配置不当:如REQUIRES_NEW、NOT_SUPPORTED等级别使用错误,导致事务无法正常生效;6.数据库不支持事务:使用MyISAM引擎(仅InnoDB支持事务)。3.MyBatis一级缓存和二级缓存的区别?参考答案:1.一级缓存(默认开启)级别:SqlSession级别,同一个数据库会话内有效;特点:会话关闭、执行增删改操作后,缓存自动清空;缓存仅当前会话可见,不同会话无法共享;适用:单次会话内重复查询相同数据,减少数据库访问。2.二级缓存(默认关闭,需手动配置)级别:Mapper映射文件级别,跨SqlSession、跨会话共享;特点:全局缓存,多个用户、多个会话可共享缓存数据;增删改操作会清空对应Mapper的缓存;适用:查询多、修改少的静态数据,如字典、配置信息。四、实操改错题(1题,职场高频)题目:以下代码存在事务失效问题,请指出问题并修改。java

@Service

publicclassUserService{

@Transactional

publicvoidupdateUser(){

try{

//修改用户信息

userMapper.update();

//模拟异常

inti=1/0;

}catch(Exceptione){

e.printStackTrace();

}

}

}错误原因:方法内部直接try-catch捕获了所有异常,异常未向上抛出,Spring事务管理器无法检测到异常,因此不会触发事务回滚,导致数据脏数据。修改方案:方案1:捕获异常后手动抛出运行时异常,触发回滚;方案2:去除try-catch,让异常自动抛出。java

@Service

publicclassUserService{

@Transactional

publicvoidupdateUser(){

try{

userMapper.update();

inti=1/0;

}catch(Exceptione){

e.printStackTrace();

//手动抛出异常,触发事务回滚

thrownewRuntimeException("操作失败",e);

}

}

}五、加分拓展题(笔试压轴)问题:Sp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论