小米软件开发Java面经

二面:
1、手撕做题:力扣 15.三数之和
2、浅谈实习
3、熟悉 SpringCloud 的哪些组件?
4、项目中用到的是 Seata 的哪种分布式事务模式?底层原理是怎样的?
5、项目中的限流操作是把什么作为限流的资源?
6、代码中一个接口的限流代码是怎么去实现的?
7、假设现在我的服务上有成百上千个接口,现在都需要去做限流熔断的操作,如何基于 Sentinel 去实现?
8、谈谈自定义一个组件集成到 SpringBoot 中,应该做哪些操作?
9、使用过 Java 的哪些 JUC 工具?
10、假设有一个线程 a 和一个线程 b,它们分别有自己的任务 A 和任务 B 需要完成,但是 b 线程需要等待 a 线程执行完任务 A 后才可以执行任务 B,请问有哪些实现方式,越多越好
11、volatile 保证变量可见性的原理?
12、用 synchronized 加锁能否保证可见性?
13、一般业务中通过什么来创建线程池?线程池有哪些核心参数?
14、假设一个场景,项目中用到了线程池,在服务上线前,我依据自己的经验预设了一些线程池的参数,服务真正上线后,面对 C 端的流量我无法保证我预设的参数是最合适的,就需要去动态的调整这些参数,如何去设计一个具备动态性能的线程池?
15、针对问题 14 我提出把核心参数的设置交给配置中心,创建线程池时读取参数就走配置中心读,这样修改后可以实现无感的切换。但是面试官提到,这种方式能实现无感的切换,但是没有办法实现自适应的线程池核心参数调整,还是需要手动的去调整参数。面试官引导说第一时间想的不应该是去修改,而是如何观测这些参数的变化,然后让先设计一下如何观测线程池核心参数的变化
16、如果要做观测,谁来观测?怎么观测?整个设计的流程是怎样的?
17、Redis 的哈希数据结构有哪些实现方式?
18、针对 Redis 哈希数据结构出现的大 Key 问题,如何去解决?
反问
全部评论
14 15 16 用cat之类的埋点监控流量是否过载吧,要有过载直接告警,再去配置中心改下参数重新上线这样的
点赞 回复 分享
发布于 2025-11-10 14:23 北京

相关推荐

2025-12-21 14:25
门头沟学院 Java
1. 布隆过滤器;缓存空结果;参数校验。2. 延迟双删;基于binlog监听;设置合理缓存过期时间兜底。3. RDB。AOF4. RDB更快。5. 单线程处理命令 + I/O多路复用。单线程避免锁竞争;I/O多路复用使单线程高效管理大量连接,仅当socket就绪时处理IO。6. 读未提交、读已提交、可重复读、串行化7. 可重复读。解决脏读、不可重复读;通过MVCC和间隙锁减少幻读发生。8. 默认 B+树。9. 红黑树的二叉搜索树,树高较高;范围查询需中序遍历效率低;节点存储利用率较低。 B+树的更矮胖;叶节点链表结构使范围查询/全表扫描极高效;节点存储更多键。10.使用二级索引查询时,若所需列不在该索引中,需根据索引中存储的主键值,回到聚集索引 树中查找完整行数据。额外磁盘IO是主要性能损耗。11.查询:连接器、查询缓存、分析器、优化器、执行器、返回结果。更新:额外涉及事务开启、写undo log、执行器调引擎修改内存数据、写redo log、写binlog、提交事务。12.更新:写undo/redo,改内存,写binlog,提交redo;两阶段提交。13.继承Thread类,实现Runnable接口,实现Callable接口,使用线程池提交任务。14.核心线程数、最大线程数、存活时间、时间单位、工作队列、线程工厂、拒绝策略。15.CountDownLatch要求子线程主动存结果到共享集合后countDown(),主线程await()阻塞等待;CyclicBarrier由线程在await()前存结果,最后到达的线程触发汇总;而线程池通过主线程收集Future并调用get()阻塞获取结果。16.start() 启动新线程,run()普通方法调用。17.数组+ 链表/红黑树。18.非线程安全。19.JDK8 ConcurrentHashMap:改用 synchronized 锁单个桶 + CAS + volatile,替代 JDK7 分段锁,并发度更高。20.MQ 消息可靠:依赖生产者可靠投递(含重试)、Broker 持久化与高可用、消费者手动 ACK 与幂等处理三方协同保障。21.消费者幂等性:通过唯一约束(如 DB/REDIS 记录消息 ID)防止重复处理,确保多次消费结果一致
点赞 评论 收藏
分享
评论
2
23
分享

创作者周榜

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