不羡鸳鸯不羡仙,一行代码调半天。原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。
我在风中藏把刀,斩尽世间秋色。 这句注定要流传千古的名诗,是xjjdog
于2020年9月6日书写,体现了作者想要毁掉秋色,又对其毫无办法的矛盾心理。
秋天很让人讨厌,除了是万物萧条的开始,它还容易让人上火,容易让鼻炎复发。万物都会受到季节的影响,失去它的本性。当然,程序员也不例外。
今天是周末,本应该是不上班的。但中国在1995
年之前,是没有周末的,周末是无数先烈们用鲜血换来的权益。
周末
并不代表星期天
,而是周六
。星期天其实叫做礼拜日”
,由于上帝
在第七天休息,所以是西方人在这天去教堂的日子。所以,程序员一般选择周六加班,周日并不加班。
但很明显,这是舶来品!我好像找到加班的理由了!
总之,今天我们来加班了!空调开的很足,是个分享知识的好日子。
今天有同学分享的话题是:为什么日志规范里,要推荐使用占位符
来书写日志。
log.debug("Processing trade with id: {} and symbol : {} ", id, symbol);
小A说:很明显了,这是因为{}
这对符号,非常的优雅。通过占位符方式,参与占位的那些参数,就可以被复用。这在设计上是非常优雅的。
小B说:我有点认同小A的观点。通过{}
这种替换方式,每次都需要耗费CPU去进行查找替换。效率上肯定不是最优的,作者既然提供了这种方式,那肯定是出于代码的简洁性这种trade off进行设计的。
小C说:我觉得作者纯粹是脱了裤子放屁,直接使用+
进行拼接也是没什么问题的。我用+
拼接用了好多年了,也没什么问题。这就是作者顺手提供的API而已,并没有什么意义。
小A问小C:你知道+
在Java中怎么处理的么?。
小C说:不要拿这种老掉牙的问题来问我。+
最终在字节码上,都是使用StringBuilder
进行拼接的。我还知道StringBuilder和StringBuffer,其实在效率上并没有什么区别。
小A不服:怎么就没有区别了?一个是同步方法,一个是正常的方法,肯定有区别的。
小C白了小A一眼,没有说话,似乎是不屑于解答这个问题。
别扯远了啊。推荐使用占位符方式,其实还是有非常大的道理的。看一下下面这段代码你就明白了,分享的同学及时的掩盖了这个尴尬。
if (log.isDebugEnabled()) {log.debug("Processing trade with id: " + id + " and symbol:" + symbol);
}
大家热火朝天的讨论起来。由于讨论又臭又长,xjjdog
在此总结一下。
线上的日志级别,一般是使用INFO
或者WARN
的,DEBUG
日志一般都不会打印出来,因为它的内容会非常的多非常的啰嗦。上面这段代码,在打印DEBUG
日志之前,先进行了一步是否能打印DEBUG
日志的判断。
这个判断,log.debug
方法已经在方法内做了一次了,我们何必要多此一举呢?
注意debug
中的内容,我们是使用+
进行判断的,()
里参数的优先级,是高于debug方法本身的。如果我们不加上外层的判断,那么debug里面的参数,无论是否要打印,都要进行一次拼接。
假如我们现在是ERROR
级别,里面的这些参数依然要进行拼接。由于String
对象是不可变的,这些拼接的字符串,就要占用非常多的堆空间,造成浪费。
这样解释{}
占位符就比较好理解了。因为它生成的字符串数量是固定的,只有在真正需要打印的时候,字符串才会被拼接。
按这个逻辑,如果是log.error
方法,你怎么玩都可以。
小A小B小C小F,全部都点头称是。
你们这是在这里讨论一些什么狗屁东西?工作进度都正常么?。正在大家讨论的热火朝天的时候,一个不协调的声音传来。
大家回头一看,原来是项目经理来了。他抱着一台老掉牙的灰色笔记本,屏幕上打开着他最喜欢的Excel
,花花绿绿的统计表格甚是好看。
小A说:我们的进度都正常啊。主要是今天来加班,等的就是需求确认下来。
项目经理说:需求不早就给你了么?王总对这个需求非常的重视,你们得紧张起来。这个星期我都没找到关于这个需求的任务项。
小B说:这个需求根本就不明确,需要先把基本的功能点给订下来。我们加班也不能白加,在这讨论一下技术问题,增加一下技术氛围,有什么问题?
项目经理说:技术氛围有什么用?加班就是用来做需求的,进度不正常写的代码再牛X有什么用?这个功能王总要求下个周就要上,你们还有闲情逸致在这里搞讨论。讨论点需求不行么?
我在一旁静悄悄的看着,项目经理明显是受到秋天的影响了,目前有点火大。这明显违背了项目经理需要情绪稳定这个基本素质,他炸毛了。
反观程序员们,脸红脖子粗,争辩是他们的常态,骨子里的那点骄傲溢于言表。
x你m的,老子忍你很久了,小C跳将起来,一巴掌拍在项目经理的电脑上。花花绿绿的电子表格上面瞬间出现了一道道电子干扰波。
老子也忍你很久了!! 项目经理也怒了,指着小C的鼻子吼叫:就TM数你干活慢,整天整些没用的。
一时间口水乱飞,恶语飞贯,振的天花板上灰尘都掉了下来。
你可能会奇怪,他们怎么不动手呢?因为这有前车之鉴。前不久在公司,两个干仗的都被开除了,而且不给赔偿,所以冒不得这个风险。
过了一会儿,大家都吵累了,怒气冲冲地盯着对方。项目经理并没有因为是一个人就败下阵来,因为其他的程序员都是怂货,只有小C在和他对骂。
这个需求,我和客户聊了一下,觉得不太应该做。今天大家可以早点下班了。正在大家发愣尴尬的时候,王总的声音竟然传了过来。他刚和客户通完电话,没有看到这激烈的场面。
我偷偷跑到王总身边,伸手遮住嘴,悄悄和王总耳语了几句。我得把发生的问题告诉他。
王总的脸沉了下来:一个项目组,就是一个大家庭!不求相爱,也不能相杀。你们这种行为破坏了团结,非常的不可取。项目组的全体成员,这个月绩效全部为C!
一时间,大家幸灾乐祸的看着我。我尴尬的笑了笑,他们应该不是恨我,这根本就是秋天惹的祸。
作者简介:小姐姐味道 (xjjdog),一个不允许程序员走弯路的公众号。聚焦基础架构和Linux。十年架构,日百亿流量,与你探讨高并发世界,给你不一样的味道。我的个人微信xjjdog0,欢迎添加好友,进一步交流。
推荐阅读:
一图解千愁,jvm内存从来没有这么简单过!
失联的架构师,只留下一段脚本
架构师写的BUG,非比寻常
nginx工程师,需要上承天命,下召九幽
实力解剖一枚挖矿脚本,风骚操作亮瞎双眼
又一P1故障,锅比脸圆
传统企业的人才们,先别忙着跳“互联网”!
面试官很牛,逼我尿遁
又一批长事务,P0故障谁来背锅?
一天有24个小时?别开玩笑了!
《程序人生》杀机!
可怕的“浏览器指纹”,让你在互联网上,无处可藏
2w字长文,让你瞬间拥有「调用链」开发经验
996的乐趣,你是无法想象的
作为高级Java,你应该了解的Linux知识(非广告)
必看!java后端,亮剑诛仙(最全知识点)
学完这100多技术,能当架构师么?(非广告)
Linux上,最常用的一批命令解析(10年精选)
数百篇「原创」文章,助你完成技术「体系化」
▼