Java面试连环炮:从JVM调优到微服务架构,谢飞机硬刚大厂面试官

Java面试连环炮:从JVM调优到微服务架构,谢飞机硬刚大厂面试官
Java面试连环炮从JVM调优到微服务架构谢飞机硬刚大厂面试官开场地点某互联网大厂面试间人物严肃面试官官、水货程序员谢飞机飞机业务背景电商平台日均百万订单招聘Java高级工程师第一轮Java核心与数据层 · 电商订单系统官谢飞机是吧我们电商系统每天处理百万级订单有个订单查询接口响应很慢你怎么排查和优化飞机呃…先看看SQL有没有加索引用explain分析执行计划查慢查询日志。如果没问题可能是数据量大考虑分库分表或加缓存。官嗯基础还行。那MySQL的B树索引为什么适合范围查询飞机B树所有数据存在叶子节点非叶子节点只存索引叶子节点间用链表连接。范围查询时找到起始值后顺着链表遍历就行磁盘IO也少。官不错。那用Hibernate查询订单状态流转时出现N1问题怎么解决飞机可以用BatchSize批量加载或者JOIN FETCH或者EntityGraph指定加载策略。官如果接口本身没问题但整体应用响应慢JVM层面怎么排查飞机用jmap dump堆、jstack看线程、jstat监控GC。如果频繁Full GC可能是堆内存设置不合理或内存泄漏。官Java 8 Stream API处理订单数据流有什么优缺点飞机代码简洁、可读性好、支持并行流但调试麻烦要注意副作用。第二轮微服务与中间件 · 订单系统微服务化官现在要把单体订单系统拆成微服务你会怎么拆分服务间怎么通信飞机按业务边界拆分订单、支付、库存、用户服务。用Feign声明式HTTP调用Nacos做注册中心和配置中心Gateway做网关。官下单扣库存的分布式事务怎么保证一致性飞机冒汗可以用Seata AT模式或TCC…TCC就是Try-Confirm-Cancel…也可以用消息队列做最终一致性。官消息队列最终一致性具体怎么做飞机下单成功后发消息到MQ库存服务消费扣库存失败了重试或回滚。但消息丢失、重复消费要处理好。官Redis在电商怎么扛住高并发缓存穿透、击穿、雪崩是什么飞机眼睛一亮穿透用布隆过滤器或缓存空值击穿用互斥锁或热点key永不过期雪崩用随机过期时间、多级缓存、限流降级官支付成功后要异步通知订单和物流系统消息队列怎么设计飞机用RabbitMQ或Kafka支付服务生产消息订单和物流服务订阅。用不同Exchange和Queue做路由注意消息顺序性和幂等性。第三轮云原生与运维体系 · 部署监控安全官微服务怎么部署Docker和K8s了解多少飞机Docker打包镜像K8s编排。K8s有Pod、Service、Deployment可以做自动扩缩容、滚动更新。官生产环境怎么监控微服务的健康和调用链飞机Spring Boot Actuator暴露端点Prometheus采集指标Grafana可视化。调用链用Jaeger或Zipkin配合Sleuth。官API安全怎么保障飞机Spring SecurityJWT做认证OAuth2做授权再加接口签名、防重放、限流熔断。官CI/CD怎么做的飞机代码推GitLab触发PipelineMaven构建Docker build推HarborK8s滚动更新中间跑单元测试和代码扫描。官你对薪资有什么期望飞机搓手越多越好…50K官面无表情好的感谢你的时间3个工作日内答复先回去等通知。飞机内心完了凉了好的谢谢详细答案与知识图谱第一轮详解Java核心与数据层1. 订单查询慢排查思路| 层面 | 工具/方法 | 常见问题 | 解决方案 | |------|----------|---------|---------| | SQL层 | EXPLAIN、慢查询日志 | 全表扫描、索引失效 | 加索引、优化SQL | | ORM层 | Hibernate统计日志 | N1问题、懒加载过多 | 批量加载、JOIN FETCH | | 应用层 | Arthas、JProfiler | 代码耗时长、线程阻塞 | 异步化、池化 | | JVM层 | jmap、jstack、jstat | Full GC频繁、内存泄漏 | 调堆内存、优化GC |2. MySQL B树原理非叶子节点只存索引键叶子节点存完整行数据叶子节点用双向链表连接范围查询效率高树高度3-4层磁盘IO少3. Hibernate N1解决方案// 方案一JOIN FETCH Query(SELECT o FROM Order o JOIN FETCH o.user) ListOrder findAllWithUser(); // 方案二BatchSize BatchSize(size 10) OneToMany(mappedBy order) ListOrderItem items;4. JVM排查命令速查| 命令 | 用途 | |------|------| | jps -l | 查看Java进程 | | jmap -heap [pid] | 查看堆配置 | | jmap -dump:live,fileheap.hprof [pid] | 导出堆快照 | | jstack [pid] | 查看线程堆栈 | | jstat -gcutil [pid] 1000 | 监控GC |5. Stream vs 传统循环// Stream方式更简洁 ListString orderNos orders.stream() .filter(o - PAID.equals(o.getStatus())) .sorted(Comparator.comparing(Order::getCreateTime).reversed()) .map(Order::getOrderNo) .collect(Collectors.toList());第二轮详解微服务与中间件1. 微服务拆分原则| 维度 | 说明 | 示例 | |------|------|------| | 业务边界 | 按DDD划分限界上下文 | 订单、支付、库存 | | 数据独立 | 每个服务独立数据库 | 订单库、支付库 | | 通信 | 同步Feign 异步MQ | 下单同步、短信异步 | | 治理 | 注册中心配置中心网关 | Nacos、Sentinel |2. 分布式事务方案| 方案 | 原理 | 适用场景 | |------|------|---------| | Seata AT | 两阶段提交自动回滚 | 短事务低并发 | | TCC | Try-Confirm-Cancel补偿 | 高并发长事务 | | MQ最终一致 | 本地事务消息表重试 | 异步场景 | | Saga | 子事务补偿操作 | 跨服务长流程 |3. 缓存三大问题穿透查不存在数据打DB → 布隆过滤器/缓存空值击穿热点key失效高并发打DB → 互斥锁/永不过期雪崩大批key同时失效 → 随机TTL/多级缓存/限流4. 消息队列选型| 特性 | Kafka | RabbitMQ | RocketMQ | |------|-------|----------|----------| | 吞吐量 | 百万/秒 | 万/秒 | 十万/秒 | | 可靠性 | 高(需配置) | 高 | 高 | | 顺序性 | 分区内有序 | 单队列有序 | 队列有序 |第三轮详解云原生与运维1. DockerK8s核心概念| 概念 | 说明 | |------|------| | Docker镜像 | 打包应用依赖 | | Pod | 最小调度单元 | | Deployment | 声明式管理副本和更新 | | Service | 稳定网络入口和负载均衡 | | ConfigMap/Secret | 配置管理 |2. 微服务监控体系指标Micrometer Prometheus Grafana日志ELK (Elasticsearch Logstash Kibana)链路Sleuth Zipkin/Jaeger健康Spring Boot Actuator3. API安全体系认证JWT无状态Token授权OAuth2 Spring Security RBAC防篡改HMAC-SHA256接口签名防重放Nonce Timestamp限流Sentinel令牌桶4. CI/CD流水线stages: - build - test - package - deploy build: script: mvn clean compile test: script: mvn test package: script: - mvn package - docker build -t app:tag . - docker push registry/app:tag deploy: script: kubectl set image deployment/app appregistry/app:tag总结基础要扎实JVM、MySQL、Java 8是必考点场景要理解面试官问的是百万订单、双11高并发的真实场景深度要够光说用Redis不够要能说出穿透击穿雪崩的解法体系要完整从开发到测试到部署到监控全链路都要懂诚实要适度不会的可以说了解但未深入实践谢飞机内心让我回去等通知感觉这飞机要坠毁了…但把这些题搞懂下次一定能上岸