2025年9月2日¶
面试题¶
1. 数据库表关系¶
简答版
- 一对一:外键唯一约束。
- 一对多:在“多”的表加外键。
- 多对多:中间表。
扩展版 数据库关系主要有三种:
- 一对一:如“用户-身份证”,通过唯一外键或共享主键实现。
- 一对多:如“部门-员工”,在员工表加部门 ID 外键。
- 多对多:如“学生-课程”,建立中间表(student_course)。 维护多表关系时要注意:外键约束、索引优化、以及事务一致性。
2. Maven 继承与聚合¶
简答版
- 继承:共享配置。
- 聚合:统一构建。
扩展版
- 继承:子 POM 通过
parent
继承父 POM,继承依赖、插件等配置。 - 聚合:父 POM 使用
<modules>
聚合多个子模块,一次构建全部模块。 区别:继承是纵向复用配置,聚合是横向组织模块。
3. <dependencies>
vs <dependencyManagement>
¶
简答版
<dependencies>
:直接生效。<dependencyManagement>
:只定义版本,子模块需手动引用。
扩展版
<dependencies>
:声明依赖立刻生效。<dependencyManagement>
:用于集中管理依赖版本,避免版本冲突。子模块必须<dependency>
才会真正引入。 常用于大型项目,统一依赖版本,减少重复配置。
4. Spring 中的 @Bean 和 @Component¶
简答版
@Component
:类上标注,自动扫描。@Bean
:方法上标注,返回对象注册到容器。
扩展版
- @Component:常用于自己写的类,Spring 自动扫描并注入。
- @Bean:用于方法上,返回值作为 Bean 注册。常用于第三方类或需要复杂初始化的对象。 使用场景:
- 普通组件 →
@Component
- 第三方对象/需手动控制创建逻辑 →
@Bean
5. application.yml 注入配置¶
简答版
@Value("${xxx}")
:注入单个属性。@ConfigurationProperties(prefix="xxx")
:批量注入到对象。
扩展版
- @Value:简单,适合少量配置。例:
@Value("${app.name}")
- @ConfigurationProperties:将配置文件的整个前缀绑定到 Java Bean,适合复杂对象配置,支持类型安全。 场景:
- 零散参数 →
@Value
- 成组配置 →
@ConfigurationProperties
✅ 这样记:
- 数据库:一对一、一对多、多对多。
- Maven:继承=配置共享,聚合=统一构建。
- 依赖管理:dependencies=直接用,dependencyManagement=版本声明。
- Spring Bean:Component=类,Bean=方法。
- 配置注入:Value=单个,ConfigurationProperties=批量。