我试图找出特定情况下的最佳容量和负载系数.我想我已经掌握了它的要点,但我还是要感谢那些比我更了解的人的确认.:)
如果我知道我的HashMap将填充包含100个对象,并且大部分时间都会花费100个对象,我猜测最佳值是初始容量100和加载因子1?或者我需要容量101,还是有其他问题?
编辑:好的,我留出几个小时做了一些测试.结果如下:
EDIT2:我也添加了一些图表.这是说明加载因子0.75和1之间的差异的一个,在我初始化HashMap并将其填充到满容量的情况下.在y标度上是以ms为单位的时间(越低越好),x标度是大小(对象的数量).由于尺寸线性变化,所需时间也呈线性增长.
所以,让我们看看我得到了什么.以下两个图表显示了负载系数的差异.第一张图表显示了当HashMap填满容量时会发生什么; 由于调整大小,负载系数0.75表现更差.然而,它并不总是更糟糕,并且有各种各样的颠簸和跳跃 - 我想GC在这方面有重大影响.载荷系数1.25与1相同,因此它不包含在图表中.
该图表证明由于调整大小,0.75更差; 如果我们将HashMap填充到一半容量,0.75并不差,只是......不同(它应该使用更少的内存并且具有不可思议的更好的迭代性能).
还有一件事我想表现出来.这可以获得所有三个加载因子和不同HashMap大小的性能.除了加载因子1的一个峰值之外,一直保持不变.我真的想知道那是什么(可能是GC,但谁知道).
以下是感兴趣的人的代码:
import java.util.HashMap;
import java.util.Map;
public class HashMapTest {
// capacity - numbers high as 10000000 require -mx1536m -ms1536m JVM parameters
public static final int CAPACITY = 10000000;
public static final int ITERATIONS = 10000;
// set to false to print put performance, or to true to print get performance
boolean doIterations = false;
private Map<Integer, String> cache;
public void …
Run Code Online (Sandbox Code Playgroud) 您使用什么策略来避免在版本控制中存储密码?
目前,我将开发/测试/生产密码保存在三个不同的文件中,并在部署期间使用相应的文件.所有这些都致力于版本控制,但我对此并不满意,因为并非所有开发人员都需要知道这些密码(特别是外包的密码,只有在他们的项目持续时才可以访问,这可能只有一个月).
在数据库中存储密码不是一个很好的选择:
我正在考虑将部署配置从开发人员计算机移动到专用计算机,该计算机从版本控制中检出代码并运行构建/部署脚本,但我不确定最好的方法是什么.
我还需要说我不想要最终的安全性:我只是想避免在每个开发人员的磁盘上使用密码并使其变得太容易.
所以我要求你的经验/最佳实践.你怎么做呢?
这应该是非常简单的,但无论我尝试什么,我都无法工作.我正在尝试将Google Analytics与GWT应用程序结合使用.根据我的理解,有两种方法可以做到:
首先是同步,通过在<head>部分HTML页面的末尾插入跟踪代码,然后调用此方法:
public static native void recordAnalyticsHit(String pageName) /*-{
pageTracker._trackPageview(pageName);
}-*/;
Run Code Online (Sandbox Code Playgroud)
其次是异步,通过在<body>标签之后插入跟踪代码然后调用此方法:
public static native void recordAnalyticsHit(String pageName) /*-{
_gaq.push(['_trackPageview(' + pageName + ')']);
}-*/;
Run Code Online (Sandbox Code Playgroud)
但是,在运行这些方法时,我会在托管模式下获得此异常:
[ERROR] [myproject] Uncaught exception escaped
com.google.gwt.core.client.JavaScriptException: (ReferenceError): pageTracker is not defined
[ERROR] [myproject] Uncaught exception escaped
com.google.gwt.core.client.JavaScriptException: (ReferenceError): _gaq is not defined
Run Code Online (Sandbox Code Playgroud)
在观察Firebug中的网站时,我看到ga.js被加载了,但就是这样.
有没有人让Google Analytics与GWT合作?此外,_gaq是否接受页面名称作为trackPageview参数,因为我见过的所有示例都使用此调用:
_gaq.push(['_trackPageview()']);
Run Code Online (Sandbox Code Playgroud)
(当然,这对我也不起作用.)
GWT没有正确地序列化Java Date.当我尝试通过电汇发送在Javascript中创建的日期时,我发现在1983年之前的4月1日(有趣)和10月25日之间的日期减去了一天.
这意味着,例如,1982-04-01和1982-03-31都在Java方面成为1982-03-31.
鉴于有问题的日期,我猜这是某种DST问题.我试过谷歌搜索,发现只有一个其他参考描述类似的问题.
我也试过向GWT团队提交bug,但奇怪的是没能找到GWT的bugtracker.
所以,我的问题是:
其他人遇到这个?我正在使用GWT 1.7,并且想确认这是否也发生在2.0上.
我的解决方法是将日期作为字符串发送,并在服务器上解析它们.谁知道更好的解决方法?
我有点困惑如何创建http-kit WebSocket客户端.在网站上有一个例子如何创建WebSocket服务器,创建客户端可能是微不足道的,但我似乎无法做到正确.那些没有专注于Javascript客户端的例子?
PS在这个问题中有一些讨论,但只有aleph示例,并且表明http-kit现在支持WebSocket客户端.
我正在尝试建立更正式的要求和测试程序,但我找不到任何有关文档的参考示例.
目前,在功能冻结测试人员在部署之前"点击应用程序"之后,然而没有正式的规范需要测试什么.
首先,我正在考虑一个文档,它指定了需要测试的每个功能,如下所示(这样做):
...等等.在程序员开始编码之前,这也可以作为客户可以作为需求的一部分签名的东西.功能列表完成后,我正在考虑将此列表放在电子表格的第一列,该列表还说明功能上次测试的时间,功能是否正常,如果不起作用,它是如何中断的.这将为我提供一个测试人员可以在每个测试周期后填写的文档,以便程序员必须执行列表,其中包含不起作用的信息以及何时中断.
其次,我正在考虑测试人员的测试用例,详细步骤如下:
这将为测试人员提供特定的案例和清单,以及第一个文档中的功能指针.这也可以让我开始自动化测试过程(目前我们除了单元测试之外没有太多的测试自动化).
我正在寻找其他人如何做到这一点的例子,没有太多的文书工作.通常,测试人员应该能够在一两个小时内完成所有测试.我正在寻找一种简单的方法来让客户同意我们应该为下一个版本实现哪些功能,以及测试人员验证所有新功能是否已实现以及所有现有功能是否正常工作,并将其报告给程序员.
这主要是内部测试材料,应该是几个Word/Excel文档.我试图在两天内保持一个测试/错误修复周期.我正在跟踪编程时间,以其他方式实现新功能和客户票证(JIRA),这基本上就是测试文档.这是我想到的生命周期:
有没有人有指针可以找到一些带有测试用例的示例文档?此外,欢迎所有关于我上面概述的过程的提示.:)
我一直在努力让GWT与Spring合作一段时间.是否有人使用Spring的官方Eclipse GWT插件,谁设法使用该组合的托管模式?
我正在使用GWTController通过dispatcher-servlet.xml初始化GWT.由于我的WEB-INF不在战争中,但在WebContent文件夹中,我在将Java代码编译为.js时使用"-war WebContent"开关.
至于托管模式...如果我尝试通过IDE(作为Web应用程序运行)运行它,我得到"启动失败 - 无法在项目MyProject中找到任何主机页面." 我尝试使用Ant任务运行它,如下所示:
<condition property="XstartOnFirstThread" value="-XstartOnFirstThread">
<os family="mac"/>
</condition>
<condition property="XstartOnFirstThread" value="">
<not><os family="mac"/></not>
</condition>
<target name="hosted" depends="" description="Run hosted mode">
<java failonerror="true" fork="true" classname="com.google.gwt.dev.HostedMode">
<classpath>
<pathelement location="src" />
<path refid="my-client-classpath" />
</classpath>
<jvmarg value="-Xmx256M" />
<jvmarg line="${XstartOnFirstThread}" />
<arg value="-startupUrl" />
<arg value="MyPage.html" />
<arg value="my.gwt.client.Whatever" />
</java>
</target>
Run Code Online (Sandbox Code Playgroud)
这导致托管模式启动,但我得到404而不是我的网页...
编辑:当我进入托管模式时,我看到带有已编译的Javascript代码的文件夹,但没有别的.所以我的问题基本上是有人得到了一个很好的教程或他可以分享的设置?在网上有很多半生不熟的信息,但我无法使其中的任何一个工作.
编辑2:这是我的.gwt.xml文件,它非常基本:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.7.1//EN" "http://google-web-toolkit.googlecode.com/svn/tags/1.7.1/distro-source/core/src/gwt-module.dtd">
<module rename-to='whatever'>
<!-- Inherit the core Web Toolkit stuff. …
Run Code Online (Sandbox Code Playgroud) 可以安全地假设 org.springframework.context.MessageSource 接口的所有实现在初始化后都是线程安全的吗?
我希望它是安全的,但现在我正在查看 Spring 源代码,并且有 org.springframework.context.support.ReloadableResourceBundleMessageSource 会不时重新加载属性,并且文档没有说明任何有关线程安全的信息。 ..
编辑:看来 ReloadableResourceBundleMessageSource 确实在需要的地方同步......但是我原来的问题仍然存在。
在GWT中序列化BigDecimal的首选方法是什么?
有没有聪明的解决方法,或者你只是使用Double或String?
在所有GWT痛苦中,这是迄今为止最大的痛苦; 我讨厌创建两个模型,一个用于服务器,一个用于GWT,并将数据从一个转换为另一个.另一方面,虽然我不太关心使用String而不是javax.xml.datatype.Duration,但由于计算,我必须在服务器上使用BigDecimal,这意味着两个模型和转换,或者每次计算都需要大量的BigDecimal转换.
这应该很简单,但不知怎的,我找不到在GWT中创建简单超链接的方法.基本上,我想在用户点击某些内容时加载另一个页面.
Hyperlink似乎只指向内部GWT应用程序状态.我想我可以将链接放在HTML代码中,但是如何在Java中创建呢?