21

9月火气大,能认真写代码么?

 3 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzA4MTc4NTUxNQ%3D%3D&%3Bmid=2650522178&%3Bidx=1&%3Bsn=8e37c678dc3884f0d374345e723e96f3
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

e6JBVrU.gif!mobile

不羡鸳鸯不羡仙,一行代码调半天。原创:小姐姐味道(微信公众号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跳将起来,一巴掌拍在项目经理的电脑上。花花绿绿的电子表格上面瞬间出现了一道道电子干扰波。

ame6f2B.jpg!mobile

老子也忍你很久了!!项目经理也怒了,指着小C的鼻子吼叫: 就TM数你干活慢,整天整些没用的。

一时间口水乱飞,恶语飞贯,振的天花板上灰尘都掉了下来。

你可能会奇怪,他们怎么不动手呢?因为这有前车之鉴。前不久在公司,两个干仗的都被开除了,而且不给赔偿,所以冒不得这个风险。

过了一会儿,大家都吵累了,怒气冲冲地盯着对方。项目经理并没有因为是一个人就败下阵来,因为其他的程序员都是怂货,只有小C在和他对骂。

这个需求,我和客户聊了一下,觉得不太应该做。今天大家可以早点下班了。正在大家发愣尴尬的时候,王总的声音竟然传了过来。他刚和客户通完电话,没有看到这激烈的场面。

我偷偷跑到王总身边,伸手遮住嘴,悄悄和王总耳语了几句。我得把发生的问题告诉他。

VfYBFv.jpg!mobile

王总的脸沉了下来: 一个项目组,就是一个大家庭!不求相爱,也不能相杀。你们这种行为破坏了团结,非常的不可取。项目组的全体成员,这个月绩效全部为C!

一时间,大家幸灾乐祸的看着我。我尴尬的笑了笑,他们应该不是恨我,这根本就是秋天惹的祸。

作者简介: 小姐姐味道 (xjjdog),一个不允许程序员走弯路的公众号。聚焦基础架构和Linux。十年架构,日百亿流量,与你探讨高并发世界,给你不一样的味道。我的个人微信xjjdog0,欢迎添加好友,进一步交流。

推荐阅读:


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK