Stackoverflow上人气最旺的10个Java问题
1、 为什么两个(1927年)时间相减得到一个奇怪的结果?
(3623个赞)
如果执行下面的程序,程序解析两个间隔1秒的日期字符串并比较:
01 |
public static void main(String[]throws ParseException |
02 |
SimpleDateFormatnew SimpleDateFormat("yyyy-MM-dd); |
03 |
String"1927-12-31; |
04 |
String"1927-12-31; |
05 |
Date |
06 |
Date |
07 |
long ld31000; |
08 |
long ld41000; |
09 |
System.out.println(ld4-ld3); |
10 |
} |
输出是:
1 |
353 |
为什么 ld4-ld3 不是1(因为我希望这两个时间差是一秒),而是353?
如果将日期字符串各加一秒:
1 |
String"1927-12-31; |
2 |
String"1927-12-31; |
ld4-ld3 的结果是1.
1 |
sun.util.calendar.ZoneInfo[id="Asia/Shanghai", |
2 |
offset=28800000,dstSavings=0, |
3 |
useDaylight=false, |
4 |
transitions=19, |
5 |
lastRule=null] |
6 |
7 |
Locale(Locale.getDefault()): |
解决方案
这是上海时区,在12月31日有一个变化。
查阅这个网址来了解上海在1927年时区变化的细节。基本上在1927年年底的午夜,始终会回拨5分52秒。所以“1927-12-31
23:54:08”实际上发生了两次,看起来Java解析了后一次的时间作为当地的日期和时间导致了差异。
Java一直是值传递。不幸的是,他们决定把指针叫做引用,因此新人总是被搞晕。因为这些引用也是通过值传递的。
3、一个关于Java += 操作符的问题
(2223赞)
直到今天我认为这个例子:
1 |
i |
只是一个简写的:
1 |
i |
但如果这样做:
1 |
int i5; |
2 |
long j8; |
然而 i = i + j; 没法编译,而 i += j; 就可以编译。
这意味着i += j; 实际上是i的简写么?
= (type of i) (i + j)
解决方案
总有人问这类问题,JLS里有答案。参见 §15.26.2复合赋值运算符。摘录:
E1 op= E2 型的复合赋值表达式等价于 E1 = (T)((E1) op (E2)),这里 T 是 E1 的类型,不同的是 E1 只计算一次。
一个例子,引自 §15.26.2
[...] 下面的代码是正确的:
1 |
short x3; |
2 |
x4.6; |
x的结果等于7,因为它等价于:
1 |
short x3; |
2 |
xshort)(x4.6); |
换句话说,你的假设是正确的。
Java中 HashMap 和 Hashtable的不同是什么?
非多线程应用中使用哪个更有效率?
解决方案
Java 中 HashMap 和 HashTable 有几个不同点:
Hashtable是同步的,然而HashMap不是。
这使得HashMap更适合非多线程应用,因为非同步对象通常执行效率优于同步对象。- Hashtable 不允许 null 值和键。HashMap允许有一个 null 键和人一个 NULL 值。
- HashMap的一个子类是
LinkedHashMap。所以,如果想预知迭代顺序(默认的插入顺序),只需将HashMap转换成一个LinkedHashMap。用Hashtable就不会这么简单。
因为同步对你来说不是个问题,我推荐使用HashMap。如果同步成为问题,你可能还要看看ConcurrentHashMap。
如果你有一个 java.io.InputStream 对象,如处理这个对象并生成一个字符串?
假定我有一个 InputStream 对象,它包含文本数据,我希望将它转化成一个字符串(例如,这样我可以将流的内容写到一个log文件中)。
InputStream 转化成 String 最简单方法是什么?
解决方案
使用 Apache commons IOUtils库来拷贝InputStream到StringWriter是一种不错的方式,类似这样:
1 |
StringWriternew StringWriter(); |
2 |
IOUtils.copy(inputStream, |
3 |
String |
甚至
1 |
// |
2 |
// |
3 |
String |
或者,如果不想混合Stream和Writer,可以使用 ByteArrayOutputStream。
在Swing中,密码字段有一个getPassword()(返回 char数组)方法而不是通常的getText()(返回String)方法。同样的,我遇到过一个建议,不要使用 String 来处理密码。
为什么String涉及到密码时,它就成了一个安全威胁?感觉使用char数组不太方便。
解决方案
String是不可变的。这意味着一旦创建了字符串,如果另一个进程可以进行内存转储,在GC发生前,(除了反射)没有方法可以清除字符串数据。
使用数组操作完之后,可以显式地清除数据:可以给数组赋任何值,密码也不会存在系统中,甚至垃圾回收之前也是如此。
所以,是的,这是一个安全问题 – 但是即使使用了char数组,仅仅缩小了了攻击者有机会获得密码的窗口,它值针对制定的攻击类型。
7、遍历HashMap的最佳方法
(1504个赞)
遍历HashMap中元素的最佳方法是什么?
解决方案
这样遍历entrySet:
1 |
public static void printMap(Map |
2 |
Iterator |
3 |
while (it.hasNext()) |
4 |
Map.Entry |
5 |
System.out.println(pair.getKey()" + |
6 |
it.remove(); // |
7 |
} |
8 |
} |
更多请查阅Map。
8、(如何)从数组创建ArrayList
我有一个数组,初始化如下:
1 |
Element[]new Element(1), new Element(2), new Element(3)}; |
我希望将这个数组转化成一个ArrayList类的对象。
解决方案
1 |
new ArrayList<Element>(Arrays.asList(array)) |
(1478个赞)
我有过一个面试,被问到如何产生一个Java内存泄露。不用说,我感到相当傻,甚至如何产生一个的线索都没有。
那么怎么才能产生一个内存泄露呢?
解决方案
在纯Java中,有一个很好的方式可以产生真正的内存泄露(通过执行代码使对象不可访问但仍存在于内存中):
- 应用产生一个长时间运行的线程(或者使用一个线程池加速泄露)。
- 线程通过一个(可选的自定义)类加载器加载一个类。
- 该类分配大内存(例如,new byte[1000000]),赋值给一个强引用存储在静态字段中,再将它自身的引用存储到ThreadLocal中。分配额外的内存是可选的(泄露类实例就够了),但是这样将加速泄露工作。
- 线程清除所有自定义类的或者类加载器载入的引用。
- 重复上面步骤。
这样是有效的,因为ThreadLocal持有对象的引用,对象持有类的引用,接着类持有类加载器的引用。反过来,类加载器持有所有已加载类的引用。这会使泄露变得更加严重,因为很多JVM实现的类和类加载都直接从持久带(permgen)分配内存,因而不会被GC回收。
(1422个赞)
标准的解决方式(Java1.7 之前)如下:
1 |
import java.util.Random; |
2 |
3 |
public static int randInt(int min, int max) |
4 |
5 |
Random |
6 |
int randomNum1) |
7 |
8 |
return randomNum; |
9 |
} |
请查看相关的JavaDoc。在实践中,java.util.Random 类总是优于java.lang.Math.random()。
Stackoverflow上人气最旺的10个Java问题的更多相关文章
- Stackoverflow上人气最旺的10个Java问题(转ImportNew)
本文转自:http://www.importnew.com/16841.html 写的确实太好了 1.为什么两个(1927年)时间相减得到一个奇怪的结果? 如果执行下面的程序,程序解析两个间隔1秒的日 ...
- Stack Overflow 上人气最旺的 10 个 Java 问题
1. 为什么两个(1927年)时间相减得到一个奇怪的结果? (3623个赞) 如果执行下面的程序,程序解析两个间隔1秒的日期字符串并比较: public static void main(String ...
- 记一次在StackOverFlow上问问题的经历
最近一直在做测试方面的事情,被测的一些功能需要连接到FTP服务器上.而我在做本地测试时为了方便,就使用java写了一个简单的ftp服务器,可以在命令行下直接启动运行. 当时在main函数里是这样写的. ...
- Stackoverflow上有哪些声望高or值得关注的国人
Stackoverflow上有哪些声望高/值得关注的国人? 以下回答并不严格按照 Reputation 排名来列,也不收录不确定是Chinese(中国人或华人)的用户,欢迎补充- 1.李杨 @Li L ...
- 我发现:在StackOverflow上拯救歪果仁十分有意思!
菊长:火星特工们!今天是周五了,大家有什么提议? BeJavaGod:报告菊长!我发现,在StackOverflow上拯救歪果仁十分有意思! 噗哈哈,时不时遇到问题会使用到StackOverflow, ...
- 老码农教你在 StackOverflow 上谈笑风生
作为一个高大上的码农,你肯定用到过 StackOverflow,必须的.会有人否定这个断言么?那他恐怕不是真正的码农,或者说还没入门.StackOverflow 对于码农的重要性,基本就和诸葛亮对刘备 ...
- stackoverflow上关于iOS的票数最多(最常见)的15个问题
搞编程做项目的,没碰到bug.遇到问题,基本不可能.stackoverflow就是一个大型的开放的FAQ平台,你是问题制造者,也是答案提供者.本文列出至今stackoverflow上关于iOS的票数最 ...
- 程序员的一生时间90%是用在编程上,而剩余的10%是活在世界上。刚进CSDN的博客看到这么句话
程序员的一生时间90%是用在编程上,而剩余的10%是活在世界上. 而自己呢?是个程序员呢还是个业余玩家!
- Stackoverflow 最受关注的 10 个 Java 问题
Stack Overflow 是一个大型的编程知识库.在 Stack Overflow 中已经有数以百万计的问题,并且很多答案有着很高的质量.这就是为什么 Stack Overflow 的答案经常位于 ...
随机推荐
- 优化Javascript数据遍历
问题 M是一个对象的集合,没个对象拥有唯一的字符串类型的Id N是Id的集合. 从M中过滤掉Id不在N中的对象. 假如M有50w个数据,N中可能是0~50w任意的数据. 方案1 使用数组保存Id的集合 ...
- Android4.3 屏蔽HOME按键返回桌面详解(源码环境下)
点击打开链接 首先声明我是做系统开发的(高通平台),所以下面介绍的方法并不适合应用开发者. 最经有个需求要屏蔽HOME按键返回桌面并且实现自己的功能,发现以前的方式报错用不了,上网搜索了一下,发现都是 ...
- FORM中读取图片
1.创建ITEM 重要属性如下 item属性:图像 大小样式:调整 数据库项:否 2.读取触发器 在block级别,创建trigger READ_IMAGE_FILE('D:\'||:XX_EMOLY ...
- 微软在线测试之lucky string,有关斐波那契的题目都在此了
解决方案: int _tmain(int argc,_TCHAR* argv[]) { size_t fib[] = {1,2,3,5,8,13,21,34}; string str,tempstr; ...
- hive编程指南——读书笔记(无知拾遗)
set hive.metastore.warehouse.dir=/user/myname/hive/warehouse; 用户设定自己的数据仓库目录.不影响其他用户.也在$HOME/.hiverc中 ...
- ajax post请求request.getParameter("")取值为null
今天在写提交一个json数据到后台,然后后台返回一个json数据类型.但是发现后台通过request.getParamter("")取到的值为null. 于是写一个简单的ajax ...
- Java:使用匿名内部类在方法内部定义并启动线程
下面的代码展示了在一个方法中,通过匿名内部类定义一个Thread,并Override它的run()方法,之后直接启动该线程. 这样的代码可用于在一个类内部通过另起线程来执行一个支线任务,一般这样的任务 ...
- 【一天一道LeetCode】#104. Maximum Depth of Binary Tree
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 来源:http ...
- www-authenticate与BASE-64认证技术
www-authenticate是一种简单的用户身份认证技术.很多验证都采用这种验证方式,尤其在嵌入式领域中.优点:方便缺点:这种认证方式在传输过程中采用的用户名密码加密方式为BASE-64,其解码过 ...
- 在golang中使用leveldb
leveldb是一个很强悍的kv数据库,自然,我也希望能在go中使用. 如果有官方的go leveldb实现,那我会优先考虑,譬如这个,但是该库文档完全没有,并且在网上没发现有人用于实战环境,对其能否 ...