基本信息形式:一面采用半结构化技术面形式,包含自我介绍、项目深度追问、基础知识考察、手撕代码/场景题。 时长:约45-60分钟。自我介绍控制在3-5分钟,项目深挖约20-30分钟,技术问答约10-15分钟。 氛围:注重基础知识的广度与深度。面试官会围绕简历项目中的技术栈层层追问,考察知识体系是否扎实。
面试流程机考/测评通过→一面通知→按时参加面试→自我介绍(附PPT者更佳)→项目深度追问→技术基础知识问答→手撕代码/场景题→反问环节→退场。 面试问题及参考回答
1. 自我介绍参考回答:面试官你好,我叫[姓名],毕业于[学校]的[专业]。在校期间我主要学习了Java后端开发技术栈,包括Java基础、Spring Boot框架、MySQL数据库、Redis缓存以及消息队列等。在[项目名称]中,我负责了[核心模块]的设计与开发,解决了[具体技术难点],最终实现了[量化成果]。平时我会通过阅读技术博客、参与开源项目来提升自己。我非常希望能加入贵公司,在一个优秀的平台上继续磨练技术、创造价值。谢谢!
提示:自我介绍应控制在1-2分钟,突出与应聘岗位相关的技术能力和项目经验,避免过多无关信息。
2. 先问项目,干了什么,主要负责部分参考回答:我介绍一下我参与过的[项目名称]。该项目是一个[电商/物流/管理系统]平台,主要实现了[用户管理/订单处理/消息推送]等核心功能。我在项目中主要负责[订单模块/消息中间件集成/缓存设计]部分。 具体工作: 设计了订单状态机的流转逻辑,使用RocketMQ处理订单支付成功后的异步通知,保证了消息的可靠性和最终一致性。 针对热点商品缓存,采用Redis存储库存数据,并使用Lua脚本保证扣减库存的原子性。 参与了数据库表的设计,对订单表按时间进行了分区,并对查询频繁的字段建立了联合索引。
通过这个项目,我加深了对分布式系统中消息可靠性和缓存一致性的理解。
提示:按照STAR法则(情境-任务-行动-结果)组织语言,重点突出你的个人贡献和技术选型思考。
3. 说一下mq的基本应用,各个组成部分参考回答:消息队列(MQ)的核心作用是异步处理、应用解耦、流量削峰。 基本应用场景: 异步处理:用户注册后发送短信或邮件,不需要同步等待。 应用解耦:订单系统支付成功后,通过MQ通知库存系统、积分系统,各系统独立部署。 流量削峰:秒杀活动中,将海量请求先写入MQ,后端消费者按能力拉取处理。
主要组成部分(以RocketMQ为例): Producer(生产者) :消息的发送者,负责将消息发送到Broker。 Consumer(消费者) :消息的接收者,通过拉取或推送方式消费消息。 Broker(消息服务器) :负责消息存储、转发,核心组件。 NameServer(命名服务) :提供路由信息,管理Broker集群。 Topic(主题) :消息的分类,生产者按Topic发送,消费者按Topic订阅。 Message Queue(消息队列) :Topic下实际存储消息的物理队列。
4. mq消息重复怎么处理,死信队列是什么,你们项目怎么解决延迟消费,t设置的多少参考回答: (1)消息重复处理(幂等性设计) (2)死信队列(Dead Letter Queue, DLQ) (3)延迟消费的实现 我们项目使用RocketMQ的定时消息功能实现延迟消费。发送时设置delayTimeLevel(如level 3代表10秒后投递)。 业务场景:订单创建30分钟未支付自动取消。我们设置延迟消息在30分钟后投递,消费者收到后检查订单状态,若仍未支付则执行取消操作并释放库存。 延迟时间设置:订单取消场景我们设置为30分钟(1800000毫秒)。根据业务需要可以灵活调整,RocketMQ支持多个预设延迟级别(1s/5s/10s/30s/1m/2m...)。
5. 说一下mysql索引有哪些,索引失效参考回答: (1)MySQL索引类型 普通索引(INDEX) :最基本的索引,无唯一性限制。 唯一索引(UNIQUE) :列值必须唯一,但允许NULL。 主键索引(PRIMARY KEY) :特殊的唯一索引,不允许NULL,一张表只能有一个。 联合索引(复合索引) :在多个列上建立的索引,遵循最左前缀原则。 全文索引(FULLTEXT) :用于文本内容的模糊搜索,MyISAM和InnoDB(5.6+)支持。 空间索引(SPATIAL) :用于地理数据类型。
(2)索引失效的常见场景 使用 != 或 <> 操作符。 在索引列上进行函数操作或表达式计算(如 WHERE age+1 = 20)。 使用 LIKE '%keyword' (前导模糊查询)会导致索引失效;但 LIKE 'keyword%' 可走索引。 数据类型隐式转换(如 varchar 列传入数字)。 OR条件中只要有一个字段没有索引,整个查询就不会走索引(建议改为 UNION)。 联合索引未遵循最左前缀原则(例如索引 (a,b,c),条件只用到 b 或 c)。 全表扫描比使用索引更快时(如数据量小或过滤条件选择性差)。
6. 说一下三大范式参考回答:数据库设计三大范式是为了减少数据冗余、避免更新异常。 第一范式(1NF) :要求数据库表的每一列都是不可分割的基本数据项,即列具有原子性。例如“地址”字段不应该包含省、市、区,应拆分为多个字段。 第二范式(2NF) :在1NF的基础上,要求表中的每一列都完全依赖于主键,而不能只依赖主键的一部分(针对联合主键)。例如订单表中,订单号+商品号作为联合主键,商品名称只依赖于商品号,而不依赖于订单号,就违反了2NF。 第三范式(3NF) :在2NF的基础上,要求表中的每一列都直接依赖于主键,不能存在传递依赖。例如学生表中:学号 → 学院 → 学院地址,学院地址传递依赖于学号,应该将学院信息拆成独立表。 实际工程中:为了性能,有时会适当违反范式(反范式设计),比如冗余一些字段以避免多表关联查询。
|