中通 JAVA软件开发 二面 面经

1. 自我介绍

答:

  • 按"背景 → 技术栈 → 代表项目 → 求职意向"四段走,控制在2分钟
  • 重点突出和岗位相关的经验,高并发、分布式、微服务方向的经历要重点说
  • 不要把简历从头念一遍,说亮点和技术深度

2. 介绍一下你做过的最复杂的项目,重点说技术难点和你的解决方案

答:

  • 考察技术深度和解决问题的能力,不是功能列表
  • 回答结构:项目背景(一句话)→ 核心技术挑战(具体说难在哪)→ 你的解法(为什么这么做)→ 结果数据
  • 面试官会顺着细节追问,只说你真正主导过的部分

3. Spring的IOC容器初始化流程是怎样的

答:分七个阶段:

  • 资源定位:找到Bean的定义信息,XML配置加载文件,注解配置扫描包,通过ResourceLoader封装成Resource对象
  • 加载解析:把Resource解析成BeanDefinition,包含类名、作用域、依赖关系、初始化方法等元数据
  • 注册:把BeanDefinition存入ConcurrentHashMap(BeanDefinitionRegistry),key是beanName,此时Bean还未实例化
  • 实例化:调用getBean时才真正创建,通过反射调用构造器,FactoryBean走特殊逻辑
  • 属性填充:反射给属性赋值,依赖的Bean未创建则递归调用getBean,三级缓存解决循环依赖
  • 初始化:依次调用Aware接口方法 → BeanPostProcessor前置处理 → afterPropertiesSet/init-method → BeanPostProcessor后置处理,AOP代理在后置处理中创建
  • 使用与销毁:Bean放入一级缓存singletonObjects,容器关闭时调用destroy方法释放资源

4. MySQL的索引失效场景有哪些,如何避免

答:主要八种场景:

  • 索引列上使用函数或表达式:WHERE YEAR(create_time) = 2024,改写成范围查询
  • 隐式类型转换:varchar字段用数字查询,MySQL内部转换导致失效,保证类型一致
  • LIKE以%开头:LIKE '%张三'无法走索引,改成LIKE '张三%'或用全文索引
  • OR条件有字段无索引:OR的所有字段都要有索引,否则全表扫描,或改用UNION
  • NOT/!=/<>:否定条件通常不走索引,改写成正向条件
  • 联合索引不满足最左前缀:索引(a,b,c),查询跳过a直接用b,c,不走索引,调整查询条件或重建索引
  • 范围查询后的字段失效:索引(a,b,c),b用了范围查询,c不走索引,把范围查询字段放最后
  • 数据分布问题:查询数据量超过30%,优化器选择全表扫描,用覆盖索引或优化查询条件
  • 总原则:不在索引列做运算、注意类型匹配、遵循最左前缀、用EXPLAIN分析执行计划

5. 如何设计一个秒杀系统

答:核心思路是削峰填谷、异步处理、多级防护:

  • 前端层:按钮防重、倒计时、验证码,静态资源CDN加速
  • 网关层:Nginx限流,单IP频率限制,黑名单过滤
  • 库存预热:秒杀前把库存加载到Redis,key为seckill:stock:{商品ID}
  • 请求拦截:Redis校验用户资格、活动状态、是否重复购买,不查数据库
  • 库存扣减:Lua脚本原子性扣减Redis库存,保证并发安全
  • 异步下单:扣减成功立即返回"排队中",发MQ消息,消费者异步创建订单写数据库,失败则回滚Redis库存
  • 数据库保底:UPDATE加WHERE stock > 0条件,防止超卖兜底
  • 限流降级:Sentinel对秒杀接口限流,超阈值拒绝请求,异常率超50%熔断
  • 超时处理:延迟队列处理超时未支付订单,取消后回滚库存
  • 压测验证:上线前模拟高并发场景,找出瓶颈

6. 分布式事务的解决方案有哪些

答:六种主流方案:

  • 2PC(两阶段提交):协调者+参与者,强一致性,但同步阻塞、单点故障风险

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

Java面试圣经 文章被收录于专栏

Java面试圣经,带你练透java圣经

全部评论
感觉总结的很好
点赞 回复 分享
发布于 今天 22:30 北京

相关推荐

03-27 12:17
已编辑
北京中南海业余大学 Java
今天面的依旧是牛客搜不到面经的公司。总结:应该是这段时间面试体验最差的一家公司。面试官提问没有逻辑,口齿也不太清晰,喜欢打断回答。不知道是不是突然被抓来面试的,提问也没有重点,问题也描述不清楚,问就是你简历里写了,说就行了,后面鼠鼠已经有点摆了。(下面的问题列表经过豆包整理过,所以看起来还算挺有逻辑。。。)1:请做一下自我介绍2:关于你的实习经验,你主要做的是哪部分相关的东西?3:你说的营销系统主要指的是什么?4:你们发券会涉及到并发问题吗?是怎么处理的?5:单个用户的串行请求,不会影响响应时间吗?第二个请求来了是直接拦截还是怎么处理?6:你们的券是预热到&nbsp;Redis&nbsp;里面的吗?还是实时去查数据库?7:如果有学生信息、课程信息、成绩信息,用&nbsp;MySQL&nbsp;设计表结构,你会怎么设计?表之间的关联关系是什么?8:我要查某一门课程(比如计算机编程课)的所有学生平均成绩、最高成绩、最低成绩,你会怎么查?9:你日常使用的&nbsp;AI&nbsp;编程工具是哪个?10:设计一个&nbsp;CSV&nbsp;数据批量导入及数据展示的简单页面,前后端的设计和开发都是用&nbsp;AI&nbsp;编程工具完成的吗?11:针对&nbsp;CSV&nbsp;批量导入和数据展示的需求,你的提示词怎么写?第一步告诉&nbsp;AI&nbsp;的是什么?需求拆分的逻辑谁来做?12:针对学生、课程、成绩表,要查某课程的平均&nbsp;/&nbsp;最高&nbsp;/&nbsp;最低成绩,你的第一步提示词是什么?AI&nbsp;生成&nbsp;SQL&nbsp;后,怎么把它落地到&nbsp;Spring&nbsp;Boot&nbsp;项目里,完整流程是怎样的?13:你用过哪些消息队列?14:RabbitMQ&nbsp;怎么保证消息一致性?怎么基于&nbsp;RabbitMQ&nbsp;实现分布式系统的最终一致性?15:RabbitMQ&nbsp;的&nbsp;ACK&nbsp;是什么?里面包含哪些信息?消费失败怎么处理?16:Redis&nbsp;有哪些基本的数据类型?17:Redis&nbsp;缓存雪崩是什么?怎么预防?18:Redis&nbsp;缓存穿透是什么?怎么解决?19:Redis&nbsp;缓存击穿是什么?怎么解决?20:Redis&nbsp;是怎么实现分布式锁的?原理是什么?21:你比较熟悉哪些设计模式?在项目中怎么用的?22:策略模式和工厂模式的核心区别是什么?策略模式的策略体现在哪里?公共逻辑放在哪里?23:MySQL&nbsp;的事务&nbsp;ACID&nbsp;特性是什么?分别由什么机制保证?Redo&nbsp;log、Undo&nbsp;log、MVCC&nbsp;分别解决什么问题?24:MySQL&nbsp;回滚操作依赖什么实现?25:MySQL&nbsp;的幻读是什么?怎么解决?间隙锁的原理是什么?InnoDB&nbsp;的锁机制是什么?锁级别有哪些?26:说一下&nbsp;JVM&nbsp;的内存模型?27:JVM&nbsp;运行时数据区中,哪些区域是线程安全的?哪些是线程不安全的?本地方法栈存放的是什么内容?28:Java&nbsp;中的&nbsp;synchronized的实现原理是什么?应用场景是什么?29:Redis&nbsp;分布式锁和&nbsp;synchronized&nbsp;单机锁的区别是什么?应用场景有什么不同?反问
查看29道真题和解析
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

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