如何在项目中埋当时不会发作,离开了一两个月之后会逐渐发作并且还很难排查的 bug 呢?
初步想到几个
欢迎各位 V2EXer 补充,仅仅用作技术探讨,于此同时也可以避免 bug
1
kkk9 2023-09-22 02:10:26 +08:00
与其这样惹上官司不如直接删库跑路
|
2
shmilypeter OP @kkk9 如果你想踩缝纫机,删库跑路是最快的方式,并且,也没什么用。
代码有版本控制不可能删掉,数据库大概率有备份,如果买的 RDS ,binlog 的备份粒度很可能是五分钟,你全库 drop 毫无损失。至于服务器,如果也是买的 ECS ,那肯定是有快照的。 |
3
ufo5260987423 2023-09-22 03:04:10 +08:00 4
讲个门槛高一点的:用元编程的思路写某一类业务——即给业务写一套 DSL ,然后把 DSL 的高阶逻辑做成宏的形式。这样在后面的开发中难免触发死循环还不好找死循环的原因,笑。
|
4
jatsz 2023-09-22 06:50:07 +08:00 4
根据我调试的经验:
1. 能上多线程,就上多线程。 2. 能搞分布式(微服务), 就搞分布式. 3. 按自己爽的方式写代码, 完全不考虑性能因素, 比如用一些高阶函数, 类似 <a list with few items *at first*>.foreach, x.map, etc. |
5
jatsz 2023-09-22 06:51:25 +08:00 2
再加一条:
4. 增加依赖, 为了一个排序, 引入一个科学计算库. |
6
chaoschick 2023-09-22 06:52:58 +08:00 via Android
switch 分支中少些几个 break
|
7
levelworm 2023-09-22 07:26:37 +08:00 via Android
用不安全的方式加几个 exploitation
|
8
yougg 2023-09-22 07:38:27 +08:00 via Android
不要直接在经过你手的代码上动歪心思,commit log 追根溯源始终能找到你。
-然而你可以试试供应链攻击- |
9
murmur 2023-09-22 07:41:11 +08:00 34
加班写出来的代码不需要任何技巧全是坑
|
10
wonderfulcxm 2023-09-22 07:45:41 +08:00 via iPhone 1
最重要的是有理有据,让人看不出你是故意的。😂
|
11
laohucai 2023-09-22 07:57:45 +08:00 1
多依赖一些已经停更的第三方库就可以了!!
|
12
muooOOO 2023-09-22 08:00:47 +08:00 via Android 3
不用刻意添加,平时写出来的代码已经遍地都是坑了。
|
13
ruanimal 2023-09-22 08:03:06 +08:00
把所有新特性都用上,数据结构和算法都往复杂了搞,接口多封装几层
|
14
xuanbg 2023-09-22 08:07:14 +08:00 2
只要是复杂的逻辑不写注释,估计连你自己过几天都不会了。。。还要踩什么缝纫机
当然,像我这样容易把复杂逻辑写简单的,就得刻意去做了。嗯这确实有点难度啊。。。不如随便找个能把简单逻辑写复杂的人替我写一下,这种人才我可以一抓一大把。 |
15
Dispatcher 2023-09-22 08:13:17 +08:00 9
我一般是相信自己的实力,正常写代码就行。肯定都是坑。
|
16
dangyuluo 2023-09-22 08:14:04 +08:00
写汇编
|
17
chingyat 2023-09-22 08:27:28 +08:00 via iPhone
单线程的程序改成多线程,并且不加锁.
|
18
SomeBodsy 2023-09-22 08:29:28 +08:00 23
正常发挥就行了,不用刻意
|
19
cookii 2023-09-22 08:32:56 +08:00 via Android
最恶心的还是搞多线程,用事件去触发,把代码调用链路断开。
|
20
Aboceder 2023-09-22 08:34:12 +08:00
@chaoschick 你这在测试那一关就过不了吧
|
21
jadelike 2023-09-22 08:34:53 +08:00
我一般是相信自己的实力,正常写代码就行。肯定都是坑。
|
23
miniliuke 2023-09-22 08:35:03 +08:00
写一些超出自己能力的偶发 BUG 代码:比如随便写个无锁并发容器、写个算法依赖时间增长的一旦机器时间自动同步程序就会出错。利用一些编程中容易混淆的错误:比如队列写入操作用数据满了直接返回 false 的方法导致丢数据、故意不处理一些可能出现异常的地方、多线程使用线程不安全的容器
|
24
gbw1992 2023-09-22 08:35:47 +08:00 1
你正常写就行了
|
25
chendy 2023-09-22 08:41:14 +08:00
一般程序员正常拉屎就能把后人恶心死了,不用多想
|
26
andytao 2023-09-22 08:42:38 +08:00 2
希望楼主记住这句话:玩火者,必自焚。
你觉得工资和你的能力不匹配就换一家跟你匹配的嘛,真没必要故意搞这些事情。 作为员工,要有老板(主人翁)意识:努力推进工作、思考创新解决办法,提升产品价值,一起做大蛋糕。 |
27
cslive 2023-09-22 08:45:32 +08:00
|
28
twofox 2023-09-22 08:46:14 +08:00
上传修改过的工具库 jar 包到私库
多用存储过程 |
29
angryfish 2023-09-22 08:47:03 +08:00
多引入一些自己的私有工具库。
|
31
zh584728 2023-09-22 08:47:34 +08:00
1. 搞特殊的版本:用新特性 或者 用旧的已经被遗弃的特性
2. 增加依赖,用一些不知名的模块 |
32
zjp 2023-09-22 08:48:25 +08:00 via Android 1
正常发挥就行
|
33
tedzhou1221 2023-09-22 08:49:05 +08:00 1
@cslive 我们公司的人日常都是 List<Map> 梭哈,这样公司就不能没有我们。哈哈
|
34
chaoschick 2023-09-22 08:51:25 +08:00
@Aboceder 既然我我说了这个例子 自然是在生产中遇到过
|
35
wu67 2023-09-22 08:52:23 +08:00
把代码写得尽可能多或者尽可能少, 然后不写注释, 神仙难救.
|
36
joyhub2140 2023-09-22 08:56:59 +08:00 1
不用埋坑的,你把所有听说过的中间件往项目里面塞就行了,项目到最后没有多少人能接过来,知识量太大了。
你还获得高高手得称号,这不美哉? |
37
Mystery0 2023-09-22 08:58:52 +08:00 via Android
如果,自己没有离职,然后这堆代码线上出了问题,造成大的损失是不是后面要自己把这些坑一一填好?或者直接强行毕业没赔偿?
|
38
bruce0 2023-09-22 09:01:34 +08:00
说一个 go 的, 返回一个 `var err *T` 这样的 error, 快的话,可能一眼就找到了,慢的话可能排查一天也查不出来, 尤其是在 多层函数调用的嵌套里
|
39
chenPiMeiHaoChi 2023-09-22 09:03:16 +08:00
26 楼什么情况,一时分不出认真的还是反讽?
|
40
Promtheus 2023-09-22 09:05:25 +08:00
我觉得这是个有趣的想法,虽然看上去不太道德。但是往往资本家对你不道德的时候,又没人站出来了。
|
41
Promtheus 2023-09-22 09:09:26 +08:00 1
不过你这几个方法太刻意了 ,一下就查到了。要装的像是自己菜导致的,而不是故意这么写。我觉得比较简单的方法就是搜集下公司历年出的问题,然后照着写。一般这种问题都是运行好久才爆出来的。撑死了就是和前辈犯了一样的错而已
|
42
liuidetmks 2023-09-22 09:09:57 +08:00
尽量使用新东西,边看 demo 边写那种
|
43
wqhui 2023-09-22 09:10:43 +08:00
用 String 代替 enum ,多用 json\object\var ,时间久了没人敢保证自己知道里面究竟有什么东西
|
44
devopsdogdog 2023-09-22 09:11:10 +08:00
你能碰服务器或者版本包,你可以手动改代码 不提交 git 服务器。 这种是天花板了
|
45
MaxmillianJ 2023-09-22 09:13:40 +08:00 1
@andytao 员工给蛋糕做大了,老板吃完抹嘴给留点渣不?
|
46
Felldeadbird 2023-09-22 09:15:35 +08:00
看你要埋的坑要具有多大的破坏了。推荐结合时间触发需求加逻辑判断。
if( time > 2022-09-22 && 1 =1 ) 类似这种,1= 1 只是例子,现实中应该是一种业务判断,写代码有时候写等号会只写一个,导致判断恒久生效。 switch 结构中漏写 break 也行。 这种逻辑错误是直接影响公司正常运作的。属于隐性破坏。 当然了,要求写测试的团队一般有工具校验出这种问题。 所以埋坑最终应该以自己实际情况自己整理合适的坑。 |
47
Xbluer 2023-09-22 09:19:15 +08:00
[把全局变量变成私有;]
反掉了吧 |
48
nothingistrue 2023-09-22 09:19:59 +08:00
@shmilypeter #2 1 ,如果你不想踩缝纫机,那就别干能导致你踩缝纫机的事。2 ,删库跑路是踩缝纫机的充分条件,不是必要条件。
|
49
MrSheng 2023-09-22 09:21:30 +08:00
不建议这么搞,没必要,以直报怨,以德报德。
如果真想搞,那就把代码混淆一下,各语言都有方案,相信我,真的会吐 |
50
yeccc 2023-09-22 09:22:19 +08:00
mongo TTL 索引
|
51
Fule 2023-09-22 09:23:30 +08:00 4
故意埋坑最终可能只有 5%影响到了你坑的人/组织,而 95%影响的只是和你一样的其他打工人。所以考虑下有无别的手段吧
|
52
sky857412 2023-09-22 09:23:53 +08:00
服务启动时,启动一个后台线程跑任务,然后在特定数据情况下,线程挂掉,后台任务停止运行
|
53
BeyondBouds 2023-09-22 09:26:55 +08:00
公司没有 cr ,那可太简单,直接关键业务模块打包成静态库,源代码只有我有....
|
54
hervey0424 2023-09-22 09:31:28 +08:00 1
正常写代码就行了
|
55
skiy 2023-09-22 09:31:46 +08:00 via iPhone
?结果苦的是下一个接手的同行。到时接手的同行,直接把坑往 v2 一发…又是一轮的口诛笔伐。
?往后的背调不打算过了? |
56
wuqi5920 2023-09-22 09:31:49 +08:00
|
57
shawnsh 2023-09-22 09:33:48 +08:00 via Android
用 C++写,内存泄漏就够了
|
58
thinkm 2023-09-22 09:35:23 +08:00
用人名作为变量名
int peter = 3; double vincent = 1.0; |
59
Selenium39 2023-09-22 09:38:23 +08:00 2
关键的条件判断处少写一个=号,合理
|
60
dcsuibian 2023-09-22 09:41:14 +08:00 via Android
要我就不埋坑,何苦为难下个打工人
|
61
mtw 2023-09-22 09:41:23 +08:00 1
不提议这么做,但是技术方案很多,代码中各种宏,还有 goto 横飞。
|
62
wu00 2023-09-22 09:43:36 +08:00
为什么要主动去干这种事呢...
我都是把能填的坑先填了,不能填的提前告知,不然会觉得丢人 |
63
tabris17 2023-09-22 09:44:18 +08:00
所有代码写在一个文件里
|
64
MozzieW 2023-09-22 09:44:36 +08:00 2
之前公司出现过开发离职删了几个文件,的确过了几个月才发现问题,排查半天 Git 找到人。
技术老大人好,内部告知一下捂住了,说人家还年轻。我估计会有人告诉那个开发。 不然按照我们当时老板的性格,那个人警察上门少不了。 供参考。 |
65
sakae010 2023-09-22 09:45:18 +08:00
多用已经停更的或很老的第三方包就行
|
66
me1onsoda 2023-09-22 09:50:43 +08:00
操作数据库。大多数情况账号权限混乱,不知道是谁操作的,把索引删了之类的
|
67
WebKit 2023-09-22 09:54:53 +08:00 via Android 1
写开源库,然后你的项目引用🌚
|
68
e9pWeUbh9PGCnp95 2023-09-22 10:20:45 +08:00
闭着眼睛直接上多线程, 什么数据竞争, 什么内存一致性, 统统抛脑后.
|
69
ma836323493 2023-09-22 10:21:43 +08:00
能异步处理的全部放到线程里处理, 嵌套, 三行代码单独写一个方法写一个类, 设计模式满天飞, 策略模式和观察模式是最容易挖坑的, 另外反射也给他用上
|
70
dna1982 2023-09-22 10:22:59 +08:00 1
“把全局变量变成私有”
一看这第一句话就是外行写的。 |
71
wednesdayco 2023-09-22 10:24:41 +08:00
java 的话试试这种
// \u000d a="world"; |
72
qiumaoyuan 2023-09-22 10:28:01 +08:00 1
正常写就行了,坑不会少,而且确实是无意的,很无辜。
|
73
qiumaoyuan 2023-09-22 10:30:10 +08:00
“把全局变量变成私有”,感谢你对代码可读性的优化做出的努力。
所以说正常写就行了。 |
74
zidian 2023-09-22 10:30:29 +08:00
在注释中撒谎误导;
这不是每个项目都有的么 |
75
token10086 2023-09-22 10:31:49 +08:00
多用 go to 语句, 变量命名产考 OOoo0o 和 Il1LLll 等形式
|
76
clf 2023-09-22 10:35:36 +08:00
想办法把磁盘塞满()
|
77
jackmod 2023-09-22 10:36:50 +08:00
|
78
justin2018 2023-09-22 10:38:45 +08:00
1. 代码写成💩山
2. 重复代码 ctrl+c 和 ctrl+v 3. API 请求加定时器 |
79
fenglangjuxu 2023-09-22 10:40:38 +08:00
把代码写的高级点 一般人看不懂 多用高级特性 别人不敢动
|
81
RightHand 2023-09-22 10:51:34 +08:00 via Android
看组内技术如何,多用设计模式,突然离职。故意埋坑容易被发现,多用设计模式是正当优化
|
82
opengps 2023-09-22 10:53:00 +08:00
好像有个 github 项目就是这么搞的
|
83
pengtdyd 2023-09-22 10:53:58 +08:00
把注释删掉就可以了,可以开发一个插件一键删除所有注释
|
84
yousabuk 2023-09-22 10:54:27 +08:00 via iPhone
当然是:数据溢出,内存溢出,条件性的(漏判)进入死循环,条件性的内存非法引用了。
|
85
RightHand 2023-09-22 10:55:19 +08:00 via Android
@RightHand 你要相信至少 90%的人是不会/用错设计模式的,再加上奇葩的需求迭代,一定会爆炸
|
88
wangxin13g 2023-09-22 11:10:56 +08:00
少写注释,在 java 里用科里化,多用 Map<String,Object>
|
90
shyangs 2023-09-22 11:28:59 +08:00
先和老闆敬酒三杯,再寫. (三杯不夠喝十杯)
喝完酒後,走路無法走直線,你的邏輯思維也是,但是你卻察覺不到,會覺得我沒醉,在醉酒和宿醉狀態正常發揮即可. |
91
chanChristin 2023-09-22 11:36:27 +08:00
|
92
zypy333 2023-09-22 12:25:35 +08:00
不要用任何第三方库,全自己写
|
93
hyperbin 2023-09-22 12:28:41 +08:00 via Android
正常写就行(doge
|
94
Features 2023-09-22 12:51:54 +08:00
国内的话,写个代码,每个月随机几天,200 个线程,超时时间 10 秒,每 100 毫秒请求一次谷歌
IO 问题基本不占用 CPU ,不占用内存,很难排查 |
95
learningman 2023-09-22 12:52:51 +08:00
Java 全部 Object ,C 全部 void*,要用的时候再 cast
|
96
join 2023-09-22 12:53:45 +08:00
用 rust 或 c++即可。
|
97
wyl986 2023-09-22 13:19:32 +08:00
你就正常发挥
|
98
sprite82 2023-09-22 13:29:10 +08:00
你可能想找的是这个,但是你要是这么做了,可能是自己承担这个后果。写少了,没什么影响,写多了,肯定大骂哪个鲨笔写的,一看 git 记录:哦,是我写的 🤡
https://github.com/trekhleb/state-of-the-art-shitcode |
99
shmilypeter OP @Promtheus 对,我的意思就是第一要伪装成自己菜导致的,第二要过一段时间才会有很难排查的,并且也影响业务的后果。
|