西安优秀的集团门户网站建设服务商千川广告投放平台
西安优秀的集团门户网站建设服务商,千川广告投放平台,最权威的做网站设计哪家好,wordpress 5.2.2中文版标题#xff1a;严肃面试官 vs 搞笑谢飞机#xff1a;Java 大厂面试三轮实战剧本#xff08;附详解答案#xff09;
正文#xff1a;
场景设定
背景#xff1a;电商大促来临#xff0c;公司要在一周内上线订单系统。面试以此为主线#xff0c;分三轮逐步深入。角色&…标题严肃面试官 vs 搞笑谢飞机Java 大厂面试三轮实战剧本附详解答案正文场景设定背景电商大促来临公司要在一周内上线订单系统。面试以此为主线分三轮逐步深入。角色面试官冷面认真步步紧逼。谢飞机嘴甜胆肥简单题能答对复杂题就花式胡闹。第一轮订单创建接口与基础功底5题面试官高并发下单入口选择 ArrayList 还是 LinkedList 存临时数据为什么 谢飞机ArrayList数组快定位准扩容嘛…也就翻倍那点事儿。 面试官有点意思继续。面试官那 HashMap 在 JDK1.8 的底层结构和扩容触发条件呢 谢飞机数组加链表撞太多就树装不下就扩容。 面试官答得八九不离十。面试官线程池怎么配才能抗住峰值三十万 QPS 的抢购接口 谢飞机把池子开大最大线程我就给个一万二拒绝策略选“别拒绝”一把梭哈。 面试官……先记下。面试官如何避免重复下单保证幂等 谢飞机加个锁Redis 随便锁一下谁先到谁下单。 面试官只锁细化一下会更好。面试官订单表索引怎么设计常见查询是“根据用户创建时间查订单列表”以及“根据订单号查详情”。 谢飞机主键自增然后…建点索引我看情况加。 面试官行我们下一轮聊系统拆分。第二轮缓存、消息与数据一致性5题 6. 面试官促销会把缓存打爆。说说缓存雪崩、穿透、击穿怎么防。 谢飞机加个过期时间就行了吧哦对再加个布隆那个布隆…滤网 面试官方向对细节偏少。面试官订单创建后异步扣减库存用 RabbitMQ 你会选什么交换机路由如何确保可靠投递 谢飞机就默认 direct可靠嘛…我信网络不丢的。 面试官嗯。面试官下单在订单服务扣减在库存服务本地事务最终一致性怎么做Spring 事务传播怎么配 谢飞机Propagation.REQUIRED 万能一致性…先扣后记出错再看看日志。 面试官好我们等会儿看你的“万能”。面试官MyBatis 如何避免 N1 查询批量插入如何做 谢飞机MyBatis 牛得很 一包就行N1…多查几次也没事吧 面试官记录一下。面试官上线用 Docker。你会如何设置资源限制与基础监控 谢飞机Docker 跑起来先说限制嘛…默认就挺好监控看感觉。 面试官好最后一轮聊稳定性与演进。第三轮稳定性、调优与架构演进5题 11. 面试官说说 JVM 的 CMS 和 G1有何区别如何根据延迟目标调优 谢飞机G1 巨好分区、回收、自由。CMS…老古董了。调优嘛多给点内存。 面试官嗯。面试官JUC 里 CountDownLatch 和 CyclicBarrier 区别与使用场景 谢飞机Latch 倒计时屏障是凑齐再上。一个一次性一个可循环。这题我熟 面试官答得不错。面试官Dubbo 做 RPC超时、重试、限流怎么配 谢飞机超时拉满重试多多益善限流么…先放开跑出事再加。 面试官了解。面试官未支付订单 30 分钟自动关闭xxl-job 怎么设计 谢飞机写个定时任务扫数据库分片跑错过了再补。这个我行 面试官这题给你加分。面试官按 DDD 设计订单域会有哪些聚合与边界 谢飞机大聚合订单把优惠、库存、支付都收编一个类打天下。 面试官好的今天到这儿。回去等通知。——答案与详解小白也能看懂ArrayList vs LinkedList 适用场景ArrayList动态数组随机访问 O(1)末尾插入摊还 O(1)中间插入/删除 O(n)连续内存CPU 缓存友好。LinkedList双向链表任意位置插入/删除 O(1)需先定位 O(n)随机访问 O(n)内存分散额外指针开销大。结论大多场景优先 ArrayList仅当需要频繁在中间插入删除且已持有节点引用时再考虑 LinkedList。HashMapJDK1.8结构与扩容结构数组 Node[] 链表 红黑树。当桶内链表长度≥8 且容量≥64 时树化6 时退化为链表。扩容触发size thresholdcapacity * loadFactor默认 0.75。扩容为原容量的 2 倍节点按高位哈希位 0/1 分流几乎 O(1) 地再散列。线程池参数与估算核心参数corePoolSize、maximumPoolSize、keepAliveTime、workQueue、threadFactory、rejectedExecutionHandler。估算CPU 密集threads ≈ CPU 核心数 1。IO 密集threads ≈ CPU 核心数 × (1 io_wait_time/cpu_time)。实战网关限流本地队列限速拆分读写异步落盘拒绝策略用 CallerRuns 或自定义降级不要“万物不拒绝”。幂等与防重复下单请求唯一键下发下单 token一次性或以 userId商品时间窗 作为幂等键落 Redis/DB 唯一索引。分布式锁Redis SET NX EX必要时用 Lua 脚本原子释放锁粒度到“用户商品”。去重订单号使用全局唯一雪花/Leaf/TinyIDDB 建唯一索引兜底。接口设计PUT/幂等键放在请求头失败可安全重试。MySQL 订单表索引主键自增或雪花InnoDB 聚簇主键建议自增减少页分裂。唯一order_no 唯一索引。组合索引(user_id, created_at DESC) 覆盖用户订单列表(order_no) 查详情语句优化选择覆盖索引避免 select *冷热分表可按 user_id/hash 或按时间分库分表。缓存雪崩/穿透/击穿雪崩大量 key 同时过期→瞬时打到 DB。解法过期时间加随机抖动、热点预热、限流降级、多级缓存本地 Caffeine 分布式。穿透查询必不存在数据。解法布隆过滤器拦截、对不存在结果缓存短 TTL。击穿单热点 key 过期瞬时高并发。解法互斥锁/单航班singleflight、逻辑过期后台异步续期、热点永久不过期消息驱动更新。RabbitMQ 路由与可靠投递路由订单事件常用 direct 或 topic如 order.created.*库存可用一个队列多路绑定。可靠投递生产者开启 publisher confirm return失败重试/落本地 outbox 表后台补偿投递。交换机/队列设置持久化 durable消息 persistent。消费者手动 ack失败重试死信队列DLX延迟队列。本地事务 最终一致性与事务传播方案订单服务本地事务落库并写出 outbox领域事件表→可靠投递消息→库存服务消费并扣减失败则重试/人工补偿。事务传播REQUIRED默认常用在单服务内。REQUIRES_NEW写业务数据和写 outbox 可拆为新事务避免相互回滚。支付/库存为独立服务不用分布式两阶段采用事件驱动最终一致。其他如需强一致可选 TCC/SAGA成本较高。MyBatis 防 N1 与批处理防 N1通过 join/子查询一次性查回关联in 批量查询后在内存映射resultMap association/collection 正确配置懒加载。批处理useGeneratedKeysexecutorTypeBATCH合理分批如 500 条一批注意主键回填与失败回滚。Docker 资源与监控资源限制--cpus / --memory / --pids-limit为 JVM 传 -XX:MaxRAMPercentage 感知容器内存关闭 UseContainerSupportfalse 的旧版本坑。监控容器健康检查、/metrics 暴露、docker stats、cAdvisor/Prometheus Grafana日志 stdout 收集到 ELK/Loki。网络与存储合理设置 max_conns、连接池持久化卷与读写分离。CMS vs G1 与调优CMS并发标记-清除停顿低但有碎片、Concurrent Mode Failure 风险Java 14 起已移除。G1分区化按 Region 回收能根据 Pause Target 预测停顿适合大堆、低延迟场景。调优首选 G1Server 场景-XX:UseG1GC -XX:MaxGCPauseMillis200 -XX:InitiatingHeapOccupancyPercent30观察 GC 日志-Xlog:gc*根据晋升失败/回收比例调年轻代大小、Pause 目标。CountDownLatch vs CyclicBarrierLatch一次性“倒计时”如等多个远程调用返回再汇总。Barrier可复用“栅栏”如并行阶段性计算所有线程到齐再进入下一阶段。Dubbo 超时、重试、限流超时按接口粒度设置 timeout如 200ms~1s超时即快速失败避免线程堆积。重试幂等读重试retries2非幂等写禁用重试使用 Failfast/Failsafe 合理选择。限流与隔离令牌桶/漏桶DubboSentinel/Resilience4j线程池隔离熔断降级携带 traceId 做链路追踪。xxl-job 关闭超时订单方案方式A定时扫描未支付超时订单分片 范围游标幂等关闭状态机CREATED→CLOSED。方式B创建订单时投递延迟消息如 30 分钟到期检查并关闭失败进入死信队列回补。细节任务幂等、失败告警、错过misfire处理、分片广播与竞争模式的权衡。DDD 在订单域的建模限界上下文订单、库存、支付、营销各自独立上下文通过领域事件集成。聚合与聚合根Order 作为聚合根聚合内有 OrderItem、Address、PaymentInfo作为值对象更合适库存与优惠券不属于订单聚合。模型原则在聚合内保持强一致事务跨聚合通过事件最终一致仓储Repository屏蔽持久化细节领域服务承载跨实体的业务规则通过策略/责任链实现可插拔的优惠计算。结语面试不是背八股而是把“为什么”和“怎么落地”讲清楚。愿你既能像谢飞机一样有梗也能在关键题上有料。