中通 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圣经

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

相关推荐

1.项目难点2.你们系统的实际使用人数,有并发问题吗?3.使用redis处理过什么问题?选择什么数据结构?4.排行榜的zset里的score可以重复吗?--member唯一,score不唯一5.线上redis存在一个巨大的hash,比如1000万字段,每一小时需要全量读取做计算,如何保证不卡死?不影响其他业务?--需要注意的问题:(1)Redis单线程处理命令,一次性全读取会造成网络阻塞,导致其他用户的请求无法被处理;(2)内存和CPU;(3)OOM。如何解决?:(1)使用hscan命令进行游标遍历,一次只读一部分数据;(2)如果是先系统设计,可以按照用户id/时间等维度分片,读取时可以利用Redis的多路复用;6.实习实际的Redis是单机还是集群?--生产是哨兵模式7.比如有量特别大的数据,把redis当数据库使用的时候,单机和集群有什么区别?--单机模式受限于单台机器内存;主从复制&nbsp;+&nbsp;哨兵:所有节点(主+从)存储的都是全量数据,依然受限于单台机器内存;集群/分片:数据被切片分散存储,总容量&nbsp;=&nbsp;所有节点内存之和,写压力被分散到多个节点8.假设从数据库读数据写到redis中,集群的替代方案?(这个问题实在没听明白,听录音都听不懂什么意思?)9.对于&nbsp;1w&nbsp;条数据,如果排序逻辑特别复杂,而且用户还要勾选过滤,怎么实现?--提前排序,把结果按分数存进&nbsp;Redis&nbsp;的&nbsp;ZSet;在&nbsp;Redis&nbsp;里用&nbsp;Set&nbsp;存好不同类别(用户勾选条件)的&nbsp;ID&nbsp;列表;做交集,取前500条即可有人知道这个公司怎么样吗?要提前实习,要了命了,通勤一个半小时😭,太难受了。而且995😭😭😭,这是人的日子吗,hr说薪资给17k-18k。。。。。。。。。。周五线下复试,我都纠结去不去了。。感觉薪资太少了又怕找不到别的工作😭
查看9道真题和解析
点赞 评论 收藏
分享
评论
点赞
5
分享

创作者周榜

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