不羡鸳鸯不羡仙,一行代码调半天

我在风中藏把刀,斩尽世间秋色。 这句注定要流传千古的名诗,是于2020年11月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);
}

大家热火朝天的讨论起来。由于讨论又臭又长,在此总结一下。

线上的日志级别,一般是使用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!

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

夏天火气大,能认真写代码么?相关推荐

  1. 分享一个我大学时通过写代码,十天赚了两万块钱的经历!

    上图是昨天看到的一篇文章,讲述了我对于用技术兼职的一些思考. 恰好之前兼职的项目方也看到了这篇文章,因为我在文章中提到了"爬虫", 他们担心社会大众看到该文的时候,由于对爬虫不了解 ...

  2. 不用写代码的可视化大屏,一口气把工具和方法都教给你

    前段时间公司的领导偶尔看了阿里.天猫的大屏,也非要吵着要做可视化大屏,但是我们公司没有阿里天猫那样的技术基础和资金支撑,这可让我们IT部门苦恼了相当长时间. 于是IT的老大直接甩给了我们来做,其实之前 ...

  3. AI自己写代码让智能体进化!OpenAI的大模型有“人类思想”那味了

    金磊 梦晨 发自 凹非寺 量子位 | 公众号 QbitAI 搞事情! AI"看"了一眼GitHub上人类都是怎么提交更新(commit)的,然后就模仿人类程序员修改代码-- 最终, ...

  4. Google大神每天写多少行代码?真相让你吃惊!

    「 读者福利!2 TB 各类技术资源免费赠送 」 Quora上有个有趣的问题:Google工程师们每天写多少行代码? Google 的 AdMob 全栈工程师 Raymond Farias 在 Quo ...

  5. 编程开发工具一览:新手到大神,程序员都用什么写代码?

    俗话说的好:工欲善其事,必先利其器.一款好的开发工具对程序员来说是至关重要的,可以降低开发成本.提高开发的效率和代码质量. 所以今天分享一些主流的编程开发工具,基本都是我曾经或正在使用的,附带一些使用 ...

  6. 我想看的是美胸和大长腿,你却给我直播写代码?

    除了美胸大长腿,程序员也开直播了! 国外有一个专门直播写代码的网站:https://www.livecoding.tv,打开网页,你会看到很多窗口,点进去就可以围观别人写代码了. 网站的介绍写道:这是 ...

  7. 大数据开发,想写代码不给我写,到底是人性的扭曲,还是道德的沦丧?

    从面试到入职,其实中间的过程还是没啥曲折的,offer发得快,毕业后顺理成章的进去了.开始以为做开发,写写spark代码啥的,要不然写写SQL也行-其实不然,啥活都干,就是不写代码!至今已有四月有余了 ...

  8. 小米大BOSS雷军写Java代码水平如何?一起来扒一扒

    1988年,雷军在武汉大学就读大一期间编写的Pascal程序,在他大二时就被编进了新生教材. 1989年,大二下学期的时候,雷军写了一个RI(RAMinit,清内存的小工具),持续十多年都有人在用.后 ...

  9. ChatGPT横空出世|超强大功能写代码、写情书、写文章、做设计火爆全网

    会被人工智能替代的行业 不是孩子未来的发展方向 因为我们在有限的时间里 无法穷尽对技术的学习 那么人工智能无法替代的是什么? 最近火热的ChatGPT,是美国人工智能研究实验室OpenAI开发的一种全 ...

最新文章

  1. BER_TLV格式简介
  2. 开启本地MySql数据库远程连接
  3. 启动MySQL数据库时找不到mysqld.sock的解决办法!
  4. postman关闭ssl验证_【第5期】springboot:苹果内购服务端验证
  5. C++中的endl搭配cout和cin用法
  6. 微软最新GDI漏洞MS08-052安全解决方案
  7. python矩阵操作_Python中的矩阵操作
  8. springboot 日志级别_SpringBoot实战(十三):Admin动态修改日志级别
  9. java pic 通信_dsPic33E:RS485通信问题
  10. 漫画:如何给女朋友解释什么是策略模式?
  11. python自动处理多个txt文件_怎么用python去实现几个文件中内容的并行处理
  12. FLUENT边界条件和计算模型
  13. 论文阅读:Bridging Knowledge Graph to Generate Scene Graph(ECCV20)
  14. 编程常用小技巧(持续更新~)
  15. idm integration module(idm) Chrome插件 安装
  16. Python学习week7_映射
  17. 家谱页面html,用CSS3 / HTML显示家谱
  18. 虚拟存储器与虚拟内存
  19. SQL server学习(五)T-SQL编程之存储过程
  20. adam和adgrad_Adam Demo可执行文件和资产已发布

热门文章

  1. windows 访问控制模型(一)
  2. Stata中use命令解析
  3. 灰度发布整体解决方案
  4. php数据库报错1046怎么解决,DZ报错MySQL Query Error Errno:1046错误的解决办法
  5. 一文了解数字签名、数字证书、自签证书
  6. Jetson Nano刷机
  7. 对于动态网页和静态网页的理解,以及提供例子说明
  8. 基于人工智能的期权量化交易
  9. 迈瑞医疗软件测试笔试题
  10. 求阶乘的累和​​​​​​​​​​​​​​​​​​​​​(matlab版代码)