代码写成这样,老夫无可奈何!
创始人
2025-03-19 07:11:19
0次

 你见过最无可奈何的代码是什么?今天,栈长就来总结一下我遇到过的一些神逻辑代码,不一定很全,但我真心写不出,真心让我自叹不如啊!

[[279482]]

1、耍猴的好手段

还记得 XX 手机的抢购活动么,抢购按钮的代码类似是这样的:

  1. 立即抢购 

活动还没开始就结束了。。

后面有人挖出来这段神逻辑,大家真是哭晕在厕所了,还好,抢购买手机这种我从来不参加。。

就是在前端写死代码造成抢购结束的假象,其实请求压根没有发送到服务器,或者休眠几秒直接跳转到抢购结束页面,良心点的,点 10 次有一次发到服务器就不错了,这样耍猴是不是太好玩了?

众所周知,为了提高服务器的承载能力,现在各类 APP、网页等都会或多或少加入前端缓存,但上面这种耍猴的代码也太无耻了。

2、猪一样的队友

大家有没有见过这样的代码:

  1.  
  2. ... 

这上面的活动价比原价还贵,真是哭笑不得……

类似这样的代码,一些程序员在注释中说明活动的内容,又或者是把一些生产上环境的 IP、端口、用户名、密码等敏感信息把在注释中,好随时能切换……

真是猪一样的队友,这样的程序员不开除么!?定时炸弹啊!

3、最牛逼的排序算法

据说是一个月薪 9K 的 Java 程序员,因老板让他写一个排序算法,然后他就写了一段屌炸天的休眠排序算法,接着他就被老板开除了……

排序算法代码大概是这样的:

这段代码的完整版解释请看这篇文章:刚写完排序算法,就被开除了…

排序排成这样,不开除你,开除谁?

4、休眠的最高境界

  1. /** 
  2.  * 获取未来几天的日期 
  3.  * @param days 指定的天数 
  4.  * @author 微信公众号:Java技术栈 
  5.  * @return 
  6.  */ 
  7. public static Date getNextDays(int days){ 
  8.     try { 
  9.         // 休眠指定的天数 
  10.         Thread.sleep(days * 24 * 60 * 60 * 1000); 
  11.     } catch (InterruptedException e) { 
  12.         e.printStackTrace(); 
  13.     } 
  14.     // 休眠结束后返回日期 
  15.     return new Date(); 
  16. } 

获取指定日期用休眠?写完,已笑晕在厕所。。。

完整版的解释请看这篇文章:刚写完这段代码,就被开除了……。

想离职找不到借口?

那还不容易,哥送你这段加强版,复制这段代码,提交打包测试上线,坐等开除。

5、真就是假,假就是真

  1. boolean isBoy = user.isBoy() == true ? true: false; 
  2. if (isBoy){ 
  3.     ... 
  4. } else { 
  5.     ... 
  6. } 

布尔值可以直接拿来用,你硬要写个三元表达式?年底绩效考核了,代码量有 KPI 么?

还有类似这样的:

  1. if (xx1 == true && xx2 !=  true){ 
  2.     ... 
  3. } else { 
  4.     ... 
  5. } 

还有这样的:

  1. if (xx1 > xx2){ 
  2.     return true; 
  3. } else { 
  4.     return false; 
  5. } 

写得太优雅了!

6、循环循环循环

  1. for (int i = 0; i < 1; i++){ 
  2.     ... 
  3. } 

一个循环也用循环,曾经就遇到过这么一段,不知所云了,要改这段代码,还要把他叫在旁边坐着,看着改才行。。

  1. for (;;){ 
  2.     ... 
  3. } 

死循环这么写,我们就看不出来了么?

7、魔法值的真谛

曾经检查代码时,发现代码中很多魔法值,叫同事要定义成公共常量,结果来了这么一段:

  1. private final static int ZERO = 0; 
  2. private final static int ONE = 1; 
  3. private final static int TWO = 2; 
  4. ... 

看到上面的常量定义,我真想打人,虽然魔法值是没了,但又定义了一些没有意义的常量,完全没有理解修改魔法值的真谛,这和脱裤子放屁有什么区别?

上面还只是一个简单的示例,实际审查情况远比你想象的糟糕。

8、看花眼的参数

  1. Order order = new Order(orderNo, 1678.13, "CNY", 1, 3, "wx", 5, "1", 0, "8", 0, 1, new Date()); 

看到这样的代码,我也是醉醉的了。

我就见过同事写出这样的代码,是赶时间呢,还是真的不会设计模式,一个构造函数参数能写这么多,且不说魔法值,这么长,看一眼都觉得头大。

9、消失的异常

  1. try { 
  2.     ... 
  3. } catch (Exception e) {} 

程序捕捉了异常,却不打印。

  1. try { 
  2.     ... 
  3. } catch (Exception e) { 
  4.     e.printStackTrace(); 
  5. } 

错误是输出来了,但没有输出到日志文件。

  1. try { 
  2.     ... 
  3. } catch (Exception e) { 
  4.     logger.info("...", e); 
  5. } 

日志级别用的不对,去错误日志文件里面死活找不着错误日志。

上面的种种不规范的写法,在生产环境出现问题时,一方面导致排查问题艰难,另一方面,监控系统也不能及时地监控到异常。

10、神奇的if

最后一个了,压轴了。。

来,我们一起赏析下这段神奇的 if 代码:

  1. if(user.getFirstName() != null) 
  2.     if(user.getMiddleName() != null) 
  3.         if(user.getLastName() != null) 
  4.             if(user.getNickName() != null) 
  5.                 if(user.getShortName() != null) 
  6.                     if(user.getFullName() != null) 
  7.                         if(user.getFamilyName() != null) 
  8.                             if(user.getEnglishName() != null) 
  9.                                 ... 
  10.                                 return true; 
  11. return false;       

这段代码够奇葩了吧,一个 if 能搞定的非要写这么长,还缩进得这么有层次感。。

小结

写神逻辑代码的人才这么多,找问题、解决问题真是太难了。

 

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
只需三步,让你掌握阿尔法路由器... 请参照以下阿尔法路由器设置方法,通过浏览器进入及设置宽带路由器。经过这三个步骤的设置,基本上能够熟悉...
如何更省钱? 近期特价热门硒鼓... 如今激光打印设备已经成为商务或企业的绝对主力办公设备,但采购者往往忽视了激光打印设备所用的耗材,相对...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...