25年11月合创经纬(深圳) Java开发 实习 一面

#JAVA##JAVA面经##JAVA内推#

1. 请做一个自我介绍

思路

  • 核心逻辑:基本信息(学校/工作年限)→ 核心技术栈(Java、SpringBoot、RabbitMQ、JWT、Redis等)→ 项目亮点(贴合面试提问的RabbitMQ、JWT、定时任务)→ 求职意向(匹配岗位需求)。
  • 重点:突出与面试高频提问技术相关的项目经验,简洁聚焦,控制1-2分钟。

回答示例

面试官您好,我是XXX,XX大学计算机专业在读/有X年Java开发经验。熟练掌握Java基础、SpringBoot、MySQL、RabbitMQ、Redis等核心技术,熟悉JWT认证、分布式锁、SQL优化、定时任务等落地场景。曾参与竞赛管理类项目开发,负责用户认证、消息异步处理、数据同步等核心模块,解决过RabbitMQ消息丢失、Redis与MySQL数据一致性等问题,具备独立设计和落地业务功能的能力。我希望能加入团队,将技术积累应用到实际开发中,同时持续学习提升。

2. 详细介绍你的项目

思路

  • 逻辑:项目背景→核心目标→技术栈→负责模块(重点提RabbitMQ、JWT、定时任务、Redis/MySQL)→技术难点与解决方案(贴合后续提问方向)→项目成果。
  • 重点:提前预埋后续提问的技术点(如RabbitMQ消息可靠性、JWT认证、数据一致性),为后续回答铺垫。

回答示例

我参与的是竞赛管理系统开发,核心目标是实现竞赛报名、评审、结果公示全流程管理,技术栈为SpringBoot+MySQL+Redis+RabbitMQ+JWT。我主要负责三个核心模块:一是用户认证模块,基于JWT+Filter实现登录认证和权限控制;二是竞赛信息异步通知模块,通过RabbitMQ将报名成功、评审结果等消息异步推送给用户;三是数据同步模块,用定时任务实现Redis缓存与MySQL竞赛数据的同步,保证数据一致性。开发中解决了RabbitMQ消息丢失、分布式锁竞争、SQL查询慢等问题,最终系统支撑了上千人同时报名,接口响应时间优化30%以上。

3. 项目中使用RabbitMQ时,如何解决消息丢失和重复消费问题?

思路

  • 消息丢失:分三个环节(生产者→MQ→消费者)逐一解决,覆盖确认机制、持久化、ACK机制。
  • 重复消费:核心是消费幂等性,结合业务场景(如唯一ID、状态机、防重表)实现。
  • 逻辑:先讲丢失的原因,再对应解决方案;重复消费重点讲幂等实现细节。

回答示例

一、解决消息丢失(覆盖三个核心环节)

  1. 生产者端:开启Confirm确认机制,消息发送后等待MQ的确认回执,未确认则重试;同时避免使用事务模式(性能低),用异步Confirm保证消息投递到MQ;
  2. MQ服务端:开启交换机、队列、消息的持久化(durable=true),即使MQ宕机,重启后消息不丢失;部署集群(主从/镜像队列),避免单点故障;
  3. 消费者端:关闭自动ACK,采用手动ACK(basicAck),只有业务处理完成后才确认消息;若处理失败,触发重试(避免直接丢弃),重试多次失败则进入死信队列。

二、解决重复消费(核心是消费幂等)

项目中通过“唯一消息ID+防重表”实现:

  1. 生产者发送消息时,为每条消息生成唯一ID(如UUID),存入消息属性;
  2. 消费者接收消息后,先查询防重表(MySQL),若该消息ID已存在则直接返回;若不存在,执行业务逻辑,再将消息ID写入防重表(结合事务);
  3. 补充:对于无需持久化的场景(如通知),也可基于Redis的SETNX存储消息ID,过期时间设为消息有效期,减少数据库压力。

4. JWT令牌被窃取后该如何处理?了解重放攻击吗?

思路

  • JWT被窃取:核心是“无法主动失效”的痛点,解决方案分短期、长期,结合黑名单、刷新token、权限控制。
  • 重放攻击:定义(窃取token重复使用)+ 解决方案(时间戳+nonce随机数、token有效期、签名验证)。

回答示例

一、JWT令牌被窃取的处理方案

JWT的核心痛点是生成后无法主动失效,我从三个层面解决:

  1. 短期应急:将被盗取token的用户ID加入Redis黑名单,Filter认证时先校验黑名单,命中则拒绝访问;黑名单设置与token过期时间一致的过期时间,避免内存堆积;
  2. 长期优化:缩短token有效期(如30分钟),同时实现刷新token机制(refresh token,有效期7天),用户登录后返回access token和refresh token,access token过期后用refresh token获取新token,减少token被盗用的窗口期;
  3. 权限兜底:即使token被盗,结合接口级权限控制(如敏感操作需二次验证),避免攻击者获取核心权限。

二、重放攻击及解决

重放攻击是攻击者窃取合法token后,重复发送请求冒充合法用户。解决方案:

  1. 在JWT的payload中加入时间戳(iat)和随机nonce值(一次性随机数),服务端验证时间戳是否在有效期(如5分钟),同时校验nonce值是否已使用(Redis存储已使用nonce,过期删除);
  2. 结合HTTPS传输,防止token在传输过程中被窃取;
  3. 核心接口(如修改密码、提现)增加验证码/短信验证,即使token被重放也无法执行敏感操作。

5. 为什么选择JWT+Filter实现用户登录认证,而非拦截器?有哪些考量?

思路

  • 核心差异:Filter基于Servlet规范(请求进入Servlet前执行)、Interceptor基于SpringMVC(控制器方法执行前后),从执行时机、功能范围、性能、适配场景对比。
  • 选择考量:认证需早拦截、

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏

全部评论

相关推荐

昨天 21:33
已编辑
东莞理工学院 Java
📍面试公司:好未来🕐面试时间:03/14💻面试岗位:golang后端开发❓面试问题:1. Go 的基本数据类型有哪些?2. 什么是值类型和引用类型,分别有哪些?3. slice 底层结构和扩容机制是什么?4. map 底层基于什么实现,是有序还是无序?5. 对 Go 的 channel 怎么理解?6. channel 一般用在什么业务场景?7. 无缓冲和有缓冲 channel 的区别是什么?8. 如何深拷贝 slice,避免多个变量互相影响?9. Redis 适用哪些业务场景?10. 为什么 Redis 单线程还能支持高并发?11. epoll 在 Redis 中用在什么场景?12. Redis 的 key 过期策略有哪些?13. Redis 过期删除后内存会立刻释放吗?14. Redis 内存满了有哪些淘汰策略?15. Redis 持久化方案有哪些?16. RDB 和 AOF 区别是什么?17. Redis 高可用方案有了解吗?18. Redis 主从、哨兵、集群的区别?19. ES 主要适用于什么场景?20. 业务数据(如订单)能不能存在 ES?21. 多表数据聚合同步到 ES 怎么实现?22. ES 集群健康状态有哪几种,分别代表什么?23. ES 设置分片和副本,允许节点宕机数量怎么判断?24. Kafka 和 RocketMQ 的区别是什么?25. Kafka 为什么会出现消息丢失?26. 如何避免 Kafka 消息丢失?27. Kafka 的 at least once 机制是什么?28. 业务层如何保证消息不丢失、最终一致?29. MySQL 事务隔离级别有哪些?30. MySQL 默认隔离级别是什么?31. 可重复读的含义是什么?32. 什么场景会使用不同的事务隔离级别?33. InnoDB 可重复读是怎么实现的?34. MySQL 有哪些存储引擎,区别是什么?35. MyISAM 适用什么业务场景?36. 联合索引的最左匹配原则是什么?37. MySQL 默认索引类型是什么,和哈希索引区别?38. 多表关联查询、聚合查询如何设计索引?39. 研发工程师应该如何应对和使用 AI?40. 使用 AI 编程工具有哪些风险?41. 怎么避免 AI 生成代码带来的线上问题?42. 平时用什么开发工具和 AI 模型?43. 使用 AI 辅助开发遇到过哪些问题,怎么解决?44.手撕sql包括建立索引等等🙌面试感想:感动坏了,春招以来最舒服的一场面试,大部分问题都回答出来了,并且面试官在你回答出来了之后,还会给予正反馈说没错,你说的对,然后记不太清楚的问题,他还会给予提示,然后告诉你该怎么去回答,并且给出他的看法,也是一天直接速通了两面下周三约HR面
发面经攒人品
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务