java测试题(下)

1. Spring 核心概念

1.1 如何理解 Spring DI?

DI(依赖注入)IoC(控制反转) 的具体实现方式,由 Spring 容器在运行时通过以下方式自动注入依赖:

  • 构造器注入(推荐)

  • Setter 注入

  • 字段注入(不推荐,因测试困难)

开发者无需手动 new 依赖对象,降低耦合度。


1.2 基于注解配置作用域与延迟加载

注解作用域示例描述
@Scope@Scope("singleton")(默认)单例模式,全局唯一实例
@Scope("prototype")每次请求创建新实例
@Scope(value="request")每个 HTTP 请求一个实例(Web 环境)
@Lazy@Lazy(true)延迟初始化,首次使用时创建 Bean

示例代码

@Component
@Scope("prototype")
@Lazy
public class MyBean { }

1.3 BeanFactory vs ApplicationContext

特性BeanFactoryApplicationContext
加载时机懒加载(调用 getBean() 时)预加载(容器启动时初始化所有单例 Bean)
高级功能支持国际化、事件传播、AOP 等
适用场景资源受限环境(如移动设备)企业级应用(99% 场景使用)

1.4 Spring Bean 生命周期

  1. 实例化:通过反射创建 Bean 实例。

  2. 属性赋值:DI 注入依赖。

  3. 初始化

    • 调用 @PostConstruct 方法

    • 实现 InitializingBeanafterPropertiesSet()

  4. 使用:容器中的 Bean 被调用。

  5. 销毁

    • 调用 @PreDestroy 方法

    • 实现 DisposableBeandestroy()


1.5 Bean 作用域对比

作用域描述适用场景
singleton默认作用域,容器内唯一实例无状态服务(如工具类、DAO)
prototype每次请求创建新实例有状态对象(如用户会话)
request每个 HTTP 请求一个实例(Web 环境)表单数据、请求级缓存
session每个 HTTP Session 一个实例用户登录状态、购物车
application整个 Web 应用共享一个实例(ServletContext)全局配置、缓存

1.6 设计模式应用

模式示例
工厂模式BeanFactory 创建 Bean 实例
单例模式默认作用域 singleton
代理模式AOP 动态代理(JDK/CGLIB)
观察者模式事件监听(ApplicationListener
模板方法模式JdbcTemplateRestTemplate

1.7 Controller 并发安全

  • 无状态设计:避免定义成员变量。

  • 线程安全:所有数据通过方法参数或局部变量传递。

  • 示例

    @RestController
    public class SafeController {// 正确:无成员变量@GetMapping("/test")public String test(@RequestParam String param) {return "Result: " + param;}
    }

2. Spring MVC

2.1 处理流程

  1. DispatcherServlet 接收请求。

  2. HandlerMapping 根据 @RequestMapping 匹配 Controller。

  3. HandlerAdapter 调用 Controller 方法。

  4. Controller 返回 ModelAndView 或 JSON(@ResponseBody)。

  5. ViewResolver 解析视图(如 JSP、Thymeleaf)。

  6. 渲染视图 并返回响应。


2.2 与 AJAX 交互

  • 后端:使用 @RestController + @ResponseBody 返回 JSON。

  • 前端:AJAX 请求示例(jQuery)

    $.get("/api/user/1", function(data) {console.log(data.name);
    });

2.3 与 Struts2 对比

特性Spring MVCStruts2
控制器单例(线程安全)多例(每个请求一个 Action)
配置注解驱动(零 XML)基于 XML 和 OGNL
性能更高(无拦截器栈)较低(复杂 OGNL 解析)
生态与 Spring Boot 无缝集成社区已停滞

3. Spring 事务管理

3.1 两种方式对比

方式优点缺点
声明式零侵入(@Transactional学习 AOP 和配置复杂
编程式精确控制(TransactionTemplate代码冗余、维护困难

3.2 优势

  • 传播行为:支持 REQUIREDREQUIRES_NEW 等 7 种策略。

  • 隔离级别READ_COMMITTEDSERIALIZABLE 等。

  • 多技术兼容:统一 JDBC、JPA、Hibernate 事务。

  • 测试支持:测试时自动回滚(@Rollback)。


4. MyBatis

4.1 动态 SQL 解决的问题

  • SQL 注入#{} 预编译参数(如 #{id})。

  • 代码冗余<if><choose> 等标签动态拼接 SQL。

  • 复杂查询<foreach> 处理 IN 语句。

示例

<select id="findUser" resultType="User">SELECT * FROM user<where><if test="name != null">AND name = #{name}</if></where>
</select>

4.2 缓存机制

类型范围生命周期配置方式
一级缓存SqlSession同一会话内有效,默认开启无需配置
二级缓存Mapper跨 SqlSession,需手动开启<cache/> 或注解 @CacheNamespace

4.3 接口绑定

  • 原理:通过 JDK 动态代理为 Mapper 接口生成实现类。

  • 好处

    • SQL 与 Java 代码分离(XML 或注解)。

    • 无需手动实现 DAO(如 JDBC 模板)。

    • 支持动态 SQL 和结果映射。


4.4 JDBC 不足与 MyBatis 解决

JDBC 问题MyBatis 解决方案
冗余代码封装模板(SqlSessionTemplate
手动事务管理集成 Spring 声明式事务
无连接池集成 HikariCP、Druid
手动 ORM自动结果映射(@Results

4.5 优缺点

优点缺点
SQL 可控性强需手写 SQL
轻量级(无过度封装)二级缓存配置复杂
性能优化友好(如延迟加载)XML 配置繁琐(可用注解)

5. Shiro 权限管理

5.1 认证与授权流程

  1. 认证

    • Subject.login() 提交凭证(如用户名/密码)。

    • Realm.doGetAuthenticationInfo() 验证身份。

    • 成功后将用户信息存入 Session

  2. 授权

    • Realm.doGetAuthorizationInfo() 加载角色和权限。

    • 通过注解 @RequiresRoles("admin") 或标签 <shiro:hasPermission> 校验权限。


6. 其他常见问题

6.1 Bean 工厂底层机制

  • 反射:通过 Class.forName() 实例化 Bean。

  • 工厂模式BeanFactory 管理对象生命周期。

  • 动态代理:AOP 生成代理对象(JDK/CGLIB)。

  • 资源释放:调用 DisposableBean.destroy()@PreDestroy 避免内存泄漏。


6.2 内存泄漏

  • 定义:已分配内存无法被 GC 回收(如未关闭的 ConnectionThreadLocal 未清理)。

  • 预防:使用 try-with-resources、Spring 的 DisposableBean

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/916457.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916457.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LC振荡Multisim仿真

电路图&#xff1a;说明&#xff1a;点击仿真后&#xff0c;先打开S1&#xff0c;可以看到C1的充电曲线。当电容充满电后&#xff0c;关闭S1&#xff0c;打开S2&#xff0c;这时候&#xff0c;C2电容会快速获得C1一半的电量。如果没有L&#xff0c;曲线会变得很陡。如果只加入电…

五、Web开发

文章目录1. SpringMVC自动配置概览2. 简单功能分析2.1 静态资源访问2.1.1 静态资源目录2.1.2 静态资源访问前缀2.1.3 webjar2.2 欢迎页支持2.3 自定义 Favicon2.4 静态资源配置原理2.4.1 配置类只有一个有参构造器2.4.2 资源处理的默认规则2.4.3 欢迎页的处理规则2.4.4 favicon…

Mysql 二进制安装常见问题

1. mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory在centos9中升级了libncurses.so的版本为libncurses.so.6&#xff0c;所以找不到libncurses.so.5需要使用软连接指向libncurses.so.6ln -s /lib6…

OpenLayers 综合案例-点位聚合

看过的知识不等于学会。唯有用心总结、系统记录&#xff0c;并通过温故知新反复实践&#xff0c;才能真正掌握一二 作为一名摸爬滚打三年的前端开发&#xff0c;开源社区给了我饭碗&#xff0c;我也将所学的知识体系回馈给大家&#xff0c;助你少走弯路&#xff01; OpenLayers…

测试老鸟整理,物流项目系统测试+测试点分析(一)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 物流项目&#xf…

好的编程语言设计是用简洁清晰的原语组合复杂功能

首先&#xff0c;函数命名要user friendly&#xff0c;比如最常用的控制台输入输出&#xff0c;input scanf gets read readln readline print println writeline… 我专门询问了chatgpt&#xff0c;让它给出流行度百分比最高的组合&#xff08;ai干这个最在行&#xff09;&…

基于springboot的在线购票系统/在线售票系统

用户&#xff1a;注册&#xff0c;登录&#xff0c;影院信息&#xff0c;即将上映&#xff0c;电影信息&#xff0c;新闻公告&#xff0c;取票管理&#xff0c;电影评价管理&#xff0c;我的收藏管理&#xff0c;个人中心管理员&#xff1a;登录&#xff0c;个人中心&#xff0…

Spring Boot项目打包部署常见问题解决方案

问题一&#xff1a;JAR包缺少主清单属性 问题描述 在使用 java -jar 命令启动Spring Boot项目时&#xff0c;遇到以下错误&#xff1a; demo-service.jar中没有主清单属性问题原因 pom.xml 中 spring-boot-maven-plugin 配置不正确打包时跳过了主清单文件的生成主类&#xff08…

【分享】外国使馆雷电综合防护系统改造方案(一)

1防雷项目设计思想&#xff1a;1.1设计依据&#xff1a;依据中国GB标准与部委颁发的设计规范的要求&#xff0c;该建筑物和大楼内之计算机房等设备都必须有完整完善之防护措施&#xff0c;保证该系统能正常运作。这包括电源供电系统、不间断供电系统&#xff0c;空调设备、电脑…

数据结构预备知识

在学习数据结构之前&#xff0c;有些知识是很有必要提前知道的&#xff0c;它们包括&#xff1a;集合框架、复杂度和泛型。本篇文章专门介绍这三个东西。1.集合框架1.1 什么是集合框架Java 集合框架(Java Collection Framework)&#xff0c;又被称为容器&#xff0c;是定义在 j…

【C++】数字cmath库常用函数

菜鸟传送门&#xff1a;https://www.runoob.com/cplusplus/cpp-numbers.html 作者废话&#xff1a;作为一个从业3年的JS人&#xff0c;现在重拾C&#xff0c;虽然众多语言都有很多相似之处&#xff08;至少算法&#xff0c;数学运算&#xff0c;数据结构等等那些都是相同的&…

神经网络(第二课第一周)

文章目录神经网络&#xff08;第二课第一周&#xff09;&#xff08;一&#xff09;神经网络的内涵&#xff08;二&#xff09;如何构建神经元层1、tensorflow如何处理数据&#xff08;Tensorflow 是由 Google 开发的机器学习包。&#xff09;2、详细的一些实验代码&#xff0c…

CCF-GESP 等级考试 2025年6月认证C++七级真题解析

1 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09;第1题 已知小写字母 b 的ASCII码为98&#xff0c;下列C代码的输出结果是&#xff08; &#xff09;。#include <iostream>using namespace std;int main() { char a b ^ 4; cout << a; …

【HarmonyOS】鸿蒙应用开发中常用的三方库介绍和使用示例

【HarmonyOS】鸿蒙应用开发中常用的三方库介绍和使用示例 截止到2025年&#xff0c;目前参考官方文档&#xff1a;访问 HarmonyOS三方库中心 。梳理了以下热门下载量和常用的三方库。 上述库的组合&#xff0c;可快速实现网络请求、UI搭建、状态管理等核心功能&#xff0c;显著…

SpringBoot 获取请求参数的常用注解

SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法&#xff1a;1. RequestParam用于获取查询参数(URL 参数)&#xff0c;适用于 GET 请求或 POST 表单提交。GetMapping("/user") public String getUser(RequestParam("id"…

【Linux篇章】Socket 套接字,竟让 UDP 网络通信如此丝滑,成为一招致胜的秘籍!

本篇文章将带大家了解网络通信是如何进行的&#xff08;如包括网络字节序&#xff0c;端口号&#xff0c;协议等&#xff09; &#xff1b;再对socket套接字进行介绍&#xff1b;以及一些udp-socket相关网络通信接口的介绍及使用&#xff1b;最后进行对基于udp的网络通信&#…

GIF图像格式

你可能已经知道&#xff0c;GIF 是一种光栅图像文件格式&#xff0c;它在不损失图像质量的前提下提供压缩功能&#xff0c;并且支持动画和透明度。 GIF 是“Graphics Interchange Format&#xff08;图形交换格式&#xff09;”的缩写。由于其良好的兼容性以及在不同应用程序和…

D3.js的力导向图使用入门笔记

D3.js是一个用于数据可视化的JavaScript库,广泛应用于Web端的数据交互式图形展示 中文文档&#xff1a;入门 | D3 中文网 一、D3.js核心特点 1、核心思想 将数据绑定到DOM元素&#xff0c;通过数据动态生成/修改可视化图形。 2、应用场景 交互式图表&#xff1a;如动态条…

Zookeeper的分布式事务与原子性:深入解析与实践指南

引言在分布式系统架构中&#xff0c;事务管理和原子性保证一直是极具挑战性的核心问题。作为分布式协调服务的标杆&#xff0c;Apache Zookeeper提供了一套独特而强大的机制来处理分布式环境下的原子操作。本文将深入探讨Zookeeper如何实现分布式事务的原子性保证&#xff0c;分…

Lua(迭代器)

Lua 迭代器基础概念Lua 迭代器是一种允许遍历集合&#xff08;如数组、表&#xff09;元素的机制。迭代器通常由两个部分组成&#xff1a;迭代函数和状态控制变量。每次调用迭代函数会返回集合中的下一个元素。泛型 for 循环Lua 提供了泛型 for 循环来简化迭代器的使用。语法如…