本文转自:http://www.importnew.com/16841.html

写的确实太好了

1、为什么两个(1927年)时间相减得到一个奇怪的结果?

如果执行下面的程序,程序解析两个间隔1秒的日期字符串并比较:

public static void main(String[] args) throws ParseException {

SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String str3 = "1927-12-31 23:54:07";

String str4 = "1927-12-31 23:54:08";

Date sDt3 = sf.parse(str3);

Date sDt4 = sf.parse(str4);

long ld3 = sDt3.getTime() /1000;

long ld4 = sDt4.getTime() /1000;

System.out.println(ld4-ld3);

}

输出是:

353

为什么 ld4-ld3 不是1(因为我希望这两个时间差是一秒),而是353?

如果将日期字符串各加一秒:

String str3 = "1927-12-31 23:54:08";

String str4 = "1927-12-31 23:54:09";

ld4-ld3 的结果是1.

sun.util.calendar.ZoneInfo[id="Asia/Shanghai",

offset=28800000,dstSavings=0,

useDaylight=false,

transitions=19,

lastRule=null]

Locale(Locale.getDefault()): zh_CN

解决方案

这是上海时区,在12月31日有一个变化。

查阅这个网址来了解上海在1927年时区变化的细节。基本上在1927年年底的午夜,始终会回拨5分52秒。所以“1927-12-31 23:54:08”实际上发生了两次,看起来Java解析了后一次的时间作为当地的日期和时间导致了差异。

2、Java是“引用传递”还是“值传递”?

我一直认为Java是引用传递;然而,我看了一堆博客(例如这篇)声称不是这样的。我认为我没有理解它们之间的区别。

给个解释?

解决方案

Java一直是值传递。不幸的是,他们决定把指针叫做引用,因此新人总是被搞晕。因为这些引用也是通过值传递的。

3、一个关于Java += 操作符的问题

直到今天我认为这个例子:

i += j;

只是一个简写的:

i = i + j;

但如果这样做:

int i = 5;long j = 8;

然而 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

下面的代码

short x = 3;

x+= 4.6;

x的结果等于7,因为它等价于:

short x = 3;

x= (short)(x + 4.6);

换句话说,你的假设是正确的。

4、HashMap 和 Hashtable 之间的不同?

Java中 HashMap 和 Hashtable的不同是什么?

非多线程应用中使用哪个更有效率?

解决方案

Java 中 HashMap 和 HashTable 有几个不同点:

1、Hashtable 是同步的,然而 HashMap不是。 这使得HashMap更适合非多线程应用,因为非同步对象通常执行效率优于同步对象。

2、Hashtable 不允许 null 值和键。HashMap允许有一个 null 键和人一个 NULL 值。

3、HashMap的一个子类是LinkedHashMap。所以,如果想预知迭代顺序(默认的插入顺序),只需将HashMap转换成一个LinkedHashMap。用Hashtable就不会这么简单。

4’因为同步对你来说不是个问题,我推荐使用HashMap。如果同步成为问题,你可能还要看看ConcurrentHashMap。

5、(如何) 读取或者把一个 InputStream 转成一个 String

如果你有一个 java.io.InputStream 对象,如处理这个对象并生成一个字符串?

假定我有一个 InputStream 对象,它包含文本数据,我希望将它转化成一个字符串(例如,这样我可以将流的内容写到一个log文件中)。

InputStream 转化成 String 最简单方法是什么?

解决方案

使用 Apache commons IOUtils库来拷贝InputStream到StringWriter是一种不错的方式,类似这样:

StringWriter writer = new StringWriter();

IOUtils.copy(inputStream, writer, encoding);

String theString = writer.toString();

甚至

// NB: does not close inputStream, you can use IOUtils.closeQuietly for that

// 注意:不关闭inputStream,你可以使用 IOUtils.closeQuietly

String theString = IOUtils.toString(inputStream, encoding);

或者,如果不想混合Stream和Writer,可以使用 ByteArrayOutputStream。

6、为什么Java中的密码优先使用 char[] 而不是String?

在Swing中,密码字段有一个getPassword()(返回 char数组)方法而不是通常的getText()(返回String)方法。同样的,我遇到过一个建议,不要使用 String 来处理密码。

为什么String涉及到密码时,它就成了一个安全威胁?感觉使用char数组不太方便。

解决方案

String是不可变的。这意味着一旦创建了字符串,如果另一个进程可以进行内存转储,在GC发生前,(除了反射)没有方法可以清除字符串数据。

使用数组操作完之后,可以显式地清除数据:可以给数组赋任何值,密码也不会存在系统中,甚至垃圾回收之前也是如此。

所以,是的,这是一个安全问题 – 但是即使使用了char数组,仅仅缩小了了攻击者有机会获得密码的窗口,它值针对制定的攻击类型。

7、遍历HashMap的最佳方法

遍历HashMap中元素的最佳方法是什么?

解决方案

这样遍历entrySet:

public static void printMap(Map mp) {

Iterator it = mp.entrySet().iterator();

while (it.hasNext()) {

Map.Entry pair = (Map.Entry)it.next();

System.out.println(pair.getKey() + " = " + pair.getValue());

it.remove(); // avoids a ConcurrentModificationException

}

}

更多请查阅Map。

8、(如何)从数组创建ArrayList

我有一个数组,初始化如下:

Element[] array = {new Element(1), new Element(2), new Element(3)};

我希望将这个数组转化成一个ArrayList类的对象。

解决方案

new ArrayList(Arrays.asList(array))

9、产生一个Java的内存泄露

我有过一个面试,被问到如何产生一个Java内存泄露。不用说,我感到相当傻,甚至如何产生一个的线索都没有。

那么怎么才能产生一个内存泄露呢?

解决方案

在纯Java中,有一个很好的方式可以产生真正的内存泄露(通过执行代码使对象不可访问但仍存在于内存中):

1、应用产生一个长时间运行的线程(或者使用一个线程池加速泄露)。

2、线程通过一个(可选的自定义)类加载器加载一个类。

3、该类分配大内存(例如,new byte[1000000]),赋值给一个强引用存储在静态字段中,再将它自身的引用存储到ThreadLocal中。分配额外的内存是可选的(泄露类实例就够了),但是这样将加速泄露工作。

4、线程清除所有自定义类的或者类加载器载入的引用。

5、重复上面步骤。

这样是有效的,因为ThreadLocal持有对象的引用,对象持有类的引用,接着类持有类加载器的引用。反过来,类加载器持有所有已加载类的引用。这会使泄露变得更加严重,因为很多JVM实现的类和类加载都直接从持久带(permgen)分配内存,因而不会被GC回收。

10、使用Java在一个区间内产生随机整数数

我试着使用Java生成一个随机整数,但是随机被指定在一个范围里。例如,整数范围是5~10,就是说5是最小的随机值,10是最大的。5到10之间的书也可以是生成的随机数。

解决方案

标准的解决方式(Java1.7 之前)如下:

importjava.util.Random;public static int randInt(int min, intmax) {

Random rand;int randomNum = rand.nextInt((max - min) + 1) +min;returnrandomNum;

}

请查看相关的JavaDoc。在实践中,java.util.Random 类总是优于 java.lang.Math.random()。

特别是当标准库里有一个直接的API来完成这个工作,就没有必要重复制造轮子了。

java importnew_Stackoverflow上人气最旺的10个Java问题(转ImportNew)相关推荐

  1. Stack Overflow 上人气最旺的 10 个 Java 问题

    1. 为什么两个(1927年)时间相减得到一个奇怪的结果? (3623个赞) 如果执行下面的程序,程序解析两个间隔1秒的日期字符串并比较: public static void main(String ...

  2. Stack Overflow 上人气爆表的10个 Java 问题

    2019独角兽企业重金招聘Python工程师标准>>> 1. 为什么两个(1927年)时间相减得到一个奇怪的结果? (3623个赞) 如果执行下面的程序,程序解析两个间隔1秒的日期字 ...

  3. GitHub上最牛逼的10个Java项目,号称Star收割机,Dubbo只能排 12

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「阿飞的博客」 1. CS-Notes ...

  4. 【Java】国外大神总结的 10 个 Java 编程技巧!

    原文:http://www.javastack.cn/article/2018/10-java-programming-skills-summary/ 这是一个国外大神20多年的经验总结出来的-- & ...

  5. java 线程等待10_面试被问10个Java等待、通知、同步问题,直接躺下

    1.什么时候需要Java同步? Java中的同步是一个重要的概念,因为Java是一种多线程语言,其中多个线程并行运行以完成程序执行.在多线程环境中,Java对象的同步变得极为重要,同步在Java中,可 ...

  6. osx java 6_OSX 10.11 java 6不兼容怎么办?OSX 10.11 java 6不兼容解决办法

    OSX 10.11 java 6不兼容怎么办?有很多用户在使用最新的OSX 10.11系统时会发现java SE 6不兼容的问题,其实要解决 这个问题比较简单,用户需要下载安装最新的Java SE 8 ...

  7. java flex 上传文件_使用Flex和java servlet上传文件

    资源都是来自网上.本实例将展示使用Flex和java servlet上传文件. 事前准备就是到http://commons.apache.org 下载common-fileupload-1.1.1.j ...

  8. Java基础学习总结(44)——10个Java 8 Lambda表达式经典示例

    Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Ja ...

  9. java 获取上传文件的格式_js和java获取上传文件的文件名以及上传文件格式判断...

    js获取文件名: //校验 function check(){ var fileType = $("#template").val(); //判断后缀是不是需要的文件类型 if(f ...

最新文章

  1. Oracle中Scott账户常见表的样本查询编程与数据库
  2. CodeArt WSS3.0(MOSS)字段编辑权限控制解决方案(v1.0)
  3. MZOJ 1344 工作依赖
  4. 润乾报表实现无数据源的规则报表及改进
  5. arm linux 开机电路_ARM Linux启动过程分析
  6. WEB安全基础-Javascrp相关知识点之DOM
  7. android源码已关联设备,获取android设备已安装应用信息
  8. Ubuntu12.04下apache服务器的安装也配置
  9. proteus元件图片_proteus元件库
  10. 阿里巴巴矢量图标库 iconfont 的使用方法
  11. php网页象棋源码,JS小游戏之象棋暗棋源码详解_javascript技巧
  12. logogogo最新变种XP.exe的分析(Win32.Logogo)
  13. JetBrains PyCharm免费版
  14. 神舟笔记本风扇偏移调多少_神舟战神怎么调节风扇我们该办正事了
  15. 八数码问题BFS算法
  16. GIF动图制作全攻略!不用PS简单快速制作GIF动图!
  17. python 笔记之“海龟”画图 演示画小猪佩奇,机器猫
  18. Jquery中fadein() fadeout()方法的使用
  19. python脚本控制ios手机app_appium 下 python 脚本自动化测试iOS APP 实例
  20. UVA - 1645 - Count(思路)

热门文章

  1. Python情感分析
  2. React Native 0.60以上集成code push热更新
  3. 推荐:懂程序、不会美术怎么办?
  4. HTML基础7--文档与网站架构
  5. 计算机网络课程实验:wireshark ARP协议
  6. 字符串算法总结——KMP算法
  7. 【JMeter】使用Beanshell读写Excel文件
  8. 矩阵期望 matlab,matlab 矩阵元素求和、求均值(期望)和均方差
  9. 【Fiddler】常见问题1:小米手机无法安装证书
  10. 滤波、信号、数字与模拟、金字塔不懂才怪教程