一、语雀-JVM面试题
1、Java 8 和 Java 11 的GC有什么区别?
2、类的生命周期
3、Java中类加载的过程是怎么样的
1. 什么是符号引用和直接引用
4、Java中的类什么时候会被加载?
1. 加载时机
2. 卸载时机
5、什么是双亲委派?如何破坏?
1. 双亲委派好处
2. loadclass与findclass
6、有哪些常用的JVM启动参数?
7、一个对象的结构是什么样的?
1. 例子
8、JVM是如何创建对象的?
1. 指针碰撞与空闲链表
9、什么是方法区?是如何实现的?
10、JVM 中一次完整的 GC 流程是怎样的?
11、运行时常量池和字符串常量池的关系是什么?
二、语雀-MySQL面试题
1、InnoDB中的索引类型?
2、InnoDB为什么使用B+树实现索引?
1. B+树索引和Hash索引有什么区别?
3、什么是聚簇索引和非聚簇索引?
4、什么是回表,怎么减少回表的次数?
5、什么是索引覆盖、索引下推?
1. 覆盖索引
2. 索引下推
索引下推(Index Condition Pushdown, ICP) 是数据库(如 MySQL)的一种优化技术,允许在查询时提前过滤不符合条件的记录,而非直接回表查询所有索引命中的数据。例如,若联合索引为 (name, age),查询条件为 WHERE name LIKE 'A%' AND age > 25,数据库会先通过索引定位 name 以 'A' 开头的记录,再在索引层面筛选出 age > 25 的条目,最后仅回表查询这些经过预筛选的数据,减少磁盘 I/O 和数据传输量,从而提升查询效率。该优化尤其适用于联合索引的非最左前缀列或复杂过滤条件场景。
6、设计索引的时候有哪些原则(考虑哪些因素)?
7、什么是最左前缀匹配?为什么要遵守?
所以,了解了索引的存储结构之后,我们就很容易理解最左前缀匹配了:**因为索引底层是一个B+树,如果是联合索引的话,在构造B+树的时候,会先按照左边的key进行排序,左边的key相同时再依次按照右边的key排序。 **
所以,在通过索引查询的时候,也需要遵守最左前缀匹配的原则,也就是需要从联合索引的最左边开始进行匹配,这时候就要求查询语句的where条件中,包含最左边的索引的值。
最左前缀匹配和查询条件顺序无关
7、order by 是怎么实现的?
1. 索引排序
2. filesort 排序
8、count(1)、count(*) 与 count(列名) 的区别
✅count(1)、count(*) 与 count(列名) 的区别
1. COUNT
2. COUNT(*)的优化
1. MyISAM
2. InnoDB
3. COUNT(*)和COUNT(1)是一样的
4. COUNT(字段)
9、limit 0,100和limit 10000000,100一样吗?
✅limit 0,100和limit 10000000,100一样吗?
10、binlog、redolog和undolog区别?
11、用了索引还是很慢,可能是什么原因?
三、语雀-DDD面试题
1、如何理解领域驱动设计(DDD)?
2、请详细描述DDD的实现流程?
3、什么是聚合,什么是聚合根?
4、什么是实体,什么是值对象?
在领域驱动设计(DDD)中,实体和值对象是两种核心模型:实体具有唯一标识符(如订单ID),通过ID区分个体,即使属性相同,只要ID不同即为不同实体,且其状态可随业务变化(如订单从未支付变为已发货);值对象则通过属性值的组合定义(如地址的街道、城市),无独立ID,若属性完全相同则视为同一对象,通常不可变且依附于实体存在(如订单的收货地址)。例如,电商系统中,Order(订单)是实体(通过orderId唯一标识,状态可变更),而Address(地址)是值对象(属性相同即相同地址,作为订单属性存在且不可修改)。实体用于建模需长期跟踪的个体,值对象则描述无状态的属性集合,二者的区分有助于简化数据一致性管理并清晰表达业务逻辑。
5、什么是充血模型和贫血模型?
1. 充血对象
2. 贫血对象
6、什么是领域事件?
7、DDD的分层架构是怎么样的?
DDD分层架构通常分为四层:用户接口层(处理用户交互与输入输出)、应用层(编排业务用例、协调领域对象)、领域层(封装核心业务逻辑与领域模型)及基础设施层(提供技术实现如数据库、外部服务),通过依赖倒置实现各层解耦,确保领域模型的纯粹性与业务逻辑的稳定性,同时明确职责边界提升可维护性。
各层功能:DDD分层架构中,用户接口层负责与用户直接交互(如接收请求、返回视图或API响应),处理输入验证与展示逻辑;应用层编排业务用例,协调领域对象完成特定业务流程,定义应用服务接口但不实现核心逻辑;领域层封装核心业务规则,通过实体、值对象、聚合等建模领域行为,保持业务逻辑的纯粹性;基础设施层提供技术实现支撑(如数据库访问、消息队列、外部API集成),通过仓储、工厂等模式与领域层解耦,确保技术变更不影响核心业务。