我们在64位Linux 2.6服务器上运行32位Sun Java 5 JVM,但显然这会将每个进程的最大内存限制为2GB.所以我们建议我们升级到64位JVM以消除限制.我们目前在服务器上运行多个JVM(Tomcat实例)以保持在2GB的限制之下,但我们想整合它们以简化部署.
如果你已经这样做了,你能分享一下你的经历吗?你在生产中运行64位JVM吗?你会建议留在Java 5,还是可以同时转向Java 6 和 64位?我们是否应该期待性能问题,无论是好还是坏?我们应该关注回归测试的任何特定领域吗?
谢谢你的任何提示!
最近,我遇到了许多依赖"属性文件"进行配置的Java代码.但是代码不是普通的旧字符串文字,而是使用常量(静态最终字符串)来检索属性值.
我发现这种额外的间接级别很烦人,因为我需要在EITHER方向上执行两次查找.如果我从配置文件中观察到的属性开始,我必须首先搜索属性名称以找到Java常量,然后再次搜索以在代码中查找对常量的引用.如果我从代码开始,我必须找到常量的实际值,然后才能确定配置文件中属性的值!
重点是什么?
我理解使用常量引用资源包中的键的价值,通常支持i18n.我指的是简单的,非面向用户的配置值.我能想到的唯一原因是为了让以后更改属性名称变得容易,但这个好处远远小于骚动恕我直言,特别是考虑到全球搜索和替换的简易性.
我试图想出一个优雅的方法,从一个函数创建一个列表,在Python和Ruby中产生值.
在Python中:
def foo(x):
for i in range(x):
if bar(i): yield i
result = list(foo(100))
Run Code Online (Sandbox Code Playgroud)
在Ruby中:
def foo(x)
x.times {|i| yield i if bar(i)}
end
result = []
foo(100) {|x| result << x}
Run Code Online (Sandbox Code Playgroud)
虽然我喜欢用两种语言工作,但我总是对Ruby版本有点困扰,不得不初始化列表然后填写它.Python的yield结果是简单的迭代,这很棒.Ruby会yield调用一个块,这也很棒,但是当我只想填写一个列表时,感觉有点笨重.
有更优雅的Ruby方式吗?
更新重写示例以显示函数产生的值的数量不一定等于x.
我可以问一个面试候选人哪些问题可以让我知道他是否是一个"复制粘贴编码器"?
我们发现即使候选人在面试中很好地回答编码问题,一旦在工作中他们仍然倾向于复制而不是重构.
其他人有类似的经历吗?
让我们说你有一些资源清理如下:这是C#.
try{/*stuff*/}
catch(Exception e) {/*rollback logs etc.*/}
finally{
if( context.Transaction != null )
context.Transaction.Dispose();
context.Connection.Close();
context.Connection.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
相反,这样做会更强大吗?
try{/*stuff*/}
catch(Exception e) {/*rollback logs etc.*/}
finally{
try{
if( context.Transaction != null )
context.Transaction.Dispose();
}catch(Exception e){/*logs*/}
finally{
context.Connection.Close();
context.Connection.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
这样,如果transaction.dispose在leat处设置为失败,则连接将有机会关闭.