博客记录-day126-JVM,MySQL,DDD面试题

140 阅读6分钟

一、语雀-JVM面试题

1、Java 8 和 Java 11 的GC有什么区别?

✅Java 8 和 Java 11 的GC有什么区别?

image.png

2、类的生命周期

✅类的生命周期是怎么样的?

image.png

image.png

3、Java中类加载的过程是怎么样的

✅Java中类加载的过程是怎么样的?

image.png

image.png

1. 什么是符号引用和直接引用

image.png

4、Java中的类什么时候会被加载?

✅Java中的类什么时候会被加载?

1. 加载时机

image.png

2. 卸载时机

image.png

5、什么是双亲委派?如何破坏?

✅什么是双亲委派?如何破坏?

image.png

image.png

1. 双亲委派好处

image.png

2. loadclass与findclass

image.png

6、有哪些常用的JVM启动参数?

✅有哪些常用的JVM启动参数?

image.png

7、一个对象的结构是什么样的?

✅一个对象的结构是什么样的?

image.png

image.png

1. 例子

image.png

8、JVM是如何创建对象的?

✅JVM是如何创建对象的?

image.png

1. 指针碰撞与空闲链表

image.png

9、什么是方法区?是如何实现的?

✅什么是方法区?是如何实现的?

image.png

image.png

image.png

10、JVM 中一次完整的 GC 流程是怎样的?

✅JVM 中一次完整的 GC 流程是怎样的?

image.png

image.png

11、运行时常量池和字符串常量池的关系是什么?

✅运行时常量池和字符串常量池的关系是什么?

image.png

二、语雀-MySQL面试题

1、InnoDB中的索引类型?

✅InnoDB中的索引类型?

image.png

2、InnoDB为什么使用B+树实现索引?

✅InnoDB为什么使用B+树实现索引?

image.png

1. B+树索引和Hash索引有什么区别?

image.png

3、什么是聚簇索引和非聚簇索引?

✅什么是聚簇索引和非聚簇索引?

image.png

image.png

4、什么是回表,怎么减少回表的次数?

✅什么是回表,怎么减少回表的次数?

image.png

5、什么是索引覆盖、索引下推?

✅什么是索引覆盖、索引下推?

1. 覆盖索引

image.png

2. 索引下推

索引下推(Index Condition Pushdown, ICP) 是数据库(如 MySQL)的一种优化技术,允许在查询时提前过滤不符合条件的记录,而非直接回表查询所有索引命中的数据。例如,若联合索引为 (name, age),查询条件为 WHERE name LIKE 'A%' AND age > 25,数据库会先通过索引定位 name 以 'A' 开头的记录,再在索引层面筛选出 age > 25 的条目,最后仅回表查询这些经过预筛选的数据,减少磁盘 I/O 和数据传输量,从而提升查询效率。该优化尤其适用于联合索引的非最左前缀列或复杂过滤条件场景。

image.png

6、设计索引的时候有哪些原则(考虑哪些因素)?

✅设计索引的时候有哪些原则(考虑哪些因素)?

image.png

7、什么是最左前缀匹配?为什么要遵守?

✅什么是最左前缀匹配?为什么要遵守?

所以,了解了索引的存储结构之后,我们就很容易理解最左前缀匹配了:**因为索引底层是一个B+树,如果是联合索引的话,在构造B+树的时候,会先按照左边的key进行排序,左边的key相同时再依次按照右边的key排序。 **

所以,在通过索引查询的时候,也需要遵守最左前缀匹配的原则,也就是需要从联合索引的最左边开始进行匹配,这时候就要求查询语句的where条件中,包含最左边的索引的值。

最左前缀匹配和查询条件顺序无关

image.png

7、order by 是怎么实现的?

✅order by 是怎么实现的?

image.png

1. 索引排序

image.png

2. filesort 排序

image.png

8、count(1)、count(*) 与 count(列名) 的区别

✅count(1)、count(*) 与 count(列名) 的区别

image.png

1. COUNT

image.png

2. COUNT(*)的优化

1. MyISAM

image.png

2. InnoDB

image.png

3. COUNT(*)和COUNT(1)是一样的

image.png

4. COUNT(字段)

image.png

9、limit 0,100和limit 10000000,100一样吗?

✅limit 0,100和limit 10000000,100一样吗?

image.png

10、binlog、redolog和undolog区别?

✅binlog、redolog和undolog区别?

image.png

image.png

11、用了索引还是很慢,可能是什么原因?

✅用了索引还是很慢,可能是什么原因?

image.png

三、语雀-DDD面试题

1、如何理解领域驱动设计(DDD)?

✅如何理解领域驱动设计?

image.png

image.png

2、请详细描述DDD的实现流程?

✅请详细描述DDD的实现流程?

image.png

image.png

3、什么是聚合,什么是聚合根?

✅什么是聚合,什么是聚合根?

image.png

4、什么是实体,什么是值对象?

✅什么是实体,什么是值对象?

在领域驱动设计(DDD)中,实体值对象是两种核心模型:实体具有唯一标识符(如订单ID),通过ID区分个体,即使属性相同,只要ID不同即为不同实体,且其状态可随业务变化(如订单从未支付变为已发货);值对象则通过属性值的组合定义(如地址的街道、城市),无独立ID,若属性完全相同则视为同一对象,通常不可变且依附于实体存在(如订单的收货地址)。例如,电商系统中,Order(订单)是实体(通过orderId唯一标识,状态可变更),而Address(地址)是值对象(属性相同即相同地址,作为订单属性存在且不可修改)。实体用于建模需长期跟踪的个体,值对象则描述无状态的属性集合,二者的区分有助于简化数据一致性管理并清晰表达业务逻辑。

image.png

5、什么是充血模型和贫血模型?

1. 充血对象

image.png

2. 贫血对象

image.png

6、什么是领域事件?

✅什么是领域事件?

image.png

7、DDD的分层架构是怎么样的?

✅DDD的分层架构是怎么样的?

DDD分层架构通常分为四层:用户接口层(处理用户交互与输入输出)、应用层(编排业务用例、协调领域对象)、领域层(封装核心业务逻辑与领域模型)及基础设施层(提供技术实现如数据库、外部服务),通过依赖倒置实现各层解耦,确保领域模型的纯粹性与业务逻辑的稳定性,同时明确职责边界提升可维护性。

各层功能:DDD分层架构中,用户接口层负责与用户直接交互(如接收请求、返回视图或API响应),处理输入验证与展示逻辑;应用层编排业务用例,协调领域对象完成特定业务流程,定义应用服务接口但不实现核心逻辑;领域层封装核心业务规则,通过实体、值对象、聚合等建模领域行为,保持业务逻辑的纯粹性;基础设施层提供技术实现支撑(如数据库访问、消息队列、外部API集成),通过仓储、工厂等模式与领域层解耦,确保技术变更不影响核心业务。

image.png

image.png