中望软件-实习那些事

中望软件-实习那些事
小米里的大麦中望软件 - 实习那些事
前情提要:中望软件这家公司非常不错!我感觉员工幸福度很高!然后为什么我的实习记录相比陕西天权更少和更精简?我想……应该是因为:在中望的任务比较单一,很长时间都在做一件事或者相关的事,而陕西天权隔几天任务就会变,相对来说,任务是丰富多彩且有趣味的;再者就是,在中望每周四上午都会固定地开组会/周会,我直接修改“周报记录”变成实习记录会省力,哈哈哈哈~ 但其实在中望经历的远不止这些!
2026.07.23 - 2026.07.24
入职当天第一件事就是认识同事和公司,HR 小姐姐会带着我一一介绍公司各个部门和角落,而部门领导叶博士会带着我和每一位同事相互认识。然后就被拉去开组会了?说是让我先熟悉熟悉,这也是第一次经历这么专业、正式的场景,确实让我大开眼界……因为刚刚入职中望,没有派什么活,主要就是以熟悉项目、熟悉流程为主,按照要求把基本环境搭建起来:把 ZW3D 的源码拉下来并且能编译运行起来。该说不说,这个 ZW3D 的源码拉取、编译、运行是真的慢,代码体量也是真滴大,差不多有 86GB 左右。
2026.07.27 - 2026.07.31
这周正式开始干活。ZW3D 的模块分层结构记录在一个叫 Zw3dArch.yaml 的配置文件里,分得比较大块,我的任务就是将这个 yaml 文件进行拆分,使其分的更细一些,方便后续按需读取。前端的这个看板也归我管了,我对其 chunks 的展开逻辑做了初步修改:展开效果做了两个版本,垂直展开已经有 commit 记录备份,水平展开是当前生效的效果。同时我还修了一个小 bug:前端点击层级图的标签会导致其中一层的背景变色。
同时,因为上周入职时 2 个实习生 3 个月的实习到期就离职了,所以我接手了他们的扫描工具。主要是头文件扫描工具,它主要是找出 C++ 代码里没被真正用到的头文件和多余的宏定义,然后安全地清理掉 —— 头文件之间互相包含,删错了直接编译不过。我也在逐步熟悉冗余头文件、宏等扫描工具的检测和删除流程。
这周还留了两条备注:
- Todo(代办): 等方案拍板后,对层级图的前端展示、yaml 的压缩与拍平做针对性优化和修改。
- Think(思考/想法) :项目里存在不少 Python 代码,其使用的是系统级环境,是否可以替换成 uv,并使用虚拟环境。
2026.08.03 - 2026.08.07
这周胡老师给出了最新的 yaml 文件格式要求,主要是给分层结构加上了 领域(domain) 这一维度,我按照新的规范和要求对其进行了更新,并同步更新了对应的 Python(Flask)解析代码 —— 数据格式一变,解析该 yaml 的代码也要跟着改。同时,也做了前端层级图的修改,以及搜索框的功能实现和优化。层级图做出来和胡老师画的简直一模一样 😎,嘿嘿嘿~
搜索框不光要能搜索,它还要做到和浏览器自带搜索一样的性能,还得对各种边界情况和其他功能权限做权衡适配。噢对了,这个层级图的超级无敌适配算法也是我做的,它可以适配任何场景和大小的屏幕,都能达到一个非常好的效果,看似简单,实则一点也不容易,他需要考虑每一个单元格不同数量的 chunk 数,还要考虑展开、屏幕变化等的挤压效果和排版位置。
头文件扫描工具也在使用了几天,识别并移除了许多冗余头文件。
2026.08.10 - 2026.08.14
2026.08.10 是难忘的一天,因为今天是我在中望的第一次但也是最后一次请假。为什么呢,因为我住在上海的江边上,直面台风(好像叫 “白海豚”?),内陆人没见过台风,第一次经历台风真是开了眼了:伞是撑不开的,浑身是湿的,路是看不清的,地铁是关闭运营的,害得我起了个大早跑到地铁口,变成落汤鸡再回去 🤡。
回到工作,这周主要在做层级图的交互。新增 了 chunk 的一键展开和折叠的按钮及其功能、快速隐藏层级功能的实现,还有跨层级 chunk 的 跨层联动效果 —— 这个是我改的最多的,中间改过很多版都说不是想要的效果,来回拉扯了好多轮才终于对上他们心里那个 “感觉”。优化 方面,把 “快速隐藏层级” 和搜索框、跨层 chunk 结合到了一起:已经隐藏的层级不会被搜索框搜到,同时提升了搜索性能,界面上是肉眼可见的实时更新,不再会感到有延迟;如果跨层 chunk 涉及的层级里有被隐藏的,那就不触发跨层效果,也处理了这种情况下穿模的相关问题。说白了,单独做哪个功能都不难,难的是让这三块 “认识彼此”,谁变了另外两个都得跟着让路。
2026.08.17 - 2026.08.21
拿到一个新的模块图页面的原型图(设计稿)进行实现,要求实现节点之间的上下游依赖连线,并提供接口供其他系统使用等其他几个要求……幸不辱命,后端 API 均已实现并沉淀出接口接入文档,链接与筛选器双向同步 —— 两边状态互相跟随,改一边另一边跟着变。
听其他的实习生说,中望是 2026.07 才开始拥抱 AI 进行赋能,也就是刚用上 AI 几天后我就入职了。他们甚至还专门弄了一个 硅基加拉帕戈斯,虽然我不太懂什么意思,但是感觉 这很有趣,而且能看出来他们很积极的在使用 AI,甚至还有 token 使用排行榜 等既专业又有趣的东西,比如:你可以在这里 许愿求助 什么的~ 每个人都可以编辑(包括实习生),很自由,毕竟中望给我的感觉就是:自由、轻松、可以大胆创新……
中望的定制化似乎很强,比如:深信服定制的瘦终端式 源码机 办公,再比如定制的 CC-Switch。但其实在这个出现之前,我一直在用他们定制的 Firmior AI,非常像 opencode 二次开发而来的,也不知道为什么不喜欢用开源的,害~
2026.08.24 - 2026.08.28
对模块依赖图页面增加了按列(domains,也就是业务领域)筛选节点,绘制按钮的 UI 做了突出处理,无限画布的图例关联更新、箭头指向优化,导出 svg/jpg 增加了标题、导出时间、图例的显示。到这里,看板这块阶段性收尾。看样子似乎比较简单?其实不然,这个过程需要对一个功能做很多次迭代和修改,因为需求一直在变,或者就是实际效果并不好,一直在优化……
完成后统计下来是 8 个工作日(8/14–8/25)、17 次提交、13 个文件,累计新增 3,000 多行、净增约 1,200 行;另外交付了 170 行 API 接入文档,清理了约 700 行前人遗留的废弃实验文件。
这块是接手同事(前面的实习生)已有的框架做的 —— 他们之前已经完成了全局变量看板、矩阵页和趋势页,模块依赖图这块基本是空的,只有一个 API 路由雏形,所以我主导完成了模块依赖图和矩阵视图的前后端。技术上还做过一个取舍:本来可以用 Graphviz 自动画图,最后改成手写 SVG,主要是因为这张图需要固定的架构分层布局、要在网页上直接绑交互(SVG 就是 DOM,事件天然好绑),顺带也避开了服务器部署 Graphviz 和中文字体兼容的问题。
2026.08.31 - 2026.09.04
叶博士跟我说有一个 挑战性 的任务需要我支援一下总部那边,于是我的工作重心转到 Clang 静态分析规则上了。这周先是对之前的前端看板做了 bug 修复:“仅依赖节点” 按钮不受自定义节点约束、每次都展示全部节点,这个仅依赖的问题已成功修复。
剩下就是难受的解引用规则识别了,进度 64/1306。一共有 1306 条候选告警,需要我人工去逐条处理,判断它到底是真的问题,是误报,是存疑,还是其他问题,如果是真问题还需要对 ZW3D 源码进行改动,但是改动比较简单,其实就是做边界判断,提前对边界进行判空。这里解引用就是通过指针去访问它指向的对象(*p、p->x 这种),而这条规则具体盯的是 ZW3D 里的 ZwRef 无效引用检查,也就是智能指针的悬空引用问题。工具只能先把代码里所有可能出问题的解引用点扫出来,静态分析结果可能受宏、条件编译、传递包含、构建配置影响产生误报,不能直接当结论用 —— 所以才需要人一条条过。真是一个非常有挑战性的任务,主要就是很费事费力还费眼睛 😅。过程中,我也沉淀出一份避坑文档到 ZWiki 😁。
2026.09.07 - 2026.09.11
继续推进解引用规则识别,进度 501/1306,一千多条告警一条条点开看、分类、记录,眼睛是越来越费了。同时开始根据中望内部文档(ZWiki)学习 clang-tidy,准备进入解引用规则的开发优化。简单说,clang-tidy 是 LLVM/Clang 生态的代码检查框架,可以自己写规则做团队专属的检查,我后面做的两族检查器也都是挂在它上面统一调度的。
上图是 ZWiki 的部分截图(关键部分已打码或剔除),不得不说中望的内部资料还是非常齐全,规则流程什么的非常规范!
2026.09.13 - 2026.09.18
ZwRef 规则集编写。ZwRef 是 ZW3D 团队自研的强引用智能指针,用错会访问到已失效的对象。修复前误报率 65%–70%,修复后工具误报率 23.2%;由于情况复杂,当周按经验估算的真实误报率在 35% 左右(区间约 30%–45%,差异主要来自 r_controlflow 类判定的不确定性和业务差异)。
这里说明一下:35% 是当时的一个过程估算,23.2% 才是最终工具实测的最优结果。ZwRef 检查器是接手团队半成品后完成的,团队目标是误报率压到 40% 以内。再补几个数字:ZwRef 规则集累计约 3,100 行 代码,覆盖 323 条 告警;其中针对 dynamic_ref_cast 相关问题的修复一次性就消除了 594 个 误报,另外是对全量 25,498 个翻译单元扫完之后初筛出来的疑似问题。
前端看板方面,根据新要求继续完善和优化,模块依赖图页面布局重构。
2026.09.20 - 2026.09.24
模块依赖图页面:彻底修复了仅依赖节点状态下的游离节点(悬空、没有连线的节点),修复后所有节点都存在连线;并新增了自适应按钮及其逻辑。ZwRef 规则集暂时完成,开始编写针对迭代器的规则。最初误报率是 100%,经过 14 轮迭代后,误报率来到 77.5%,由于情况复杂且以最坏、最严格的口径评估,实际误报率估计在 65% 上下,甚至更好。
2026.09.20 收到了中望的 中秋礼品~ 每个人都有!包括实习生!大概是 4 个月饼、2 个杯子和 2 个户外折叠椅,听说他们端午有发帐篷什么的,看到 望事通 的评论有说想要鱼竿的 🤣,好家伙,看样子这是发了一套户外露营/野炊的装备 👀?
2026.09.24 举办了 中秋活动,零食、饮料、猜灯谜、投壶、抽奖赢礼品等全上了,让我没有想到的是,这场活动中我成了小赢家 😎,抽到了 100 元整!哈哈哈哈~
在中望不仅节假日会有礼品活动什么的,每周还会有球赛,生活中偶尔还会存在各种小惊喜,比如:有人过生日,会有前台小姐姐递来的蛋糕水果;有同事的关系和多点的饮品……最值得说的就是 望事通,里面既有日常也有工作:
- 健身百日打卡的各种视频/照片
- 二手回收/攻略/建议/仙人指路
- 海外和客户的战略性成果记录/销冠记录
- 中望美食推荐
- 各种视频课程
- ……
2026.09.28
今天,我正式离开了中望,下班前,提交了最终版:19 次迭代,终于将迭代器检查器的误报率从 100% 降低到了 38.27%(< 40% 达标),同时修复了前端看板复发的一个小 bug。
这个检查器是我从零开发的,针对的是 ZW3D 里两类真实发生过的崩溃写法:对空序列容器调用 front() / back(),以及 find() 后没判断 != end() 就直接 erase()。做法上先用轻量的语法规则实现,之后升级为路径敏感的检查器——把容器状态建模成空、非空、未知三种,状态跨调用、跨函数保持。
最终 50 处已确认真实缺陷全程稳定检出、零回归,告警位点从 1,121 收敛到 687,定向抑制了 134 个证据充分的误报点位。中间修掉了三个根因级问题,注意不是压阈值、也不是堆特例,而是修分析器本身的建模错误:早期在误报点直接抑制告警会 “污染” 分析路径,改成先生成告警、报告期再过滤后,位点从 1,121 收敛到 694;size() != 1 + 符号 这类守卫存在无符号数回绕语义,在分支条件上证明快照非负可排除误解,位点到 691;花括号 std::initializer_list 构造建模缺失,识别该构造并统计元素数后,位点到 687。
这套 “名单式抑制”(在出报告时过滤已确认的误报,不影响分析过程本身)加上逐位点的审计,是我这么多轮迭代下最花心思的一个设计:抑制必须发生在报告层,不能发生在探索层,否则分析器会以为那条路径没问题,可能探索出根本不存在的状态。听起来是小事,但它直接决定了这个工具可不可信。





















