无名小厂,流程不规范,一般都是自己 own 一个项目,开发&上下线,QA 参与度不高。
跟他共事快 2 年,他离职后交接了 2 个项目给我,另 1 个项目给其他人
他交接给我的一个项目,是给其他团队输出数据的接口,对面的人大概每隔 1 、2 周来找我说没数据了,我不知道他在的时候是怎么维护的,这个项目在我这里不算重要而且事情也确实太多没精力细察,每次来找就重启一下。后来干脆搞了个定时重启,再没来找过了。
另一个项目是 toc 的,有一天突然没数据了。后来经过一番检查,发现他在项目里面有一些这样的设计和实现:
var lk sync.Mutex
done := make(chan struct{})
go func() {
lk.Lock()
go func() {
select {
case <-time.After(3 * time.Second):
case <-done:
}
lk.Unlock()
}()
// 处理数据
done <- struct{}{}
}()
一旦处理数据超时,就 hang 在发送 done 信号那里,导致 goroutine 数量缓慢增加,直到触发他设定的阈值。更绝的是这个问题短期内不会暴露,压测的时候资源给的也很足,没有发现。实际上线的时候,长时间运行下来导致这个问题最终暴露,拉长监控面板一看内存占用真是稳步线性增长。
近日又发现项目依赖的 db 总是高水位报警,昨天链接上去看了下,发现所有的表没有索引,而程序需要定时对表进行 select 、insert 、update 等操作。拉长面板到 90 天范围一看,占用率也是缓慢线性升高
如何评价?别有用心还是真的就这水平。我估摸着让我来写,大概率是写不出这个不定时炸弹的。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.