给项目代码埋坑有哪些办法?

2023-09-22 01:37:36 +08:00
 shmilypeter

如何在项目中埋当时不会发作,离开了一两个月之后会逐渐发作并且还很难排查的 bug 呢?

初步想到几个

后端

数据库

欢迎各位 V2EXer 补充,仅仅用作技术探讨,于此同时也可以避免 bug

12428 次点击
所在节点    Java
166 条回复
xd314697475
2023-09-22 20:44:36 +08:00
命名的时候名称与含义无法匹配
多用线程,什么都可以多线程
降级策略里引导高 cpu 内存占用操作保证无法降级
GeekGao
2023-09-22 21:56:01 +08:00
多用一些反模式,然后留下看似“正确”实则胡说八道的注释。
变量命名尽量用英文缩写,例如把 userLoginToken 写成 uLT
尽量把代码加到某迷之功能的大函数/方法内,例如:do_all_login
尽量别考虑时区、语言等环境因素一律使用北京时间、中文简体作为基准
ThinkCat
2023-09-22 22:10:03 +08:00
请尽情使用设计模式,觉得好像能套,就都用上,硬搬硬套,要多抽象有多抽象
olaloong
2023-09-23 00:03:19 +08:00
多用设计模式+1
工厂策略责任链模板委派观察者一起怼上去,层层嵌套,极尽抽象。既能增加复杂度,又能锻炼自己运用设计模式的能力,问起来还能说是优化。
之前接受的一坨模块就这样,生产出现问题不把参数捞本地 debug 一下都不知道走到哪去了。看似高度抽象可扩展实则 protected 从上到下从里到外,改点东西牵一发动全身,哪哪都改不动,绝妙的平衡,最后被迫在外面又包了一层。
nexo
2023-09-23 00:28:42 +08:00
变量把英语变成拼音而且是多音字那种
n18255447846
2023-09-23 02:38:32 +08:00
我已经被公司坑过一次了,所以以后写代码都会留个心眼,复杂逻辑随便写,凡是涉及数学运算的全用位操作符
duron600
2023-09-23 09:17:59 +08:00
哈哈哈伪装?太高看自己了。
boobo
2023-09-23 09:49:53 +08:00
这对大伙儿很有用...
evilman
2023-09-23 10:25:18 +08:00
其实有个很简单的方式,结合前面各位老哥说的,用一个=号啊,把&& 换为 & 巴拉巴拉 就一堆 很容易粗心犯的错误 配合 格式化模板(一般格式化代码都有模板配置的),你一次提交一大批这种新模板格式化的文件,很慢被发现,也很好留坑
twofox
2023-09-23 10:47:47 +08:00
@zhousir5071 格局?华为能让员工进去 251 ,还得不到任何的赔偿和道歉。

作为一个小员工,我做的再差,也是付出了劳动的,你给我发工资不是应该?
你公司开不了,有的是人开

创业阶段讲的就是同甘共苦,等发财了,就是卸磨杀驴了
jackOff
2023-09-23 11:07:48 +08:00
1-大量使用循环和递归,访问量不多的情况下看不出问题,访问量上来了,cpu 会因为无法及时释放内存占用最终直接堆内存溢出。
2-大量使用第三方插件,比如 lombok 这种,一方面简化代码显得代码写的很简洁优美,一方面把这玩意的通用隐患继承下来
3-假借线程安全过量使用大量的读写锁,写个死锁或者数据不一致也很难查出来,尤其是数据不一致
4-多使用注解,尤其是定时任务、autowired ,一般出问题这种排查很难查出来,最好把 autowired 那几个兄弟都拿过来使用,尽可能把代码无限复杂化,让后人根本不敢随便动
zxCoder
2023-09-23 11:36:36 +08:00
多封装
Jirajine
2023-09-23 12:24:35 +08:00
最简单最可靠的:data race 。
尽可能的引入 data race ,难以发现,难以排查,影响非常隐蔽,排查到了也不用承担法律责任,无法认定成主观故意。
像是什么订单、事件随机性的 10 条入库丢失一两条,或者关联到错误的条目,等用户报告发现了自己的账号里出现了别人的数据或者丢失也无法挽回,因为整个业务数据库都是被污染了的。

这是在坑害其他打工人?错,这是在提高总体的需求工作量,反而是在制造更多岗位、缓解“你不干有的是人干”的现状。
skiy
2023-09-23 13:40:40 +08:00
不敢苟同这么多人这种心理。不知道有没有人搬运下本文到 reddit 。看看老外怎么评的。
zhousir5071
2023-09-23 14:20:58 +08:00
@twofox 在职的时候,能合作就合作,不合作就该赔偿赔偿该离职离职,用得着干这种背后见不得光的事情吗?我想表达的意思是,要光明正大,不要背后搞小动作。
twofox
2023-09-23 15:04:30 +08:00
@zhousir5071 那你格局可太大了,我就说一个事情,你开人的时候会主动给 N+1 走人吗?

你能爽快给,平时没有 PUA 员工,也没有压榨他,他能给你挖坑吗?

你能给,OP 的老板就能给吗?
sordidclown
2023-09-23 16:22:51 +08:00
按楼上说的,逻辑写复杂一些。
提供几个思路:
1. 闭包内套高阶函数再在闭包内调用;
2. 如果语言允许,产生迭代器的迭代器,再在迭代器中调用;
3. 多个 stream 流套起来,最好是什么 map, filter, reduce 写成一行;
4. 猴子补丁打起来;
多用些语言的边角料,或者一般生产用不到的语法特性,总之多用些书里明确劝你不要用的。又能练手,出了事还能说与我无关。埋坑不一定要自己埋,守株待兔也是种方法。
vivisidea
2023-09-23 19:25:59 +08:00
没必要

而且,老哥这么自信么,说不定在后面接手的人里,你现在用心写的代码就已经是坑了……
KENNHI
2023-09-23 21:51:18 +08:00
刻意破坏不如浑然天成的愚蠢。
我说几个。
①把表数据抽出来用嵌套循环 if else 筛选数据。
②在 sql 语句疯狂嵌套子查询,并在能加动态 sql 的地方加上动态 sql ,把一个业务需求都扔进一条 sql 里面写 500 行并且不加注释。
③什么异步代码看不明白也不知道怎么调,设置定时器等待 500ms 执行下一个函数。
④试图将 4000 万条数据抽出来放到内存里让程序逐条处理业务逻辑。
⑤选择没什么人用的冷门或者闭源商业框架,等待 10 年后整个项目必须全部推倒重来。
zhangxzh
2023-09-23 22:15:40 +08:00
这得看你的级别能不能自己决定自己使用的技术
例如用一些其他人不熟悉的语言实现一个服务:
我用 C++写 web 后端
我用 kotlin 写 spring 的服务, 并且用的全是异步的 Reactive 风格

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/976027

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX