我正在寻找最快的方法来确定一个long
值是否是一个完美的正方形(即它的平方根是另一个整数):
Math.sqrt()
函数以简单的方式完成了它,但我想知道是否有办法通过将自己限制为仅整数域来更快地完成它.这是我现在正在做的非常简单直接的方式:
public final static boolean isPerfectSquare(long n)
{
if (n < 0)
return false;
long tst = (long)(Math.sqrt(n) + 0.5);
return tst*tst == n;
}
Run Code Online (Sandbox Code Playgroud)
注意:我在许多Project Euler问题中使用此函数.因此,没有其他人必须维护此代码.而这种微优化实际上可以产生影响,因为部分挑战是在不到一分钟的时间内完成每个算法,并且在某些问题中需要将此函数调用数百万次.
我尝试过不同的问题解决方案:
0.5
不需要添加Math.sqrt()的结果,至少在我的机器上没有.Math.sqrt()
.这可能是因为Math.sqrt()
使用类似牛顿方法的东西,但在硬件中实现,因此它比Java快得多.此外,牛顿的方法仍然需要使用双打.Math.sqrt()
.or
在C++中使用语句比使用语句更快switch
,但在Java和C#中,or
和之间似乎没有区别switch
.or
我会说,而不是开关或声明if(lookup[(int)(n&0x3F)]) { test } else return false; …
CSS规则visibility:hidden
和display:none
两个结果中的元素不可见.这些同义词是?
我注意到一些浏览器(特别是Firefox和Opera)非常热衷于使用.css和.js文件的缓存副本,即使在浏览器会话之间也是如此.当您更新其中一个文件但用户的浏览器继续使用缓存副本时,这会导致问题.
问题是:在更改文件时,强制用户浏览器重新加载文件的最优雅方法是什么?
理想情况下,解决方案不会强制浏览器在每次访问页面时重新加载文件.我会发布自己的解决方案作为答案,但我很好奇,如果有人有更好的解决方案,我会让你的投票决定.
更新:
在这里讨论了一段时间后,我发现John Millikin和da5id的建议很有用.事实证明,有一个术语:自动版本控制.
我在下面发布了一个新的答案,它是我原来的解决方案和John的建议的组合.
SCdF建议的另一个想法是将伪造的查询字符串附加到文件中.(一些Python代码自动使用时间戳作为伪造的查询字符串由pi提交.).但是,有一些关于浏览器是否会使用查询字符串缓存文件的讨论.(请记住,我们希望浏览器缓存文件并在以后的访问中使用它.我们只希望它在更改后再次获取文件.)
由于不清楚伪造的查询字符串会发生什么,我不接受这个答案.
我可以使用什么程序来反编译类文件?我真的会获得Java代码,还是只是JVM汇编代码?
关于这个站点上的Java性能问题,我经常看到那些"反编译"Java类文件的人的反应,看看编译器如何优化某些东西.
我保存在一个目录中的文件数量是否重要?如果是这样,目录中有多少文件太多,文件太多会有什么影响?(这是在Linux服务器上.)
背景:我有一个相册网站,上传的每个图像都重命名为8位十六进制数字(例如a58f375c.jpg).这是为了避免文件名冲突(例如,如果上传了大量"IMG0001.JPG"文件).原始文件名和任何有用的元数据都存储在数据库中.现在,我在images目录中有大约1500个文件.这使得列出目录中的文件(通过FTP或SSH客户端)需要几秒钟.但我看不出它除此之外还有什么影响.特别是,对于向用户提供图像文件的速度似乎没有任何影响.
我想过通过制作16个子目录来减少图像数量:0-9和af.然后我会根据文件名的第一个十六进制数字将图像移动到子目录中.但我不确定是否有任何理由这样做,除了偶尔通过FTP/SSH列出目录.
我有一个Node.js项目需要Node 12或更高版本.有没有办法在packages.json文件中指定它,以便安装程序会自动检查并通知用户是否需要升级?
我正在使用Eclipse生成.equals()
和.hashCode()
,并且有一个选项标记为"使用'instanceof'来比较类型".默认情况下,此选项可以取消选中并用于.getClass()
比较类型.有什么理由我应该喜欢.getClass()
过instanceof
?
不使用instanceof
:
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Run Code Online (Sandbox Code Playgroud)
使用instanceof
:
if (obj == null)
return false;
if (!(obj instanceof MyClass))
return false;
Run Code Online (Sandbox Code Playgroud)
我通常检查instanceof
选项,然后进入并删除" if (obj == null)
"检查.(这是多余的,因为空对象总是会失败instanceof
.)有什么理由不好吗?
MATLAB中是否有foreach结构?如果是这样,如果基础数据发生变化(即对象是否添加到集合中)会发生什么?
如何计算多个数字的最小公倍数?
到目前为止,我只能在两个数字之间进行计算.但不知道如何扩展它来计算3个或更多数字.
到目前为止,这就是我做到的
LCM = num1 * num2 / gcd ( num1 , num2 )
Run Code Online (Sandbox Code Playgroud)
使用gcd是计算数字的最大公约数的函数.使用欧几里得算法
但我无法弄清楚如何计算3个或更多数字.
在多个课程,书籍和工作中,我看到将文本字段定义为VARCHAR(255)作为"短"文本的默认类型.有没有什么好的理由经常选择长度为255,而不是一个漂亮的圆数?在有充分理由(无论今天是否适用)的情况下,过去的某个时间是坚持吗?
当然,我意识到,如果你以某种方式知道字符串的最大长度,那么更严格的限制会更理想.但是如果你使用VARCHAR(255)可能表示你不知道最大长度,那只是它是一个"短"字符串.
注意:我发现这个问题(VARCHAR(255)V TINYBLOB v TINYTEXT),它表示,VARCHAR(Ñ)需要Ñ 1个字节的存储空间用于Ñ <= 255,Ñ 2个字节的存储对的Ñ > 255.这是唯一的原因吗?这似乎有点武断,因为与VARCHAR(256)相比,你只能保存两个字节,你可以通过声明VARCHAR(253)轻松地保存另外两个字节.
java ×3
css ×2
math ×2
algorithm ×1
caching ×1
database ×1
decompiler ×1
eclipse ×1
equals ×1
filesystems ×1
instanceof ×1
javascript ×1
lcm ×1
limit ×1
matlab ×1
node.js ×1
npm ×1
optimization ×1
package ×1
syntax ×1
types ×1
varchar ×1
version ×1
visibility ×1