好的,所以我已经阅读了关于教授初学者编程的各种帖子,并且我会更仔细地看一些有用的东西.但我想知道的是,是否有任何有效的工具专门教孩子Java?
我想特别教他Java,因为(a)我在CI中的强大背景感觉太复杂了,(b)Java是我非常了解的另一种语言,因此我可以有意义地帮助而不需要自学一个新的但是me)无用的语言,(c)我认为托管语言是未来,最后(d)Java是我熟悉的所有语言中最简单的语言之一(除了基本语言).
我在基础学习,并且我愿意首先教授,但我不知道一个体面的免费Windows基础shell(虽然我没有真正搜索过,但因为它不是我的第一选择),并且无论如何都想要进步快到Java.
我儿子8岁,所以比我开始早了几年 - 但他表示有兴趣学习编程(可能是因为我在家工作很多,他一直看我编程).
如果没有人可以建议为此目的设计的工具,我可能会开始使用基于文本/控制台的应用程序来教授基础知识,然后进入GUI构建.
哦,最后一件事,我不是IDE(老式文本编辑器类型)的粉丝,所以我不会被一个让他输入真实代码的系统推迟,并且可能更喜欢玩玩具拖动/下降系统.
编辑:只是为了澄清; 我真的特别想要教他Java的方法; 已经有很多帖子对其他语言替代方案有很好的答案 - 但这不是我在这里寻找的.
编辑:2D视频游戏的Java框架怎么样 - 任何人都可以从个人经验推荐其中任何一个吗?我喜欢他的想法,从他的机制开始(主要游戏循环,得分等)并添加他自己想象的游戏的细节 - 这就是我做的,虽然对我来说这是一个基本的Commodore VIC-20和辛克莱ZX-81.
Java 6是否比大预期的应用程序消耗更多的内存?
我有一个我已经开发多年的应用程序,直到现在我的特定测试配置大约需要30-40 MB; 现在使用Java 6u10和11,它在活动时需要几百个.它反弹很多,在50M到200M之间的任何地方,当它空转时,它会执行 GC并将内存放下.此外,它还会产生数百万的页面错误.所有这些都是通过Windows任务管理器观察到的.
因此,我在我的探查器(jProfiler)下运行它并使用jVisualVM,它们都指示通常适度的堆和大约30M的用户使用,即使完全处于我的负载测试周期.
所以我很神秘!它不只是从Windows虚拟内存池中请求更多内存 - 这显示为200M"内存使用".
澄清:我希望对此非常清楚 - 使用Java VisualVM在18小时内观察到类堆和perm gen堆已经完全稳定.分配的易失性堆(eden和tenured)不动以16MB(它在最初的几分钟内到达),并且这个内存的使用波动在一个完美的模式,从8MB到16MB均匀增长,此时GC启动将它降回8MB.在这18小时的时间内,系统在进行压力测试后处于恒定的最大负载下.在许多运行中都可以看到这种行为完美且一致的可重复性.唯一的异常现象是,虽然这是通过任务管理器观察到的从Windows获取的内存,但从64MB到900 + MB的所有地方都会出现波动.
更新2008-12-18:我用-Xms16M -Xmx16M运行程序没有任何明显的不利影响 - 性能很好,总运行时间大致相同.但是短时间内的内存使用量仍然达到了180M左右.
更新2009-01-21:似乎答案可能是线程数 - 请参阅下面的答案.
编辑:我的意思是数百万页错误 - 在30M +区域.
编辑:我有一台4G机器,所以200M在这方面并不重要.
我有一个可编辑的 JComboBox,我希望在文本更改时通过键入或选择来执行某些操作.在这种情况下,文本是一种模式,我想验证模式是否有效并显示导致某些测试数据的匹配.
完成了显而易见的事情,附上了一个ActionHandler,我发现,对于打字,事件似乎不可靠,最好(选择很好).而当它做火打字的结果,文字检索(使用getEditor().getItem()时,因为getSelectedItem()只得到,当它被从列表中选择文本)似乎是文本,因为它是当最后一个事件被触发 - 也就是说,它始终缺少在触发动作事件之前立即输入的字符.
我预计动作事件会在一段短暂的延迟(500毫秒到1秒)后触发,但它似乎会在键入时立即触发(如果它被触发).
我能想到的唯一可行的替代方案是简单地在焦点获得时启动1秒计时器,在焦点丢失时将其杀死,并在内容与上次不同时执行计时器操作.
有什么想法或建议吗?
代码片段不是特别有趣:
find.addActionListener(this);
...
public void actionPerformed(ActionEvent evt) {
System.out.println("Find: "+find.getEditor().getItem());
}
Run Code Online (Sandbox Code Playgroud) 我有一个用Java编写的内部HTTP服务器; 完整的源代码供我使用.HTTP服务器可以配置任意数量的网站,每个网站都有一个单独的监听套接字创建:
skt=SSLServerSocketFactory.getDefault().createServerSocket(prt,bcklog,adr);
Run Code Online (Sandbox Code Playgroud)
使用使用Java keytool创建的标准密钥库,我不能在我的生活中找出如何获得与不同侦听套接字关联的不同证书,以便每个配置的网站都拥有自己的证书.
我现在正处于这种状态,因此一些代码示例将非常受欢迎.但是我很欣赏JSSE如何在这方面联系起来的任何好的概述(我已经搜索了Sun的JSSE doco,直到我的大脑疼痛(字面意思;虽然它可能与咖啡因戒断一样多)).
编辑
有没有简单的方法来使用别名将密钥存储区中的服务器证书与侦听套接字相关联?以便:
我得到的印象(今天下午早些时候)我可以编写一个简单的KeyManager,只chooseServerAlias(...)返回非null,这是我想要的别名的名字 - 任何人对这一推理线有什么想法?
解
我使用的解决方案是根据slyvarking的回答构建的,它创建了一个临时密钥库,并使用从单个外部密钥库中提取的所需密钥/证书填充它.对于任何感兴趣的人(svrctfals是我的"服务器证书别名"值),代码如下:
SSLServerSocketFactory ssf; // server socket factory
SSLServerSocket skt; // server socket
// LOAD EXTERNAL KEY STORE
KeyStore mstkst;
try {
String kstfil=GlobalSettings.getString("javax.net.ssl.keyStore" ,System.getProperty("javax.net.ssl.keyStore" ,""));
String ksttyp=GlobalSettings.getString("javax.net.ssl.keyStoreType" ,System.getProperty("javax.net.ssl.keyStoreType" ,"jks"));
char[] kstpwd=GlobalSettings.getString("javax.net.ssl.keyStorePassword",System.getProperty("javax.net.ssl.keyStorePassword","")).toCharArray();
mstkst=KeyStore.getInstance(ksttyp);
mstkst.load(new FileInputStream(kstfil),kstpwd);
}
catch(java.security.GeneralSecurityException thr) {
throw new IOException("Cannot load keystore ("+thr+")");
}
// CREATE EPHEMERAL KEYSTORE FOR THIS SOCKET USING DESIRED CERTIFICATE
try {
SSLContext ctx=SSLContext.getInstance("TLS"); …Run Code Online (Sandbox Code Playgroud) 鉴于在JavaScript中
console.log("var F=new Boolean(false)")
console.log("( F != (F==false))",(( F != (F==false)) ? "TRUE" : "false"));
console.log("(!F != (F==false))",((!F != (F==false)) ? "TRUE" : "false"));
Run Code Online (Sandbox Code Playgroud)
打印:
( F != (F==false)) TRUE
(!F != (F==false)) TRUE
Run Code Online (Sandbox Code Playgroud)
这意味着在典型条件下布尔对象不是dop-in替代布尔基元,例如:
if(someBoolean) ... // always true
if(!someBoolean) ... // always false
Run Code Online (Sandbox Code Playgroud)
JavaScript Set和Map集合允许任何类型,包括基元.
特别是布尔对象有什么用处; 和一般表示其他原始类型的对象,因为它们在与它们相关的一致性方面有各种奇怪的东西?
注意:我具体询问用例(如果有的话)是什么,而不是它们与原始对应物的区别.
我有一个MDF文件,我在使用MSTEST进行测试时附加到我的本地SQL服务器,我不想在运行测试集50次后手动删除这些临时数据库.(我已经这样做了,我不喜欢它..<)在我的TestCleanup方法中,我正在寻找一种从服务器中删除数据库的方法.我只需要一些关于我将用来执行此操作的SQL语句的指导.
思考?
Thx提前!:d
编辑(由软件猴子,从OP的拒绝编辑到ODED的答案)
这是适合我的代码:
var server = new Server(serverName); // Can use overload that specifies
foreach (Database db in server.Databases)
{
if (db.Name.ToLower().Contains(testDatabaseIdentifier))
{
databasesToDelete.Add(db.Name);
}
}
databasesToDelete.ForEach(x =>
{
Database db = new Database(server, x);
db.Refresh();
db.Drop();
});
Run Code Online (Sandbox Code Playgroud) 我正在考虑为BigDecimal写两个有限精度的替代品,即DecimalInt和DecimalLong.这些将能够处理int和long的实际边界内的数字以及任意数量的小数位,可以以可变形式和不可变形式创建.我的计划是使DecimalInt支持+/- 999,999,999到+/- 0.999999999和DecimalLong相同,但最多18位数.
这可以通过将DecimalInt的十进制数字计数值保持为0-9,将DecimalLong的十进制数字计数值保持为0-18以及存储为缩放的int或long的实际值来完成.正常使用的是小数字小数,例如金钱和股票价格,通常为2-4位小数.
基本要求是(a)精益足迹(2个类,加上OverflowException),以及(b)完全支持所有基本操作以及所有有意义的数学.
谷歌搜索结果没有返回任何明显的命中 - 它们似乎都属于任意小数.
我的问题是:这已经完成了吗?这有隐藏的微妙之处,这就是为什么它还没有完成?有没有人听说过Java支持像DotNet这样的十进制类型的传言.
编辑:这与BigDecimal不同,因为它应该是(a)不处理一组int的更高效的地狱,并且(b)它不会包装BigInteger所以它也会在内存上更精简,并且(c)它有一个可变选项,所以它也会更快.总而言之 - 对于简单的用例,例如"我想存储银行余额而没有BigDecimal的开销和双精度的不准确性",开销更少.
编辑:我打算用int或long做所有的数学运算来避免经典问题:1586.60-708.75 = 877.8499999999999而不是877.85
这个想法是帮助确定给定Java应用程序的最佳堆栈大小.
使用此信息可以完成的一件事是创建一个堆栈大小的范围表,线程可以在它们退出时修改,并且可以在应用程序退出时定期转储.
编辑:这是在具有真实工作负载的客户机器上运行的环境,我无法获取探查器访问权限.
编辑2:回答一个答案,在(IIRC)每个线程256Kb,我想知道现在有多接近现实需要的东西(我也想知道这个问题可能不是很相关,因为堆栈空间可能是根据需要分配).我们有一个基于消息传递和高度线程化的应用服务器,可运行从ARM手持设备到octo-core Linux,到中型和大型机的所有东西 - 我们可以感受到我们可以交易的位置(以及如果)堆栈空间堆栈在具有许多消息处理程序的系统上.
有一些类似的问题值得关注,但它们是原生的/特定于os的:
Herbert Schildt写道:
重要的是要理解将整个Java程序一次性编译成可执行代码是不切实际的,因为Java执行各种运行时检查,只能在运行时完成.
他的意思是什么运行时检查?
请解释一块一块地编译字节码的原因,而不是整个程序.
我正在尝试设置一个脚本来生成一组特定的测试数据到我的数据库中,在开始时我想清除相关的表而不删除约束(因为测试数据不是重建约束的适当位置)并重置每个表的AUTO_INCREMENT,因为如果我可以对许多ID进行硬编码,那么设置测试数据要简单得多.
例如,我有两个这样的语句(几乎每个表都有一对):
DELETE FROM AppointmentAttr
ALTER TABLE AppointmentAttr AUTO_INCREMENT = 1
Run Code Online (Sandbox Code Playgroud)
当记录被删除时,自动增量值不会恢复为1,即使我找到的所有文档和SO答案都表明这应该有效.
如果我在MySQL Workbench中执行相同的语句,它也不会还原它.
这是在INNODB数据库上.
我错过了什么?
(注意:由于存在约束,我不能使用TRUNCATE).
java ×7
bytecode ×1
c# ×1
certificate ×1
compilation ×1
decimal ×1
javascript ×1
jcombobox ×1
jit ×1
jvm ×1
mstest ×1
mysql ×1
sql-server ×1
ssl ×1
stack-size ×1
swing ×1