Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
何时考虑java中的代码效率?_Java_Algorithm_Performance_Functional Programming_Big O - Fatal编程技术网

何时考虑java中的代码效率?

何时考虑java中的代码效率?,java,algorithm,performance,functional-programming,big-o,Java,Algorithm,Performance,Functional Programming,Big O,这些天,我在学校学习不同的Java代码效率(big-O)。 我不禁想知道,什么时候在真实世界编程中考虑代码效率。 这是程序员在PDL/Pseudo阶段考虑的问题吗? 或者就在你写代码的时候 我很感激你的想法 请注意,下面的内容相当笼统,因为这个问题非常基本 在现实世界中,程序员往往在设计阶段关注效率,通常在以下情况下: 他们正在解决的问题是时间关键性的(例如:视频渲染和图像处理) 他们正在处理的数据量太大(例如:分析来自提要的数十亿个字符串) 除此之外,他们大多使用现成的方法和设计原则 在某

这些天,我在学校学习不同的Java代码效率(big-O)。 我不禁想知道,什么时候在真实世界编程中考虑代码效率。

这是程序员在PDL/Pseudo阶段考虑的问题吗? 或者就在你写代码的时候

我很感激你的想法

请注意,下面的内容相当笼统,因为这个问题非常基本

在现实世界中,程序员往往在设计阶段关注效率,通常在以下情况下:

  • 他们正在解决的问题是时间关键性的(例如:视频渲染和图像处理)
  • 他们正在处理的数据量太大(例如:分析来自提要的数十亿个字符串)
除此之外,他们大多使用现成的方法和设计原则

在某些情况下,代码审查会捕获缺乏经验的开发人员的糟糕实现,并且会进行大量的返工和学习:)

有时,一些现有的实现是性能密集型的,并且由于各种原因(知识贫乏、时间限制、“当时是个好主意”、对问题的理解不清楚等)。在这种情况下,通常会对实现进行事后修复,在这些情况下,还会考虑更好的实现和效率

还请注意Knuth的名言:

我们应该忘记小效率,比如说97%的时间:过早优化是万恶之源。然而,我们不应该在这关键的3%中放弃我们的机会

在已建立的工程学科中,12%的改进是很容易获得的,从来没有被认为是边际的,我相信同样的观点应该在软件工程中盛行

因此,需要在时间投资、复杂性和优化之间取得平衡。要了解更多信息,请阅读。

注意,以下内容相当通用,因为这个问题非常基本

在现实世界中,程序员往往在设计阶段关注效率,通常在以下情况下:

  • 他们正在解决的问题是时间关键性的(例如:视频渲染和图像处理)
  • 他们正在处理的数据量太大(例如:分析来自提要的数十亿个字符串)
除此之外,他们大多使用现成的方法和设计原则

在某些情况下,代码审查会捕获缺乏经验的开发人员的糟糕实现,并且会进行大量的返工和学习:)

有时,一些现有的实现是性能密集型的,并且由于各种原因(知识贫乏、时间限制、“当时是个好主意”、对问题的理解不清楚等)。在这种情况下,通常会对实现进行事后修复,在这些情况下,还会考虑更好的实现和效率

还请注意Knuth的名言:

我们应该忘记小效率,比如说97%的时间:过早优化是万恶之源。然而,我们不应该在这关键的3%中放弃我们的机会

在已建立的工程学科中,12%的改进是很容易获得的,从来没有被认为是边际的,我相信同样的观点应该在软件工程中盛行


因此,需要在时间投资、复杂性和优化之间取得平衡。要了解更多信息,请阅读。

如果您在PDL阶段可以看到,对于非常大的n,复杂性将是O(2^n),甚至是O(n^2),那么您会再想一想,但即使如此,您也可能会对这些位进行原型化,以了解会发生什么


通常情况下,你会先把事情做好,因为在它正确之前,你无法真正判断它的速度有多快,然后你会使用探查器(例如,对于一个非常简单的例子)查看它实际在哪里消耗cpu,然后专注于这些位。

如果你能在PDL阶段看到复杂性将是O(2^n)甚至O(n^2)对于非常大的n,你们会再想一想,但即使这样,你们也可以对这些比特进行原型化,看看会发生什么


通常情况下,你会先把事情做好,因为在它正确之前,你无法真正判断它的速度有多快,然后你会使用探查器(例如,对于一个非常简单的例子)查看它实际在哪里消耗cpu,然后专注于这些位。

大O表示法是表示算法效率的一种很好的方法,但是,在企业系统中处理代码时,事情通常会变得更加复杂。从长远来看,系统的整体架构以及它所运行的基础设施可能会产生更大的影响(而且修复成本也更高),因为它们是错误的


当工程师使用性能分析器和其他工具识别出瓶颈,并希望在瓶颈所在的领域实现更高效的算法时,他们肯定会考虑(或考虑)大O表示法。

大O表示法是表示算法效率的一种很好的方法,但是,在企业系统中处理代码时,事情通常会变得更加复杂。从长远来看,系统的整体架构以及它所运行的基础设施可能会产生更大的影响(而且修复成本也更高),因为它们是错误的


当工程师使用性能分析器和其他工具识别出瓶颈,并希望在瓶颈所在的领域实现更高效的算法时,他们肯定会考虑(或考虑)大O符号。

我使用它在集合之间进行选择。剩下的时间我度量.StackOverflow是关于编程问题的问题。试着交换。只有在重要的时候。(令人惊讶的是)通常不重要。当你知道的时候,你应该考虑效率。