应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

一次代码评审,差点过不了试用期

  作者:小傅哥
  博客:https:bugstack。cn包含:Java基础,面经手册,Netty4。x,手写Spring,用Java实现JVM,重学Java设计模式,SpringBoot中间件开发,IDEA插件开发,DDD系统架构项目开发,字节码编程。。。
  沉淀、分享、成长,让自己和他人都能有所收获!一、前言
  好的代码往往也很好看
  代码是给机器运行的,但同样也是给人看的,并且随着上线还需要由人来运维。那么写出可扩展、易维护、好读懂的代码就显得非常重要。
  对于新人来说,互联网大厂项目开发与平常自己学习的代码还是有很大的差别的。日常学习时候通常只要能运行出结果即可,并不会有其他的要求。也不会说有;PRD评审、研发设计评审、代码开发、代码评审以及中间一些列的提交物,直到测试完成,上线验证,开量对外等等。
  所以很多新人刚从学校毕业或者从小公司进入大厂,在规范制约下会有一些不习惯,甚至犯错误。那么为了让大家更好的知晓这些问题,小傅哥特意整理了一些例子,欢迎参考。二、会议室
  谢飞机,刚刚入职没多久,兴奋的写着leader给的需求,码的飞快。恰巧组长走过来:飞机,带着你的电脑,跟我来码云会议室,做下代码评审。
  leader:飞机,你这代码咋这么粗鲁!
  飞机:啊?
  leader:我要不拦着你,我感觉你这代码都能飞。
  leader:你看哈,就说这行,这日志打的,上线后出了问题,你能查到原因吗?
  飞机:好像。。。
  leader:还有这,这idea都提示你了,都报黄色了,你怎么不看看。还有,这代码也不格式化,一个月后它认识你,你还认识它吗。
  leader:给你发的入职编码规范看了?
  飞机:哦,看一些,写的时候忘了。
  leader:先别着急写,看会了再写代码,这还有一个不错的工程:《NettyJavaFx实战:仿桌面版微信聊天》,可以参考。
  写代码不是以完成功能就算完事,还需要写的漂亮。评审后,飞机,坐回工位,收起了躁动的心,安心熟读手册并练习。三、代码评审1。日志规范
  日志是整个代码开发过程中非常重要的环节,如果日志打的不好,那么遇到的线上bug就没法快速定位,定位不了问题也就没法快速解决问题。直接带来的结果可能包括;客诉更多、资损更大、修复更慢。
  就像下面这段代码中的日志;publicResultexecRule(RuleReqreq){try{logger。info(执行服务规则req:{},JSON。toJSONString(req));业务流程returnResult。buildSuccess();}catch(Exceptione){logger。error(执行服务规则失败,e);returnResult。buildError(e);}}看似没什么问题,但在这段异常代码中,没有打方法的入参信息。如果方法异常时只是抛出一些异常栈信息,那么是很难定位具体的由次调用触发的。另外如果你的系统监控服务,没有类似方法跟踪ID的功能,最好还需要在日志中把本次调用具有标识性的id,作为查询条件打到日志中。
  修改后的日志:publicResultexecRule(RuleReqreq){try{logger。info(执行服务规则{}开始req:{},req。getrId(),JSON。toJSONString(req));业务流程logger。info(执行服务规则{}完成res:{},req。getrId(),业务流程,必要的结果信息);returnResult。buildSuccess();}catch(Exceptione){logger。error(执行服务规则{}失败req:{},req。getrId(),JSON。toJSONString(req),e);returnResult。buildError(e);}}那么现在这样改成这样打日志,就可以非常方便的查询问题,例如搜索;执行服务规则,那么它的一整串关于这次调用的信息就可以都搜索出来了,方便排查问题。在异常中打印入参是为了更加方便的定位问题,不需要比对上下文。打日志还有很多技巧,但所有打的日志目的都为了在出问题时可以快速定位问题,但也注意不要打太多日志,精简好用即可。2。IDEA提示
  很多时候因为你,走神、疏忽、手滑,写出来的错误代码,IntelliJIDEA,都会给你警告提示,只是你,没有去看、没有去看、没有去看!
  来自idea的警告;
  小傅哥idea警告Idea在警告提示这方面非常优秀,只要你能看得见,按照它的提示修改,就可以减少很多的错误。如果你还希望有更强的提示,那么你可以按照p3c插件,帮你检查代码错误。3。代码格式
  可能这并不是一个致命的问题,但代码格式化最大的好处是,提升可读性、规整性、以及可以让整组人都在一个标准下执行。因为很多时候一个组的程序员,会在一个类下开发,有人格式化、有人不格式化除了不好看以外,合并代码有时候也会遇到麻烦。
  不格式化的代码缺少灵魂;
  小傅哥代码格式化对于严格要自己的程序员来说,代码没有格式化还是很难受的。看一段代码,只要发现差一个空格位置,都知道这是格式化还是没格式化。4。单元测试
  单测?覆盖率?写代码不是写完就可以了吗?
  当然不是,你写的代码你需要保证它能你跑通你所有的流程节点,确保这份功能是没有问题的,才能提交给测试,否则来回反复,耗时耗力。这也就是写单测的目的!甚至好一点的研发可以通过单测驱动开发,在这个阶段能把一些共用的方法合并、抽离,避免过多的冗余方法。
  单测长什么样;
  单测完整基本也就是代码的健壮性更好,能把单测写好,基本提交的代码就不会有那么多测试妹子找你聊天。在很多公司中一般都会要求单测覆盖率超过多少,否则是不允许编译提交的,这有插件可以和Jenkins配合使用。5。分支规范
  可能有些人看到分支规范根本没有感觉,因为他们开发的项目较小,没有多人开发,上线周期也短,也不会开发中添加需求。
  但在互联网中并不是这样,往往一个系统需要几个人维护,并同时进行开发。一般这里会包括;master分支、test分支、本次需求的分支,有这么多分支怎么用呢,如下;master分支,是主分支,也是上线分支,不允许在上面直接修改代码。test分支,是测试环境分支,每个人都需要把自己开发完的分支,提测后合并到test分支,交由测试验证。需求分支,也是个人开发的分支,同一个需求下,大家在这个分支写代码,当然也可能这个系统模块的分支就一个人在开发。
  重点,如果有人不遵守分支规范或者压根没概念,把自己的需求代码写在test分支上,并且是多次修改提交都在test分支写。那么就危险了,严重会耽误上线;为什么?test分支,是由大家把自己的代码合并过来共用的,那么这个分支就会包含2个或者更多的并行需求,当你需要上线的时候,需要把自己的代码合并到master,但test分支代码是不能合并到master的,那么多未知的内容,根本没有在上线范围。那么你又想上线,又不能避开test分支,就需要把你写的代码,重新粘贴过去,这个时间成本非常大。test分支,还随时有删除重新拉的可能,如果有人通知大家删除重新拉,那你的代码就会丢失。6。夹带需求
  提交测试,但还藏一个需求
  研发开发需求代码时候,有时候会额外加一些其他代码,而且这些代码可能跟本次需求并没有关系。那为什么会这样呢?以前留下来的bug,想修复下,但忘记告知测试在开发这个需求时,其他产品又找过来让加功能,并说功能很小,没有发邮件通知相关测试人员看到某块以前写的代码太乱了,就想着优化下,自信心很高,不必告诉测试
  那这时候你提交的代码,如果不在测试范围又出了问题,只能研发自己抗。并且在所有的研发团队,几乎是不会让夹带需求上线的,这样的做完了不算功劳,做出了问题还会被骂。
  所以,千万不要私自夹带!哪怕你是好心!7。异常流程
  擦屁屁的纸,80的面积都是保护手的!
  这句话是我经常用的,因为我们编程很多时候都是在处理异常流程,正常流程往往并不难,难的是分析出这段开发的代码有多少异常流程有没有处理。
  那么,会有哪些异常呢?支付成功MQ消息发送失败,需要worker补偿PRC接口调用失败,网络超时,实际成功接口幂等性,多次调用结果一致性
  等等,这些都是异常流程,尤其在一些交易提现环节,会出现各种异常,那么不可能把这些异常都反馈用户展示到界面。而是要有一些非常友好的提示,并且在服务端的流程里,有一定的补偿机制,来保证最终的调用成功,或者逆反。8。代码成坨
  小傅哥代码成坨
  CRUD往往可能是因为你的设计,换个人写也许不同
  很多时候研发写代码,根本不考虑是否要扩展,总之一个类几十行ifelse,能搞定所有需求。等下次在开发类似的,就粘贴过去再修修补补,能用就行。
  缺少写出良好代码的研发,一方面是经历有限,另外一方面是学了很多理论但是不好落地。比如设计模式,但自己实际写代码的时候还是很晕。
  这里推荐一本我写的《重学Java设计模式》,全书共计22个真实业务场景对应59组案例工程、编写了18万字271页的PDF、包含交易、营销、秒杀、中间件、源码等22个真实场景。9。SQL性能selectfromtablewherestatus1limit200;
  这是一段定时任务扫描库表的SQL,这段sql会定时扫库,将库表中状态是1的扫描出来进行处理,每次扫描200行。你发现有什么问题了吗?扫描必要字段即可,不需要全部字段这段sql会越来越慢,即使状态字段加了索引。因为status并不能大量排掉其他状态字段,随着数据越来越多依然是全表扫描。
  那么怎么优化呢,其实优化也比较简单,需要先根据状态查询到符合条件的最小的id,之后再sql的查询条件中添加idxx,即可。另外如果你的任务需要多个worker扫描,增加效率,可以增加门牌号设计,提升扫描效率,如下;
  小傅哥门牌号扫描10。结伴编程
  评审代码最后这点想说说,陪伴式开发,可能这不是结伴编程,不是共同合作,而是一个研发需要另外一个研发不断的提供帮助。有时候可能就是很简单的问题,也不想查,或者说没有意识去查,只是问。
  业务开发的过程,只要把流程定下来,研发设计评审完,其他的开发过程中遇到的小点并不难,只要查一查就可以搞定。当日也不是说完全不能问,只不过特别普遍,简单的代码问题,自己搞定就可以了,但这个时候还像保姆似的陪伴,就会拖累整个团队的进展,最终大家都需要扛起那个慢的。
  所以,如果你是那个需要陪伴的,要及早断奶,学会自己攻克,快速成长。而如果你是那个卷纸,可哪擦屁股的,要把卷纸传递给他。一个人擦一次是能力体现,反反复复擦一个人,就惹屎上身了。四、总结以上介绍了代码评审中涉及到的比较常见的点,基本也是很多研发容易忽略和犯错误的地方。这些问题点但拿出哪一个看,都不大。但运行在代码中,确都有可能发生致命或者麻烦的事情。想让自己能把代码写好,就不只面试时候造飞机的回答,什么时间复杂度、什么可重入锁、什么红黑树,什么DDD,只要你不能正确的落地和运用这些技术,说的再多都是空谈。多学一些、多看一些、多问一些,没有坏处,但要自己能成长,把吸取到的经验心得,运用到业务开发中,写出可扩展、可维护的代码,才能让自己真的升职加薪。也能让既有留下的本事,也有出去的能力。

高诗岩女友晒近照!颜值超高却被男友吐槽,与张镇麟女友是同学北京时间的11月1日,山东以107:89大胜同曦,目前以5胜3负排在联盟第十位。经过了八场比赛之后,球迷对于丁彦雨航也不再具有很高的期待,而球队的战术核心又回到了高诗岩的身上。……孙红雷整容爆红,丁嘉丽功劳过半说三狼大家可能并不熟悉,但一说颜王估计就能猜个八九不离十。没错,说的就是踩着女人上位、从街头混混变娱乐圈硬汉的大腕儿孙红雷。孙红雷,1970年出生在哈尔滨的一个贫苦家庭,……EDG夺冠刷屏背后,是正在发力的B站直播10月以来的直播有着两个最为鲜明的主题,一个双十一引发的百亿带货,另一个则是2021英雄联盟全球总决赛。有人戏称,可以通过朋友圈里的尾款人和EDG牛逼,划分出两类截然不同……插队的时候遇到野狼,驴被吓疯了,弃主而逃,一把铜锣救了我的命年轻的时候,作为是早期的知识青年,毫不例,我选择了下乡插队,插队的岁月十分精彩,虽然日子过的十分清苦,但却干劲十足,故事更是精彩纷呈,是人生中最宝贵的经历,在之后的人生里让我时……詹姆斯未来并非湖人非卖品?公牛有望成为詹姆斯最大黑马下家其实,当一支球队中球星和主教练发生摩擦不愉快之后,从此两人之间的芥蒂很难完全消除,一如夫妻之间破镜难圆。尽管他们异口同声对外说道彼此已然修复关系,但公关之言又有几分可信度……详解Lombok中的Builder及SuperBuilder本篇文章详细介绍了Java中lombok的Builder注解及SuperBuilder注解的解析和使用,希望对大家的学习或工作有一定的参考借鉴价值。废话不多说,直接上干货。Bu……流浪地球2中的图恒宇,他的一眼,让他和女儿天人永隔电影《流浪地球2》中,刘德华扮演的图恒宇是个悲剧人物。他的一句,我已经14年没有见我女儿了,让很多人泪流满面。然后图恒宇,又为了给女儿完整的一生,破坏了月球发动机的电脑系……12连败!两大强队疯狂输球,勇士坐收渔翁之利,东部格局已成定NBA本赛季的西部联盟特别狂野,有可能出现一种情况:一场比赛都没打,三支对手球队全部都连败输球,然后,没打比赛那支球队的排名直接连升3名。现在,西部联盟就发生了这样的情况,真的……无语!勇士快船互爆,前者单节轰42分,后者立刻单节44分还以NBA常规赛一场焦点战,金州勇士客场挑战洛杉矶快船。比赛进行到第三节结束,勇士队暂时以93105落后。两队令人无语,展开了互爆模式。勇士队在第二节爆发,狂轰42分,而快船立刻在……广东公安全力以赴守护人民群众平安祥和欢度春节春节期间,全省公安机关认真贯彻落实省委、省政府和公安部的部署要求,以群众过节、公安过关的警惕性和时时放心不下的责任感,全力做好春节安保各项工作,确保广大人民群众在平安祥和的氛围……英超最新积分榜枪手第二败,红魔升第3,利物浦4轮不胜排第10英超第22轮又赛多场,目前仅剩热刺VS曼城和诺丁汉森林VS利兹联的比赛还没有进行,我们一起看看已经结束的比赛和最新积分榜变动。英超最新积分榜领头羊阿森纳本轮被爆冷,……今年医保改革开始,打进医保卡的钱有变化2023年,各省份将陆续进行在职及退休人员个人账户医保改革,打进个人医保卡里的钱,有新变化。以贵州为例,其他省份可以大致类推,因为,医保改革总体政策全国基本是统一的。……
更多搭配Fitbit为Versa智能手表推出新款表带据外媒报道,日前,Fitbit为旗下Versa智能手表推出了一系列的时尚表带。这三款跟美国时装设计师协会联手打造的表带将传统针织服装和未来美学融合在一起。每款表带都有两种颜色选……上半年被国人爆买的十大豪车BBA痛失冠军,理想ONE竟上榜?随着疫情得到控制,汽车供应链恢复,同时在利好政策的刺激下,6月份销量有较大的增长。根据乘联会公布的6月车市销量数据,6月国内狭义乘用车市场销量为194。4万辆,环比提升43。5……xFyro推首款IP67防水蓝牙耳机游泳洗澡听歌终于实现7月23日消息,目前国内外很多厂商都推出了轻便小巧的蓝牙无线耳机,蓝牙耳机市场出现了各种性能和款式的产品。而在这些蓝牙耳机中,并没有一款真正意义上支持完全防水的耳机,充其量也只……网友3D笔绘制战五渣的龙珠战斗力探测器随着这些年的发展,3D打印已经为人们创造了诸多便利,越来越多的3D打印产品诞生。由于3D打印的限制性,使得一般人难以驾驭,所以不少人选择了便宜实惠的3D涂鸦笔进行现代黑科技带来……胯部也需要凉爽?日本厂商推出奇葩商品裤冷!近日,日本一家名叫ldquo;昭和商会rdquo;的厂商推出了一款名为ldquo;裤冷(ZubonCool)rdquo;的奇怪商品,用户可以把这个ldquo;裤冷rdquo;塞……Oculus推出漫威英雄版RiftVR套装售价399美元7月22日消息,据国外媒体报道,Facebook旗下虚拟现实(VR)厂商Oculus日前宣布推出漫威英雄版RiftVR套装,售价399美元,7月31日开卖。Oculus……脱下了高跟鞋换成了轻便鞋,又从吊带短裙的衣服中释放了出来我们三个脱下了(恨天高)高跟鞋,换成了轻便鞋,每个人从吊带短裙的服装中释放了出来。在10月初几天里,做了一回有纪念,有意义、有自豪感的事。我们为什么脱下了高跟鞋,换成了轻……为什么家长越催,孩子越磨蹭?磨蹭是孩子心理能量不足的表现大家好,我是艾米妈家里有个爱磨蹭的孩子,特别是进入小学后,写作业磨蹭得很,家长每天会是什么心情?本来30分钟就可以完成的作业,我家孩子却用了3个小时,还是在极不情愿……GalaxyWatch有4843mm两版本配1。31。19英近日,外媒曝光了三星GalaxyWatch已通过FCC认证的消息。而在传闻中,这款智能手表将拥有两种不同的尺寸mdash;mdash;其中一款配备了1。19英寸的圆形屏幕、表壳……全明星三分大赛唐斯破纪录夺冠全明星周末第二天,三分大赛开始,唐斯在决赛投出破纪录的29分夺冠。德斯蒙德贝恩率先出场,贝恩在前两个点都投丢花球,花球点命中2球,最终得到18分。CJ麦科勒姆第二个……小小蚁国资源生产推荐攻略小小蚁国资源生产升级那个?前期选择好的技能可以大大提升发展速度,小编带来小小蚁国资源生产推荐攻略,一起来看看吧。小小蚁国资源生产推荐攻略1、前期推荐研究【进化菌丛】里的【……万代推出新款奈克赛斯奥特曼变身器内置炫酷音效《奥特曼》系列周边一直深受很多粉丝的喜爱和抢购,近日万代再次打造一款奈克赛斯变身器,造型简洁,并内置了多种声效和背景音乐,玩起来更加拉风。根据官方透露的信息,这款奈克赛斯……
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网