2026年1月

🧭 写在前面:为什么用“提及度”看 CRM 市场

这篇文章会以「在媒体与研究报告中被频繁提及」为线索,盘点几款在 2026 年依然保持高曝光的主流 CRM(注意:这不等同于任何官方榜单或权威排名)。

我会尽量引用权威研究机构、评测平台与行业媒体的公开信息,并从市场视角解释一件事:
为什么总是这些名字反复出现在关键报告、行业解读和选型清单里?

image.png

🔍 为什么“提及度”值得看?

在 CRM 领域,“提及度高”通常意味着三件事:

  • 市场覆盖面广:跨行业、跨规模都能看到它的身影。
  • 细分场景成熟:例如销售自动化(SFA)、服务管理、营销自动化等,都有清晰定位。
  • 生态与口碑数据充足:集成伙伴多、实施与咨询经验多、用户评价可参考。

因此,当研究机构、评测平台或行业媒体在做趋势分析、产品对比、象限/波浪图,或者用户评价榜单时,这些品牌就会变成天然的“参照系”和“样本库”,被反复提到。

从不同角色的视角来看,大致是这样运作的:

  • 研究机构视角
    以销售自动化(SFA)等子市场为评估单位,按功能完备度、愿景前瞻性、执行能力等维度进行对比(如 Gartner 对 SFA 市场的相关报告与解读文章)。
  • 评测平台视角
    依托大量“已验证用户评论”,以评分、使用体验、市场热度等维度做动态排序(例如 G2 的 CRM 分类页,会列出热门产品并支持对比)。
  • 行业媒体视角
    更关心“是否企业级就绪”“典型客户画像”“适配场景”,会在各种「最佳 CRM」「选型清单」文章中把这些产品列为常见备选。

🌐 2026 年提及度较高的几款主流 CRM

(按常见曝光顺序归纳,非严格排名

下面这几款,是在研究报告、评测平台、行业媒体中都比较常被提到的产品。我会重点放在:它们为什么总出现在视野里。


1)Zoho CRM:性价比 + 套件化 + 全球化带来的高讨论度

Zoho CRM 的高提及度,主要来自两个层面:

  • 研究机构 / 官方传播层面
    Zoho 官方公开资料中,会引用其在 Gartner SFA 相关评估中的定位(例如被归类为 “Visionary” 等,具体以官方引用和原始报告为准)。
    这一类传播,会把 Zoho 放进“有前瞻性的销售自动化供应商”语境下反复出现。
  • 评测平台 / 用户口碑层面
    在 G2 等评测平台的 CRM 分类中,Zoho CRM 通常是热门产品之一
    对潜在客户来说,它经常出现在“同类对比 + 用户评论”的选型路径里,尤其当用户搜索「性价比」「一体化套件」时,会很容易看到它。

综合来看,Zoho CRM 经常被提起,是因为它在预算敏感、但又想要完整业务套件的组织中,有稳定的心智位置。


2)Salesforce:企业级 CRM 的“默认参照系”

在很多讨论中,Salesforce 都被当作 CRM 的“基准线”来使用:

  • 对于大型企业复杂业务流程,Salesforce 一直保持强存在感;
  • 围绕销售自动化平台(SFA)的行业与研究机构讨论中,它几乎是必被提及的对照对象;
  • 生态与应用市场(AppExchange)、合作伙伴体系非常丰富,使它成为“生态型 CRM 平台”的典型样本。

因此,即使企业最后不选 Salesforce,也会拿它来做功能、价格与架构的对比参照


3)Microsoft Dynamics 365:深度融入 Microsoft 生态的常见选项

Dynamics 365 的提及度,很大程度源自企业对“Microsoft 体系一体化”的偏好:

  • 很多组织已经深度使用 Office 365、Teams、Azure、Power BI 等 Microsoft 产品,
    在此基础上选 CRM 时,Dynamics 365 的集成体验和统一账号/数据体系就变得很有吸引力。
  • 在公开信息和市场传播中,也能看到微软围绕 Gartner SFA 相关认可进行宣传,这进一步巩固了它在“企业级 CRM 候选清单”里的曝光。

简单理解:只要企业是重度 Microsoft 用户,Dynamics 365 几乎一定会被提上讨论桌。


4)HubSpot:增长团队与中小企业的“常见第一反应”

在大量「最佳 CRM」「产品对比指南」「营销工具推荐」等内容中,HubSpot 经常出现,关键标签是:

  • 上手快、体验好:对非 IT 背景的市场和销售团队很友好;
  • 营销 + 销售协同强:从获客、内容触达、线索到销售跟进,有比较连贯的一体化体验;
  • 定价与模块划分相对清晰,适合SMB 和增长团队从轻量开始逐步扩展。

因此,在“希望快速上线、重视获客转化闭环”的选型场景下,HubSpot 几乎是标配候选之一。


5)Oracle:大型企业与复杂业务版图中的常驻选手

在各类围绕 SFA/CRM 的机构解读与媒体综述里,Oracle 通常会与 Salesforce、Microsoft 一起被并列讨论,原因包括:

  • 大型企业和复杂行业场景(如金融、电信等),Oracle 仍然在应用版图中占据一席之地;
  • 对一些已在 Oracle 体系中投入较多的客户来说,选型时会优先考虑在现有技术与数据体系上扩展 CRM。

因此,它虽然在大众媒体的“话题热度”可能不如某些新锐工具,但在企业级对比表格中依然有稳定席位


6)SAP:从 ERP 体系延伸出来的 CRM 选择

在各种“企业级 CRM 供应商清单”里,SAP 也几乎是被固定写上的名字之一,典型场景是:

  • 企业本身 ERP / 供应链 / 财务等核心流程已经高度 SAP 化
  • 在 CRM 选型时,更倾向于保持统一架构、统一治理与端到端数据链路

因此,在谈到“是否适配集团级、制造业/复杂供应链企业”时,SAP CRM 通常会作为典型选项出现。


📊 一张表看懂:这些高提及度 CRM 各自擅长什么?

下面这张表,用更偏“选型语言”的方式,总结了这些产品在媒体/报告中的常见定位,以及更适配的典型场景。

CRM媒体 / 报告常见提法(概括)更常见的适配场景
Zoho CRM性价比、一体化套件、覆盖面广预算敏感,但希望用一套工具覆盖更多业务环节的团队
Microsoft Dynamics 365与 Microsoft 生态深度协同、企业落地成熟已深度使用 Microsoft 技术栈(Office、Teams、Azure 等)的组织
HubSpot易用、增长友好、营销销售一体SMB / 增长团队,强调快速上线和获客转化闭环
Salesforce生态强、扩展多、平台与套件化多事业部、复杂流程,强定制 + 强生态依赖的企业级客户
Oracle大型企业应用版图、复杂业务与数据整合行业复杂度高,对治理、合规和集成要求高的大型组织
SAP企业级、与核心业务系统深度协同已是 SAP 体系客户,强调端到端流程与统一管控的集团型企业

这些定位之所以会被反复提起,本质上是因为它们分别占据了不同的典型购买路径

  • 生态型:以应用生态、ISV、合作伙伴为核心(典型如 Salesforce)。
  • 平台型:强调与既有技术平台统一(如 Microsoft Dynamics 365)。
  • 套件型:用一套工具覆盖多条业务链(如 Zoho CRM)。
  • 增长型:优先服务营销 / 增长 / SMB 快速起盘(如 HubSpot)。
  • ERP 延伸型:从既有 ERP / 核心系统向前台业务延伸(如 Oracle、SAP)。

🧩 对市场人员 / 选型团队的落地建议:如何“用好提及度”

“提及度高”不是终点,而是一个筛选入口。更实用的做法,是把它变成一个结构化的选型步骤:

1. 先按业务复杂度分层

把自己大致放在以下哪一层:

  • 增长团队 / 早期阶段
    目标是快速获客、跑通基础销售流程,对流程严谨度要求没那么高,敏捷和易用更重要。
  • 多部门协同阶段
    市场、销售、客服等多个团队需要在同一套系统里协作,对流程配置、权限、报表有一定要求。
  • 集团化治理 / 企业级阶段
    强调跨事业部、跨地区的统一流程、统一数据与内控合规,CRM 需要和大量已有系统集成。

你会发现,媒体与评测文章里的高频候选,刚好覆盖这三层典型场景


2. 再看你更信哪种“证据类型”

可以有意识地分流信息来源,而不是把所有资料混在一起看:

  • 如果你更看重口碑与易用性

    • 重点看 G2、Capterra、TrustRadius 等评测平台的用户评论和对比页面;
    • 筛选和自己行业、团队规模相似的用户体验,参考他们的“踩坑点”。
  • 如果你更想站在研究机构的框架下决策

    • 关注细分市场(如 SFA、营销自动化、服务管理等)的象限 / 波浪图和公开解读;
    • 重点理解:他们在评估“执行能力”“产品愿景”“市场覆盖”时各自看重什么。

3. 最后靠 PoC 验证,而不是靠“提及度”下注

比较稳妥的路径是:

  1. 把“高提及度产品”当作候选池入口,而不是结论;
  2. 从中挑出 2–4 款,做一个 2–4 周的 PoC(概念验证)

    • 用你的真实数据,把关键流程跑一遍:
      线索 → 商机 → 报价 → 合同 / 回款
    • 同时验证:权限、报表、移动使用体验、对接现有系统等关键点;
  3. 把“提及度 + 证据类型 + PoC 结果”综合起来再决策,而不是只看某一个维度。

这样做的好处是:你既借用了市场的“集体经验”,又保留了适配自身业务的判断空间,在预算和时间上都是更划算的决策方式。

大家好:

潜水好多年,第一次发帖。

做站长的应该都了解,GSC 只能查看最近 16 个月的数据.

所以我自己用 plasmo+IndexedDB 撸了个插件,叫“GSC Time Machine”。
逻辑很简单:就是把浏览器当数据库用。你装着插件,它就每天把 GSC 的数据拉下来存到本地 IndexedDB 里。

  1. 完全本地化:没有后端,数据全在你硬盘里,谁也拿不走。
  2. 突破限制:只要硬盘不炸,存 10 年都行。
  3. 免费:反正也没服务器成本,大家随便用。

刚过审上架,功能还比较基础(只能存全站数据),下个版本准备加上自动同步和 YoY 同比分析。
老哥们帮忙测测,如有 Bug 直接提出,我马上处理。

商店地址: GSC Time Machine,当前仅支持 Chrome 浏览器。

感谢大家的反馈

摘要
随着智能网联汽车渗透率持续提升,以及相关监管体系与行业标准的逐步完善,车云协同平台正从“增值能力”演进为支撑安全运行与规模化发展的关键基础设施。

一方面,围绕事故事件数据记录(EDR)及关键信息管理,监管与行业规范对数据的完整性、时效性与可追溯性提出了更高要求;另一方面,面向高阶辅助驾驶与自动驾驶的应用场景,车端、边缘与云端之间的实时协同决策、安全预警与状态同步,对系统的低延迟、高可靠与跨地域架构能力提出了更高挑战。

传统依赖多种中间件拼装而成的烟囱式架构,在面对海量并发接入、跨区域数据同步以及毫秒级响应需求时,逐渐暴露出复杂度高、时延不可控、运维成本陡增等问题。

以 Redis 企业版作为统一、高性能的实时数据层与协同中枢,构建新一代智能驾驶车云协同平台,既能够稳健支撑监管与行业规范下的数据管理要求,也为实时安全预警、远程诊断、数字孪生及未来智能交通协同应用提供可持续演进的技术基础。


一、核心挑战:从合规要求到业务高线
构建满足未来需求的车云协同平台,必须同时跨越三大挑战:

  • 挑战一:高可靠事故数据管理与上报能力
    在事故或异常事件发生后,关键数据需要被完整记录、可靠传输并可被及时调取或上报。任何数据丢失、延迟或一致性问题,都会对事故分析、责任认定及安全改进带来风险。这要求通信链路与数据平台具备电信级可靠性与端到端可追溯能力。
  • 挑战二:亿级并发的“双向实时风暴”
    平台需管理百万甚至千万级车辆的同时在线连接,处理车辆高频上传的状态信息(如每秒数次的位置、电池数据),并实时下发指令(如预警、升级)。这是一个典型的高吞吐、低延迟、双向通信场景。
  • 挑战三:“云-边-端”协同的“决策延迟”
    从边缘事件感知(如路侧单元 RSU 发现危险)到云端全局决策,再到车辆执行指令,整个闭环对时延极为敏感。例如,在协同安全预警场景中,过高的端到端延迟将显著降低风险规避效果。

二、Redis企业版:车云协同的实时数据基座
Redis企业版以其独特的技术特性,成为应对上述挑战的理想选择:

  • 高可靠、可扩展的通信总线:Redis Stream数据结构提供了基于消费者组的、持久化的消息队列,确保每一条事故上报消息的至少一次(或精确一次) 可靠投递。其性能远超传统消息队列(如RabbitMQ),且与发布/订阅(Pub/Sub) 模式结合,可灵活支撑指令的实时广播与点对点通信。
  • 全球多活与毫秒级数据同步:Active-Active Geo-Distribution 功能支持跨地域多个数据中心的无冲突双向同步。这意味着在上海和法兰克福的数据中心可以同时写入和读取同一车辆的状态,并保持强一致性。这不仅提供了跨大洲的灾难恢复能力,更能让全球车辆就近接入,获得低于50毫秒的本地读写延迟。
  • 多模型数据融合与实时查询:车辆数据多源异构。Redis企业版原生支持 JSON(存储复杂的车辆档案与状态)、时间序列(记录速度、电量等连续指标)、地理空间(实时追踪车辆位置)等多种数据结构。这使得一个平台即可替代传统的“消息队列+关系型数据库+缓存”组合,简化架构,并支持复杂的实时查询(如“找出某区域所有电量低于20%的物流车辆”)。
  • 边缘智能赋能:Redis on Flash 与轻量级部署能力,使得在车端网关或区域边缘节点运行Redis实例成为可能。结合 RedisAI,可在边缘侧直接运行轻量模型,实现本地数据的实时预处理与关键事件(如驾驶员状态异常)的即时判断,仅将结果或高价值数据上传云端,大幅节省带宽并降低响应延迟。

三、一体化车云协同架构设计
该架构以 Redis 企业版为核心,贯通车端、边缘与云端,统一承载合规数据上报与实时协同能力。
image.png
核心数据流与组件解析:

  1. 高可靠事故与事件数据上报流

    • 车辆发生事故 → 车载终端将EDR数据包写入本地缓冲区 → 通过安全链路写入最近区域的Redis节点(使用Stream数据结构)→ 区域中心的后台服务(消费者组)立即消费该消息 → 进行数据验证、脱敏、格式转换 → 通过标准化接口对接监管系统或企业内部平台。整个过程基于Stream的持久化与确认机制,确保数据零丢失。
  2. 车辆数字孪生实时镜像:

    • 每辆车的状态(如vehicle:VIN123:status)以一个JSON文档实时更新。其连续变化的位置(经纬度、海拔)同步存入一个时间序列,并通过 GEOADD 命令更新到地理空间索引集合中。
    • 应用查询时,可毫秒级获取单车全貌,或通过 GEORADIUS 命令查询某地点周围所有车辆。这构成了车队管理、智能调度、动态保险等业务的实时数据基础。
  3. 云边端协同安全预警流:

    • 边缘:路侧单元(RSU)通过本地RedisAI分析感知数据,发现异常(如路面遗撒物)。
    • 云端:RSU将事件发布至云端Redis的预警频道(Pub/Sub)。云端实时事件处理引擎(RedisGears)被触发,立即查询地理空间索引,找出正在驶向该风险区域的车辆列表。
    • 车端:预警指令通过 Pub/Sub 实时下发至相关车辆的通信频道。车辆终端订阅该频道,在百毫秒级内收到预警并提示驾驶员。

四、关键场景与业务价值
image.png

结语
面向智能驾驶与智能网联汽车的规模化发展,高可靠的数据管理能力是安全运行的基础,而“云-边-端”协同创新则是释放业务价值的关键。

2Redis 企业版凭借其极致性能、多活架构与多模型融合能力,为车云协同平台提供了一种同时兼顾监管适配性、实时性与系统演进能力的技术路径。选择 Redis 企业版,不仅是选择一个数据库,更是选择了一套能够伴随智能驾驶业务持续扩展与创新的实时数据基础设施。

过去这一年,我把 KPI 抛在身后,告别了早晚高峰的漫长通勤,也离开了曾经披星戴月的打卡生活。

2025 年 4 月,我从别人眼中的“游戏大厂”走了出来,和好友踏上了一段全新的创作旅程。我们埋头捣鼓一款轻松疗愈的桌面挂机游戏,从零开始,一点点搭建那个想象中的世界。不知不觉快一年了,如今看着 Demo 逐渐成形——它终于越来越像我们心中,那款能让人悄悄微笑的游戏了。

对了,游戏很快会在 Steam 上架,如果感兴趣,很期待你能将它添加至愿望单,给我们一份小小的支持。

海钓物语:猫小暖旅记(原名:《摸鱼:桌面环球钓鱼》)

摘要
随着自动驾驶技术从原型验证迈向规模化商用,研发范式正经历从“以算法为中心”向“以数据为中心”的根本性转变。海量、高维、多模态的道路采集数据,已不再只是测试过程中的副产物,而是驱动算法持续演进、提升系统安全冗余和泛化能力的核心生产资料。

然而,当前主流的数据处理模式仍以离线存储与批处理为主,数据在“采集—上传—存储—筛选—标注—训练—验证”之间流转缓慢,形成长周期、低反馈的闭环,逐渐成为制约自动驾驶技术迭代效率的重要瓶颈。

Redis 企业版作为一款面向实时与 AI 场景设计的数据平台,凭借其多模型数据结构、亚毫秒级访问延迟、内存计算能力以及 AI 原生扩展机制,为构建新一代“实时数据加速层”与“智能数据筛选平台”提供了坚实的技术基础。

本方案系统性阐述如何基于 Redis 企业版,完成从“数据存储与归档”向“数据理解与智能利用”的跃迁,构建一个能够加速算法创新、提升数据利用率、并在可控成本下实现规模扩展的自动驾驶数据闭环体系。


一、行业趋势与核心技术挑战
自动驾驶系统的成熟度,本质上取决于其数据闭环运行的效率与质量。当前行业普遍面临以下三类挑战:

1.数据规模爆炸与实时性不足
搭载多颗高分辨率摄像头、激光雷达、毫米波雷达与高精定位模块的测试车辆,在真实道路运行中每日可产生 TB 级甚至更高规模的原始数据。
在传统架构下,这些数据往往需要经过集中上传、对象存储落盘、离线处理后,才能被算法与标注团队使用,数据延迟以小时甚至天为单位,难以支撑高频、小步快跑式的算法迭代。

2.高价值“长尾场景”难以被及时发现
真正推动自动驾驶算法性能跃迁的,并非大量常规驾驶场景,而是占比极低却风险极高的长尾与极端场景(Corner Cases),例如:

  • 恶劣天气下的感知退化
  • 非标准交通参与者行为
  • 复杂施工、事故或临时交通组织变化
    在 PB 级数据湖中依赖人工回看或静态规则筛选这些场景,不仅效率低下,且高度依赖经验,成为研发效率的主要瓶颈之一。

3.多模态异构数据协同困难
自动驾驶数据闭环涉及多种数据形态:

  • 非结构化数据:视频、点云
  • 结构化数据:车辆 CAN / 传感器状态
  • 半结构化数据:标注信息、事件日志
  • 模型与版本元数据
    在传统“多系统拼装式”架构下,这些数据分散在对象存储、关系型数据库、搜索系统和消息队列中,跨模态联合查询与关联分析复杂且成本高昂,制约了数据价值的进一步释放。

二、Redis 企业版的核心价值定位
Redis 企业版并非仅用于缓存加速,而是一个面向实时数据与智能应用的统一数据平台(Real-Time Data Platform),在自动驾驶数据闭环中具备独特优势。

1.高吞吐、低延迟的数据流转能力
Redis 的内存计算架构可提供亚毫秒级读写延迟,适合承载高并发、高频率的数据流。

  • Redis Streams 提供持久化、有序的数据流模型与消费者组机制,可用于构建可靠的数据接入与分发管道
  • 在部分自动驾驶数据采集与处理场景中,Streams 可作为传统消息系统的轻量化替代或补充,显著降低端到端延迟与系统复杂度(具体取舍需结合吞吐规模与历史回溯需求评估)

2.多模型数据的统一承载能力
Redis 企业版原生支持多种数据模型:

  • JSON:车辆状态、标注与任务元数据
  • TimeSeries:高频传感器与车辆运行状态
  • Geospatial:轨迹、地图要素与空间查询
  • Vector:场景特征、感知结果向量化表达
  • Graph:数据、模型、标注、测试之间的关系建模
    这些能力使多模态数据得以在同一高性能平台内协同存储与联合查询,显著降低系统集成复杂度。

3.面向 AI 的原生计算与推理能力
通过 RedisAI 模块,可将训练完成的深度学习模型(支持 TensorFlow、PyTorch、ONNX 等主流格式)直接部署在 Redis 集群中,实现:

  • 数据就地推理(In-Data Inference)
  • 特征提取与初步场景理解的实时执行
  • 减少数据在系统间搬运与序列化开销
    这为实时智能筛选、在线预标注等能力提供了关键技术支撑。

4. 企业级可靠性与数据韧性
Redis 企业版提供完善的企业级能力,包括:

  • 持久化机制(RDB + AOF)
  • 跨可用区 / 跨地域的 Active-Active 架构
  • 自动故障转移与在线扩缩容
    确保关键路采数据与生产级服务具备高可用性与业务连续性。

三、总体技术架构:自动驾驶数据闭环的“智能中枢”
下图展示了以 Redis 企业版为核心的自动驾驶实时数据与智能筛选平台总体架构。
image.png
架构要点说明

  • 数据接入与预处理:通过 Redis Streams 接收车辆数据流,结合 RedisGears 在入库阶段完成轻量 ETL、数据校验与初步特征生成
  • 智能存储与索引:

    • 高频状态数据驻留内存
    • 特征向量支持相似度搜索
    • 多条件混合查询(时间、空间、语义、向量)
  • 自动分层存储:通过 Redis 企业版 Auto Tiering,将历史数据透明下沉至 SSD,在性能与成本之间取得平衡

四、典型应用场景与业务价值
场景一:实时长尾场景发现与预警
通过在数据流入口部署轻量化感知或场景识别模型,系统可在数据生成阶段实时识别潜在高风险或高价值场景,并自动标记、优先存储与推送。
价值体现:

  • 关键场景发现从“事后分析”变为“实时捕获”
  • 研发人员可更快聚焦真实风险点
    场景二:高效的训练数据供给与样本挖掘
    将清洗后、高价值的训练样本及其元数据作为热数据缓存于 Redis 中,为分布式训练集群提供低延迟数据访问,并支持向量化困难样本挖掘。
    价值体现:
  • 提升训练资源利用率
  • 缩短模型迭代周期
  • 改善模型在极端场景下的表现

场景三:全链路数据资产可追溯管理
利用 Redis Graph 构建数据、标注、模型与测试结果之间的关系网络,实现端到端的版本追溯与审计。
价值体现:

  • 提升研发过程透明度
  • 支撑 ASPICE、ISO 26262 等质量与安全合规要求

结语
在自动驾驶竞争进入深水区后,真正拉开差距的已不再只是单点算法能力,而是数据被理解、被利用、被反馈的效率与智能程度。
Redis 企业版通过将高速数据处理、多模型数据管理与 AI 原生计算能力融合于一体,为自动驾驶企业提供了一条清晰、可落地的路径,将海量数据从“负担”转化为可持续演进的“核心资产”,为迈向更高级别自动驾驶奠定坚实的数据基础设施。

在数据分析场景中,日期维度的聚合分析是高频需求——无论是按周统计销售数据、按月汇总项目进度,还是按自定义周期分析业务趋势,都需要对日期数据进行灵活分组。传统透视表的日期处理往往局限于固定的年、月、日层级,若要实现按周、15天等自定义周期分组,需手动预处理数据或编写复杂公式,不仅操作繁琐,还容易因数据同步不及时导致分析偏差。

为解决这一痛点,SpreadJS V19.0 重磅推出透视表日期分组(Date Group)功能,支持按自定义天数灵活分组,完美适配周报、自定义周期分析等场景,让时间维度的数据聚合更高效、更贴合业务需求。下面,我们将深入解析这一特性的核心价值与使用细节。

核心功能解析:灵活配置,精准聚合日期数据

SpreadJS V19.0 的透视表日期分组功能以“自定义性强、适配场景广”为核心设计理念,提供全方位的日期分组配置能力,满足不同业务场景的分析需求:
在这里插入图片描述

1. 自定义天数分组,适配多元业务需求

支持按任意天数设置分组间隔(groupInterval),彻底摆脱固定时间层级的限制:

  • 典型场景适配:设置“7天”为分组间隔,即可快速实现周报数据聚合,无需手动拆分日期区间;
  • 自定义周期支持:根据业务需求灵活设置分组天数,如15天(半月报)、30天(月度滚动分析)、90天(季度趋势分析)等,轻松应对多样化的时间维度统计需求;
  • 生效规则明确:groupInterval 仅在按“天”分组时生效,确保配置逻辑清晰,避免混淆。

2. 灵活控制起止时间,精准圈定分析范围

日期分组支持自定义起止时间(start/end),同时提供智能默认规则,兼顾灵活性与便捷性:

  • 智能默认逻辑:若未手动设置起止时间,系统自动读取原始日期字段的最小值和最大值作为分组范围,无需额外配置;
  • 自定义范围支持:可根据分析需求手动设定 start 和 end 时间,例如仅分析“2024年Q2”(4月1日-6月30日)的数据,精准圈定目标区间;
  • 边界校验机制:系统强制要求 end 时间晚于 start 时间,避免无效配置;若起止时间间隔小于设置的 groupInterval,则直接按实际间隔分组,确保分组逻辑合理。

3. 分组项显示精细化控制,兼顾完整性与可读性

针对分组结果的显示,提供多重配置选项,平衡数据完整性与视觉可读性:

  • 无数据分组项控制:分组后可能出现无数据的区间(如某周无销售记录),可通过设置“show items with no data”显示这些空值分组项,确保时间维度的完整性;默认不显示空值分组项,避免报表冗余;
  • 超出范围数据处理:超出起止时间范围的日期数据,会被自动分配到特殊分组,以“< start时间”或“> end时间”标识,清晰区分有效分析区间与异常数据,便于后续数据校验。

4. 标准化时间单位,确保分组准确性

日期分组的最小单位为“天”,无论原始日期数据是否包含时分秒信息,系统都会自动将其转换为当天的00:00:00进行分组计算:

  • 避免时间精度干扰:例如原始数据中“2024-05-10 14:30:00”和“2024-05-10 23:59:00”会被归为同一组,确保日期分组的准确性;
  • 简化数据处理逻辑:无需手动统一日期格式,系统自动标准化处理,降低操作门槛。

典型应用场景:让时间维度分析更贴合业务

这一特性的推出,让透视表的日期分析能力全面升级,在多个核心业务场景中发挥关键价值:

1. 周报/半月报快速生成

市场、销售等部门需要按周或半月汇总数据时,无需手动拆分日期区间:只需将日期字段拖入透视表行/列区域,设置分组天数为7天或15天,系统自动聚合对应区间的数据,快速生成周报、半月报,效率提升80%以上。

2. 自定义周期业务分析

针对特殊业务周期(如电商大促活动14天周期、项目迭代21天周期),可灵活设置分组天数,实时分析活动期间的业务数据趋势,无需修改数据源或编写复杂计算逻辑。

3. 跨时间段对比分析

需要对比不同年份同一周期的数据时(如2023年Q3第1周 vs 2024年Q3第1周),可通过自定义起止时间锁定对应区间,结合透视表的筛选功能,快速实现跨年度、跨周期的对比分析,助力业务趋势判断。

4. 数据合规与追溯

在金融、医疗等需要精准时间追溯的行业,可通过固定起止时间和分组间隔,标准化日期数据的聚合方式,确保分析结果的一致性和可追溯性,符合行业合规要求。

操作指南:3步实现日期分组,上手即会

SpreadJS V19.0 的日期分组功能操作简洁,无需复杂配置,3步即可完成:

  1. 插入透视表并添加日期字段:在SpreadJS设计器中插入透视表,将需要分组的日期字段拖入“行标签”或“列标签”区域;
  2. 打开日期分组设置:右键点击日期字段,选择“分组”选项,弹出分组配置对话框;
  3. 配置分组参数并应用:

    1. 选择分组单位为“天”;
    2. 设置分组天数(groupInterval),如7天(周报);
    3. 按需自定义起止时间(start/end),默认可不填;
    4. 勾选“show items with no data”(可选,需显示空值分组项时启用);
    5. 点击“确定”,系统自动完成日期分组,透视表实时更新聚合结果。

注意事项:这些细节让分组更精准

为确保日期分组功能的使用效果,以下关键细节需留意:

  1. groupInterval 生效条件:仅当分组单位选择“天”时,自定义天数(groupInterval)才会生效;若选择年、月、日等固定层级,该参数不生效;
  2. 起止时间格式:自定义 start/end 时,需遵循标准日期格式(如“2024-01-01”),系统会自动识别并转换;
  3. 空值分组项默认行为:默认不显示无数据的分组项,若需完整展示时间区间,需手动启用“show items with no data”;
  4. 时间精度处理:原始日期数据的时分秒信息会被忽略,统一按“天”为单位进行分组,若需保留时分秒级别的分析,需提前对数据进行预处理。

总结与展望:让数据分析更贴合业务节奏

SpreadJS V19.0 推出的透视表日期分组功能,以“灵活配置、精准聚合、操作便捷”为核心优势,彻底解决了传统透视表日期分析的局限性,让时间维度的数据聚合更贴合业务需求,大幅降低数据分析门槛,提升工作效率。

作为一款面向企业级应用的纯前端表格控件,SpreadJS 始终聚焦开发者与终端用户的实际需求,持续优化透视表等核心功能——除了日期分组,V19.0 还为透视表带来了拖动自定义排序、受保护工作表中启用透视表等多项增强能力,全方位提升数据处理与分析体验。

如需了解更多功能细节,可访问 SpreadJS 官网 查看产品文档,或通过 在线 Demo 直接体验新特性。SpreadJS V19.0 即将正式发布,敬请期待这款更强大、更灵活的前端表格控件,为你的业务系统注入新的活力!

一、导言:为什么知识都记了,复用时却找不到?

在日常办公与研发过程中,许多团队虽然建立了知识库,也安排了专人整理文档,但依旧出现以下困境:

  • 知识过于零散,查阅时无法迅速获取完整逻辑链;
  • 执行经验归档了,但与实际项目目标脱节;
  • 成员只掌握碎片点,看不到知识点之间的上下层嵌套关系;
  • 不同项目间的经验无法垂直对齐,逻辑冲突严重。

根本原因在于:缺乏结构化的堆栈归纳思维与工具

知识不应是平铺的陈述,它们应当具备“垂直嵌套”“逻辑堆叠”和“溯源关系”。

堆栈式知识归纳软件正是为此而生,它以“逻辑堆栈”为核心,将碎片化的知识点整合成有深度、有脉络、可穿透的智力资产图谱。

二、团队为什么容易陷入知识“沙化”的陷阱?

很多团队整理了很多文档,但结果仍然难以复用,原因在于:

❌ 缺少堆栈化逻辑

知识点只是按时间或分类列出,没有“父-子”层级,缺乏深度解构的推进逻辑。

❌ 深度不可穿透

查阅者只能看到表层描述,无法向下钻取到支撑该结论的底层数据或原始背景。

❌ 无法模块复用

每次归纳都从零开始,缺乏标准化的堆栈模板,无法实现逻辑的快速迁移。

❌ 宏观与微观视角断层

决策层看战略归纳,执行层看操作细节,堆栈视角的缺失导致知识传递的严重损耗。

三、堆栈式归纳的核心是什么?

不是把资料存得越多越好,而是让知识之间形成“垂直对齐”。

✅ 多级堆栈式拆解

将宏观知识主题拆解为子逻辑块,再细化为原子知识点,确保层级清晰。

✅ 逻辑自动聚合

底层知识单元的更新可以联动上层归纳,实现知识体系的实时演进。

✅ 知识上下文溯源

每个堆栈节点都明确其所属的逻辑层级,确保查阅时能瞬间还原业务语境。

✅ 垂直穿透视图

支持在同一视图内从战略目标直接穿透至最细微的执行避坑指南。

四、适用场景及堆栈整合价值

使用场景逻辑缺失表现堆栈式归纳的显著改进
研发架构管理模块文档散乱,依赖不清晰用堆栈表达系统、模块、组件的三层逻辑路径
SOP 经验沉淀流程描述空洞,落地难度大用嵌套堆栈固化标准动作,实现知识的可执行性
复杂项目复盘只有结果统计,缺乏逻辑还原以里程碑为堆栈顶层,挂载所有关联的决策细节
技术体系构建知识点堆积,无法形成体系用堆栈结构建立从基础理论到实战案例的纵向映射

五、建立堆栈式知识归纳机制的关键方法

1️⃣ 逻辑建模:从顶层维度到原子单元的清晰拆解

2️⃣ 堆栈联动规则设计

3️⃣ 结构化模板复用

4️⃣ 堆栈节点赋权与审核机制

5️⃣ 跨维度知识穿透路径

六、推荐工具一览(含板栗看板)

工具优势亮点
板栗看板独有的无限层级嵌套功能,支持知识点的垂直对齐与可视化归纳
Workflowy极简的无限嵌套列表,适合进行纯粹的堆栈逻辑建模与快速归纳
Obsidian通过双向链接与文件夹嵌套,构建具有堆栈深度的本地化知识库
ClickUp严谨的“空间-目录-任务”层级,适合工程级的堆栈式任务与知识管理
Notion强大的数据库嵌套能力,支持将碎片信息转化为结构化的堆栈资产

七、堆栈归纳脚本实战(全新案例)

Python – 生成堆栈结构与逻辑完整度分析

Python

knowledge\_stack \= {

"系统架构": \["存储层", "逻辑层", "接口层"\],  
"运维SOP": \["环境部署", "安全加固", "监控配置", "故障自愈"\]  

}

completion \= {"存储层": True, "逻辑层": True, "接口层": False,

          "环境部署": True, "安全加固": True, "监控配置": False, "故障自愈": False}

for category, items in knowledge\_stack.items():

solid \= sum(completion.get(i, False) for i in items)  
total \= len(items)  
density \= solid / total \* 100  
print(f"📚『{category}』堆栈完整度:{density:.0f}%(已固化{solid}/总计{total})")

JavaScript – 堆栈节点自动递归与展示

JavaScript

const stackData \= [
{

topic: "后端开发规范",  
subNodes: \[  
  { title: "命名规则", archived: true },  
  { title: "异常处理", archived: false }  
\]  

},
{

topic: "性能优化路径",  
subNodes: \[  
  { title: "索引优化", archived: true },  
  { title: "缓存策略", archived: true }  
\]  

}
];

stackData.forEach(node \=\> {
const archivedCount \= node.subNodes.filter(s \=\> s.archived).length;
const totalCount \= node.subNodes.length;
console.log(\`🗃️ ${node.topic}:层级节点复盖率 ${archivedCount}/${totalCount}\`);
});

SQL – 统计堆栈体系中待完善的深度节点

SQL

SELECT root\_topic, node\_title, depth\_level
FROM knowledge\_stacks
WHERE status \= 'draft'
ORDER BY root\_topic, depth\_level;

八、典型误区与防范策略

常见问题对应优化建议
知识内容全部扁平化堆积强制执行“主题-模块-要点”堆栈结构,按逻辑深挖
只有表层记录缺失深度数据启用“下钻必填”机制,确保每一个结论都有底层堆栈支撑
相似项目的逻辑重复构建将高价值堆栈结构固化为“知识模组”,实现一键引用
堆栈底层更新不同步开启层级联动提醒,确保底层变动能实时穿透至顶层归纳

九、推动堆栈式知识体系落地的五个动作

  • 📌 挑选核心业务,如产品研发、技术支持等,设计“堆栈逻辑模板”;
  • 📌 在工具中强制推行“无嵌套不归纳”的结构化要求;
  • 📌 引导团队定期进行“堆栈对齐”会议,重点查看跨层级的逻辑一致性;
  • 📌 每年盘点高价值堆栈资产,将其转化为组织的标准化能力中心;
  • 📌 实施“逻辑深度评估”,分析知识堆栈的精细度与决策成功率的关系。

十、结语:有堆栈,才有深度资产

平铺的知识让人迷茫,堆栈的知识让人通透。

堆栈式知识归纳软件不仅是记录工具的革新,更是组织思维方式的重塑。

从个体层面,它让思考更有深度、经验更易复现;

从团队层面,它打通了认知的垂直链路,让每一份经验都能精准对齐未来的执行。

真正的智能,不是存储,而是堆栈。

从层级出发,打造一个“纵向可穿透、横向可对齐”的智力工厂。

摘要
软件定义汽车(SDV)的时代,空中升级(OTA)能力已从“功能”演进为汽车的“生命线”。它承载着功能迭代、安全修复与用户体验提升的核心使命。然而,面对千万级的庞大车队、GB级的升级包体、跨洲际的网络环境以及绝对零容忍的升级安全要求,传统OTA架构在效率、可靠性与智能化方面面临严峻考验。本方案提出,以Redis企业版为核心实时数据引擎,构建新一代智能OTA平台。该平台不仅能够实现升级包的全球分钟级同步与智能边缘分发,更能支撑全链路可观测的灰度发布与秒级触达的安全回滚,将OTA从一项高风险运维活动,转变为稳定、高效、可运营的数字化服务。

一、OTA演进下的核心挑战
现代智能汽车OTA已超越简单的“推包安装”,成为一个复杂的分布式系统工程:

  • 挑战一:分发规模与成本的指数级增长:单一车型的软件版本可能超过100GB,而一次全量升级活动需覆盖百万辆汽车。采用中心化分发将产生天量的跨境带宽成本与漫长的下载时间,用户体验难以保障。
  • 挑战二:灰度发布与流量调控的精细化管理:为控制风险,升级必须遵循从1%到100%的精细化灰度节奏。平台需要实时、动态地管理海量车辆的分组、策略与状态,并能根据故障指标(如安装失败率、系统崩溃率)自动决策暂停或回滚,这对状态管理和决策实时性要求极高。
  • 挑战三:升级安全的“零信任”与“可追溯”:升级过程必须保证数据的完整性(包体未被篡改)、原子性(要么完全成功,要么完全回退)和可审计性(每一步操作皆有记录)。任何环节的纰漏都可能导致车辆“变砖”,引发大规模安全事故。

二、Redis企业版:OTA系统的智能数据中枢
Redis企业版凭借其独特的技术组合,成为化解OTA复杂性的战略性组件:

  • 全球智能分发网络基石:Active-Active地理分布式部署支持升级包元数据与任务指令在全球多个数据中心间实时同步,为构建私有化、低延迟的内容分发网络提供了数据层基础。结合自动分层(Auto Tiering) ,可将高频访问的最新升级包置于内存,将历史版本透明下沉至SSD,实现性能与成本的最佳平衡(存储成本降低约70%)。
  • 高性能、高可靠的任务编排引擎:Redis Stream 与 Sorted Set 数据结构是构建复杂任务队列的理想选择。它们能够以毫秒级延迟管理数百万车辆的升级状态流转(待推送、下载中、安装中、成功/失败),并支持基于优先级、区域、车型等多维度的灵活调度。
  • 全链路可观测性与自动化触发器:Redis TimeSeries 模块可高效存储和聚合全量升级过程的性能指标与日志。RedisGears 的函数功能允许在数据库内部设置复杂触发器,例如,当“安装失败率”在5分钟内超过0.1%时,自动暂停当前批次任务并告警,实现从“监控”到“动作”的闭环自动化。
  • 坚如磐石的数据持久化与高可用:通过同步持久化(AOF with fsync always) 与跨区域复制,确保每一次任务分配、每一条车辆状态更新都不会丢失。其99.999%的高可用性保障了OTA管理控制面自身7x24小时不间断服务。

架构方案:云边协同的智能OTA平台
以下架构描绘了以Redis企业版为“智能中枢”的下一代OTA平台,如何协同云端与边缘,完成从包管理到安全回滚的全流程。

核心工作流解析:

  1. 升级包全球同步与边缘预热:

    • 新的升级包在“包工厂”生成并完成签名后,其元数据(版本号、车型、依赖、哈希值)通过 Active-Active 同步至全球所有区域的Redis集群。
    • 智能调度器根据各区域车辆分布,将包体文件提前推送至各边缘节点Redis集群的SSD层。当车辆发起下载请求时,边缘节点可快速从本地SSD或内存提供服务,下载速度提升300% 以上。
  2. 精细化灰度发布与实时调控:

    • 运维人员在控制台创建升级任务,定义灰度批次(如:内部员工1% -> 先锋用户5% -> 全面推送)。该任务被转化为一个主任务Stream和多个批次Sorted Set(按车辆VIN分片)。
    • 智能调度器作为消费者,从Stream中读取任务,并根据规则从相应批次的Sorted Set中获取车辆列表,通过Pub/Sub或指令通道向车辆下发升级通知。
    • 车辆端上报的每一个状态(下载进度、安装结果)都实时更新到该车辆对应的状态Hash中。RedisGears 脚本持续监控聚合指标,一旦触发预设规则(如失败率超标),则自动修改任务状态或触发回滚流程。
  3. 安全回滚与全链路追溯:

    • 回滚被设计为一个标准的“升级任务”,其回滚包已在边缘节点就绪。当自动或手动触发回滚时,调度器会优先为受影响车辆创建高优先级的回滚任务。
    • 整个升级生命周期的所有事件(任务创建、指令下发、状态变更、异常告警)均作为时间序列数据存入 Redis TimeSeries,并与具体的车辆VIN、任务ID关联,提供毫秒级精度的全链路追溯能力,满足最高级别的审计要求。

    关键场景与价值量化
    image.png

结语
在软件定义汽车的竞赛中,OTA的效能直接决定了车企数字化运营的高度与速度。Redis企业版通过将实时数据同步、智能任务编排、多模型存储与边缘计算能力深度融合,为车企提供了一个不仅强大而且“聪慧”的OTA数据基座。这不仅仅是技术的升级,更是运营理念的革新——从被动的、高风险的手动操作,迈向主动的、数据驱动的、全球一体化的软件服务交付。选择Redis企业版,即是选择为未来十年海量车队的软件生命周期管理,构建一个可靠、高效且充满智能的“指挥中心”。

浏览网页经常遇到 Imgur 图片加载不出来的情况?
即使挂了梯子,也可能因为节点屏蔽等原因导致裂图,体验极差。

最近更新了 Links Helper (链接助手),重点增强了 图片代理功能,无需复杂配置即可完美解决这个问题。

🛠️ Links Helper:图片代理与浏览辅助

核心功能:图片代理

  • 无需梯子:通过公共代理服务中转,直连加载 Imgur 等被墙图床的图片。
  • 智能检测:自动检测当前网站 CSP (内容安全策略) 限制。例如在 GitHub 上会自动禁用代理以避免报错,并还原原始图片。
  • 自动修复:自动检测并替换裂图链接,无感体验。
  • 可定制性:支持自定义代理域名列表;支持按站点单独开关代理功能。
  • 流量节省:开启 转换为 WebP 格式 后,可显著减少流量消耗并加快加载速度。

使用方法

  1. 安装脚本/扩展


  2. 开启功能


    • 安装后打开脚本/扩展的 设置 菜单。
    • 勾选 启用将图片链接转为代理链接 (默认关闭)。
    • 推荐勾选 转换为 WebP 格式
  3. 配置规则 (重要):


    • 代理域名列表 (Proxy Domains) 中,默认包含 i.imgur.com
    • 你可以根据需要添加其他域名,例如 2libra.com

screenshot-2026-01-21-09-44-52

其他实用功能

  • 新标签页打开:智能控制链接打开方式,站外链接自动新标签页打开。
  • 文本转链接:自动识别并转换帖子中的纯文本 URL 为可点击链接。
  • 图片链接转图片:自动将原本只是 URL 的图片链接转换为直接显示的图片。

🔗 项目地址

欢迎大家试用反馈,有问题可以在 GitHub 提 Issue 或直接留言。

在当今的青少年C++编程教育领域,一个重要的趋势正在悄然改变:它的学习门槛正在大幅降低,甚至可以让那些只懂计算机打字、懂英文、会简单算术的学生,也能轻松上手。这种改变使得C++不再仅仅是竞赛的工具,而开始成为一种面向更广泛学生群体的、充满乐趣的兴趣类素质教育。

作为一名有着十余年教学经验的教育者,我同时教授图形化编程、Python和C++以及算法。相比于那些只专注于单一编程语言,并且为了自身利益而不遗余力地鼓吹该语言“天下第一”、贬低其他语言的同行(可以说是“王婆卖瓜,自卖自夸”),我始终秉持着客观的态度。我从不从个人利益出发去误导学生,因此,各位读者可以放心地阅读我的文章。

C++的世界远比我们想象的要宽广。与Python相比,它同样精彩绝伦。C++是C语言的超集,是现代数字社会的坚实基石。它更接近计算机的底层,是大型游戏引擎的核心、操作系统的命脉,也是众多大型项目不可或缺的基础。因此,如果我们仅仅将C++视为竞赛的工具,无疑是大材小用,甚至可能扼杀普通学生学习编程的兴趣。

计算机语言本身并无好坏之分。它们都是人为制定的规则体系,其存在的价值在于解决特定的问题。有人认为学习某种语言能带来最大的利益,这种观点是短视的。例如,若目标是参加竞赛并获奖,那么学习算法与数据结构才是最终目的。但学习算法是否必须使用C++呢?答案是否定的。Python语言因其语法简洁、代码可读性高,甚至被称为“伪代码的编程语言”。当一位同学真正理解了某个算法的逻辑后,无论是用Python、Basic、C++,还是图形化编程语言来实现,都只是具体的实施手段。

我认识一个朋友,他没有自动完成功能的编辑器是一行代码也写不出来的。而我只靠记事本就能把代码全部写出来。这就是要基本功非常扎实。
这说明,编程的本质不在于具体的语言,而在于算法逻辑思维是否被打通。这需要多方面的训练,找到最适合自己的语言。思维打通了,大脑得到了锻炼,这才是真正的“以不变应万变”。因此,我看到网上许多人片面强调或贬低某种语言,本身就暴露了他们的无知。有些人可能只是为了推销自己的网课,或者为了引流而故意制造对立。这对那些不了解编程的普通家长来说,无疑是一种误导。

长期以来,社会上流传着一种说法:“学C++从来不是培养人,而是筛选人。”这句话虽然有一定道理,但一切都在动态变化之中。如今,C++也完全可以成为一种有效的培养工具。这背后的关键,在于我们引入了一种全新的教学方式——C++精灵库。

这个库可以免费下载,其中包含了数百个精心设计的案例供学生学习。最开始的代码极其简单,我相信,只要具备高中以上的学历,都能轻松看懂。这标志着学习C++的门槛被彻底降低了。现在的C++学习,与过去那种枯燥、抽象的竞赛式学习截然不同。

为什么C++精灵库能激发学生的兴趣?因为它让编程变得直观、有趣且充满成就感。想象一下,只需一行代码,你就能创建一枚火箭,并让它飞向太空。这种亲手创造并看到成果的体验,是任何其他方式都无法比拟的。这正是C++精灵库的魅力所在,它将编程从一种“底层”的技术探索,转变为一种充满想象力的创意实践。

当然,有人可能会质疑:“这没有学到底层啊?”我想反问一句:“一开始就让学生接触cout << "hello world";,这就算学到底层了吗?”学习是一个循序渐进的过程。对于普通小学生而言,激发他们对学习的内在兴趣,远比掌握几个底层知识点重要得多。世界上伟大的发明者,无一不是被强烈的兴趣所驱动。虽然孩子长大后不一定会从事程序员的工作,但能坚持学好编程,本身就是一项了不起的成就。

在传统的教育体系中,C++常常因为其复杂性和学习曲线陡峭,而成为少数精英学生的专利。这不仅限制了编程的普及,也扼杀了许多孩子对技术的热情。而C++精灵库的出现,打破了这一壁垒。它让编程的大门向更广泛的学生群体敞开,特别是为中国的普通孩子提供了一条友好、有趣的学习路径。

通过这个库,孩子们可以在没有巨大心理压力的情况下,逐步建立对编程的信心和兴趣。他们可以从模仿和修改简单的代码开始,逐步深入,最终创作出属于自己的小项目。这种“兴趣驱动”的学习模式,不仅能锻炼逻辑思维和创造力,更能培养耐心和解决问题的能力。

我相信,C++精灵库的出现,是中国编程教育领域的一个积极信号。它让编程回归其本质——一种创造的工具,而不仅仅是选拔的标尺。这将为更多孩子点燃科技梦想,为他们的未来发展打下坚实的基础。虽然我个人力量微薄,无法改变整个行业的现状,但我由衷地希望,未来会有更多这样的创新,让编程教育真正惠及每一个有好奇心和创造力的孩子。

数字公告板提供商 Pinterest 发布了一篇文章,解释了其新平台Moka在大规模数据处理方面的未来蓝图。该公司正在将核心工作负载从老化的 Hadoop 基础设施迁移到基于 Kubernetes 的系统上,该系统运行在亚马逊 EKS 上,以 Apache Spark 作为主要引擎,并即将支持其他框架。

 

在一个包含两篇文章的博客系列中,Soam Acharya、Rainie Li、William Tom 和 Ang Zhang 描述了 Pinterest 大数据平台团队如何考虑下一代大规模数据处理平台的替代方案,因为现有的基于 Hadoop 的系统(内部称为 Monarch)的局限性变得越来越明显。他们将 Moka 作为搜索的结果,以及基于 EKS 的云原生数据处理平台,该平台现在运行的生产负载达到了 Pinterest 的规模。该系列的第一部分关注整体设计和应用层。相比之下,第二部分转向作者所说的“Moka 的基础设施重点方面,包括经验和未来方向”。

 

文章从实际角度描述了向 Kubernetes 的转变。它展示了一个全行业的转变,即大型技术公司现在将 Kubernetes 视为数据的控制平面,而不仅仅是无状态的服务平台。在大数据社区日益增长的受欢迎程度和越来越多的采用的鼓励下,团队探索了基于 Kubernetes 的系统,作为 Hadoop 2.x 最有可能的替代品。任何候选平台都必须满足可扩展性、安全性、成本以及托管多个处理引擎的精确标准。Moka 是如何在不放弃现有 Spark 投资的情况下现代化 Hadoop 时代的数据平台的一个例子。

 

第二篇文章的核心主题是如何在 Kubernetes 上以非常大的规模运行 Spark。作者解释了他们如何围绕 Moka 添加日志、指标和作业历史服务,以便工程师可以在不了解底层集群拓扑的情况下调试和调整作业。他们使用 Fluent Bit 对日志集合进行标准化,并使用 OpenTelemetry 和 Prometheus 兼容的端点发布统一指标。这为基础设施和应用程序团队提供了系统健康的一致视图。

 

Pinterest 还投资于通过基础设施即代码的方式使平台可重复使用。在文章中,团队概述了他们如何使用 Terraform 和 Helm 创建 EKS 集群、配置网络和安全以及部署支持组件,如 Spark 历史服务器。

 

Pinterest 的工程师还讨论了处理不同的硬件架构。他们描述了他们如何构建多架构镜像,以便他们的数据工作负载在 Intel 和基于 ARM 的实例上运行良好,包括 AWS Graviton,并将此与集群规模的成本和效率目标联系起来。InfoQ 编辑 Eran Stiller 在 LinkedIn上对该项目中的总结指出,Moka“提供了容器级别的隔离、ARM 支持、YuniKorn 调度,并通过整合工作负载和跨实例类型的自动扩展实现了显著的成本节省”。这些细节将工作置于云用户寻求在不牺牲性能的情况下削减基础设施成本的更大趋势之中。

 

关于处理引擎的更广泛的行业对话为 Pinterest 的故事增添了细微差别。在另一篇LinkedIn帖子中,Acharya 写道:“虽然 Spark 是我们的主要主力,但 Moka 的成功意味着 Pinterest 的其他用例也在效仿:Flink Batch 已经投入生产,Apache Ray 紧随其后,Flink Streaming 也将在今年晚些时候推出”。通过对 Spark 和 Flink 技术的深入探讨,我们可以了解到这一点的重要性。强调 Spark 仍然非常适合大型批处理和交互式分析工作负载,而 Flink 是“为实时、有状态的流处理而构建的”,具有严格的逐事件处理。团队将 Moka 呈现为一个灵活的基础,可以根据特定工作负载的需求添加不同的引擎,而不是一个只支持 spark 的平台。

 

外部观察者从 Pinterest 案例中吸取了教训。ML工程师通讯将 Moka 文章描述为“在 Kubernetes 上部署 EKS 集群、Fluent Bit 日志、OTEL 指标管道、镜像管理和 Spark 的自定义 Moka UI”的例子,将其与其他现代数据基础设施案例研究并列。这些反应表明,Moka 被视为一类云原生数据系统的参考架构。

 

然而,团队确实将他们的迁移工作呈现为一个正在进行的旅程,而不是一个已经完成的项目。在博客和进一步的LinkedIn帖子中,Pinterest 作者讨论了“经验和未来的方向”,并描述了早期概念验证如何导致随着对新堆栈的信心增长而逐步远离 Hadoop 的迁移。Acharya 指出,“最好的问题出现在规模上”,构建平台涉及“解决难题”,因为团队转移了实际工作负载。对于其他组织来说,这种经验可能是最重要的教训。复制围绕 Kubernetes、EKS 和 Spark 的技术选择相对简单,但从遗留系统中解耦并投资于可观测性、自动化和多引擎支持的过程可能是未来真正的工作。

 

原文链接:

https://www.infoq.com/news/2026/01/pinterest-kubernetes-bigdata/

以前都是自己开代理自用,但是团队内的其它小伙伴不能用,正好有点经费就想着能搭建一个外网的模型代理给自己局域网内的小伙伴使用,外网模型账号之前就有了,所以也不需要中间商了,现在就想自己把模型代理建起来。
初步想法是局域网找一台机器,然后把我的代理安装上去,因为自己是 node.js 开发,就打算 node.js 写个 http 代理脚本,再把代理挂载到 node.js 脚本上,但是感觉不够专业,想看看 V 友打算怎么弄,还有有什么专门的干这个的工具推荐。

导言

在复杂信息爆炸与高强度研发协作中,知识的垂直解构与深度对齐是保持组织竞争力的关键。缺乏有效的堆栈式归纳机制,团队往往会面临逻辑断层、执行偏差、深度知识难以回溯等挑战。通过使用堆栈式知识归纳软件,团队可以将信息按层级嵌套、堆栈对齐的方式进行归纳,确保每一条知识都能向上溯源目标,向下穿透细节,从而显著提升团队的深度思考能力与知识流转效率。

摘要

本文介绍了堆栈式知识归纳软件在处理复杂逻辑中的重要性,并精选推荐了5款适用于不同层级归纳场景的工具。通过分析这些软件的垂直架构与嵌套特点,帮助团队选择最适合的工具来构建深度知识栈。此外,文中还提供了堆栈化归纳的设计逻辑与实施策略,助力团队建立纵向对齐的知识管理体系。

一、 为什么需要堆栈式知识归纳软件?

在处理高复杂度项目或深度研发时,知识往往需要按照堆栈层级进行纵向归集与对齐。没有合理的堆栈式归纳工具,团队将面临以下几大困境:

  • 逻辑断层:底层执行动作与高层战略目标脱节,无法闭环回溯。
  • 进度模糊:缺乏穿透视图,无法从宏观层面一眼洞察微观节点的真实状态。
  • 认知过载:平铺的信息无法体现逻辑的主次,导致关键路径被噪音湮没。
  • 协作脱节:团队成员因缺乏统一的层级视角,在多级拆解中产生理解偏差。

引入一款支持堆栈式嵌套归纳的软件,能够帮助团队通过垂直化的架构管理,提升信息的逻辑密度与检索精度。此类软件能将知识按父子关系层层堆叠,确保每一个细节节点都具备完整的上下文语境,减少重复沟通与认知成本。

二、 堆栈式知识归纳软件的作用

堆栈式知识归纳软件是指那些支持将信息按无限嵌套、垂直对齐单元进行层级归纳,并提供深度下钻视图的工具。这类工具的核心作用是帮助团队将碎片化的执行记录转化为结构化的逻辑栈,确保每个层级的产出都能得到精准的归因与追踪。其关键特点在于具备强大的纵向架构能力,能够在保持信息深度的同时,通过折叠与穿透机制维持视图的简洁高效,让团队在宏观与微观之间自由切换。

三、 堆栈式归纳的典型应用场景

堆栈式知识归纳软件适用于需要处理严密逻辑、深度架构或多层级任务的场景。以下是此类工具的典型应用:

  1. 复杂研发架构管理:在软件或硬件研发中,将顶层架构逐层分解为模块、组件及原子代码,实现全链路逻辑归纳;
  2. 深度项目WBS分解:利用堆栈结构对大型工程进行工作分解(WBS),确保每一个子任务都能垂直映射到里程碑节点;
  3. 多级需求溯源体系:从市场需求到产品功能,再到开发任务,构建完整的垂直对齐堆栈,防止需求流失;
  4. 标准化作业流程(SOP)嵌套:将复杂的作业规范拆解为多层级操作说明,提升新成员对深度业务的学习效率;
  5. 战略目标层级对齐:通过堆栈式结构将OKR或KPI从组织层层透传至个人,实现上下同欲的逻辑闭环。

四、 5款值得一试的堆栈式知识归纳软件(精选推荐)

1. 板栗看板

专注于无限层级嵌套与垂直对齐的堆栈式管理工具

  • 核心特性:支持卡片无限嵌套,提供独特的“树状+看板”双重维度,实现任务层级的深度解构;
  • 适配场景:研发团队、复杂项目管理、多层级SOP归纳;
  • 优势亮点:通过直观的层级下钻功能,板栗看板能完美解决普通工具“扁平化”的痛点,让再复杂的项目也能通过堆栈结构一览无余。
    在这里插入图片描述

2. Workflowy

极致简约的无限层级大纲式归纳软件

  • 核心特性:基于单一列表的无限节点嵌套,支持极致的缩放(Zoom-in/out)与归纳;
  • 适配场景:个人深度思考、项目逻辑建模、碎片信息层级化;
  • 优势亮点:专注“点、线、面”的纵向堆叠,适合快速捕捉灵感并将其无缝嵌入现有的逻辑堆栈中。
    在这里插入图片描述

3. Heptabase

结合视觉白板与原子化堆栈的知识建模工具

  • 核心特性:支持将笔记块放入多层级卡片盒,通过视觉化的方式呈现知识的堆栈关系;
  • 适配场景:学术研究、复杂业务分析、学习体系构建;
  • 优势亮点:它不仅能进行堆栈归纳,还能通过白板连线展示跨堆栈的横向逻辑,兼顾了深度与广度。
    在这里插入图片描述

4. Airtable

基于多表关联与分级视图的结构化堆栈平台

  • 核心特性:通过强关联关系实现不同表单间的层级跳转,支持按属性进行多级分组归纳;
  • 适配场景:资产管理、中后台流程监控、标准化数据归档;
  • 优势亮点:Airtable 的数据库逻辑允许用户自定义复杂的垂直对应关系,适合对大量标准化堆栈进行参数化管理。
    在这里插入图片描述

5. ClickUp

多层级任务架构与高度自定义的团队协作软件

  • 核心特性:提供“空间-目录-列表-任务-子任务”的五级固定堆栈架构,支持精细化的属性继承;
  • 适配场景:大中型团队协同、全流程项目管控、多维度任务分发;
  • 优势亮点:其严格的层级逻辑确保了大规模协作时的信息有序,是典型的工程级堆栈管理工具。
    在这里插入图片描述

五、 各软件的选型建议

选择堆栈式知识归纳软件时,应根据逻辑的深度、协作的复杂度以及对“可视化下钻”的需求来决定:

1. 追求极简与逻辑深度

对于侧重个人思考或纯逻辑建模的用户,Workflowy 的极简大纲能提供无干扰的堆栈归纳体验。

2. 复杂研发与可视化穿透

若团队需要在执行中实时穿透进度,板栗看板 凭借其直观的嵌套卡片视图,是中小型研发团队实现垂直对齐的最优解。

3. 数据驱动与标准化堆栈

如果归纳内容需要高度结构化并支持大量筛选、自动化操作,Airtable 能够提供最稳健的数据库式堆栈支撑。

4. 大型组织的全方位管控

针对需要多部门协作、分权管理的场景,ClickUp 的五层固定架构能确保知识在复杂体系中不失序。

六、 Q\&A:关于堆栈式知识归纳你可能遇到的问题

Q1:堆栈层级分得太深,找东西像“套娃”一样麻烦怎么办? A:建议配合全局搜索与快速导航功能,并利用“路径面包屑”定位。同时,在顶层建立索引页或仪表盘,确保核心堆栈节点触手可及。

Q2:如何平衡堆栈的深度与执行的灵活性? A:遵循“逻辑深拆、执行轻快”的原则。建议将深度逻辑留在归纳层,而在最底层的原子任务层保持简洁,避免因层级过多导致操作繁琐。

Q3:如何防止堆栈式归纳沦为行政负担? A:采用“边做边归纳”的模式,将归纳动作嵌入任务生命周期中,利用工具提供的模板化功能降低重复搭建堆栈的成本。

七、 结语

堆栈式知识归纳软件是攻克复杂管理难题的利器。通过科学的层级设计与垂直归档,团队能够将凌乱的信息转化为逻辑严密的资产栈,实现从“碎片化堆砌”到“系统化对齐”的质变。借助 板栗看板WorkflowyClickUp 等工具,知识管理将不再是沉重的负担,而是驱动组织持续深耕与极速进化的逻辑引擎。

深度决定高度,堆栈式知识归纳软件让每一份思考都拥有厚实的基石。

TabTab 更新:Zen 模式、一键分享导入、标签组支持

作为一个常年开着 50+ 标签页的重度用户,我一直在寻找一个好用的标签管理工具。市面上的方案要么太重,要么体验不好,所以我自己做了 TabTab。最近上线了几个新功能,来和大家分享一下。


🧘 Zen 模式 - 专注浏览,远离干扰

这是这次更新我最喜欢的功能。

日常使用标签管理器时,左边空间列表、右边实时标签栏,功能是全的,但有时候就是想安静地浏览收藏的链接,不想被各种操作按钮干扰。

Zen 模式就是为此而生:

  • 极简界面:只保留当前空间的内容,没有侧边栏,没有编辑按钮
  • 多种主题:默认简约风、吉卜力风格(手绘感)、毛玻璃效果,总有一款适合你
  • 沉浸体验:点击即打开,鼠标移到右上角才显示退出按钮
  • 记住偏好:下次打开自动进入上次的模式

在搜索框旁边点击 Zen 按钮即可进入。强烈推荐用吉卜力主题配合暗色模式,非常治愈。


🔗 一键分享 & 一键导入

之前有用户反馈想把自己整理的资源合集分享给朋友,或者在不同设备间快速同步。

现在支持了:

分享

  • 点击空间标题旁的「分享」按钮
  • 生成一个短链接( 30 天有效)
  • 对方打开链接,点击「导入到 TabTab 」,完成

大概这个样子👉 https://s.tabtab.xyz/link/6b969f3dbf4e6201feeb3f3c5354516a

导入

  • 支持从分享链接一键导入
  • 支持从浏览器书签快速导入
  • 支持从 Toby 迁移过来

管理分享链接

登录后,在侧边栏「 My Links 」页面可以:

  • 查看所有分享过的链接
  • 一键复制、删除不需要的链接
  • 链接到期自动清理

分享内容存储在服务端,敏感链接请谨慎分享。


📁 标签组支持

Chrome 的标签组功能很好用,但之前 TabTab 的实时标签栏没有识别它们。

现在优化了:

  • 右侧实时标签栏会按标签组聚合显示
  • 支持一键保存整个标签组到合集
  • 支持修改标签组颜色
  • 支持一键关闭整个标签组

这样从浏览器标签组到 TabTab 的工作流就顺畅多了。


其他优化

  • 卡片样式支持「普通」和「紧凑」两种
  • 合集支持移动到其他空间
  • 支持置顶合集
  • 修复了一些同步和 UI 问题


下载地址

最近 15 人小组实践 vibe coding 遇到了一系列问题。整的我们连续加班了 1 个月。

项目背景:
公司里的核心项目。涉及资金流企业级复杂架构,对系统的稳定性和高可用性要求极其严苛。
这个项目是专门为大促(比如双 11 )这种极端高并发流量设计的,里面充满复杂的业务逻辑,比如多层级的数据核对、消息补偿机制和各种应急预案。技术路线上使用公司自研框架上从 0 到 1 开发。
而且压力大的是,它是个倒排期项目,上线时间给定死了,一秒都不能拖。

准备阶段:
这次开始前我们内部讨论了很久,决定采用 SDD (规范驱动开发) 模式,即由规范和文档驱动 AI 进行架构设计、系统开发以及单测和集测的编写。
出于数据安全的考虑,团队申请了一个全新的项目仓库。明确要求 AI 不能读取公司既有的私有代码库,以规避潜在的合规风险。
由于 AI 缺乏对公司内部定制或自研框架的了解,我们手动编写了大量示例代码和 Todo 供 AI 学习。
团队预先定义了多个 Agent (智能体),并设计了详细的 Workflow (工作流),试图通过流程化来约束 AI 的发散行为。

惊喜的开始:

• 详尽且专业的架构文档:AI 产出的架构设计文档看起来非常完善,甚至比人类写的还要好得多。人类写文档时往往会基于“常识”而忽略一些细节或内部约定,但 AI 会写得非常详尽,不遗漏细节。
• 惊人的开发速度: 在纯开发阶段,AI 展示了极高的效率。内部估算,如果是由人类工程师完成该项目的纯开发工作,大约需要 15 到 20 人日,而 AI 仅用了 3 天时间 就完成了所有的代码编写。
• 高质量的代码注释与异常处理: 我们平时为了追求开发速度,有可能对注释和异常处理的相对简单,但 AI 编写的代码在注释质量和异常处理机制方面比人类工程师开发出来的要好很多。
• 清晰的设计与逻辑分层:AI 在接收到相关知识后,能够定义出非常清晰的类图、方法、依赖关系和分层结构。它会先进行详细的设计,明确每个类的职责,初步看过去代码质量非常不错。
• 代码初期的易读性:AI 初步生成的代码逻辑相对直接(偏“面条式”代码),没有过度使用复杂的架构模式或抽象,这使得人类在第一眼看过去时觉得逻辑非常清晰且好理解。

不过这样的蜜月期,并没有维持多久,很快我们开始遇到各类问题,加班也多了起来。

遇到的问题:

1. 技术与代码质量问题
• 逻辑伪造与“将错就错”:AI 在面对缺失的知识、错误的接口文档或注释时,会伪造逻辑或猜测( Mock )返回格式。遵循“垃圾进,垃圾出”( GIGO )原则,如果输入信息有误,AI 的产出必然也是错误的。
• 错误传播与测试盲区: 如果 AI 基于错误的架构分析生成代码,它也会基于同样的错误逻辑设计测试用例,导致单测和集测无法发现逻辑漏洞。
• 产生“屎山代码”: 虽然 AI 初步生成的代码看似整洁,但在经过人工点对点的调试修复问题后,代码会逐渐演变成难以维护的屎山代码,。
• 缺乏企业内部知识: 由于数据安全限制,AI 无法读取既有的私有代码库,且对企业内部定制或自研的框架缺乏了解,导致其难以写出符合要求的代码。
• 不符合开发规范:AI 编写的代码往往不符合团队内部的开发规范或习惯(如事务处理方式),导致人类工程师在 CR (代码评审)或维护时感到非常困难。

2. 架构与设计层面的局限
• 输出不稳定与概率推断: 基于 Transformer 架构的 AI 本质上是概率推断模型,同样的输入和提示词产生的输出是不稳定的。我们为了研究针对本项目最佳的 AI 沟通方式,不断的测试修改各种提示词,花费了不少时间。
• 上下文限制与“遗忘”:AI 的上下文处理能力有限,在解决具体问题时可能会忘记之前的全局设计,导致代码复用性差,甚至在同一项目中针对相同问题重复编写不同的代码。
• “只见树木不见森林”:AI 容易陷入局部逻辑,忽略全局影响,例如在修改代码逻辑后忘记更新注释或相关的单元测试。
• 文档过度冗长:AI 喜欢编写极其详尽、甚至带有重复内容的长文档,这增加了人类阅读和理解的成本,往往 AI 5 分钟输出的内容,我们要花 1 个小时去理解。

3. 工作流程与效率悖论
• 工作强度反而增加: 使用 AI 后,程序员的工作时长变得更长、更累,甚至需要工作到凌晨,这与“AI 减负”的初衷相悖。
• 由于过度约束导致的“犯傻”: 为了约束 AI ,开发人员会定义越来越多的 Agent 和复杂的 Workflow ,但约束过多会导致 AI 出现“过敏”或变得笨拙,丧失了发散性思维的能力。
• Token 消耗巨大: 复杂的 Workflow 和长指令会导致 Token 消耗量激增(每天消耗上亿 Token ),导致成本异常昂贵。
• 陷入“面多加水”的死循环: 当 AI 做不好时,人类倾向于增加更多 Agent 或约束,这使得系统越来越复杂,最终效果反而变差。

4. 心理压力与管理挑战
• 认知负荷与上下文切换: 领导层可能误认为 AI 能大幅提升生产力,从而给程序员安排更多并发项目,导致程序员需要在多个 AI 窗口和项目背景间频繁切换,造成脑力枯竭,。
• 巨大的“不安全感”:AI 的自评分往往虚高(比如 AI 设计的架构或算法,我们让 AI 给自己打分结果他给自己打 98 分),但人类很难一眼看出其逻辑中的隐患。由于不理解 AI 某些设计的意图,人类工程师会产生强烈的不安全感和心理压力,。
• 信息爆炸:AI 产出的海量文档和代码需要人工进行大量审查( Review ),这一过程极其消耗精力。


后续反思
1. 明确 AI 的适用场景:
◦ 推荐场景: 编写一次性脚本、处理数据报表、编写复杂的 SQL 、整理文档、画图、辅助理解不熟悉的既有代码、查 Bug 、以及编写基础的单元测试和集成测试代码。
◦ 限制场景: 涉及核心业务逻辑、复杂资金流、高可用架构设计时,必须由人类主导。
2. 坚持“人机协作”而非“全权委托”:
◦ 建议通过 Web Coding 的方式,让 AI 按照人类提供的模板类和示例代码进行学习和约束。
◦ 核心逻辑必须按照团队的开发规范和习惯进行重写,以确保代码的可维护性和安全性。

导语

随着 DevSecOps 的不断推进,应用安全已被广泛纳入SDLC的各个阶段。然而,在代码扫描、依赖分析、漏洞检测等能力逐步成熟的同时,一个长期存在却难以解决的问题始终横亘在安全工程实践中:安全工具“能发现问题”,却难以判断问题是否真实、是否可利用、是否值得优先处理。大量规则驱动的扫描结果不仅带来了高误报率,也持续消耗着研发与安全团队的精力。

近年来随着大语言模型(LLM)的快速发展,为这一困境提供了新的可能。不同于传统规则或静态特征匹配,LLM 在语义理解、上下文推理和条件组合分析方面展现出独特优势,使其具备参与安全“判断层”的潜力。将 LLM 引入 SDLC,不再只是生成代码或辅助文档,而是尝试参与到安全结果的理解、验证与决策之中。

本文结合实际应用安全建设经验,围绕 LLM 在 SDLC 中的落地实践展开,重点探讨其在硬编码、SCA、漏洞挖掘等场景中的应用方式与工程化思路。

SDLC 应用安全流程

image-20251217111844592

SDLC名词解释

  • SAST(静态应用安全测试)通过对源代码或编译产物进行静态分析,在不运行系统的情况下发现潜在的安全缺陷,如 SQL 注入、XSS、不安全函数调用和硬编码敏感信息等,适合在开发阶段提前发现问题。
  • SCA(软件成分分析)聚焦于项目中使用的第三方开源组件,识别依赖库及其传递依赖中已知的安全漏洞、风险版本和许可证问题,帮助团队降低因外部组件引入的安全风险。
  • DAST(动态应用安全测试)在系统运行状态下,从攻击者视角对应用进行测试,通过捕获流量包修改参数重放,模拟真实攻击行为验证系统是否存在可被实际利用的漏洞,如注入攻击、未授权访问等
  • 硬编码(Hard Coding),是指在程序中直接把固定的值写死在源码里,而不是通过配置文件、环境变量等方式获取,比如下面这些情况,都属于硬编码:用户名、密码、token或加密密钥等

为什么我们需要SDLC?

产品一句话需求 → 开发自己理解 → 按照个人习惯去开发 → 功能上线后出现大量漏洞 → 被外部利用造成损失

而SDLC要做的就是把漏洞扼杀于摇篮之中,而不是靠后期凭经验渗透测试发现。

但目前传统的SDLC存在大量告警/误报,推送大量工单给研发会导致业务间摩擦度增加,因此理想情况是把真正需要修复的工单交给研发处理

硬编码规则下引入AI判断,减少误报

问题背景:目前硬编码扫描是根据规则的正则匹配,存在一定的局限性和误报

image-20251217171931177

整体流程

结合硬编码规则 + AI 判断保留高召回,同时降低误报率

image-20251230150538531

硬编码规则先行

使用固定规则(正则、逻辑判断)先筛掉明显非风险项,让 AI 只处理模糊/不确定案例

AI 判断做辅助

只对硬编码规则未覆盖、可疑的候选项输出风险判断,输出结果可附置信度或分类标签

置信度 + 白名单控制

AI 输出带置信度,低于阈值直接忽略,对常见合法值、默认值设置白名单

提示词 promot

通过定位文件的位置,结合上下文判断实际风险等级,把AI分析结果输出

你是一个资深应用安全专家,精通代码安全、凭证泄露、真实攻击利用分析。

现在给你一个【疑似硬编码凭证】的扫描结果,请你进行【可利用性研判】。

输入信息如下(JSON):
%s

请严格按以下维度进行分析:
1. 该硬编码是否为真实敏感凭证
2. 是否存在被外部攻击者利用的可能
3. 是否依赖运行环境
4. 泄露后的安全影响
5. 修复建议

请以 JSON 格式输出分析结果

模型输入字段释义

字段 释义
match 匹配到的硬编码内容(部分脱敏显示)
rule key类型
path 硬编码所在的完整文件路径
branch 分支
code 上下5行代码

增加输出长度,避免截断

"extra_body": map[string]interface{}{
            "think_mode":        true,
            "max_output_tokens": 1024, 

实现效果

image-20251217195004928

如果是走正常的流程,secret_value会被 generic-api-key规则名字标记严重程度为medium

image-20251218143042933

开启AI分析选项后,通过定位文件的位置,结合上下文交给ai分析,AI判断实际危害程度为低

在代码中发现硬编码的敏感信息'DEMO_SECRET',其值为'secret_value'。根据规则'generic-api-key',这可能是一个API密钥或其他类型的敏感凭证。该变量位于'E:\SDLC平台\backend\uploads\demo.py_scan\demo.txt'文件中,并且注释表明它看起来像一个Key,但无实际用途。由于这是一个测试环境中的示例代码,风险相对较低。

image-20251218142746712

掩码输出硬编码片段

image.png

代码中存在:

const apiKey = "sk_live_9f83a0b7..."

AI分析后会直接原样输出,给出完整的佐证片段,这样是不符合数据安全合规要求的,就会产生 二次扩散风险

正确掩码后的做法,AI 只需知道这是一个硬编码密钥

const apiKey = "*MASKED_SECRET*"

实现效果

通过 AI 研判对硬编码、潜在风险及非生产路径问题进行自动识别与筛选,各产品待修复量平均下降约52.8%

image.png

价值体现:在保证安全覆盖率的前提下,AI 自动化研判显著提升效率,降低人工排查压力,推动安全研判进入智能化阶段

  • AI 判断为 False:AI 判定为误报,可直接关闭
  • AI 判断为 True 但 NonLive:问题真实但不在生产路径,可降低风险等级处理
  • AI 研判后待修复:确认真实且影响生产,需进入修复流程

SCA可利用性与真实风险判断

从官方文档 https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components 描述可看到,涉及版本都需要更新到对应补丁

image-20251223145325095

但从甲方安全运营的角度会存在以下这些问题:

1.大版本的更新会存在项目兼容性问题,不好推进

2.涉及仓库数量较多,如果全部同时进行整改将会是极大的工作量

如果我们深入分析后会发现,并不是在版本范围内就存在漏洞,还需要额外的条件满足才能利用

客户端请求 Server Action
  ↓
执行 Server Action (接收用户输入)
  ↓
react-server-dom-webpack 序列化响应
  ↓
【漏洞点】反序列化时未正确验证输入
  ↓
恶意 payload 被执行 → RCE

必要利用条件

条件 是否必须 说明
App Router ✅ 必须 提供 RSC / Flight 机制
Server Actions ✅ 必须 提供反序列化入口
用户可控输入 ✅ 必须 构造恶意 payload

整体流程

  • 核心思路:证明SCA漏洞代码是否被业务代码真实调用,如果不可达那么这个SCA漏洞在该仓库就不可利用
  • 调用链路:业务代码中是否存在外部可控输入→ 漏洞组件危险函数的真实可达路径

image-20251221173914270

HTTP 请求 (scaHandler) -- 输入CVE编号
    ↓
CVE 分析 (runSCACVEAnalysis)
    ├─ 步骤 2.1: Google 搜索受影响版本
    ├─ 步骤 2.2: Qwen 识别依赖组件搜索官网信息
    ├─ 步骤 2.3: 搜索引擎寻找对应PoC
    ├─ 步骤 2.4: Qwen 提取结构化信息
    └─ 步骤 2.5: Claude 最终安全分析
    ↓
仓库分析(可选)
    ├─ 方法一: 依赖分析 (analyzeRepositoryVulnerability)
    └─ 方法二: 锚点分析 (analyzeRepositoryWithAnchor)

google搜索引擎调用

调用google进行联网搜索,局限性 key限制每天100个

https://console.cloud.google.com/apis/credentials

凭证-创建凭证

image-20251217162129486

启用custom search api

image-20251217161840875

https://programmablesearchengine.google.com/controlpanel/create

在这个地方可以定义调用的搜索引擎

image-20251217162013410

优化阶段1:多个源进行信息整合导致出错

初步阶段测试发现,Qwen去重整理逻辑导致结果出现缺失

image-20251223150956095

因此后续直接选用官方源,保证结果数据的准确性

官方情报来源

序号 来源机构 描述 链接
1 美国国家漏洞数据库 (NVD) 官方 CVE 条目,包含漏洞详情、受影响版本、CWE、CVSS 等信息 https://nvd.nist.gov
2 CVE 官方记录 (CVE.org) 官方 CVE ID 登记与记录 https://www.cve.org
3 React 官方安全公告 (React Team / Meta) 官方漏洞公告及修复版本说明 https://react.dev
4 加拿大网络安全中心 (Cyber Centre) 官方安全公告、漏洞说明 https://www.cyber.gc.ca
5 Google Cloud 官方博客 官方补丁指引及响应措施 https://cloud.google.com

优化阶段2:未关联间接受影响组件导致结果不准

在漏洞受影响的范围很多都只提及了react组件,但是有其他间接依赖组件如next也会受到影响,因此在爬取网站内容需要把这部分信息也整理进来

虽然应用使用了受影响的 React 版本(19.0.0)并启用了 React Server Components 功能,但 React Server Components 的漏洞版本范围是 19.0.0-19.2.0,而当前仓库使用的是 react-server-dom-webpack 19.0.0。关键问题是该仓库使用的是 Next.js 16.0.6,而 CVE-2025-55182 主要影响独立的 React Server Components 实现,Next.js 有自己的 Server Components 实现机制,不直接受此 CVE 影响。条件1不满足,因此漏洞不可利用

image-20251223151142011

优化阶段3:规范性提示词输入

这里有三个关键点:

将「CVE 知识」作为输入,而不是让 LLM 自行理解

  • 不依赖模型对 CVE 的主观理解或记忆
  • 由安全侧明确提供:漏洞成因和可利用条件链(Exploit Preconditions)
  • 避免模型自由发挥导致的误报或信息污染

在目标代码仓库中,验证漏洞可利用条件是否成立

  • 不做漏洞解读
  • 不做风险定级臆断
  • 不基于版本号直接下结论

将每个 CVE 拆解为一组必须同时满足的利用条件

  • 逐条在仓库中进行验证:任一关键条件不满足 → 漏洞不可达,不构成真实风险
  • 代码结构、依赖使用情况及配置与对外暴露面

最终提示词

你是一名资深应用安全分析师。请基于我提供的 SCA 扫描结果,对发现的第三方组件漏洞进行【汇总型安全分析输出】,输出需包含以下部分(使用简体中文):

1. 漏洞基本信息
   - 受影响组件 / 编程语言 / 版本
   - CVE 编号
   - 漏洞类型

2. 漏洞原理说明
   - 从安全分析视角解释漏洞成因
   - 重点描述漏洞触发机制(如反序列化、解析、路由处理等)
   - 对未公开的内部实现需明确说明"细节未披露",避免推测

3. 影响评估
   - 可造成的安全影响(如拒绝服务、信息泄露等)
   - 对业务连续性、系统稳定性和可用性的潜在影响

4. 攻击前置条件
   - 环境条件(框架、运行模式、功能开启情况等)
   - 依赖条件(受影响的第三方组件)
   - 攻击者权限要求(是否需要认证、是否可远程触发)

5. 涉及模块或组件范围
   - 受影响的框架模块或依赖包名称
   - 若具体函数或代码位置未公开,需明确说明
   - **必须列出所有依赖关系**:如果漏洞影响底层组件,必须说明哪些上层框架/库可能间接受影响,包括具体的组件名称和受影响版本范围

6. 可利用性与 EXP 情况说明
   - 是否存在已公开的 PoC / EXP
   - EXP 的公开来源类型(如 GitHub、安全研究博客等)
   - 利用复杂度与稳定性评估(概念验证 / 可重复利用 / 条件受限)
   - 输出poc/exp

7. 修复与缓解建议
   - 官方推荐的修复方式(安全版本升级 / 官方补丁)
   - 可选的临时缓解措施(如限制接口访问、WAF、防护策略等)

8. 验证与复现说明(高层级)
   - 给出验证思路而非攻击步骤
   - 描述在存在漏洞情况下的典型现象(如服务挂起、资源异常)

9. 信息来源说明
   - 明确标注信息来源类型(NVD、官方博客、安全公告、PoC 仓库等)
   - 不编造或推测来源
   - **重要**:references 字段必须包含完整的 URL(以 http:// 或 https:// 开头),例如:
     - 正确:https://github.com/msanft/CVE-2025-55182
     - 错误:github: msanft/CVE-2025-55182 或 github.com/msanft/CVE-2025-55182
     - 如果搜索结果中有链接,必须提取完整的 URL 格式

输出风格要求:
- 安全评估报告风格
- 用词克制、客观、中立
- 不渲染攻击效果,不放大风险,不自主推测
- 优先使用官方来源信息,避免"未确认"或"可疑"的评估

漏洞分析示例1:CVE-2025-55182

受影响的系统情况

app-router-vulnerable/app/api/action/route.ts

'use server'

export async function testAction(formData: FormData) {
  const data = Object.fromEntries(formData)
  return {
    message: 'Server action executed',
    data: data
  }
}

使用 App Router 并启用了 Server Actions 的应用系统,受CVE-2025-55182影响

  • ✅ 使用 app/ 目录(App Router 结构)
  • ✅ 接收 FormData 作为参数
  • ✅ 使用 react-server-dom-webpack 进行序列化/反序列化

image-20251223144630570

不受影响的系统情况

  • ❌使用 pages/ 目录(Pages Router 结构)
  • ❌不使用 Server Actions
  • ❌不依赖 React Flight Protocol 序列化

使用 Pages Router 的 Next.js 应用,即使引入同样处于受影响范围内的版本,也不受 CVE-2025-55184 漏洞影响,ai分析结果符合预期

image-20251222110315768

漏洞分析示例2:CVE-2021-44228

受影响的系统情况

环境情况:

  • Log4j 版本:2.14.1 (漏洞影响范围内)⚠️
  • JNDI:✅ 允许
  • 网络:✅ 可访问 LDAP / RMI

综上所述,满足漏洞触发条件,因此AI研判该仓库受影响

image-20251222145542970

不受影响的系统情况

环境情况:

  • Log4j 版本:2.14.1(漏洞影响范围内)⚠️
  • JNDI:❌ 被禁用
  • 网络:❌ 无法访问外部 LDAP

虽然在漏洞版本内,但是-Dcom.sun.jndi.ldap.object.trustURLCodebase=false ,因为${jndi:...} 被禁用不会被解析

image-20251222151248340

AI 分析判断仓库不受影响,符合预期

image-20251222115823103

模型费用对比及选择

根据官方获取定价数据:

https://platform.claude.com/docs/en/about-claude/pricing?utm_source=chatgpt.com

在选择前首先我们要定义模型好坏的标准,从数据表现出发而不是个人主观经验判断

如果追求 准确率 可以选择claude-sonnet-4@20250514,追求 性价比 但又有不错的准确率可以选择gemini-2.5-flash

项目 3 5 6 7 8
使用模型 gemini-2.5-pro claude-sonnet-4@20250514 claude-haiku-4-5 Qwen2.5-Coder-14B gemini-2.5-flash
准确率 95% 100% 87.50% 75% 87.50%
单个 CVE 分析平均费用(USD) 0.33 0.69 0.19 -- 0.08

白盒代码审计

存在的难点

  • 代码文件很长
  • 需要多文件上下文结合分析
  • 需要精确定位行号、变量流、调用链

上述这些问题都会导致大量的token消耗,其他chat型大多数每一轮 = 重新塞一堆代码进 prompt

模型选择

Cursor 最大优势:通过索引 + 增量上下文,节约 token 消耗,适合多轮、持续审计

最关键的一点是,他是按照提问次数来计费的,它把一次提问变成了一次完整的白盒审计任务执行

维度 / AI ChatGPT (Web/API) Claude Gemini GitHub Copilot Cursor
上下文获取方式 手动粘贴文件 手动粘贴 / 长上下文 手动粘贴 IDE 补全 自动索引 + AST
重复 token 消耗 极低
多轮审计成本 指数级上升 平稳 / 增量消耗
跨文件调用分析 手动复制 手动复制 自动关联
白盒审计推荐度 ⭐⭐⭐ ⭐⭐⭐ ⭐⭐ ⭐⭐⭐⭐⭐

提示词promot

明确任务定位

让 LLM 清楚自己在做什么,而不是默认行为(如写总结、生成报告),避免 LLM 自动归纳/总结导致丢失重要信息差异。

你不是在写安全报告,而是在做“证据整理(evidence collection)”。
你的目标是保留信息差异,而不是消除差异。

使用“反总结”指令

通常 LLM 会倾向总结、归纳,在 prompt 中明确要求保留原始信息、对比差异、不要归类

请逐条保留所有原始输入中的差异信息,不要合并或总结条目。
每条信息保持独立输出。

明确输出结构

指定输出格式,避免每次输出不统一,便于后续自动化分析/汇总

请按照以下 JSON 格式输出:
[
  {"source": "文件A", "line": 23, "content": "..."},
  {"source": "文件B", "line": 45, "content": "..."}
]

强化“证据导向”

提示 LLM 输出时只保留事实,不做主观判断

只提取事实性内容,不要加入主观评论或判断。
标明来源和行号。

分步任务处理

对于复杂信息,分步任务处理比一次性要求总结更稳妥,避免分析中断停止,输出更结构化、更精确

第一步:提取每个输入文件的独立事件。
第二步:标记事件的时间戳和来源。
第三步:保留所有差异,不进行合并。

根据框架语言输入前置知识

不同的语言审计的方法和思路不一样,在让AI分析代码时候需要提供一些前置知识,这能让 AI 更精确地聚焦在“可能的风险点”,而不是泛泛地猜测

像SQL注入,不同语言的sink点也不完全相同

语言 方法 / 函数 示例代码 / SQL
Golang (*gorm.io/gorm).Where db.Where(StringData).First(&data)
Golang (*github.com/jmoiron/sqlx.DB).Queryx db.Queryx(query, params)
Java mybatis like select * from users where username like '%${name}%'
Java mybatis order by select * from users order by ${orderby}
Java mybatis-plus apply wrapper.eq("id", id).apply("username=" + name);
Python pymysql execute sql = "select * from users where username = '%s'" % (name)
Node.js mysql query sql = "select * from users where username = ${name}"

在Shiro和Spring Security中,可以配置哪些API不需要进行权限校验

  • 在Shiro中,可以使用Shiro的过滤器链(Filter Chain)来配置不需要进行权限校验的API
  • 在Spring Security中,可通过继承WebSecurityConfigurerAdapter类并重写其中的configure()方法,配置不需要进行权限校验的API

image-20251230153740679

像上述的内容可作为前置知识给AI输入,增加其分析的准确性

1. web.xml / Spring 配置分析
找出其中配置的可直接前台访问的 .jsp、.do、.action、.html、.json、.servlet 等接口路径。
指明配置项与访问路径的对应关系:
web.xml → <servlet-mapping>、<url-pattern>
@Controller、@RestController、@RequestMapping 等注解标注的接口
检查是否存在匿名访问的接口(无登录/权限验证拦截)。
检查 Filter、Interceptor、SecurityConfig、WebSecurityConfigurerAdapter 等中是否存在鉴权绕过配置。

2. classes / lib / jar 源码分析
对比 WEB-INF/classes 下的 .class 文件与反编译后的 .java 文件。
对 lib 下的 .jar 文件进行反编译,检查是否包含业务逻辑代码。
逐一分析对应的 Controller、Service、DAO、Repository 层实现:
对应的请求路径(前台/后台)
涉及的外部依赖或第三方库(如 HttpClient、JdbcTemplate、Hibernate 等)
标注潜在的高危点:未校验的用户输入、外部命令调用、文件上传写入、动态 SQL 拼接等。

3. 识别调用链路
标识所有暴露给前端或外部调用者的接口(如 REST API、RPC Endpoint、Controller 方法、Servlet)。
确定入口函数是否为用户完全可控(如 request.getParameter()、@RequestParam、@RequestBody)。
检查系统是否已接入统一认证(如 Spring Security / JWT / OAuth2 / Session)。
深入分析完整调用链:
Controller → Service → Repository → 外部系统
判断入口是否存在强约束:
用户归属验证
签名、时间戳、防重放机制
输出是否可以绕过认证或越权。

4. 重点模块审计(前台与后台分开)
重点排查以下常见的漏洞类型:
漏洞类型    漏洞Sink点(常见函数 / 类)   审计描述
SQL 注入  Statement.executeQuery(), Statement.executeUpdate(), JdbcTemplate.queryForList(), createNativeQuery(), EntityManager.createQuery()  检查点:SQL 是否通过字符串拼接、+、String.format、concat 等方式插入用户输入(如 Request 参数)。优先关注 MyBatis 自定义 SQL 与原生 JDBC 使用场景。
命令执行(RCE)   Runtime.getRuntime().exec(), ProcessBuilder.start(), ShellUtils.exec()  检查点:是否拼接用户输入到命令中,或允许上传执行脚本。
文件上传 / 任意文件写入   MultipartFile.transferTo(), FileOutputStream.write(), Files.write(), FileUtils.copyInputStreamToFile()  检查点:是否校验扩展名、MIME、目录路径;是否防止 .jsp、.jspx、.java 等脚本文件上传。
反序列化    ObjectInputStream.readObject(), JSON.parseObject(), Yaml.load(), XStream.fromXML()  检查点:是否对外部输入执行反序列化;是否使用存在漏洞的库(如 fastjson < 1.2.83, Jackson 未加白名单)。
任意文件读取  Files.readAllBytes(), FileInputStream, IOUtils.toString(), response.getOutputStream().write()   检查点:是否直接读取用户指定路径;是否存在目录遍历绕过。
路径遍历    new File(), Paths.get(), ServletContext.getRealPath(), File.delete()    检查点:是否存在 ../ 等拼接导致目录逃逸。
XXE(XML 外部实体)   DocumentBuilderFactory.newInstance(), SAXParserFactory.newInstance(), XmlMapper.readValue() 检查点:是否关闭外部实体解析;是否解析来自不可信来源的 XML。
SSRF    HttpURLConnection, HttpClient.get(), RestTemplate.getForObject(), URL.openConnection()  检查点:是否允许用户指定 URL 并由服务器发请求;是否存在内网访问风险。
XSS response.getWriter().write(), 模板引擎输出 (<%= ... %>, Thymeleaf, Freemarker)    检查点:是否未进行 HTML/JS 输出转义。
认证绕过 / 越权   缺少 @PreAuthorize、@Secured、Session 检查或过滤器逻辑错误    检查点:检查接口访问控制逻辑,是否能直接调用他人资源。

5. 输出结构(每个发现需包含以下部分)
每个发现必须包含以下字段:
风险点名称
漏洞类型 + 影响接口 + 文件路径
漏洞成因
简述代码逻辑错误或输入未过滤的原因。

在net系统中,首先对dll进行反编译,然后让AI去关联路由和实现方法

image-20251230154740599

### 审计和输出要求:

1. **web.config 分析**  
   - 找出其中配置的可直接前台访问的 `.ashx``.aspx` asmx ascx 文件。  
   - 指明配置项与访问路径的对应关系。  

2. **bin 目录源码分析**  
   - 逐一对应 `bin` 下的 `.dll` 与其反编译出来的 `.cs` 文件。  
   - 分析对应的 `.ashx` 或 `.aspx` 、ascx  asmx方法实现。  
   - 如果代码中存在潜在的高危点,需要重点标注   

3. 识别调用链路 
* (本文件内的路由/XXX 根据情况调整) 函数是暴露给前端或外部调用者的接口(如 API/RPC/Controller),其 request 对象是完全用户可控的
* 当前系统默认已接入统一认证中间件(如 JWT / Session / OAuth2),调用该函数的用户通常已登录
* 需要分析完整的调用链路,包括所有被调用的 Service 层、Repository 层和外部依赖
* 需要判断入口处有强约束(如强校验 user 归属/租户隔离/签名+时效+重放防护)
分析接口是通过什么鉴权的,尝试进行绕过,深入分析所有前台可访问的文件并挖掘漏洞
在项目中搜索所有 ASMX 接口,重点关注是否可匿名调用的未授权端点,并给出利用的wsdl方式和数据包

4.漏洞Sink点 
| 漏洞类型                       | 漏洞Sink点                                                   | 审计描述                                                     |
| ------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
| **SQL 注入**                   | `ExecuteNonQuery()`, `ExecuteReader()`, `ExecuteScalar()`, `SqlDataAdapter.Fill()`, `ExecuteSqlCommand()`, `ExecuteSqlRaw()`, `CreateSQLQuery()`, `connection.Query()` | **检查点**:查找 SQL 语句是否通过字符串拼接或格式化(`+`, `String.Format`, `$""`)将 `Request/Query/Form/Cookie` 等直接插入。 |
| **命令执行(RCE)**            | `Process.Start()`, `ProcessStartInfo.FileName`, `ProcessStartInfo.Arguments` | **检查点**:是否把用户输入拼接到命令或传给 shell/PowerShell, `FileName` 与 `Arguments` 是否来自外部 |
| **文件上传 / 任意文件写入**    | `SaveAs()`, `WriteAllBytes()`, `WriteAllText()`, `FileStream.Write()` | **检查点**:是否校验扩展名、MIME、内容类型、文件名(路径分隔符)、以及保存目录权限;是否防止覆盖已有文件,上传可执行脚本(`.aspx`/`.ashx`)getshell |
| **反序列化**                   | `BinaryFormatter.Deserialize()`, `SoapFormatter.Deserialize()`, `JsonConvert.DeserializeObject()`, `LosFormatter.Deserialize()` | **检查点**:反序列化是否对不可信输入(Request、Cookie、ViewState、文件等)执行;是否使用不安全的序列化库(BinaryFormatter、SoapFormatter) |
| **任意文件读取**               | `File.ReadAllBytes()`, `File.ReadAllText()`, `Response.WriteFile()`, `Response.TransmitFile()`, `File()` | **检查点**:是否将用户参数直接作为文件路径输出或读取;是否存在未做路径合法化的文件下载接口。 |
| **路径遍历**                   | `Server.MapPath()`, `Path.Combine()`, `File.Delete()`, `Directory.GetFiles()` | **检查点**:路径拼接是否包含未过滤的用户输入;`Path.Combine` 后是否做规范化校验。 |
| **XXE(XML External Entity)** | `XmlDocument.LoadXml()`, `XmlDocument.Load()`, `XmlReader.Create()`, `DataSet.ReadXml()` | **检查点**:XML 解析是否启用了外部实体解析(DTD);是否解析来自不受信任来源的 XML。 |
| **SSRF**/远程文件下载          | `WebClient.DownloadString()`, `HttpClient.GetAsync()`, `WebRequest.Create()`, `HttpClient.PostAsync()` WebClient.DownloadFile()、HttpClient.GetStreamAsync()、HttpClient.GetByteArrayAsync()、WebRequest.GetResponseStream() | **检查点**:是否允许用户指定 URL 并由服务器发起请求;是否对目标地址做白名单或内部地址检测。 |   

5. **输出结构**(每个发现都要包含以下部分)  
   - 风险点名称  
   - 漏洞成因(为什么可能触发)  
   - 攻击面分析(攻击者可能会怎么尝试)  
   - 关键代码片段(只展示相关函数或方法)  

黑盒漏洞挖掘

个人观点

目前市面上大量工具打着AI 自动化漏洞挖掘智能分析攻击链路的旗号,看似很酷炫但本质上是在用通用 Agent 架构包装传统扫描器。大多数通过 MCP 将模型与各类工具(发包、爬虫、指纹识别等)连接起来,试图让 AI 自主探索、组合工具、推导攻击路径,看起来“智能”“自动化”,但在真实黑盒安全场景中,这条路线存在根本性的工程与成本问题。MCP会不断尝试调用工具,然后根据结果修正答案,这样的操作会导致token消耗爆炸产生高额的费用,整体ROI其实为负

因此我认为,AI 在黑盒场景下的正确打开方式,不是无限制 Agent + MCP 调工具而是针对场景去挖掘漏洞

目前对于SSRF、SQL注入这些探测已经很成熟了,因此我觉得未来方向应该着重于逻辑漏洞挖掘


1.黑盒安全不是“探索型问题”,而是“验证型问题”

黑盒漏洞挖掘的核心并不在于“能不能想到攻击手法”,而在于:

  • 请求是否真实命中业务路径
  • 返回数据是否具备越权或敏感属性
  • 漏洞是否可稳定复现、可被证明成立

2.MCP 在黑盒场景下看起来智能,后期成本指数级失控,最终只能靠人工兜底

很多黑盒 MCP 服务在 Demo 中看起来效果不错,但问题往往出现在规模化运行之后:

  1. 请求数不可预测,模型为了提高“理解度”,会自然倾向于多次发包、多角度验证,但每一次都是真实成本。
  2. 工具调用链不可收敛, MCP 允许模型自由组合工具,但攻击链并不等于漏洞成立,复杂路径只会带来更多误报。
  3. 误报无法自动止损, AI 很容易给出“疑似漏洞”的判断,而这些“疑似”最终都需要人工复现,成本极高。

3.黑盒 AI 必须是“场景化裁判”,而不是“自由探索者”

真正可落地的黑盒 AI,不是让模型“自己决定下一步做什么”,而是先由人或规则系统把问题压缩成一个最小可验证场景

也就是说:

  • 场景先被定义(如 IDOR、越权、未授权访问、信息泄露)
  • 输入、对照条件、请求模板全部固定
  • 模型只负责判断结果是否成立

IDOR越权

流程设计

目前对于IDOR越权需要对多个参数进行构造和分析,会耗费大量的时间精力,因此我觉得AI赋能这个场景具有比较大的可塑性

image-20251226185049132

实现效果

1.处理成标准的输入格式,burp导出数据包,右键选择save items

image-20251225184509517

自动解析处理成规范输入格式,在demo目录生成随机文件夹用于后续分析

image-20251226155418681

2.根据数据包中参数让ai判断是否存在可遍历性,可遍历性参数生成测试用例

【AI分析判定规则】
✔ 认为“可遍历”的参数:
- 纯数字:1、12、12345
- 明显自增 ID:orderId、userId、uid、id、page
- 数字 + 简单前缀后缀(如:10001、20002)

✘ 认为“不可遍历”的参数:
- 高随机字符串
- 明显 UUID / hash / token
- 大小写字母 + 数字混合、长度较长的字符串
  例如:hjk2bvadn、A9xPqL0Zk

仅对“可遍历参数”继续后续步骤。

image-20251226155757838

3.调用net/http库进行发包

image-20251226162713151

根据PII、参数分析等规则划分为高中低风险

image-20251229154323772

4.结束在前端展示,输出消耗token费用和耗时

image-20251226162525983

输出风险参数及测试用例数据包

image-20251226162630427

promot提示词
你是一名专业的 Web 安全测试与越权漏洞挖掘专家,请严格按照以下步骤对给定的数据包列表进行越权分析,不要跳步,不要假设结果。

【输入】
我将提供一批 HTTP 数据包(GET / POST 请求),每个数据包包含:
- 请求方法
- URL
- 请求参数(GET 参数或 POST body)
- 原始响应状态码
- 原始响应内容长度

【分析目标】
判断接口是否可能存在 越权漏洞(IDOR / BOLA / 水平越权 / 垂直越权)。

--------------------------------------------------
【分析步骤】

第一步:参数提取
1. 如果是 GET 请求:
   - 提取 URL 中的所有参数,例如:
     /api/xxx?aaa=1&bbb=abc
2. 如果是 POST 请求:
   - 提取 body 中的参数,例如:
     ccc=1&ddd=3
   - JSON、form、x-www-form-urlencoded 均需解析

--------------------------------------------------
第二步:参数可遍历性判断
对每一个参数的值进行可遍历性分析:

【判定规则】
✔ 认为“可遍历”的参数:
- 纯数字:1、12、12345
- 明显自增 ID:orderId、userId、uid、id、page
- 数字 + 简单前缀后缀(如:10001、20002)

✘ 认为“不可遍历”的参数:
- 高随机字符串
- 明显 UUID / hash / token
- 大小写字母 + 数字混合、长度较长的字符串
  例如:hjk2bvadn、A9xPqL0Zk

仅对“可遍历参数”继续后续步骤。

--------------------------------------------------
第三步:控制变量法修改参数
对每一个可遍历参数,单独进行修改,其他参数保持完全不变。
修改每一个参数生成一个测试用例,与原数据包进行对比

【修改规则】
- 数字参数:+1 或 -1
  例如:
  12345 → 12346
- 每次只修改一个参数
- 不同时修改多个参数

--------------------------------------------------
第四步:响应对比分析
对比【原始请求】与【修改参数后的请求】的响应:

重点关注:
1. HTTP 状态码
2. 响应内容长度
3. 响应语义是否发生变化

--------------------------------------------------
第五步:越权判定逻辑(核心)

【疑似存在越权漏洞】
满足以下所有条件:
- 修改参数后返回 HTTP 状态码为 200
- 响应内容长度发生明显变化
- 未命中任何权限拒绝关键字
→ 判定为:⚠️ 疑似存在越权漏洞(需要人工进一步确认)

【判定为不存在越权漏洞】
满足任意一个条件:
- 返回 HTTP 状态码为 403
- 或响应内容命中以下任一权限拒绝关键字(大小写不敏感):

(?i)permission\s*denied
(?i)access\s*denied
(?i)\bforbidden\b
(?i)unauthorized
(?i)not\s*authorized
(?i)not\s*allowed
(?i)no\s*permission
(?i)permission\s*required
(?i)insufficient\s*permission
(?i)insufficient\s*permissions
(?i)insufficient\s*privilege
(?i)insufficient\s*privileges
(?i)authentication\s*failed
(?i)authentication\s*required
(?i)login\s*required
(?i)not\s*logged\s*in
(?i)session\s*expired
(?i)invalid\s*session
(?i)invalid\s*token
(?i)token\s*expired
(?i)token\s*invalid
(?i)missing\s*token
(?i)jwt\s*expired
(?i)jwt\s*invalid
(?i)role\s*not\s*allowed
(?i)role\s*denied
(?i)authorization\s*failed
(?i)permission\s*check\s*failed
(?i)access\s*control\s*deny
(?i)rbac\s*deny
(?i)policy\s*denied
(?i)policy\s*reject
(?i)resource\s*access\s*denied
(?i)resource\s*not\s*owned
(?i)not\s*your\s*resource
(?i)resource\s*not\s*(found|exist)
(?i)record\s*not\s*(found|exist)
(?i)request\s*blocked
(?i)request\s*denied
(?i)security\s*policy\s*violation
(?i)access\s*blocked
(?i)\b403\b

→ 判定为:✅ 当前参数未发现越权漏洞

--------------------------------------------------
第六步:结果输出格式(必须遵守)

对每一个接口输出以下内容:

- 接口路径
- 请求方法
- 可遍历参数列表
- 被修改的参数及修改方式
- 原始响应状态码 / 长度
- 修改后响应状态码 / 长度
- 判定结论:
  - 「疑似越权漏洞」
  - 或「未发现越权」

如无法判断,明确说明原因,不要猜测。
模型费用对比及选择

通过多轮测试,在生成测试样例和判断PII数据准确率方面,各模型性能差异性不大,因此优先选择价格更便宜的模型model

测试下来,gpt-4.1-nano兼顾速度和费用优先选择小任务可以选择Qwen

模型 描述 单接口消耗(USD) 单接口消耗(RMB) 推荐指数
gpt-5-nano 付费最便宜,主要是慢,一个请求需要等待3-5秒,不建议 $0.82 美分 $0.057 人民币 ⭐⭐
gpt-4.1-nano 成本略高于 5-nano,但判断更稳,速度快,推荐 $0.91 美分 0.064元人民币 ⭐⭐⭐⭐⭐
Qwen 免费,速度快,但是限频1分钟60次,容易429超时,数量少可选择 ⭐⭐⭐

浏览插件自动化点击触发API

现在基于API测试越权已经实现了,要想实现全自动化挖洞还需要尽可能全的数据包,在甲方场景我们可以通过捕获流量重放去实现

在渗透攻防的场景下,如果需要人工一个个点击显得有点呆了,因此决定开发一个浏览器插件自动化触发button事件点击和提交表单

https://github.com/Pizz33/Xiadian_browser

image-20251230112252903

智能元素识别

通过 isElementVisible() 函数进行识别button等点击元素

function findClickableElements() {
  const selectors = [
    'button:not([disabled])',
    'a[href]:not([href="#"]):not([href="javascript:void(0)"])',
    'input[type="submit"]:not([disabled])',
    'input[type="button"]:not([disabled])',
    '[role="button"]:not([disabled])',
    '[onclick]',
    '.btn:not([disabled])',
    '.button:not([disabled])',
    '[class*="button"]:not([disabled])',
    '[class*="btn"]:not([disabled])'
  ]
动态内容监听
const observer = new MutationObserver(() => {
  if (isRunning) {
  }
})

observer.observe(document.body, {
  childList: true,  // 监听子节点变化
  subtree: true     
})
脚本注入与消息传递
  • 延迟等待机制,确保脚本完全加载后再发送消息
  • 通过 chrome.tabs.sendMessage 实现跨模块通信
startBtn.addEventListener('click', async () => {
  const value = parseInt(inputValue.value) || 1
  console.log('[Popup] 开始按钮被点击,输入值:', value)

  // 重置统计
  updateStats(0, 0)

  // 保存状态
  if (chrome.storage && chrome.storage.local) {
    chrome.storage.local.set({
      isRunning: true,
      inputValue: value
    })
  }
主处理流程
  • 定时执行机制:使用 setInterval 每 2 秒执行一次,控制操作频率
  • 去重处理:使用 Set 数据结构记录已处理元素,避免重复操作
  • 逐个处理按钮:每次只处理一个可点击元素,避免操作过快导致页面异常
function processPage() {
  if (!isRunning) {
    console.log('[自动点击助手] 未运行,跳过处理')
    return
  }

  // 1. 查找所有可点击的元素
  const clickableElements = findClickableElements()

  // 2. 查找所有输入框
  const inputElements = findInputElements()
  console.log('[自动点击助手] 找到输入框:', inputElements.length, '个')

  // 3. 处理输入框(遍历所有未处理的)
  inputElements.forEach((input, index) => {
    if (!processedElements.has(input)) {
      console.log(`[自动点击助手] 处理输入框 ${index + 1}:`, input)
      fillInput(input)
      processedElements.add(input)
      filledCount++
      updateStats()
    }
  })

  // 4. 处理可点击元素(每次只点击一个,避免过快)
  if (clickableElements.length > 0) {
    const unprocessedElements = clickableElements.filter(el => !processedElements.has(el))
    if (unprocessedElements.length > 0) {
      const element = unprocessedElements[0]
      console.log('[自动点击助手] 准备点击元素:', element)
      clickElement(element)
      processedElements.add(element)
      clickedCount++
      updateStats()
    }
  }
}

流程设计优化

在满足我们的需求后,我们还可以对流程进行调整节省消耗

  • 每个文件夹独立调用AI分析 ---> 统一收集所有参数,一次性AI分析
  • AI调用次数 = API文件夹数量 ---> AI调用次数 = 1(参数分析)+ N(PII命中时的响应分析)
  • 测试用例生成 ---> AI测试用例直接生成(+1/-1),不调用AI
  • 处理顺序:串行处理每个文件夹 ---> 处理顺序:并行处理多个文件夹

image.png

详细对比

阶段 旧流程耗时 新流程耗时 优化比例
参数收集 10秒 8秒 20%↓
AI参数分析 100秒(100次调用) 3秒(1次调用) 97%↓
测试用例生成 50秒(AI生成) 1秒(直接生成) 98%↓
测试用例验证 120秒 100秒 17%↓
AI响应分析 20秒(50次调用) 8秒(20次调用) 60%↓
总计 300秒 120秒 60%↓

Token消耗对比

类型 旧流程 新流程 节省
参数分析Token 150K 2K 98.7%↓
响应分析Token 50K 20K 60%↓
总计 200K 22K 89%↓

题目描述

地上有⼀个 m ⾏和 n 列的⽅格。⼀个机器⼈从坐标(0,0) 的格⼦开始移动,每⼀次只能向左,右,上,下四个⽅向移动⼀格,但是不能进⼊⾏坐标和列坐标的数位之和⼤于 k 的格⼦。 例如,当k 为 18 时,机器⼈能够进⼊⽅格(35,37) ,因为 3+5+3+7 = 18 。但是,它不能进⼊⽅格(35,38) ,因为 3+5+3+8 = 19 。请问该机器⼈能够达到多少个格⼦?

示例1

输⼊:5,10,10
返回值:21

示例2

输⼊:10,1,100
返回值:29

说明:[0,0],[0,1],[0,2],[0,3],[0,4],[0,5],[0,6],[0,7],[0,8],[0,9],[0,10],[0,11],[0,12],[0,13],[0,14],[0,15],[0,16],[0,17],[0,18],[0,19],[0,20],[0,21],[0,22],[0,23],[0,24],[0,25],[0,26],[0,27],[0,28] 这29种,后⾯的[0,29] , [0,30] 以及[0,31] 等等是⽆法到达的。

思路及解答

DFS(深度优先搜索)

深度优先搜索算法,也就是 DFS ,⾸先需要初始化数组,注意是 boolean 类型的⼆元数组。边初始化
边计算位数的和,判断如果⼤于等于阈值的话,就直接置为 true ,也就是已经被访问到(但是这⼀部分计⼊结果)。

然后遍历每⼀个元素,只要 i , j 不在合法的索引范围或者是已经被访问过,都会直接返回
false 。

否则的话,可访问的数量 +1 ,并且递归遍历上下左右四个元素,返回最终的可访问的个数。

DFS 会优先同⼀个⽅向,⼀直⾛下去,不撞南墙不回头,直到条件不满⾜的时候,才会回头。回头之后,每次只会回头⼀步,往另外⼀个⽅向去,同样是⼀头扎进去。

假设有⼀个 4 x 4 的⽅格,从第⼀个开始遍历,假设遍历顺序是上,右,下,左,那么遍历的顺序如下:

public class Solution {
    public int movingCount(int threshold, int rows, int cols) {
        if (rows > 0 && cols > 0) {
            boolean[][] visited = new boolean[rows][cols];
            for (int i = 0; i < rows; i++) {
                for (int j = 0; j < cols; j++) {
                    // 如果⼤于阈值,设置已被访问过
                    visited[i][j] = ((getSum(i) + getSum(j)) > threshold);
                }
            }
            return getNum(visited, 0, 0, 0);
        }
        return 0;
    }
    
   // 获取可以被访问的个数
   private int getNum(boolean[][] visited, int i, int j, int count) {
        if (i < 0 || j < 0 || i >= visited.length || j >= visited[0].length ||
            visited[i][j]) {
            return count;
        }
        count++;
        visited[i][j] = true;
        count = getNum(visited, i, j + 1, count);
        count = getNum(visited, i, j - 1, count);
        count = getNum(visited, i + 1, j, count);
        count = getNum(visited, i - 1, j, count);
        return count;
   }
   
    // 计算位数之和
   private int getSum(int num) {
        int result = 0;
        while (num > 0) {
            result = result + num % 10;
            num = num / 10;
        }
        return result;
    }
}
  • 时间复杂度:最坏的情况是将所有的格⼦都遍历⼀遍, O(m*n) 。
  • 空间复杂度:借助了额外的空间保存是否被访问过,同样为O(m*n) 。

BFS(⼴度优先搜索)

⼴度优先搜索,也就是没进⾏⼀步,优先搜索当前点的各个⽅向上的点,不急着往下搜索,等搜索完当前点的各个⽅向的点,再依次把之前搜索的点,取出来,同样先搜索周边的点...

这样直到所有都被搜索完成。

同样有⼀个 4 x 4 的⽅格,从第⼀个开始遍历,假设遍历顺序是上,右,下,左,那么遍历的顺序如下:

在上⾯的过程图示中,我们可以发现,访问是有顺序的,每遍历⼀个新的⽅块,都会标⼀个顺序,然后按照顺序遍历其四个⽅向。

这也就是⼴度优先搜索的本质,我们需要⼀个队列,来保存遍历的顺序,每次都从队列⾥⾯取出⼀个位置,遍历其四周的⽅块,每次遍历到的点,都会放到队列⾥⾯,这样直到队列为空的时候,也就是全部遍历完成。

import java.util.LinkedList;
import java.util.Queue;

public class Solution13 {
    public int movingCount(int threshold, int rows, int cols) {
        boolean[][] visited = new boolean[rows][cols];
        int count = 0;
        
        Queue<int[]> queue = new LinkedList<>();
        // 把第⼀个点加到队列⾥⾯
        queue.add(new int[]{0, 0});
        
        while (queue.size() > 0) {
            // ⼀直取数据,直到队列为空
            int[] x = queue.poll();
            // 取出来的数据,包含x,y坐标
            int i = x[0], j = x[1];
            // 如果访问过或者不符合,直接下⼀个
            if (i >= rows || j >= cols || threshold < getSum(i) + getSum(j) || visited[i][j]) continue;
            
            // 置为访问过
            visited[i][j] = true;
            // 数量增加
            count++;
            // 右
            queue.add(new int[]{i + 1, j});
            // 下
            queue.add(new int[]{i, j + 1});
       }
       return count;
   }
   
    // 计算位数之和
   private int getSum(int num) {
        int result = 0;
        while (num > 0) {
            result = result + num % 10;
            num = num / 10;
        }
        return result;
    }
}
  • 时间复杂度:最坏的情况是将所有的格⼦都遍历⼀遍, O(m*n) 。
  • 空间复杂度:借助了额外的空间保存是否被访问过,同样为O(m*n) 。

动态规划(最优解)

利用递推关系式,避免重复计算。

  • 格子(i,j)可达 ⇔ 数位和满足条件 ∧ (左边格子可达 ∨ 上边格子可达)
  • dpi表示(i,j)是否可达,基于左边和上边格子的状态:dp[i][j] = (digitSum(i) + digitSum(j) ≤ k) && (dp[i-1][j] || dp[i][j-1])
public class Solution {
    public int movingCount(int m, int n, int k) {
        if (k == 0) return 1;
        
        // dp[i][j]表示格子(i,j)是否可达
        boolean[][] dp = new boolean[m][n];
        dp[0][0] = true;  // 起点可达
        int count = 1;     // 起点已计入
        
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                // 跳过起点和数位和超限的情况
                if ((i == 0 && j == 0) || digitSum(i) + digitSum(j) > k) {
                    continue;
                }
                
                // 检查是否可以从左边或上边到达当前格子
                if (i - 1 >= 0) {
                    dp[i][j] |= dp[i - 1][j];  // 从上边来
                }
                if (j - 1 >= 0) {
                    dp[i][j] |= dp[i][j - 1];  // 从左边来
                }
                
                // 如果当前格子可达,计数加1
                count += dp[i][j] ? 1 : 0;
            }
        }
        
        return count;
    }
    
    private int digitSum(int num) {
        int sum = 0;
        while (num > 0) {
            sum += num % 10;
            num /= 10;
        }
        return sum;
    }
}
  • 时间复杂度:O(mn),双重循环遍历所有格子
  • 空间复杂度:O(mn),dp数组的空间

索尼宣布与 TCL 成立合资公司

1 月 20 日,索尼宣布与 TCL 电子签署意向备忘录,拟设立家庭娱乐合资公司。根据协议,TCL 将持有新公司 51% 股权,索尼持股 49%,该合资公司将全面承接索尼家庭娱乐业务,在全球范围内开展电视机及家庭音响产品的开发、设计、制造、销售、物流及客户服务;产品会继续沿用 Sony 与 BRAVIA 品牌。

索尼与 TCL 双方计划于 2026 年 3 月底前签署最终协议,新公司预计 2027 年 4 月开启正式运营。来源


Ayaneo 发布 Konkr Fit 掌机

1 月 20 日,Ayaneo 子品牌 Konkr 发布其首款 Windows 掌机 Konkr Fit。Konkr Fit 搭载 AMD Ryzen AI 9 HX 470 处理器,采用 Zen 5 架构与 RDNA 3.5 图形核心;屏幕由前代 Android 型号的 6 英寸升级至 7 英寸 OLED 面板;内置 80Wh 电池,容量规模高于 Legion Go 2(74Wh)及 Legion Go S(55.5Wh);操控方案包含霍尔摇杆、可调节触发器及双背键;机身顶部设有双 USB-C 接口,背面采用大面积散热进气口与外露螺丝设计,提供复古灰及黄色两种配色。

目前该设备定价与发售日期尚未公布。来源


红魔发布红魔 11 Air 等多款新品

1 月 20 日,红魔正式发布红魔 11 Air 及其电竞生态新品。红魔 11 Air 搭载高通骁龙 8 至尊版处理器与红芯 R4 自研电竞芯片,配备 LPDDR5X ULTRA 内存及 UFS 4.1 闪存,采用 6.85 英寸 1.5K 屏下摄像头全面屏,支持 144Hz 刷新率、2500Hz 瞬时触控采样率;同时搭载 2592Hz 高频 PWM 调光及 DC 调光方案,内置 7000mAh 电池,支持 120W 快充,散热系统由 24000 转/分的主动风扇和 0.5mm 的 VC 面板组成,机身还集成了 520Hz 游戏肩键与 X 轴线性马达。

红魔 11 Air

同场还发布了多款电竞生态新品,包括采用碳纤维机身、蓝宝石玻璃后盖及流金水冷散热系统的红魔 11 Pro+,搭载英伟达 RTX 5090 显卡、支持裸眼 3D 显示技术的红魔游戏本 16 Pro Golden Saga · 3D 探索版等。红魔 11 Air 售价 3699 元起,红魔 11 Pro+ Golden Saga 24GB+1TB 版售价 9899 元。

红魔 11 Pro+

另有红魔电竞平板 3 Pro Golden Saga 预计 1 月底发售,定价尚未公布。来源


智谱 GLM-4.7-Flash 模型发布并开源

1 月 20 日,智谱正式发布并开源 GLM-4.7-Flash 混合思考模型。该模型总参数量为 30B,激活参数量为 3B,定位为兼顾性能与效率的轻量化部署方案,目前已在智谱开放平台 BigModel.cn 上线并提供免费调用。在 SWE-bench Verified 与 τ²-Bench 等主流基准测试中,该模型的综合表现超过了 gpt-oss-20b 及 Qwen3-30B-A3B-Thinking-2507,在同尺寸级别模型中取得了开源 SOTA 分数。

GLM-4.7-Flash 主要针对编程场景进行优化,涵盖前、后端开发任务,并适用于中文写作、翻译、长文本处理及情感角色扮演等通用领域。随着新版本的发布,上一代免费模型 GLM-4.5-Flash 定于 2026 年 1 月 30 日正式下线,届时所有相关 API 请求将自动路由至 GLM-4.7-Flash。此次迭代通过提升逻辑推理能力与优化参数规模,旨在为开发者提供更高密度的智能服务支持。来源


Netflix 上线直播实时投票功能

1 月 20 日,Netflix 正式上线直播内容实时交互投票功能。该功能随选秀节目 Star Search 首发,订阅用户可通过电视遥控器或移动端 App 参与多选投票或星制评分,支持全球规模的实时票数汇总与限时截止,可实现观众对直播叙事进程的直接干预。

Netflix 表示,该交互架构此前于 2025 年 8 月通过《David Chang 晚餐秀现场》完成技术验证,并于 TechCrunch Disrupt 2025 大会确认全量推广。来源


微软 Copilot 推出 Real Talk 与视频生成功能

1 月 20 日,微软 Copilot 推出 Real Talk 交互模式,该模式旨在提供类人化且更具互动性的对话体验,引入了不同等级的深度思考和写作风格选项,支持查看思考和推理路径,具备长上下文记忆能力,沟通过程中会参考过往对话和用户背景,并适时表现出好奇心或针对逻辑矛盾主动提出反驳。

此外,Copilot 也在 Android 移动端测试视频生成功能,允许用户生成最长 8 秒、包含音频的视频片段。目前该视频生成功能的底层模型未知且处于灰度推送阶段,暂无强制订阅要求。来源


索尼推出《失落星船:马拉松》限定游戏手柄

索尼于 1 月 19 日宣布配合 Bungie 工作室 3 月 5 日发行的《失落星船:马拉松》游戏,同步推出两款限定硬件:售价 84.99 美元的 DualSense 限量版手柄及售价 169.99 美元的 Pulse Elite 限量版耳机。

DualSense 限量版手柄在设计上深度融合了《失落星船:马拉松》的游戏世界观,Bungie 设计团队表示,其目标是打造一款仿佛直接从游戏世界中取出的「真实物件」,为呼应游戏独特的工业美学与环境架构,采用了大胆的图形设计与鲜明的色彩搭配。《失落星船:马拉松》限量版 Pulse Elite 耳机则延续了与手柄相同的设计语言。来源


看看就行的小道消息

  • 消息源 LeicaRumors 于 1 月 19 日发布博文,称徕卡(Leica)计划于 2026 年 1 月 29 日发布首款 35mm 焦段的夜神(Noctilux)系列镜头 Noctilux-M 1.2/35 ASPH.,这也意味着该系列将首次推出 35mm 人文焦段;曝光的谍照显示,Noctilux-M 1.2/35 ASPH. 延续了徕卡经典的工业设计语言,镜身采用相对紧凑的铝制外壳,饰以标志性的黄色刻度读数,值得注意的是该镜头配备了固定式遮光罩,用户需通过旋转动作将其旋出使用。来源
  • 1 月 20 日,三星在官网发布并随后撤回了 Bixby 的升级公告,根据该公告,新版 Bixby 将深度集成 Perplexity AI 以实现基于 Web 的自然语言实时问答与信息检索,同时引入新的设备代理架构,支持识别非特定指令意图并自动触发对应系统设置。新版助手将随 One UI 8.5 Beta 项目开启测试,并计划作为 Galaxy S26 系列手机的核心预装功能发布。来源


少数派的近期动态

我们正在优化并改进新的首页版式,如果你在使用过程中发现了任何问题或者有改进建议,请通过反馈表单告知我们。首页反馈收集


你可能错过的文章


> 下载 少数派 2.0 客户端、关注 少数派公众号,解锁全新阅读体验 📰

> 实用、好用的 正版软件,少数派为你呈现 🚀

    欢迎试玩 👏 https://aeriszhu.com/interlocking-puzzle/ 可以说一下游戏反馈怎么样,下面是一些截图和 gif 。









    备注:仓库在 https://github.com/anig1scur/interlocking-puzzle

    备注:所有 Puzzle 数据来自于 https://github.com/Linsanity81/High-LevelPuzzle/tree/main/puzzle 感谢


    补充一个操作手册:

    拖拽:旋转视角
    双击:选中 piece
    拖拽高亮的 piece / 方向键 + WS 键:拖拽 piece
    空格:进入透视模式
    R:重置