305
社区成员
发帖
与我相关
我的任务
分享JML 是把需求写进代码的契约语言。它依赖javadoc注释,而是可被理解与验证的行为边界:
对我而言,规格驱动开发最大的价值是:根据课程组的官方包理解需求,让我在写代码之前就把必须成立的条件搞清楚。
JUnit 的核心作用是把规格转化为可反复执行的断言。我的经验主要有以下几点:
这三次迭代在代码里主要有容器变化,功能新增,计算口径变化三个方面:
hw9 是最基础的社交/视频模型:Network 用 ArrayList 维护用户与视频,getUser/getVideo 都是线性扫描。User 的“待看视频”是 ArrayList,Video 只有 id 与 uploaded。
hw10 的核心变化是“数据结构升级 + 功能扩展”:Network 改为 Map 存储用户/视频,避免线性查找),新增类型校验与视频类型字段。功能上补齐了观看、点赞、投币、转发、评论、清理垃圾评论与“最热视频”等接口,以及“勋章购买”“最长下降序列”两个新需求。User 侧新增 coins、watched/liked、contributor/medal 等结构,Video 侧新增热度、评论与 KMP 清理逻辑。
hw11 的重点是“推荐与画像”:upload 时记录上传者的视频集合,User 侧新增 watchedVideos/uploadedVideos 与类型计数,支持兴趣、影响力、画像与评分计算。Network 新增全局最佳贡献者、视频推荐、Up 推荐与影响力查询。另外热度计算公式也从 hw10 的 double 权重改为 hw11 的整数权重。
这类变化我主要靠两种方式发现:一是对比新增/修改接口,二是“找容器/计算口径变化”。比如 users 从 ArrayList 变成 Map、receivedVideos 从 ArrayList 变成 Deque,这些变化往往意味着复杂度与语义都在变。
这三次作业隐藏的要求就是算法时间复杂度在O(n^2)以内,否则强测会出现超时问题,性能相关的变化在这几处最明显:
Map 以降低查找复杂度。ArrayList 变为 Deque,配合头插更自然,也避免频繁的整体移动。我最容易出 bug 的点主要集中在“重复元素处理”和“新统计口径”两类:
receivedVideos 的删除逻辑:hw9 只删除第一个命中,在 hw10/11 我改为删除所有出现以贴合“已观看视频不应再出现”的语义。这类 bug 本质是对“重复性”的理解不够严格。这次活动让我直观感受到“规格传递时的信息损耗”:
如果未来多人协作,我认为需要:
这会显著降低团队成员之间的信息差。
在 Unit3 使用了大模型GPT-codex5.2的agent模式辅助,我的体会是: