当前位置: 首页 > article >正文

大厂Java面试实录:从Spring Cloud微服务到Redis缓存穿透,谢飞机如何翻车

大厂Java面试实录从Spring Cloud微服务到Redis缓存穿透谢飞机如何翻车前言在互联网大厂Java求职面试中面试官往往通过层层递进的方式考察候选人的技术深度和广度。本文以电商支付金融场景为背景记录了一次真实的面试过程——严肃的面试官李工 vs 搞笑的水货程序员谢飞机。 面试开始面试官李工你好我是技术负责人李明今天我们聊聊你在电商支付系统方面的经验。谢飞机李工好我...我看过您的博客特别专业 第一轮基础技术考察8:00-8:15Q1你简历上说熟悉Spring Boot能说说它的自动配置原理吗谢飞机这个简单就是EnableAutoConfiguration注解它会扫描classpath下的xxx.properties文件然后根据条件装配Bean。李工很好那具体是扫描哪些包呢谢飞机好像是META-INF/spring.factories...哦不是org.springframework.boot.autoconfigure.AutoConfiguration.imports...李工不错继续深入。在电商支付场景下如果订单创建接口响应超过2秒你会怎么排查谢飞机用...用JVM自带的jstack或者看日志李工思路对但具体步骤呢谢飞机呃...先查慢SQL再看线程堆栈然后...分析GC日志李工基本正确。最后一个问题MyBatis的一级缓存和二级缓存有什么区别谢飞机一级缓存是SqlSession级别的默认开启二级缓存是Mapper级别的需要手动配置...这个我知道李工嗯基础还算扎实。进入下一轮。 第二轮中间件与架构8:15-8:30Q2支付系统中我们用了Redis做缓存如果发生缓存穿透怎么办谢飞机缓存穿透就是查询不存在的数据...可以用布隆过滤器拦截。李工很好那缓存雪崩和击穿呢谢飞机雪崩是大量Key同时过期...设置随机过期时间。击穿是热点Key过期...加互斥锁李工不错继续。你们用的消息队列是什么为什么选择它谢飞机Kafka...因为吞吐量大适合日志采集...李工支付系统的消息可靠性怎么保证谢飞机ACK机制生产者确认消费者手动提交Offset李工具体到支付场景如果消费者处理失败了怎么处理谢飞机重试...死信队列...但是具体配置我不太清楚...李工OK下一个。JWT和OAuth2的区别是什么谢飞机JWT是无状态的Token...OAuth2是授权协议...李工结合我们的电商登录场景你是怎么设计的谢飞机用户登录生成JWT...存在Redis里...前端存Localstorage...李工可以最后一问。Dubbo和Spring Cloud的RPC方式有什么本质区别谢飞机Dubbo用Zookeeper注册中心...Spring Cloud用Eureka或Consul...李工性能上有差异吗谢飞机Dubbo更快...因为是长连接李工回答不错继续深化。 第三轮架构设计与运维8:30-8:45Q3支付系统涉及资金交易分布式事务怎么保证一致性谢飞机分布式事务...TCC模式Saga模式李工具体到支付场景你的方案是什么谢飞机用Seata...XA模式还是本地消息表李工哪种更适合金融场景谢飞机应该是本地消息表...最终一致性但是补偿逻辑怎么写...李工明白继续。你们的生产环境监控是怎么做的谢飞机Prometheus Grafana...ELK收集日志...李工业务指标怎么埋点比如支付成功率、订单转化率谢飞机Micrometer打点...自定义Metric李工链路追踪呢一个请求经过多少个服务谢飞机Jaeger...Zipkin...TraceId透传...李工好的最后一个。CI/CD流程你了解多少谢飞机GitLab CI...Jenkins Pipeline...Docker镜像构建...李工蓝绿部署怎么做回滚策略是什么谢飞机Kubernetes Deployment...滚动更新...但是金丝雀发布不太熟...李工嗯... 面试结束李工今天聊得差不多了你有什么想问的吗谢飞机那个...咱们公司加班多吗有房补吗李工哈哈这个问题很好。我们会综合评估你的技术能力HR会在3个工作日内联系你。谢飞机好的好的谢谢李工李工回去等通知吧。 详细答案与技术解析小白必看一、Spring Boot自动配置原理// 核心注解 SpringBootApplication SpringBootConfiguration ComponentScan EnableAutoConfiguration // 自动配置加载入口 EnableAutoConfiguration ↓ Import(AutoConfigurationImportSelector.class) ↓ spring.factories (Spring Boot 2.x) org.springframework.boot.autoconfigure.EnableAutoConfiguration\netal\ com.example.MyAutoConfiguration // Spring Boot 3.x新写法 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports关键点Conditional注解控制条件装配spring.factories文件定义所有可能的AutoConfiguration类通过SPI机制动态加载二、MySQL缓存穿透/雪崩/击穿解决方案| 问题类型 | 原因 | 解决方案 | |---------|------|----------| |缓存穿透| 查询不存在的数据 | 布隆过滤器 空值缓存 | |缓存雪崩| 大量Key同时过期 | 随机过期时间 多层缓存 | |缓存击穿| 热点Key突然失效 | 互斥锁 永不过期 |代码示例// 缓存穿透 - 布隆过滤器 public boolean exists(String key) { return bloomFilter.mightContain(key); } // 缓存击穿 - 互斥锁 public Object getData(String key) { Object value cache.get(key); if (value null) { synchronized (key.intern()) { value cache.get(key); if (value null) { value db.query(key); cache.set(key, value, 600L, TimeUnit.SECONDS); } } } return value; }三、分布式事务方案对比| 方案 | 适用场景 | 优点 | 缺点 | |-----|---------|------|------| |2PC/XA| 强一致性 | 数据一致性好 | 阻塞、性能差 | |TCC| 金融支付 | 性能好 | 开发复杂 | |Saga| 长事务 | 解耦 | 状态管理难 | |本地消息表| 最终一致性 | 可靠、易实现 | 延迟高 |支付场景推荐方案-- 本地消息表结构 CREATE TABLE payment_msg ( id BIGINT PRIMARY KEY AUTO_INCREMENT, order_id VARCHAR(64), status TINYINT, -- 0:待发送 1:已发送 2:已消费 retry_count INT DEFAULT 0, create_time DATETIME );四、JWT OAuth2实战// JWT Token生成 public String generateToken(User user) { MapString, Object claims new HashMap(); claims.put(userId, user.getId()); claims.put(role, user.getRole()); return Jwts.builder() .setClaims(claims) .setSubject(user.getUsername()) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis() 7200000)) // 2小时 .signWith(SignatureAlgorithm.HS256, secretKey) .compact(); } // OAuth2资源服务器配置 Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers(/api/public/**).permitAll() .anyRequest().authenticated() .and() .oauth2ResourceServer() .jwt(); } }五、Kafka消息可靠性保障# 生产者配置 spring: kafka: producer: acks: all # 全部副本确认 retries: 3 # 失败重试次数 batch-size: 16384 linger-ms: 1 # 消费者配置 spring: kafka: consumer: auto-offset-reset: earliest enable-auto-commit: false # 手动提交 max-poll-records: 500关键参数说明acksall确保所有ISR副本写入成功enable.auto.commitfalse业务成功后再提交Offset幂等性防止重复消费导致资损六、Prometheus Grafana监控体系// Micrometer自定义指标 Component public class PaymentMetrics { private final Timer paymentSuccessTimer; private final Counter paymentFailedCounter; public PaymentMetrics(MeterRegistry registry) { this.paymentSuccessTimer Timer.builder(payment.success.duration) .description(支付成功耗时) .register(registry); this.paymentFailedCounter Counter.builder(payment.failed) .description(支付失败次数) .register(registry); } public void recordPayment(boolean success, long duration) { if (success) { paymentSuccessTimer.record(duration, MILLISECONDS); } else { paymentFailedCounter.increment(); } } }Grafana面板配置支付成功率趋势图99% SLAP99/P95响应时间监控异常告警阈值错误率1%七、Dubbo vs Spring Cloud RPC对比| 维度 | Dubbo | Spring Cloud | |-----|-------|--------------| |注册中心| Zookeeper/Etcd | Eureka/Consul/Nacos | |序列化| Hessian2/Dubbo Protocol | JSON/FST/Protobuf | |负载均衡| 支持多种算法 | Ribbon/LoadBalancer | |性能| 高二进制协议 | 中等HTTP/REST | |生态| 阿里系为主 | Spring全家桶 |选型建议内部高性能调用 → Dubbo对外开放API → Spring Cloud OpenFeign微服务治理 → Spring Cloud Alibaba 总结与建议谢飞机的问题总结✅ 基础概念知道但细节不够深入❌ 复杂场景缺少实战经验⚠️ 分布式系统设计能力不足⚠️ 生产环境运维经验欠缺给求职者的建议技术深度不要只停留在使用层面理解底层原理场景思维每个技术方案都要考虑业务场景实战经验多参与真实项目积累踩坑经验持续学习关注云原生、Service Mesh等新趋势面试不是终点而是成长的起点。祝各位Java开发者都能找到心仪的工作

相关文章:

大厂Java面试实录:从Spring Cloud微服务到Redis缓存穿透,谢飞机如何翻车

大厂Java面试实录:从Spring Cloud微服务到Redis缓存穿透,谢飞机如何翻车 前言 在互联网大厂Java求职面试中,面试官往往通过层层递进的方式考察候选人的技术深度和广度。本文以电商支付金融场景为背景,记录了一次真实的面试过程——…...

Windows 11任务栏歌词插件:让桌面听歌体验焕然一新

Windows 11任务栏歌词插件:让桌面听歌体验焕然一新 【免费下载链接】Taskbar-Lyrics BetterNCM插件,在任务栏上嵌入歌词,目前仅建议Windows 11 项目地址: https://gitcode.com/gh_mirrors/ta/Taskbar-Lyrics 还在为听歌时频繁切换窗口…...

AJ-Captcha行为验证码技术架构深度解析:构建智能人机识别系统的实践指南

AJ-Captcha行为验证码技术架构深度解析:构建智能人机识别系统的实践指南 【免费下载链接】captcha 行为验证码(滑动拼图、点选文字),前后端(java)交互,包含h5/Android/IOS/flutter/uni-app的源码和实现 项目地址: https://gitcode.com/gh_m…...

PHP 9.0原生协程 vs Swoole vs RoadRunner:性能实测对比(QPS提升327%,内存降低68%)

更多请点击: https://intelliparadigm.com 第一章:PHP 9.0原生协程与AI聊天机器人架构演进 PHP 9.0 引入了真正的原生协程支持(via async/await 语法和 Fiber 底层重构),彻底摆脱了依赖扩展(如 Swoole&…...

完整指南:使用YOLOv8构建高效AI瞄准辅助系统

完整指南:使用YOLOv8构建高效AI瞄准辅助系统 【免费下载链接】yolov8_aimbot Aim-bot based on AI for all FPS games 项目地址: https://gitcode.com/gh_mirrors/yo/yolov8_aimbot Sunone Aimbot是一个基于YOLOv8和YOLOv10深度学习模型的开源AI瞄准辅助工具…...

从Laravel Octane到RoadRunner v3:PHP 9.0异步AI服务部署的4层内存泄漏链(含Valgrind检测脚本+修复patch)

更多请点击: https://intelliparadigm.com 第一章:PHP 9.0异步编程与AI聊天机器人避坑指南 PHP 9.0 尚未正式发布(截至 2024 年),但其草案已明确将原生协程(async/await)、无锁事件循环&#x…...

【新手攻略】2026年OpenClaw/Hermes Agent京东云8分钟快速部署教程

【新手攻略】2026年OpenClaw/Hermes Agent京东云8分钟快速部署教程。OpenClaw和Hermes Agent是什么?OpenClaw和Hermes Agent怎么部署?如何部署OpenClaw/Hermes Agent?2026年还在为部署OpenClaw和Hermes Agent到处找教程踩坑吗?别再…...

C语言新手必看:用辗转相除法(欧几里得算法)求最大公约数,顺便搞定最小公倍数

C语言新手必看:用辗转相除法(欧几里得算法)求最大公约数,顺便搞定最小公倍数 第一次接触算法时,很多人会被各种数学概念和代码实现绕晕。特别是当老师布置"求两个数的最大公约数和最小公倍数"这种题目时&…...

FileRun vs NextCloud:自建网盘二选一?我的真实体验与反向代理配置避坑指南

FileRun vs NextCloud:自建网盘技术选型与高级配置实战 当我们需要在团队或家庭环境中搭建私有云存储时,FileRun和NextCloud总是出现在候选名单的前列。这两个开源解决方案都能提供类似Google Drive的功能,但在实际使用体验、技术架构和扩展性…...

私人自制飞机也能上天?聊聊FAA适航体系下的“另类”实践与启示

私人自制飞机也能上天?FAA适航体系下的创新实践与启示 当大多数人认为飞机制造是波音、空客这类巨头的专利时,美国天空中有超过20%的通航飞机却来自家庭车库和业余爱好者之手。这种看似不可思议的现象背后,是FAA(美国联邦航空管理…...

告别打包烦恼:用Auto.js Pro 9.0.0 + VSCode插件高效开发手机自动化脚本(附Scrcpy投屏技巧)

高效移动自动化开发:Auto.js Pro 9.0.0与VSCode深度整合实战 在移动自动化脚本开发领域,效率瓶颈往往不在于编码本身,而在于繁琐的环境配置、调试流程和打包部署环节。许多开发者在使用Auto.js或Autox.js时,常常陷入反复连接设备、…...

如何在15分钟内为通达信搭建缠论分析系统:ChanlunX自动化缠论插件实战指南

如何在15分钟内为通达信搭建缠论分析系统:ChanlunX自动化缠论插件实战指南 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX ChanlunX是一款专为通达信软件设计的开源缠论可视化插件&#xff0c…...

PHP 9.0 + RAG + 异步流式响应:三步完成企业级AI客服系统部署(含JWT鉴权+速率限制+审计日志完整配置)

更多请点击: https://intelliparadigm.com 第一章:PHP 9.0 异步编程与 AI 聊天机器人如何实现快速接入 PHP 9.0 原生引入了协程调度器(Coroutine Scheduler)与 async/await 语法支持,彻底摆脱了对第三方扩展&#xff…...

3分钟掌握Mermaid图表:告别拖拽式绘图,用代码创作专业图表

3分钟掌握Mermaid图表:告别拖拽式绘图,用代码创作专业图表 【免费下载链接】mermaid Generation of diagrams like flowcharts or sequence diagrams from text in a similar manner as markdown 项目地址: https://gitcode.com/GitHub_Trending/me/me…...

PHP 9.0协程调度器深度解密:如何将AI对话延迟从412ms压至≤23ms?

更多请点击: https://intelliparadigm.com 第一章:PHP 9.0协程调度器与AI聊天机器人性能调优全景图 PHP 9.0 引入了原生协程调度器(Coroutine Scheduler),其基于用户态轻量线程与事件驱动内核,为高并发 AI…...

别只盯着VIF>10:多重共线性的3个实战处理策略与误区避坑

别只盯着VIF>10:多重共线性的3个实战处理策略与误区避坑 当你第一次看到回归分析结果中某个变量的VIF值飙升至两位数时,那种手足无措的感觉我太熟悉了。三年前我刚接手一个电商用户价值预测项目时,就曾被"收入"和"消费金额…...

Winhance中文版:简单高效的Windows系统优化管理工具终极指南

Winhance中文版:简单高效的Windows系统优化管理工具终极指南 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Winha…...

Windows 11终极优化神器:Win11Debloat让你的电脑重获新生

Windows 11终极优化神器:Win11Debloat让你的电脑重获新生 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and…...

保姆级教程:在华为SDH设备上配置SNCP相交环保护(附网管截图)

华为SDH设备SNCP相交环保护配置实战指南 在光传输网络领域,SDH(同步数字体系)技术凭借其高可靠性和强大的保护机制,依然是许多运营商和企业网络的核心选择。SNCP(子网连接保护)作为SDH网络中的重要保护方式…...

如何用25个免费Illustrator脚本快速提升300%设计效率:完整指南

如何用25个免费Illustrator脚本快速提升300%设计效率:完整指南 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 你是否曾在Adobe Illustrator中花费数小时重复同样的操作…...

告别重复敲命令!用MobaXterm宏一键搞定服务器日常巡检(附日志监控宏配置)

告别重复敲命令!用MobaXterm宏一键搞定服务器日常巡检(附日志监控宏配置) 每次登录服务器都要重复输入相同的检查命令?磁盘空间、内存占用、服务状态、日志跟踪...这些日常巡检操作既耗时又容易遗漏关键指标。今天分享一个实战技巧…...

东莞纸托厂哪家口碑好

探寻优质包装:东莞市禾本包装有限公司,环保与专业并重坐落于东莞市茶山镇南塘路11号的东莞市禾本包装有限公司,以其优良的环保理念和专业的设计生产实力,在纸托行业树立了良好的口碑。环境优美,交通便利禾本包装有限公…...

ZIP密码恢复终极指南:3分钟解锁加密文件的神奇工具

ZIP密码恢复终极指南:3分钟解锁加密文件的神奇工具 【免费下载链接】bkcrack Crack legacy zip encryption with Biham and Kochers known plaintext attack. 项目地址: https://gitcode.com/gh_mirrors/bk/bkcrack 你是否曾经因为忘记ZIP文件的密码而无法访…...

【国产化中间件适配黄金法则】:Java应用平滑迁移至东方通、金蝶、普元的5大避坑指南

更多请点击: https://kaifayun.com 第一章:国产化中间件适配的战略认知与迁移全景图 在信创产业加速落地的背景下,国产化中间件适配已从技术选型层面上升为系统性工程战略。它不仅是替换WebLogic、WebSphere等国外商业中间件的简单动作&…...

5分钟掌握libdxfrw:CAD文件处理的终极C++解决方案

5分钟掌握libdxfrw:CAD文件处理的终极C解决方案 【免费下载链接】libdxfrw C library to read and write DXF/DWG files 项目地址: https://gitcode.com/gh_mirrors/li/libdxfrw 你是否曾经为处理CAD文件而烦恼?面对复杂的DXF和DWG格式&#xff0…...

告别试错!用Matlab controlSystemDesigner快速搞定永磁同步电机电流环PI参数

永磁同步电机电流环PI参数整定的高效可视化方法 电机控制工程师们常常面临一个共同的挑战:如何快速准确地整定电流环PI参数。传统试错法不仅耗时耗力,还严重依赖个人经验。本文将介绍一种基于Matlab controlSystemDesigner工具的高效方法,通…...

5分钟掌握res-downloader:跨平台资源下载终极指南,轻松获取无水印视频和音频

5分钟掌握res-downloader:跨平台资源下载终极指南,轻松获取无水印视频和音频 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/r…...

G-Helper深度解析:华硕笔记本硬件控制与性能调优技术指南

G-Helper深度解析:华硕笔记本硬件控制与性能调优技术指南 【免费下载链接】g-helper The control app every laptop should come with. G-Helper is a fast, native tool for tuning performance, fans, GPU, battery, and RGB on any Asus laptop or handheld - RO…...

Inter字体终极指南:如何选择最适合屏幕阅读的现代无衬线字体

Inter字体终极指南:如何选择最适合屏幕阅读的现代无衬线字体 【免费下载链接】inter The Inter font family 项目地址: https://gitcode.com/gh_mirrors/in/inter Inter字体是一款专为数字屏幕优化的现代无衬线字体,凭借其出色的可读性和美观的设…...

BitNet b1.58-2B-4T-GGUF部署教程:离线环境无网络安装依赖包完整方案

BitNet b1.58-2B-4T-GGUF部署教程:离线环境无网络安装依赖包完整方案 1. 项目概述 BitNet b1.58-2B-4T-GGUF是一款极致高效的开源大模型,采用原生1.58-bit量化技术。这款模型在量化领域实现了重大突破,其权重仅使用-1、0、1三个值&#xff…...