作者小头像 Lv.3
395 成长值

个人介绍

这个人很懒,什么都没有留下

感兴趣或擅长的领域

暂无数据
个人勋章
TA还没获得勋章~
成长雷达
380
15
0
0
0

个人资料

个人介绍

这个人很懒,什么都没有留下

感兴趣或擅长的领域

暂无数据

达成规则

发布时间 2026/10/23 10:29:25 最后回复 yd_232401777 2026/10/24 08:34:08 版块 开发者空间
51 7 0
他的回复:
楼上几位讲的偏 Host 侧的裁剪与预算策略。我补充几个 MCP 协议(2025-06-18 版)自带的机制——自建 Server 时可以直接用协议字段让返回"生下来就小",而不是全靠 Host 事后裁剪:1. 大结果用 resource_link 返回,正文不进工具结果tools/call 的结果里允许返回 resource_link 类型内容:工具只回一个 URI(如 db://orders/query-42),Host 需要细节时再 resources/read,用不到就只留一个链接常驻上下文。规范同时说明这类链接不保证出现在 resources/list 里,Host 应按 URI 直接读。2. 用 outputSchema 声明结构化输出工具定义里加 outputSchema,结果走 structuredContent 字段,字段名本身就是语义压缩(132 行明细 → {count:132, sample:[...]})。声明了 schema 后服务端结果必须符合、客户端应校验——坏数据在进上下文之前就能拦住。3. "列表/详情"工具对把查询类工具拆成两个:search 只回 ID+总数+首屏摘要,detail 按 ID 取回。注意 MCP 的 cursor 分页只覆盖 tools/list、resources/list 这类目录操作,工具结果本身的分页要自己在工具里实现。4. 订阅资源变更,避免每轮重读表结构、配置、大文件这类稳定数据挂成 resource;Server 声明 resources.subscribe: true 后,Host resources/subscribe,收到 notifications/resources/updated 才重新 read,平时一直用本地摘要。这把"不知道摘要何时失效"变成"服务端主动通知"。5. 通道分流:日志与展示不走模型上下文· 过程性输出(SQL 语句、抓取日志)别塞进 tool result:Server 声明 logging 能力,用 notifications/message(level/logger/data)单独推送,Client 可用 logging/setLevel 控制粒度,tool result 只留结论;· 内容块支持 audience 注解:给人看的详细表格标 ["user"],给模型的结论标 ["assistant"],Host 据此决定进 UI 还是进模型上下文。小结:楼上说的是"Host 拿到结果后怎么裁",这里补的是"Server 返回时就更小",两层一起做常驻上下文才稳。上手顺序建议:先给返回量最大的两个工具做 1+2 改造,再给稳定资源开 4,最后接 5。参考(2025-06-18 版规范):https://modelcontextprotocol.io/specification/2025-06-18/server/toolshttps://modelcontextprotocol.io/specification/2025-06-18/server/resourceshttps://modelcontextprotocol.io/specification/2025-06-18/server/utilities/logging
发布时间 2026/10/13 23:46:51 最后回复 shuai1021 2026/10/23 08:35:55 版块 开发者空间
43 5 0
他的回复:
结合 FunctionGraph 官方文档,给大家一个可落地的判断思路。一、先看定位FunctionGraph 是基于事件驱动的函数托管计算服务:只写业务函数、设置触发条件即可,无需购买和管理服务器,按请求次数 + 执行时间计费,不执行不产生费用。它天生适合「事件来了才算一下」的负载,而不是常驻型服务。二、官方列举的典型场景(对号入座)1. 实时文件处理:文件上传 OBS 后自动触发函数,做缩略图、视频转码、数据汇聚筛选;2. 实时数据流处理:对接 DIS 处理流式数据,如日志筛选、IoT 设备遥测计量、事务顺序处理;3. Web / 移动应用后端:配合 API 网关(APIG/APIC)构建高可用、自动伸缩的后端接口,请求量波动大时按量付费更划算;4. AI 服务集成:结合 EI 等服务编排文字识别、图像内容审核,函数负责前后处理与结果结构化。此外,定时触发器(TIMER)可替代 crontab 做报表、清理、数据同步等定时任务;SMN、DMS、云审计 CTS 等也都能作为事件源接入。三、快速判断:三个特征事件驱动、执行时间短、流量波动大——三个里占两个以上,用函数大概率是对的;相反,WebSocket 长连接、会话型有状态服务、对冷启动极敏感的核心链路,更适合 ECS/CCE 常驻部署。四、几个容易踩坑的硬约束(来自官方「约束与限制」)· 同步调用建议控制在 90 秒以内,更长的任务改用异步调用;单请求最大执行时长上限 259200 秒;· 同步请求/响应正文上限 6MB,异步调用 256KB,大文件建议走 OBS 传地址而不是把内容塞进事件;· /tmp 临时空间 512MB,最大内存 10GB,单账户默认并发执行数 100,容量规划时留意;· 函数实例无状态,会话/缓存放 Redis 等外部存储。五、上手建议先用「OBS 上传触发 + 控制台在线编码」跑通最小示例(Node.js/Python 几行代码即可),再逐步把真实业务挂到对应触发器上;用 LTS 看日志、AOM 看监控。对冷启动敏感的链路,可评估预留实例(官方称 SnapShot 技术已将镜像冷启动从分钟级降到秒级)。
发布时间 2026/10/20 15:59:08 最后回复 yd_292694877 2026/10/24 07:44:37 版块 开发者空间
53 5 0
他的回复:
顺着 JDK 8 putVal 的一次插入流程看,HashMap 对哈希冲突的处理可以分为「预防 → 接纳 → 兜底 → 摊薄」四层:第 1 层:预防冲突——扰动函数 + 2 的幂容量static final int hash(Object key) { int h; return key == null ? 0 : (h = key.hashCode()) ^ (h >>> 16);}int index = (n - 1) & hash; // n 恒为 2 的幂把高 16 位异或进低 16 位,让高位信息也参与选桶;容量恒为 2 的幂时,(n-1) & hash 等价于取模但只需一次位运算。null key 固定落在 0 号桶。第 2 层:接纳冲突——链地址法(拉链法)putVal 中目标桶为空直接新建节点;桶不空时先比较 hash 与 equals,相等则覆盖 value(这属于「同键更新」,不是冲突);equals 不相等才挂到同一条桶链上。JDK 7 用头插法,并发扩容时可能把链表插成环形导致死循环;JDK 8 改为尾插法,顺带修掉了这个隐患。第 3 层:兜底极端冲突——红黑树树化桶内节点数 ≥ 8 且数组容量 ≥ 64 时,链表转为红黑树,查找从 O(n) 降到 O(log n);容量不足 64 时优先选择扩容而不是树化。节点删减到 6 时退化回链表(6 与 8 之间留缓冲,防止在临界点反复转换)。树化后比较顺序是先比 hash,hash 相同再用 Comparable 或 tieBreakOrder,所以 hashCode 的质量依然关键。第 4 层:摊薄冲突密度——扩容(resize)当 size 超过 threshold = capacity × loadFactor(默认 0.75)时容量翻倍。JDK 8 扩容时用 hash & oldCap 把每条桶链「无重新哈希」地拆成 low/high 两条链:该位为 0 的留在原下标,为 1 的移动 oldCap 个位置。小结:平均 O(1),最坏情况下 JDK 8 是 O(log n)(JDK 7 是 O(n))。工程上还要注意三点:equals 相等的对象必须 hashCode 相等(契约要一起重写);不要让参与哈希计算的字段在对象作为 key 入 Map 之后被修改;并发读写请直接用 ConcurrentHashMap。
他的回复:
针对楼主遇到的 Bun 内存溢出问题,可以从以下几个维度来看:1. 关于获取 9 月初的历史老版本:Bun 官方所有历史版本均在 GitHub Releases 页面完全公开,无需等待官方或平台单独分发:GitHub 仓库地址:oven-sh/bun/releases9 月初的版本大约对应 v1.2.x 系列中的具体发布 tag。你只需进入 Releases 页面找到 2026 年 9 月上旬发布的对应版本,下载与你当前操作系统及架构一致的构建包(如 bun-windows-x64.zip 或 bun-linux-x64.zip),解压即可直接替换运行。2. 是个人问题还是普遍问题?目前并非大面积普遍崩溃,更多与具体的运行环境或执行场景强相关:若空跑或普通脚本也溢出,很可能是底层环境、特定操作系统补丁或杀毒安全软件对虚拟内存映射的拦截引发;若是在运行特定项目或框架(如复杂的 SSR、微服务或高并发 WebSocket/HTTP 服务)时出现,常见诱因包括底层原生 C/C++ 插件(Native Addons)、大文件流式读写未释放 buffer、或者是 Node.js 兼容层某个特定 API 在 Bun 中的已知内存泄漏。3. 建议定位与排查步骤:区分内存类型:使用系统监控观察是堆内存(Heap)暴涨还是常驻内存(RSS)持续泄漏。最小复现(Minimal Reproduction):尝试新建空白目录,仅保留报错的核心逻辑,逐步排查是否为某个第三方 npm 依赖包导致。检索 GitHub Issues:在 oven-sh/bun/issues 搜索 memory leak 或 OOM,查看是否已有同场景下的报错记录或官方提供的 workaround。