树码科技 | 技术博客

企业社招真题 Spring 模式相关

2026/04/05
18
0

Java 常用设计模式及实际应用

Java常用设计模式分三大类,是框架和业务开发的核心思想。创建型:单例模式(Spring Bean默认单例)、工厂模式(MyBatis创建SqlSession),负责对象创建。结构型:代理模式(Spring AOP)、装饰器模式(IO流包装),优化结构关系。行为型:策略模式(支付方式选择)、模板方法(Spring JdbcTemplate)、观察者模式(事件监听)。这些模式能让代码解耦、易扩展、可维护,是大厂开发的必备规范,框架底层几乎都基于设计模式实现,理解后能大幅提升代码质量。

解决并发问题的常用设计模式

针对并发安全、性能问题,有专用设计模式。生产者-消费者模式,用阻塞队列解耦生产消费,削峰填谷,避免线程阻塞。不可变对象模式,对象不可修改,天然线程安全,无锁开销。ThreadLocal模式,线程数据隔离,避免共享变量竞争。享元模式,复用对象,减少创建开销。同步模式,加锁保证原子性。还有线程池模式,复用线程,降低创建销毁开销。这些模式从无锁、隔离、复用、解耦角度,解决并发安全、性能、死锁问题,是高并发开发的核心方案。

AOP(面向切面编程)模型及作用

AOP是面向切面编程,是OOP的补充,核心是横向抽取通用逻辑,不侵入业务代码。核心模型包含:切面(通用逻辑模块)、通知(执行时机:前置/后置/异常)、切点(匹配方法规则)、连接点(方法执行点)。底层基于JDK动态代理/CGLIB实现,在方法执行前后织入逻辑。作用是统一处理日志、事务、权限校验、性能监控,让业务代码只关注核心逻辑,实现代码解耦、复用,是Spring框架的核心特性,大幅简化企业级开发。

依赖注入(DI)的好处

依赖注入是Spring核心,由容器自动注入依赖对象,替代手动new创建。最大好处是彻底解耦,对象间不直接依赖,修改实现类不用改调用方代码。实现控制反转,对象创建权交给容器,开发者专注业务。提升可测试性,单元测试可注入模拟对象。配置灵活,通过注解/配置文件切换依赖。降低代码冗余,不用手动管理对象生命周期。DI让代码模块化、可扩展,是企业级应用松耦合、易维护的关键。

Spring Bean 生命周期

Spring Bean生命周期是从创建到销毁的完整过程,分四步:实例化,容器通过反射创建Bean对象;属性填充,自动注入依赖的Bean和配置属性;初始化,执行Aware接口、后置处理器、初始化方法;使用,业务调用Bean;销毁,容器关闭时执行销毁方法。全程由Spring容器管理,配合BeanPostProcessor可在生命周期节点做增强。生命周期让Bean的创建、依赖、初始化、销毁标准化,支持单例、多例等作用域,是Spring依赖注入、AOP的基础。

Spring MVC 工作流程

Spring MVC是Web开发框架,基于MVC模式,流程清晰。客户端发送请求,先到中央调度器DispatcherServlet;它请求处理器映射器,找到对应控制器Controller;调用处理器适配器执行Controller方法;Controller处理业务,返回ModelAndView;调度器交给视图解析器,解析为具体视图;最后渲染视图,响应给客户端。全程解耦,请求、处理、渲染分离,适配多种视图技术,是Java Web开发的标准流程,简化请求映射、参数绑定、结果响应等操作。

MVC 模式的重要性

MVC是分层架构模式,分模型(Model)、视图(View)、控制器(Controller),核心是职责分离、解耦。模型处理数据和业务,视图负责展示,控制器调度请求。它让代码结构清晰,各层独立开发、测试、维护,互不影响。支持前后端分离,视图可灵活替换。便于团队协作,后端专注业务,前端专注展示。提升代码可扩展性,修改一层不影响其他层。是Web开发的基础架构,所有主流框架都基于MVC,是大型项目必备的设计思想。

不可变类的设计方式

不可变类对象创建后不可修改,天然线程安全,设计有固定规范。类用final修饰,禁止继承;成员变量用private final修饰,禁止修改;不提供任何setter方法;构造器初始化所有成员,对引用类型做深拷贝;重写equals和hashCode,保证一致性;只提供getter方法,返回引用类型时也做拷贝。String、Integer都是不可变类,设计后无锁并发安全,避免共享变量修改导致的线程问题,是高并发下推荐的对象设计方式。

对象浅拷贝与深拷贝的实现

浅拷贝只复制对象基本类型,引用类型复制地址,原对象和拷贝对象共享引用对象,修改会互相影响,实现简单,实现Cloneable接口重写clone即可。深拷贝复制整个对象树,基本类型和引用类型都完全复制,彼此独立,无关联。实现方式:重写clone做深拷贝、序列化反序列化(Serializable)、工具类(BeanUtils)。浅拷贝适合无引用类型的对象,深拷贝适合复杂对象,保证数据独立,开发中根据对象结构选择,避免数据污染。