# 1. @Configuration + @Bean 的工厂方法 A @Bean 方法每次调用都创建新对象 B @Bean 方法即工厂方法,Spring 用 CGLIB 代理保证单例与生命周期管理 ✓ 正确答案 C @Configuration 与工厂无关 D @Bean 只能返回原始类型
# 2. Prototype Bean 与原型模式的边界 A Spring Prototype 每次都返回同一实例 B 二者完全相同 C Spring Prototype 每次新建,原型模式通过 clone 复制,目标一致但机制不同 ✓ 正确答案 D 原型模式用工厂新建
# 3. Spring AOP 作为代理模式的工程实现 A 自调用也会被代理拦截 B AOP 不依赖代理 C CGLIB 代理接口必须存在 D AOP 通过代理对象织入横切逻辑,接口用 JDK 代理、无接口用 CGLIB ✓ 正确答案
# 4. Spring Framework 7 的 ObjectProvider 在延迟获取与原型 Bean 注入的工程价值 A 它无法获取可选依赖 B 它立即解析所有 Bean C 它延迟获取 Bean,支持可选依赖与原型注入,避免部分循环依赖 ✓ 正确答案 D 它只用于配置类
# 5. Spring 的 BeanFactory 作为工厂模式的实现 A 它通过 getBean 管理 Bean 创建与获取,是工厂模式实现,ApplicationContext 是其增强 ✓ 正确答案 B BeanFactory 直接 new 对象,无工厂语义 C ApplicationContext 与 BeanFactory 无关 D BeanFactory 无法管理生命周期
# 6. 依赖倒置原则(DIP)与 Spring IoC A DIP 只能靠手动 new 实现 B DIP 与 IoC 无关 C IoC 鼓励依赖具体实现 D DIP 主张依赖抽象,IoC 通过依赖注入实现依赖反转,二者结合让代码面向接口 ✓ 正确答案
# 7. 单例模式(Singleton)在 Spring 容器中的 @Scope("singleton") 与 JDK 25 虚拟线程下的并发安全 A 单例是实例唯一,线程安全取决于内部状态,有状态 Bean 需同步,虚拟线程下竞争更突出 ✓ 正确答案 B 单例 Bean 天然线程安全 C 有状态单例无需同步 D 虚拟线程与并发安全无关
# 8. 好莱坞原则(Hollywood Principle)与模板方法模式、IoC 容器的协作 A 三者都体现"控制反转",模板方法在方法级、IoC 在对象装配级反转调用 ✓ 正确答案 B 模板方法由用户主动调用框架 C IoC 与好莱坞原则无关 D 好莱坞原则主张用户主动调用框架
# 9. 控制反转(IoC)与依赖倒置原则(DIP)的关系辨析,IoC 是原则而 DIP 是目标 A IoC 是控制权反转,DIP 是依赖抽象,Spring IoC 通过依赖注入实现 DIP ✓ 正确答案 B 二者完全相同 C IoC 是依赖方向要求 D DIP 讲控制权转移
# 10. Adapter 在 HttpMessageConverter 的应用 A Controller 直接处理字节流 B 它只支持 JSON C 适配器与序列化无关 D 它把 HTTP 消息与 Java 对象互相转换,适配不同媒体类型,是适配器模式 ✓ 正确答案
# 11. Bridge 在 JDBC Driver 的应用 A JDBC 只支持一种数据库 B JDBC 把标准接口与具体驱动实现分离,换数据库无需改应用代码 ✓ 正确答案 C 桥接模式与 JDBC 无关 D JDBC 接口与实现强耦合
# 12. Builder Pattern 在 Lombok @SuperBuilder 的演进 A @Builder 支持继承 B @SuperBuilder 与 @Builder 完全相同 C @SuperBuilder 支持继承,让子类与父类属性合并到同一个 builder ✓ 正确答案 D @SuperBuilder 无法链式构建
# 13. Builder Pattern 在 Spring Data QBE(Query By Example) A ExampleMatcher 不能链式调用 B QBE 无需配置匹配规则 C ExampleMatcher 用 Builder 链式配置匹配规则,组装动态查询条件 ✓ 正确答案 D Builder 与 QBE 无关
# 14. Collections.unmodifiableList 作为装饰器的应用 A 它包装原 List 并拦截修改操作,实现只读,是装饰器模式 ✓ 正确答案 B 它复制一份新列表 C 装饰器控制访问而非增强功能 D unmodifiableList 与装饰器无关
# 15. Composite 在 java.awt.Container 的应用 A Container 只能包含叶子 B Container 可包含 Component 形成树形结构,叶子与组合用一致接口处理 ✓ 正确答案 C 组合模式与 UI 无关 D 叶子与组合处理方式不同
# 16. Effective Java 推荐的首选单例实现(枚举 Enum 单例) A 枚举单例需要双重检查锁 B 枚举单例无法防反射 C 枚举单例可被序列化破坏 D 枚举天然保证线程安全、防反射与序列化破坏,是最可靠的单例实现 ✓ 正确答案
# 17. Facade 在 JdbcTemplate 的封装 A 它直接把 JDBC 细节暴露给调用方 B JdbcTemplate 封装 JDBC 复杂细节,提供统一简洁接口,是外观模式 ✓ 正确答案 C 外观模式与封装无关 D JdbcTemplate 要求调用方处理连接
# 18. Factory Method 在 Stream.of() 的应用 A 静态工厂无法返回不同实现 B Stream.of 必须 new 创建 C Stream.of 是静态工厂方法,封装 Stream 创建并隐藏具体实现类 ✓ 正确答案 D Stream.of 与工厂无关
# 19. 代理模式、装饰器模式与适配器模式在结构上的差异与典型误用辨析 A 适配器用于增强功能 B 三者意图完全相同 C 三者结构相似但意图不同:代理控制访问、装饰器增强功能、适配器转换接口 ✓ 正确答案 D 代理用于转换接口
# 20. Filter 在 Spring Security 的应用 A Security 与过滤器无关 B Spring Security 用过滤器链实现认证、授权等安全控制,是责任链模式 ✓ 正确答案 C 过滤器链只能有一个过滤器 D 授权在认证之前处理
# 21. Flyweight 在 Integer.valueOf 的应用 A valueOf 总是创建新对象 B valueOf 对 -128~127 缓存共享实例,避免重复创建,是享元模式 ✓ 正确答案 C new Integer 也使用缓存 D 享元与内存无关
# 22. Java I/O 的 InputStream 装饰器层次 A Java I/O 未使用装饰器 B InputStream 只能单层读取 C 装饰器不能嵌套 D BufferedInputStream 等包装基础 InputStream 叠加功能,可嵌套组合 ✓ 正确答案
# 23. Supplier 作为工厂的函数式实现 A Supplier 与传统工厂无关 B Supplier 立即创建对象 C Supplier 不能作为参数传递 D Supplier 用 Lambda 封装创建逻辑,get() 延迟创建,是函数式工厂 ✓ 正确答案
# 24. 享元模式(Flyweight)的对象复用 A 享元每次都创建新对象 B 享元共享不可变的内部状态,外部状态由调用方传入,减少内存占用 ✓ 正确答案 C 内部状态可变也可共享 D 享元与内存无关
# 25. 共同封闭原则(CCP)与包内聚 A CCP 把因同一原因变化的类放同一包,减少变更影响,符合开闭原则 ✓ 正确答案 B CCP 主张把变化类分散到不同包 C CCP 与开闭原则无关 D CCP 关注类的继承
# 26. 共同重用原则(CRP)的判定标准是什么,违反时的依赖耦合问题如何识别与重构? A CRP 主张一起重用的类放同一包,违反时使用方只用一个类却依赖整个包 ✓ 正确答案 B CRP 主张把重用类分散 C 违反 CRP 不会造成耦合 D CRP 关注包的继承
# 27. 单一职责原则(SRP)的边界判断 A SRP 无边界,可随意拆分 B 一个类只能有一个方法 C 以"变化原因"判断职责,多个独立变化原因应拆分,但避免过度拆分 ✓ 正确答案 D 职责越多越好
# 28. 单例模式的破坏(反射、序列化、克隆) A 反射、序列化、克隆都能创建新实例破坏单例,枚举单例天然免疫 ✓ 正确答案 B 单例无法被破坏 C 序列化不会影响单例 D 反射无法创建私有构造器实例
# 29. 单例模式(Singleton)的多种实现(饿汉/懒汉/双重检查/枚举) A 饿汉类加载创建、懒汉延迟、双重检查锁需 volatile、枚举最安全简洁 ✓ 正确答案 B 所有实现线程安全相同 C 饿汉式延迟创建 D 枚举单例可被反射破坏
# 30. 原型模式(Prototype)与 clone() 的取舍 A clone 总是深拷贝 B clone 适合复制成本高的对象,但默认浅拷贝,深拷贝需手动处理引用字段 ✓ 正确答案 C clone 会执行构造器 D clone 适合所有场景
# 31. 原型模式(Prototype)在 Spring @Scope("prototype") 与对象池(Object Pool)的工程价值 A 对象池每次新建对象 B 二者完全相同 C Prototype 也复用对象 D Prototype 每次新建隔离状态,对象池复用降低开销,按对象性质选择 ✓ 正确答案
# 32. 合成复用原则(CARP)与继承/组合的取舍,优先使用组合而非继承的原因 A 继承总是优于组合 B 优先组合而非继承,组合松耦合、可替换,继承强耦合、破坏封装 ✓ 正确答案 C 组合会破坏封装 D 组合与继承无区别
# 33. 外观模式(Facade)的封装边界 A Facade 应暴露所有内部细节 B Facade 提供简洁统一接口,但不应过度封装而限制子系统的必要灵活性 ✓ 正确答案 C Facade 应隐藏所有能力 D 封装边界无关紧要
# 34. 对象池模式(Object Pool)与连接池/线程池的共性设计(获取/归还/过期/泄漏检测),哪些场景不应使用对象池 A 对象池无需泄漏检测 B 所有对象都应池化 C 对象池含获取/归还/过期/泄漏检测,但创建成本低或有状态不可复用场景不应池化 ✓ 正确答案 D 池化开销总是可忽略
# 35. 工厂方法模式(Factory Method)的应用场景 A 工厂方法与扩展无关 B 只适合简单对象创建 C 产品类型固定时也适用 D 适合创建逻辑复杂、产品类型会扩展的场景,把创建延迟到子类符合 OCP ✓ 正确答案
# 36. 工厂模式(Factory Method)与抽象工厂(Abstract Factory) A 产品族是工厂方法的职责 B 二者完全相同 C 抽象工厂创建单个产品 D 工厂方法创建单个产品,抽象工厂创建一组相关产品(产品族) ✓ 正确答案
# 37. 建造者模式(Builder)与 Lombok @Builder 的取舍 A @Builder 与手写 Builder 完全相同 B @Builder 自动生成 Builder 代码省样板,但手写 Builder 更可控可定制校验 ✓ 正确答案 C @Builder 无法链式构建 D 手写 Builder 更简洁
# 38. 开闭原则(OCP)与扩展点设计 A OCP 主张修改已有代码来扩展 B OCP 主张对扩展开放对修改封闭,通过抽象接口与扩展点实现 ✓ 正确答案 C 扩展点与 OCP 无关 D OCP 无需抽象
# 39. 抽象工厂模式(Abstract Factory)的产品族 A 抽象工厂创建一组相关产品并保证族内一致性,新增产品族只需新工厂 ✓ 正确答案 B 抽象工厂创建单个产品 C 产品族无需一致性 D 抽象工厂与产品族无关
# 40. 接口隔离原则(ISP)与角色接口 A 角色接口与客户端无关 B ISP 主张一个超大接口 C ISP 拆分胖接口为专用接口,角色接口按客户端视角定义最小方法集 ✓ 正确答案 D ISP 鼓励实现不需要的方法
# 42. 最少知识原则(Law of Demeter) A 它主张对象只与直接相关对象交互,避免深层链式调用以降低耦合 ✓ 正确答案 B 它鼓励链式访问深层对象 C 该原则与耦合无关 D 调用深层对象更利于维护
# 43. 枚举单例如何保证线程安全与防反序列化,与双重检查锁单例相比的取舍与最佳实践? A 枚举单例由 JVM 保证线程安全且防序列化,比 DCL 更简洁可靠 ✓ 正确答案 B DCL 比枚举更可靠 C 枚举单例可被反序列化破坏 D 枚举单例需 volatile
# 44. 桥接模式(Bridge)的抽象与实现分离 A 抽象与实现不能独立变化 B 桥接用继承绑定抽象与实现 C 桥接把抽象与实现分离到两个维度,二者独立变化,用组合代替继承 ✓ 正确答案 D 桥接与类的爆炸无关
# 45. 注册式单例(Container)的工程应用 A 注册式单例无法保证唯一 B 单例注册到容器,按名称获取并保证唯一,Spring 容器是典型实例 ✓ 正确答案 C 容器无法管理生命周期 D 静态单例由容器管理
# 48. 简单工厂模式(Simple Factory)与工厂方法差异 A 工厂方法与简单工厂都需改工厂 B 二者完全相同 C 简单工厂集中创建但新增产品需改工厂,工厂方法用子类扩展符合 OCP ✓ 正确答案 D 简单工厂新增产品无需改动
# 49. JDK 动态代理与 CGLIB 的差异及对接口/类代理的适用边界 A JDK 代理不要求接口 B 二者都要求接口 C CGLIB 能代理 final 类 D JDK 代理要求接口,CGLIB 生成子类代理且不能代理 final 类/方法 ✓ 正确答案
# 51. 调用反转原则(IoP)与控制流 A IoP 强调应用主动调用框架 B IoP 强调框架主导控制流并回调应用,应用不主动调用框架 ✓ 正确答案 C IoP 与调用方向无关 D IoP 主张应用控制框架
# 52. 过滤器模式(Filter)的责任链 A 责任链与过滤器无关 B 过滤器只能处理不能放行 C 过滤器按序组成链,每个过滤器可处理或放行,是责任链模式 ✓ 正确答案 D 过滤器链只能有一个过滤器
# 53. 适配器模式(Adapter)的兼容价值 A 适配器只能用于新代码 B 适配器必须修改原实现 C 适配器与接口无关 D 适配器把接口转换为客户端期望的接口,解决不兼容且无需修改现有实现 ✓ 正确答案
# 54. 里氏替换原则(LSP)与协变返回 A LSP 要求子类可替换父类不失契约,协变返回返回更具体类型符合 LSP ✓ 正确答案 B 协变返回违反 LSP C LSP 允许子类破坏父类契约 D 子类可随意改变父类行为
# 56. DRY(Don't Repeat Yourself)的工程取舍 A 重复代码无害 B 所有相似代码都应合并 C 应抽取真正的重复,但避免对偶然相似代码过度抽象导致耦合 ✓ 正确答案 D 抽象越多越好
# 57. JDK 25 中对象池(Object Pool)模式与虚拟线程协作的简化实现 A 虚拟线程需要线程池 B 虚拟线程使对象池完全无用 C 虚拟线程消除线程池化需求,但对象池仍用于昂贵资源复用,二者分工 ✓ 正确答案 D 对象池管理线程
# 58. KISS(Keep It Simple, Stupid)的过度简化与平衡 A KISS 消除不必要的复杂度,但不应削减必要功能与能力 ✓ 正确答案 B 越简单越好,可砍所有功能 C 简单性从不牺牲能力 D KISS 无需考虑可维护性
# 59. SOLID 五原则(SRP/OCP/LSP/ISP/DIP)的工程价值 A 五原则各自独立无关联 B 五原则分别约束职责、扩展、继承、接口、依赖,共同提升可维护性与可扩展性 ✓ 正确答案 C SOLID 只包含一个原则 D SOLID 与设计无关
# 60. YAGNI(You Aren't Gonna Need It)的预判 A YAGNI 反对为臆测的未来需求提前实现,但允许合理的架构预留扩展点 ✓ 正确答案 B YAGNI 反对任何抽象 C 所有未来功能都应提前实现 D YAGNI 鼓励过度设计
# 61. 建造者模式(Builder)在 Lombok @Builder 与 JDK 25 记录类(record)的取舍 A @Builder 与 record 不能结合 B record 无法不可变 C record 简洁不可变,@Builder 侧重链式构建,简单数据用 record、复杂构建用 builder ✓ 正确答案 D record 适合复杂构建
# 62. 空对象模式(Null Object)与 Optional 在消除空指针上的取舍 A Optional 隐藏空值 B 二者完全相同 C Null Object 用默认对象隐藏空值,Optional 显式表达空值并强制处理 ✓ 正确答案 D Null Object 强制调用方判空