架构问题思考和解决方案

发布时间:2026/8/25 16:55:25

架构问题思考和解决方案
一、 JDK21 虚拟线程Virtual Thread深度剖析Q1虚拟线程和平台线程传统线程有什么区别底层是如何实现的思路 从调度模型、内存占用、创建开销三个维度回答。调度模型不同平台线程是操作系统原生线程由OS调度虚拟线程是JVM管理的轻量级线程Project Loom项目由JVM在用户态Carrier线程即平台线程上进行调度M:N模型。内存与开销平台线程默认栈空间较大1MB左右创建和销毁开销大虚拟线程栈是动态的类似协程初始很小几MB创建成本极低可以轻松创建百万级实例。阻塞处理当虚拟线程遇到IO阻塞如网络请求、文件读写时JVM会将其从载体线程上“卸载”让载体线程去执行其他虚拟线程IO恢复后再“挂载”回去从而实现高并发。Q2用虚拟线程重构了异步线程池具体怎么做和原来的 CompletableFuture/Reactive 方案比有什么优劣思路 强调“代码简化”和“性能提升”承认其局限性。做法以前处理一个复杂业务流程可能需要拆分成多个 CompletableFuture 链式调用或者使用WebFlux的 Mono/Flux 代码回调地狱严重。重构时将阻塞IO操作如调用下游服务、访问数据库直接放在虚拟线程中执行保持了代码的同步写法 imperative style 。优势代码可读性极高像写同步代码一样写高并发程序维护成本低。且虚拟线程的上下文切换由JVM负责比手动管理线程池和回调要高效。劣势虽然吞吐量大但对于CPU密集型任务由于受限于载体线程Platform Thread的数量虚拟线程并不能无限提升性能甚至可能因为频繁的挂起/恢复带来额外开销。Q3synchronized 会不会钉住Pinning虚拟线程如果一定要用 synchronized 怎么办思路 解释“钉住”的原因给出解决方案 ReentrantLock 或 synchronized 优化。会钉住当虚拟线程在执行 synchronized 代码块且持有了监视器锁Monitor时如果这个锁是偏向锁或轻量级锁或者虚拟机实现的原因虚拟线程可能会被“钉住”在当前载体线程Carrier Thread上无法被挂起直到它释放锁。这会阻塞载体线程影响整体吞吐量。解决方案替换锁尽量使用 java.util.concurrent.locks.ReentrantLock 它支持可中断、公平锁等高级特性且不会像 synchronized 那样容易导致钉住。减小锁粒度尽量不要在大的代码块上使用 synchronized 缩小临界区。升级JDK/调整参数在较新的JDK版本中JVM对 synchronized 在虚拟线程下的表现做了优化或者在启动参数中调整相关配置但这通常是最后手段。二、 数据库与 SQL 优化Q4如果一个核心接口需要关联8张表怎么优化的思路 从“业务抽象 - 技术拆分 - 异步化”三个层面回答体现一面的“应变能力”。业务抽象与需求对齐和PM/业务方沟通是否真的需要实时返回8张表的全部聚合数据能否分层展示或者异步生成报表垂直/水平拆分垂直如果8张表代表不同的业务域考虑拆分成多个接口前端按需加载。水平对于多表Join如果数据量巨大会尝试将Join操作下沉到服务层Application Layer而不是在DB层做。即先查主表再根据主表ID批量查询其他表N1查询变IN查询利用Redis缓存热点数据减少DB压力。宽表与物化视图对于报表类、统计分析类的多表Join考虑在离线计算如Spark/Hive或准实时数仓中构建宽表或者使用数据库的物化视图来预计算避免在线业务库做复杂的Join。异步化如果查询非常重将其改为异步任务生成结果后通知用户下载。Q5千万级订单列表查询除了索引和分页还可以做哪些优化思路 覆盖“查询条件优化”、“深分页优化”、“缓存策略”、“数据归档”。查询条件优化确保 WHERE 条件中的字段都有索引避免全表扫描。对于模糊查询如订单号、收货人尽量使用前缀匹配或引入搜索引擎ES。深分页优化传统的 LIMIT offset, size 在数据量大时很慢因为数据库要扫描前 offset 条数据。采用了基于游标Cursor的分页或者延迟关联先查ID再根据ID关联详情性能提升明显。数据归档对于历史订单定期进行归档冷热分离将冷数据迁移到历史表或归档库如HBase减少在线表的数据量。缓存穿透/击穿对热点查询条件增加本地缓存Caffeine或分布式缓存Redis并对空结果进行缓存防止恶意请求打满数据库。三、 消息队列与分布式事务RocketMQQ6RocketMQ事务消息。它的基本实现原理是什么半消息Half Message是什么思路 解释“两阶段提交”思想在MQ中的体现。原理RocketMQ事务消息基于两阶段提交2PC思想。第一阶段发送半消息发送一条“半消息”Half Message到BrokerBroker会暂存这条消息不会投递给消费者。同时生产者会执行本地事务逻辑。第二阶段确认/回滚生产者根据本地事务执行结果向Broker发送 commit 或 rollback 指令。如果 commit Broker会将半消息变为“可消费消息”投递给消费者。如果 rollback Broker会丢弃这条半消息。回查机制补救如果生产者在规定时间内没有发送 commit/rollback 如宕机Broker会定时回调生产者的 checkLocalTransaction 接口询问本地事务的执行状态再决定最终操作。半消息就是已经被发送到Broker但处于“不可见”或“暂存”状态等待生产者最终确认的消息。Q7顺序消息顺序消息在RocketMQ中是怎么保证的如果要保证全局顺序需要注意什么思路 区分“分区有序”和“全局有序”。保证机制RocketMQ的顺序消息是通过MessageQueueSelector实现的。生产者发送消息时通过一个特定的选择器如根据订单ID哈希将同一个业务逻辑的消息发送到同一个MessageQueue中。因为同一个MessageQueue内的消息是顺序存储和消费的所以能保证局部分区有序。全局顺序要保证全局顺序必须让所有消息都发到同一个MessageQueue中。但这会失去分布式并行处理的优势吞吐量会极低。因此实际生产中很少用全局顺序都是用分区顺序即保证同一笔订单的操作顺序即可。消费端注意消费端必须是单线程消费同一个MessageQueue或者使用 MessageListenerOrderly 顺序监听器否则多线程消费还是会打乱顺序。四、 多线程与线程池Q8“自定义线程池、线程隔离”。线程池的核心参数有哪些拒绝策略有哪些怎么选思路 默写参数结合实际场景解释选择。核心参数 corePoolSize 核心线程数、 maximumPoolSize 最大线程数、 keepAliveTime 非核心线程存活时间、 workQueue 工作队列、 threadFactory 线程工厂、 handler 拒绝策略。拒绝策略AbortPolicy 默认直接抛出 RejectedExecutionException 阻止系统正常运行。CallerRunsPolicy 由调用者线程提交任务的线程执行任务减缓新任务提交速度。DiscardPolicy 直接丢弃任务不抛异常。DiscardOldestPolicy 丢弃队列中最老的任务然后尝试重新提交当前任务。选择与应用为了防止大任务抢占核心业务资源使用了线程隔离。单独配置了一个线程池核心数小队列大拒绝策略选择了 CallerRunsPolicy 这样当导出任务过多时会由提交任务的Web线程来执行从而起到一种“负反馈”作用让前端请求变慢但不会拖垮整个系统。五、 系统设计 架构思维Q9自研了“通用异步报表导出引擎”的架构的设计思路为什么要用策略模式泛型思路 体现“解耦”、“复用”、“扩展性”。痛点各个业务线订单、对账、承运商都有导出需求如果每个都写一套导出逻辑会有大量重复代码且难以维护。设计思路策略模式 泛型定义了一个通用的导出接口 ExportStrategyT 其中 T 是泛型代表不同的数据类型订单DTO、对账DTO等。每个业务方只需要实现这个接口编写自己的“数据查询”和“Excel渲染”逻辑即可。模板方法引擎内部有一个抽象的模板方法负责“接收请求 - 生成任务ID - 放入线程池 - 返回任务ID给前端”的通用流程。线程隔离与限流引擎层维护了多个独立的线程池不同业务的导出任务互不干扰。同时使用Redis对任务并发数进行限流防止DB和IO被打满。异步回调与下载任务在后台线程执行生成文件后上传到OSS并通过MQ或WebSocket通知前端前端凭链接下载。优势业务方无需关心异步、线程池、限流等复杂逻辑只需关注“怎么查数据”和“怎么渲染”大大提高了开发效率和系统稳定性。六、 软实力 应变能力Q10如何推动“业务架构”层面的优化的吗思路 讲一个真实或合理虚构的故事体现沟通能力和技术影响力。场景在做物流轨迹大屏展示时最初需求是实时聚合查询8张表订单、运单、节点、车辆、司机、仓库、异常、签收数据量巨大SQL跑不动。行动不死磕SQL优化而是拉上产品经理和数据产品分析他们真正关心的指标是什么。我们发现其实很多数据是“次要”的前端展示时会被折叠或聚合。结果和前端协商将“一次性全量加载”改为“分层加载 按需展开”。第一层只查3张核心表订单、运单、最新节点第二层点击“查看详情”时再通过接口单独查其他表。同时对于历史数据我们引导产品使用“离线报表”代替实时查询。价值最终核心接口的响应时间从5秒降到了200毫秒DB压力大幅降低同时也简化了前端交互获得了业务的认可。这说明技术优化不仅仅是写代码更是通过技术手段引导业务做出更合理的设计。回答技术问题一定要有“场景 - 做法 - 原理/思考”的结构。一定要能讲出“为什么这么做”、“有没有其他方案”、“权衡点在哪里”。

相关新闻

Search-GRT:基于引导式检索训练的智能搜索代理实现复杂问答

Search-GRT:基于引导式检索训练的智能搜索代理实现复杂问答

2026/8/25 16:55:25

1. 项目概述:当搜索代理学会“思考”在信息爆炸的时代,我们早已习惯了向搜索引擎抛出问题,然后从海量结果中筛选答案。但对于那些结构复杂、需要多步推理、甚至答案本身就不存在于单一文档中的问题,传统的关键词匹配式搜索就显得力…

Grasscutter联机服务器搭建:从环境配置到运维管理的完整指南

Grasscutter联机服务器搭建:从环境配置到运维管理的完整指南

2026/8/25 16:55:25

1. 项目概述:从单机到联机的蜕变如果你是一位游戏爱好者,尤其是对某些特定类型的游戏情有独钟,那么“联机”这个词对你来说一定充满了吸引力。它意味着从一个人的冒险变成一群人的狂欢,从孤独的探索变成协作与竞争的舞台。今天我们…

S7-1500用户程序实现硬件IO自由组态

S7-1500用户程序实现硬件IO自由组态

2026/8/25 16:45:25

1. 为什么“硬件IO自由组态”在博图里不是点几下就能搞定的事?你打开TIA Portal,新建一个S7-1500项目,拖进CPU,再拖个ET200SP分布式IO站——这时候,系统自动给你生成了一堆IO地址:I0.0到I0.7、Q0.0到Q0.7……

LeetCode Hot100高频面试题解析与实战技巧

LeetCode Hot100高频面试题解析与实战技巧

2026/8/25 17:45:29

1. LeetCode Hot100 题单解析与价值定位作为算法面试准备的黄金标准,LeetCode Hot100 题单汇集了硅谷科技大厂近五年最高频的面试真题。这个经过实战检验的题库不同于普通算法题集合,其核心价值体现在三个方面:首先,题目按照真实面…

PyTorch张量插值全解析:从原理到实战避坑指南

PyTorch张量插值全解析:从原理到实战避坑指南

2026/8/25 17:45:29

1. 从“动态链接库初始化失败”到理解张量插值最近在帮一个刚入坑PyTorch的朋友解决环境问题时,遇到了一个经典的Windows报错:OSError: [WinError 1114] 动态链接库(DLL)初始化例程失败。这个问题通常发生在安装或导入torch时,背后原因五花八…

3步装好|REFramework 怪猎荒野不闪退实操|完整

3步装好|REFramework 怪猎荒野不闪退实操|完整

2026/8/25 17:45:29

3步装好|REFramework 怪猎荒野不闪退实操|完整 【免费下载链接】REFramework Mod loader, scripting platform, and VR support for all RE Engine games 项目地址: https://gitcode.com/GitHub_Trending/re/REFramework REFramework 是 RE 引擎游…

RemotePlayWhatever 零门槛指南:非 Steam 游戏远程同乐 5 步上车

RemotePlayWhatever 零门槛指南:非 Steam 游戏远程同乐 5 步上车

2026/8/25 17:45:29

RemotePlayWhatever 零门槛指南:非 Steam 游戏远程同乐 5 步上车 【免费下载链接】RemotePlayWhatever Tiny application that lets you force remote play together any game you have in your steam library including non-steam ones. 项目地址: https://gitco…

LX Music音源导入教程:4步快速配置,五平台FLAC无损音乐

LX Music音源导入教程:4步快速配置,五平台FLAC无损音乐

2026/8/25 17:45:29

LX Music音源导入教程:4步快速配置,五平台FLAC无损音乐 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 播放器里点开一首歌却提示"无音源",换了三个音…

MoneyManagerEx 高级功能完整清单:嵌套分类、标签、多币种与投资组合跟踪指南

MoneyManagerEx 高级功能完整清单:嵌套分类、标签、多币种与投资组合跟踪指南

2026/8/25 17:35:29

MoneyManagerEx 高级功能完整清单:嵌套分类、标签、多币种与投资组合跟踪指南 【免费下载链接】android-money-manager-ex Local-first personal finance app. Encrypted, self-hosted, sync across devices. 项目地址: https://gitcode.com/gh_mirrors/an/androi…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/24 19:53:32

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/24 19:56:07

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/24 21:16:09

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南

2026/8/25 0:04:34

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory Meta Description:GetQzonehistory 是一个QQ空间历史说…

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

2026/8/25 0:04:35

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

2026/8/25 0:04:35

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG 【免费下载链接】transformers.js State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server! 项目地址: https:/…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/22 4:13:47

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/22 1:32:34

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…