两个时间之间是多少小时_那是两个小时我不会回来

两个时间之间是多少小时

正如我之前关于linting主题所说的 ,花时间修改代码的好处很有限,因为自动工具告诉您这样做。 更糟糕的是,这些工具并非万无一失。

例如,我们一直在针对完美无害的try-with-resources构造周围的SpotBugs警告中添加排除项,这在Java 11中不太像。类似地,SonarQube看起来对特定的静态方法有麻烦进口。 不知道为什么,浪费时间安抚这些工具。

进行静态分析并执行所说的那样的两难选择是,如果您花时间去做它所说的话,很难看到好处,但是如果您不这样做,那么可能会有一些更糟的副作用:

  • 一些代码布局开始成为人们的意见–整个团队的意见各不相同
  • 代码中存在一些晦涩的问题,没有人注意到它们
  • 总体质量和对质量的关注下降

这是第二个最令人沮丧的情况。 感谢一些静态分析工具,最近我修复了一个数字的性能,安全性和稳定性错误。 我不认为其中任何一个都是可以保证的失败,但是每个人都可能浪费我们一些稀缺的计算资源,或者给项目增加风险。

如果我没有注意整个问题,并试图将计数降到最低,我可能没有注意到这些问题。

因此,这是必须要做的。 这就像在撒粉。 如果离开它,突然有很多事情要做,情况可能会比您想象的要糟。

我希望我回来的两个小时

SonarQube的建议之一是替换Deque的Java类Stack 。 这是我们的代码:

 Stack<StringBuilder> tags = new Stack<>();  void onNewElement() { tags.add( new StringBuilder());  }  void onNewData(String data) { tags.peek().append(data);  }  void onEndElement() { save(tags.pop());  } 

我已经简化了一点。 它正在读取XML,并允许使用嵌套的层次结构,在该结构中您需要诸如元素堆栈之类的东西来允许遍历该层次结构。

我想我能做的就是用Deque代替Stack ,尤其是将LinkedList替换为实现–一个很好的灵活数据结构。

此项目的构建大约需要15分钟。

失败了

我查看了为SonarQube所做的所有更改,并开始进行有根据的猜测,以了解哪些可能具有破坏性。 尽管从本文看来,应该归咎于必须是Stack重构(restacktor?),但我还有其他一些人选,因此丢失了一些构建周期。

最终,我回到了Stack ,大约15分钟后,构建了绿色版本。

在这一点上,我要感谢过去的我,因为我编写了足够敏感的测试自动化程序来发现此问题,特别是因为它是对原来没有有用测试的旧代码库的重做。

您发现错误了吗?

一旦确定了修复程序,我就不想因为不知道发生了什么而把自己扔了, 因为伏都教... oooooh!

因此,我问自己为什么StackLinkedList可能表现不同。

然后我注意到Stack方法的使用:

  • peek –必须正确
  • pop -经典
  • add – w?

为什么我们将堆栈视为add / pop ? 当然应该push / pop吗?

就是这样。 降低实现细节,事实证明LinkedList将head元素视为堆栈的顶部,但在尾部添加了新元素(这是链表的工作方式)。 相反, Vector ,底层实现的Stack增加了结束,也不会peek ,并pop从结束。 如果您是数组,则不希望在周围乱洗元素。

时间小偷

因此,这里有两个时间小偷:

  • 有人不一致地使用API​​来实现堆栈-导致此奇怪的迁移错误
  • 该死的15分钟建立

如果我的构建只有2分钟,那么所有这些都不会花费很长时间……此测试需要大量设备才能运行。 这样做有充分的理由,但是这仍然是巨大的开销,并且需要花费实时时间。

TL; DR

如果您编写肮脏的代码,迟早它将赶上您或其他人。 整理工具虽然可能会很痛苦,但它们最终在减少基线异常方面做得很好,但是它们可以在过程中浪费您的时间。

翻译自: https://www.javacodegeeks.com/2020/05/thats-two-hours-i-wont-get-back.html

两个时间之间是多少小时

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331369.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java的类载入器

【0】README 0.1&#xff09;本文文字转自&#xff1a; 深入剖析tomcat&#xff0c; 旨在 理解 jvm 的类载入器&#xff1b; 【1】 jvm的类载入器相关 1&#xff09;jvm 使用了3种类载入器来载入所需要的类&#xff1a;分别是引导类载入器&#xff08;bootstrap class load…

Java 代理总结

一、代理 为其他对象提供一种代理以便控制对这个对象的访问。 &#xff08;1&#xff09;静态代理 &#xff08;2&#xff09;动态代理 1&#xff09;JDK自带的动态代理 2&#xff09;javaassist字节码操作库实现 3&#xff09;CGLIB 4&#xff09; ASM&#xff08;底层…

分解因数 递归_递归分解WAR文件

分解因数 递归抽象 是否曾经需要分解WAR文件以及分解WAR文件中的所有JAR文件&#xff1f; 是的&#xff0c;我也是&#xff01; 我写了ferris-war-exploder来爆炸&#xff1a; 一个JAR文件 一个WAR文件&#xff0c;它找到的每个JAR文件也会爆炸。 包含每个JAR文件&#xff…

jvm(2)-java内存区域

【0】README 0.1&#xff09;本文转自 深入理解jvm&#xff0c; 旨在学习 java内存区域 的基础知识&#xff1b; 【1】运行时数据区域 1&#xff09;jvm 所管理的内存将会包括以下几个运行时数据区域 1.1&#xff09;方法区&#xff1b;&#xff08;线程共享&#xff09; 1.2&…

Java Socket编程总结

一、网络API InetAddress     用于标识网络上的硬件资源&#xff0c;主要是IP地址 URL         统一资源定位符&#xff0c;通过URL可以直接读取或写入网络上的数据Sockets      使用TCP协议实现的网络通信Socket相关的类Datagram     使用UDP协议&am…

java插入排序_Java程序要插入排序

java插入排序Java程序插入示例的排序。 显示了示例仿真以及时间复杂度。 插入排序是一种简单的排序算法&#xff0c;可以一次构建一个最终的排序数组&#xff08;或列表&#xff09;。 它比冒泡排序有效得多&#xff0c;并且在大型列表上的效率比快速排序 &#xff0c;堆排序或…

jvm(2)-JVM内存的设置(解决eclipse下out of memory问题)

【0】README 0.1&#xff09;本文转自&#xff1a; http://blog.csdn.net/sjf0115/article/details/8889201 一、JVM内存的设置的原理 默认的java虚拟机的大小比较小&#xff0c;在对大数据进行处理时java就会报错&#xff1a;java.lang.OutOfMemoryError。 设置jvm内存的方…

Java Servlet总结

一、Servlet简介 Servlet&#xff08;Server Applet&#xff09;是Java Servlet的简称&#xff0c;称为小服务程序或服务连接器&#xff0c;用Java编写的服务器端程序&#xff0c;主要功能在于交互式地浏览和修改数据&#xff0c;生成动态Web内容。狭义的Servlet是指Java语言实…

java oca_OCA第1部分中的Java难题

java oca我在业余时间正在阅读Mala Gupta的Oracle认证Java SE程序员助理书&#xff0c;我对所学到的一些新知识感到惊讶。 有时候他们真的没有道理&#xff0c;有时候他们说得通&#xff0c;但真的让人惊讶。 因此&#xff0c;在本系列文章中&#xff0c;我想将它们共享为“ Ja…

jvm(1)-走进java

【0】README0.1&#xff09;本文转自 深入理解 jvm&#xff0c;旨在了解 java 体系结构&#xff1b;【1】java技术体系1&#xff09; Sun 官方所定义的java 技术系统包括以下几个组成部分&#xff1a; java 程序设计语言&#xff1b;各种硬件平台上的java 虚拟机&#xff1b;Cl…

Java 高并发下的实践

一、使用的技术HashMap ConcurrentHashMap Lock ReadWriteLock synchronized 二、一百万并发下的组合 ConcurrentLockMap /** To change this license header, choose License Headers in Project Properties.* To change this template file, choose Tools | Templates* …

java oca_OCA第2部分中的Java难题

java oca欢迎使用OCA的Java Puzzlers的第二部分。 在这一部分中&#xff0c;我们将看到一个有趣的案例&#xff0c;涉及Java 7附带的数字文字中的下划线分隔符。 在下面的类中&#xff0c;您可以在十进制文字中看到分隔符下划线。 还请注意&#xff0c;该类现在可以正常编译。…

jvm(2)-OutOfMemoryError 异常(内存溢出异常)

【0】README0.1&#xff09;本文转自 深入理解 jvm&#xff0c; 旨在学习 OutOfMemoryError 异常&#xff08;内存溢出异常&#xff09; 的触发类型&#xff1b;0&#xff09;准备知识0.1&#xff09;除了程序计数器外&#xff0c;虚拟机内存的其他几个运行时区域&#xff08;方…

java oca_OCA第7部分中的Java难题

java oca在OCA系列的Java Puzzlers的这一部分中&#xff0c;我将展示定义字符串和与之相关的潜在惊喜的多种方法。 创建字符串的两种基本类型是使用new关键字和仅使用字符串文字来创建。 String strWithNew new String( "hey" ); String strWithLiteral "ho&…

Java GC总结

一、gc两大基本算法1、引用计数法 2、根搜索法 二、gc改进收集算法 1、标记-清除算法 2、复制算法 3、标记-整理算法 分代收集算法 三、gc的类型 串行垃圾回收器&#xff08;Serial Garbage Collector&#xff09; 并行垃圾回收器&#xff08;Parallel Garbage Collecto…

让CentOS能用yum自动安装rar和unrar

【0】README 0.1&#xff09;本文转自&#xff1a; http://www.centoscn.com/CentOS/config/2015/0520/5485.html 目的&#xff1a;让CentOS能用yum自动安装rar和unrar 系统环境&#xff1a; CentOS 7.0 具体操作步骤如下&#xff1a; 1.编辑文件 编辑dag.repo文件&#xff0c…

java oca_OCA第6部分中的Java难题

java oca即使对于新的Java开发人员&#xff0c;构造函数也可能不是什么大谜。 本质上&#xff0c;当您创建一个类的实例时&#xff0c;该类的构造函数就会启动。 在Java Puzzlers系列的第6部分中&#xff0c;我们将看到一个与构造函数有关的案例。 public class Puzzler { publ…

Java 内存泄露总结

一、Java内存泄漏引起的原因&#xff1a;内存泄漏是指无用对象&#xff08;不再使用的对象&#xff09;持续占有内存或无用对象的内存得不到及时释放&#xff0c;从而造成内存空间的浪费称为内存泄漏。 二、内存泄露的方式 1、静态集合类引起内存泄漏 像HashMap、Vector等的使…

使用Mockito的Mock Void方法

大家好&#xff01; 在我们之前的博客关于thenReturn和thenAnswer模拟方法之间的区别之后 &#xff0c;我们又回来了关于Mockito的另一个有趣的博客。 在这里&#xff0c;我们将讨论“如何用Mockito模拟无效方法”。 让我们开始吧&#xff01; 在编写代码时&#xff0c;总是至…

System.gc()调用 - 适用的场景

一、System.gc()调用 System.gc()用于调用垃圾收集器&#xff0c;在调用时&#xff0c;垃圾收集器将运行以回收未使用的内存空间。它将尝试释放被丢弃对象占用的内存。然而System.gc&#xff08;&#xff09;调用附带一个免责声明&#xff0c;无法保证对垃圾收集器的调用。我们…