代码写成这样,老夫无可奈何!

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 代码写成这样,老夫无可奈何!

image.pngJava技术栈


www.javastack.cn


优秀的Java技术公众号


你见过最无可奈何的代码是什么?

今天,栈长就来总结一下我遇到过的一些神逻辑代码,不一定很全,但我真心写不出,真心让我自叹不如啊!

1、耍猴的最佳手段

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

<a href="javasript:alert('抢购结束!')">立即抢购</a>

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


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


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


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


2、猪一样的队友

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


<!-- 原价 180 元,现在活动价 228 元,活动结束后恢复原价 -->
...

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


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


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


3、最牛逼的排序算法

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


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

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

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

4、休眠的最高境界

/**
 * 获取未来几天的日期
 * @param days 指定的天数
 * @author 微信公众号:Java技术栈
 * @return
 */
public static Date getNextDays(int days){
    try {
        // 休眠指定的天数
        Thread.sleep(days * 24 * 60 * 60 * 1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    // 休眠结束后返回日期
    return new Date();
}

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

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

想离职找不到借口?

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

5、真就是假,假就是真

1.
boolean isBoy = user.isBoy() == true ? true: false;
if (isBoy){
    ...
} else {
    ...
}

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

还有类似这样的:

if (xx1 == true && xx2 !=  true){
    ...
} else {
    ...
}

还有这样的:

1.if (xx1 > xx2){
    return true;
} else {
    return false;
}

写得太优雅了!

6、循环循环循环

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

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

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

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

7、魔法值的真谛

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

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

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

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

8、看花眼的参数

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

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

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

9、消失的异常

try {
    ...
} catch (Exception e) {}

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

1.try {
    ...
} catch (Exception e) {
    e.printStackTrace();
}

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

1.try {
    ...
} catch (Exception e) {
    logger.info("...", e);
}

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

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

10、神奇的if

最后一个了,压轴了。。

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

if(user.getFirstName() != null)
    if(user.getMiddleName() != null)
        if(user.getLastName() != null)
            if(user.getNickName() != null)
                if(user.getShortName() != null)
                    if(user.getFullName() != null)
                        if(user.getFamilyName() != null)
                            if(user.getEnglishName() != null)
                                ...
                                return true;
return false;                                

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

小结

写神逻辑代码的人才这么多,找问题、解决问题真是太难了。image.png你见过最烂的代码写成什么样?欢迎留言分享~

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
7月前
|
C#
C#的小例子和字符串(一)
C#的小例子和字符串(一)
148 0
|
7月前
|
存储 C语言
简单c语言程序举例
简单c语言程序举例
85 1
|
7月前
|
C语言
【C语言】第三回 关于字符串,语句和注释的使用2
【C语言】第三回 关于字符串,语句和注释的使用
120 0
|
C语言
学C的第二天(变量‘补充’;简单了解常量,字符串,转义字符,注释,if选择语句,while循环语句)(1)
4.4*变量的使用(上期继续补充): 字符类型: %c - 字符类型 %d - 整型 %s - 字符串 %f - float类型 %lf - double类型
112 0
|
7月前
|
程序员 C语言
最简单的C语言程序举例
C语言是一种广泛使用的计算机编程语言,适合用于系统编程,也可以用于编写应用程序。它的语法清晰明了,功能强大,是很多程序员的首选语言。下面,我们将通过一个最简单的C语言程序来介绍其基本结构和语法。
119 0
|
7月前
|
Java 编译器 C语言
python基础语法——常量、变量、注释、输入输出和运算符
本文基于pycharm编译器,也可以使用Anaconda 里的编译器,将讲解一些python的一些基础语法知识。可以和我写的python数据分析——Python语言基础(语法基础)结合起来看,有些知识点可能在这篇文章写的不是很全面
66 0
|
7月前
|
C语言 C++
C语言是如何打印字符串 注释 占位符详解
C语言是如何打印字符串 注释 占位符详解
|
7月前
|
存储 Java 编译器
C 语言注释和变量详解
C语言中可以使用注释来解释代码并使其更具可读性。它还可以在测试替代代码时防止执行。
118 0
|
C语言
多组输入的两种写法(C语言)
多组输入的两种写法(C语言)
272 0