作者:小傅哥 博客:https://
沉淀、分享、成长,让自己和他人都能有所收获!😄
一、前言
学过的代码记不住?方式不对才记不住,你这么记!
Git :上厕所不叫上厕所,叫拉分支!Socket :厕所就是服务器,坑就是端口!队列 :上厕所🚽叫入队列,先进先出!栈 :去厨房🥣叫进栈,后进先出!架构 :三居的格局叫MVC,四居的格局叫DDD!理论 :系统结构设计定的好,有点bug没问题,能改。这就是茅坑跟坐便的区别。
除了有点味道以外,这回是不记住了 ,我们编程写代码的过程和我们日常生活的例子,往往都是这样可以对应上,有了真实可以触及的实物,再去了解编程就会更加容易,也很难忘记。但可能会写着写着代码,就傻笑起来!
除了这些正能量学习的例子,我们接下来再看看哪些有毒的代码!
二、代码有毒!
以下代码用好了升职加薪,用不好开除走人!
1. 方法命名
public List< UserInfo> queryBitchUserInfo ( String req) {
return null;
}
指数:⭐⭐⭐ 解毒:小哥应该是想写批量查询用户的方法名,结果把batch
(批量 ),写成了bitch
(婊子 ) 点评:接口是上午写的,人是下午走的!
2. 最佳排序
public static void main ( String[ ] args) {
int [ ] numbers = new int [ ] { 2 , 30000000 , 1 , 6 , 40000000 , 5 } ;
for ( final int number : numbers) {
new Thread ( new Runnable ( ) {
@Override
public void run ( ) {
try {
Thread. sleep ( number) ;
System. out. println ( number) ;
} catch ( InterruptedException ignore) {
}
}
} ) . start ( ) ;
}
}
指数:⭐⭐⭐ 解毒:用数字休眠时常排序,谁醒来的时间早,谁就先输出。 点评:思路清奇,要不是这次排序等了一天,老板也不能踢他!
3. 有点烧脑
@Test
public void test_idx_hashMap ( ) {
Map< String, String> map = new HashMap < > ( 64 ) ;
map. put ( "alderney" , "未实现服务" ) ;
map. put ( "luminance" , "未实现服务" ) ;
map. put ( "chorology" , "未实现服务" ) ;
map. put ( "carline" , "未实现服务" ) ;
map. put ( "fluorosis" , "未实现服务" ) ;
map. put ( "angora" , "未实现服务" ) ;
map. put ( "insititious" , "未实现服务" ) ;
map. put ( "insincere" , "已实现服务" ) ;
long startTime = System. currentTimeMillis ( ) ;
for ( int i = 0 ; i < 100000000 ; i++ ) {
map. get ( "insincere" ) ;
}
System. out. println ( "耗时(initialCapacity):" + ( System. currentTimeMillis ( ) - startTime) ) ;
}
4. 迷之求和
@Test
public void test_add ( ) {
int num = 0 ;
for ( int i = 0 ; i < 100 ; i++ ) {
num = num++ ;
}
System. out. println ( num) ;
}
指数:⭐⭐ 解毒:最终 num
结果为 0,num++
根本没起啥作用。因为后++,是先用结果,在++操作,不会给赋值。正确写法是:num = ++ num; 点评:这种错误就跟开车闯红灯似的,轻则扣分罚款,重则倾家荡产。
5. 花里胡哨
private boolean checkAge ( int age ) {
boolean result;
if ( age > 18 )
{
result= true ;
} else {
result= false ;
}
return result;
}
指数:⭐ 解毒:代码可以运行,但是可以优化为return age > 18
。 点评:你们公司是按照代码行数打绩效?不做格式化、不整洁、不看IDEA工具提示,代码是写给人看的!啥有不是!
6. 数字判断
public boolean isNumber ( String str) {
try {
Integer. parseInt ( str) ;
return true ;
} catch ( Exception e) {
return false ;
}
}
指数:⭐⭐ 解毒:判断是不是数字,不抛异常就是,抛异常就不是。这可以使用 StringUtils
工具包判断,也可以自己写正则判断。 点评:这代码真烧,用异常做业务。这不是把🍄蘑菇给狗狗吃吗!🐕狗狗没死你到是吃蘑菇呀,你吃狗粑粑。
7. 代码健壮
public void neverStop ( ) {
//一直循环
while ( true ) {
try {
//业务处理流程
} catch ( Exception e) {
//抓到异常,不处理、不打日志、就是不要停,继续跑
continue ;
}
}
}
指数:⭐⭐⭐ 解毒:把可能抛异常的代码用tryCatch包起来,一直跑,遇到异常也要跑。这个时候遇到异常,要做一些流程处理,最起码要打日志和报警。 点评:业务开发很多时候都是为了解决异常流程,就像擦屁屁的纸80%的面积是保护手的。怎么滴,我看你这代码,是非要一直抠破呀!
8. 性能优化
// APP首页查询,优化前
public void queryInitInfo ( ) {
Thread. sleep ( 3000 ) ;
}
// APP首页查询,优化后
public void queryInitInfo ( ) {
Thread. sleep ( 500 ) ;
}
指数:⭐⭐⭐ 解毒:没啥解毒的,一公斤鹤顶红兑了一口口水! 点评:点评不了啦,抓到就开了吧!
9. 无用日志
// 规则引擎校验
public boolean ruleEngine ( MatterReq req) {
try {
// 业务流程
} catch ( Exception e) {
logger. error ( e) ; // 只打异常,不打入参信息
}
}
指数:⭐ 解毒:日志里只打了异常,没有入参信息,当你的方法有大量的调用时,很难快速定位问题。 点评:下次记得把产品经理
也打日志里去,要死一起死!
10. 耗时遍历
@Test
public void test_LinkedList ( ) {
// 初始化100万数据
List< Integer> list = new LinkedList < Integer> ( 1000000 ) ;
// 遍历求和
int sum = 0 ;
for ( int i = 0 ; i < list. size ( ) ; i++ ) {
sum += list. get ( i) ;
}
}
指数:⭐⭐⭐⭐ 解毒:乍一看可能觉得没什么问题,但是这个遍历求和会非常慢。主要因为链表的数据结构,每一次list.get(i)
都是从链表的头开始查找,与ArrayList
不同,LinkedList
它时间复杂度是O(n)。那如果说你不知道对方传过来的是LinkedList
还是ArrayList
呢,其实可以通过list instanceof RandomAccess
进行判断。ArrayList
有随机访问的实现,LinkedList
是没有。同时也可以使用增强的for循环或者Iterator
进行遍历。 点评: 根基不牢,地动山摇!一知半解,坑了老铁!
三、总结
好的代码千篇一律,差的程序升值加薪! ,这些有毒的代码,淋漓尽致的展示了程序员的才华出众,同时也严重怀疑就是钱给少了!
敲黑板 :想在这编码这条路上走的更远,还是需要脚踏实地的把根基打牢。所以非常推进你阅读以下系列专栏文章,夯实基础、拓展能力、提升眼界;
Java核心突破瓶颈篇:https:///itstack/interview.html 重学Java设计模式篇:https:///itstack/itstack-demo-design.html Java架构设计学习篇:https:///itstack-demo-ddd/itstack-demo-ddd.html
好! ,本篇文章就到这里,有意思的代码还有很多,欢迎在评论区留下你的鬼畜代码!