关于码农:码农如何提高自己的品味

作者:京东科技 文涛 前言软件研发工程师俗称程序员常常对业界外的人自谦作码农,一来给本人不菲的支出找个不错的说辞(像农民伯伯那样辛勤耕耘挣来的血汗钱),二来也是自嘲这个行业的确辛苦,辛苦得没工夫捯饬,甚至没有驼背、脱发加持都说不过去。不过工夫久了,行外人还真就置信了程序员就是一帮没品尝,木讷的low货,大部分的文艺作品中也都是这么体现程序员的。可是我明天要说一下我的感触,编程是个艺术活,程序员是最聪慧的一群人,咱们的品尝也能够像艺术家一样。 言归正转,你是不是认为我明天要教你穿搭?不不不,这仍然是一篇技术文章,想学穿搭女士学陈舒婷(《狂飙》中的大嫂),男士找陈舒婷那样的女朋友就好了。笔者明天教你怎么有“品尝”的写代码。 以下几点可晋升“品尝”阐明:以下是笔者的经验之谈具备局部主观性,不同意的欢送拍砖,要想体系化晋升编码功底倡议读《XX公司Java编码标准》、《Effective Java》、《代码整洁之道》。以下几点局部具备通用性,局部仅限于java语言,其它语言的同学绕过即可。 优雅防重对于成体系的防重解说,笔者之后打算写一篇文章介绍,明天只讲一种优雅的形式: 如果你的业务场景满足以下两个条件: 1 业务接口反复调用的概率不是很高 2 入参有明确业务主键如:订单ID,商品ID,文章ID,运单ID等 在这种场景下,非常适合乐观防重,思路就是代码解决不被动做防重,只在监测到反复提交后做相应解决。 如何监测到反复提交呢?MySQL惟一索引 + org.springframework.dao.DuplicateKeyException 代码如下: public int createContent(ContentOverviewEntity contentEntity) { try{ return contentOverviewRepository.createContent(contentEntity); }catch (DuplicateKeyException dke){ log.warn("repeat content:{}",contentEntity.toString()); } return 0;}用好lambda表达式lambda表达式曾经是一个陈词滥调的话题了,笔者认为,高级程序员向中级进阶的必经之路就是攻克lambda表达式,lambda表达式和面向对象编程是两个编程理念,《架构整洁之道》里曾提到有三种编程范式,结构化编程(面向过程编程)、面向对象编程、函数式编程。首次接触lambda表达式必定特地不适应,但如果相熟当前你将关上一个编程形式的新思路。本文不讲lambda,只讲如下例子: 比方你想把一个二维表数据进行分组,可采纳以下一行代码实现 List<ActionAggregation> actAggs = ....Map<String, List<ActionAggregation>> collect = actAggs.stream() .collect(Collectors.groupingBy(ActionAggregation :: containWoNosStr,LinkedHashMap::new,Collectors.toList()));用好卫语句各个大场的JAVA编程标准里根本都有这条倡议,但我见过的代码里,把它用好的不多,卫语句对晋升代码的可维护性有着很大的作用,想像一下,在一个10层if 缩进的接口里找代码逻辑是一件如许苦楚的事件,有人说,哪有10层的缩进啊,别说,笔者还真的在一个微服务里的一个外围接口看到了这种代码,该接口被过多的人接手导致了这样的场面。零碎接手人过多当前,代码腐化的速度超出你的想像。 上面举例说明: 没有用卫语句的代码,很多层缩进 if (title.equals(newTitle)){ if (...) { if (...) { if (...) { } }else{ } }else{ }}应用了卫语句的代码,缩进很少 if (!title.equals(newTitle)) { return xxx;}if (...) { return xxx;}else{ return yyy;}if (...) { return zzz;}防止双重循环简略说双重循环会将代码逻辑的工夫复杂度扩充至O(n^2) ...

February 8, 2023 · 2 min · jiezi