不可不知道的10个java谎言_java

下面的这些都算是比较高级的问题了,面试中一般也很少问到,因为它们可能会把面试者拒之门外。不过你可以自己找个时间来实践一下。 

1. System.exit(0)会跳过finally块的执行

 System.setSecurityManager(new SecurityManager() {
  @Override
  public void checkExit(int status) {
   throw new ThreadDeath();
  }
 });
 try {
  System.exit(0);
 } finally {
  System.out.println("In the finally block");
 }

这段代码为什么会输出In the finally block?为什么没有打印出堆栈跟踪信息呢? 

2. String str = “Hello”;其中str是一个字符串对象

 跟C++不同的是,Java里的变量要么是基础类型,要么是引用。变量不可能是对象。这意味着像这样的表达式:

 String str = "Hello";
 String text = "Bye";
 str == text; // 比较两个引用,而不是内容
 str = text; // 把text的引用赋值给str

大多数情况下其实没有太大的区别,不过这么写容易引起困惑。

 final StringBuilder sb = new StringBuidler();
 sb.append("Hello"); // 这个引用是final类型的,而不是这个实例。
 method(sb); // 可以通过方法来修改这个实例,不过这个变量是无法修改的 

3.Java的内存泄露跟C++程序员理解的一样 

内存泄露在维基百科上的定义是”在计算机科学中,如果程序没有正确地管理好内存分配 ,就会出现内存泄露。在面向对象编程中,如果内存中的一个对象无法在代码中访问不到的话,这就是内存泄露。” 不过在Java中,对象总是可达的,那些没有强引用的对象会被清除掉。内存泄露这个术语在Java中意味着:内存中存在着不该存在的对象,通常来说是有些不再使用的资源却仍存储在集合中。 

4.多线程编程很难 

如果你没有经验的话,多线程编程的确很难。如果你只是把一堆代码扔到一堆线程中去执行,那样出了问题根本没法解决,只能是一团糟。 但如果你能进行线程的按需分配,控制线程间的交互,使用一些团队中的成员也能明白的简单的模式,问题就变得简单多了。当然还有一个挑战就是你得让团队中的所有人都遵循你的这个规则 

5.不用关心不同操作间性能的不同 

最近听说有个问题,它涉及到了整数的相加,内存访问,取模,以及输出到控制台。尽管在这些操作里面,每一个都比前面一个要慢一个数量级,但这哥们就是想优化这里面最快的操作,加法,还用了些更昂贵的操作来替换它。 如果你真的想要优化性能,你最好用一个廉价的操作来替换掉那些昂贵的操作,如果你的瓶颈在硬件这块,比方说要从硬盘里面读取大量的文件,修改软件的代码是没啥用了,因为问题根本 就不在这。 

6.随机数都是随机的 

一组特定的随机数就像是某种模式的数字。这个问题我在这篇文章中已经讲到过了。很多人都不相信随机数生成器生成的数字其实是不随机的。 

7.应该尽量避免使用浮点数,因为它们会产生随机错误 

对于同一个操作而言,浮点数每次都会产生同样的错误。错误是可预测的,因此也是可控的。如果你清楚你要做的事情是什么,并且坚持使用一些简单的规则,比如说对结果进行舍入操作,那么浮点数出的错也不会比BigDecimal要多,除此之外它的可读性更强,而且效率快了百倍以上(同时产生的垃圾对象也更少了)。 

8.时区是永恒不变的 

之所以会有这个误解是因为,随着时间的变化,时区是在改变的。这意味着欧洲/伦敦在新纪元的时候是1970/1/1 01:00而不是00:00,为什么?因为伦敦在1968年到1971年这两年间的时间内使用的是夏令时。

在过去的这些年里面,还有不少时区也发生了变化。莫斯科以前是东三区(GMT+3),现在是东四区(GMT+4)(从2011年3月27日开始)。如果你看下2010年的时间,你会发现它是东三区而不是东四区。 

还有些事你听起来或许会感觉很意外:
 1721年的瑞典的2月有30天。
 1751年英格兰的第一天是3月25日,和法国相比差了11天。

美国采用公历纪年后,它往前追溯了上百年,这样原先记录的那些日期都可以用两种日历来进行表示(通常为了更精确会同时提供两个日期)。比如乔治华盛顿的生日从1731年2月11变成了1732年2月22。 

9.当你在线程中读取一个非Volatile变量时,你最终能读取它更新的那个值。 

前几天这个问题在StackOverflow上出现过两回了。一般来说,JIT编译器优化代码的时候会将这个线程没有修改到的非volatile类型的字段进行内联。一旦这个代码被编译了(你可以通过-XX:+PrintCompilation看到),你在另一个线程对这个字段进行的修改它很可能就永远也看不到了。加上随机的同步块或者打印语句可以推迟这个优化的执行,或者扰乱JIT编译器,让它不去执行这个优化。 

10.Java面试题都是正确的 

有很多Java面试题要么是过时了(超过10年没有更新了,和现在的Java版本已经脱节),要么是误导大家的,甚至可能是错的。不幸的是这些答案都没有检查过就被到处传来传去。 

我会参考Stackoverflow上面的答案,因为这里的答案同行审查做的更好些。总的来说,像rose india这样的网站就不要上了,上面的答案的质量差的离谱。如果你喜欢刨根究底的话,可以看看上面一篇文章里有多少拼写错误(类名以及专业术语)或者错误的言论。存在这些问题的一个原因在于没有一个有效的反馈机制来纠正这些错误。 

为大家推荐一些Java面试题:

最有价值的50道java面试题 适用于准入职Java程序员

10个经典的Java main方法面试题

探讨Java中最常见的十道面试题(超经典)

适用于Java程序员的10道XML面试题 新鲜出炉

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java面试题
, java谎言
java多线程编程
不可不知道的经济真相、你不可不知道的人性、你不可不知道的科学、不可不知道的暨南大学、你不可不知道的50个,以便于您获取更多的相关知识。

时间: 2024-08-26 19:17:33

不可不知道的10个java谎言_java的相关文章

张小龙:关于微信你可能不知道的10件事

中介交易 SEO诊断 淘宝客 云主机 技术大厅 不管是互联网业界,还是非互联网领域的产品爱好者,对微信.微信团队以及张小龙本人都有不完全了解,因为张小龙甚少在公众场合出现,微信团队过去也只有在极客公园的活动上进行过分享. 2月底,微信负责人.腾讯副总裁张小龙接受了<商业价值>杂志和极客公园的采访,采访过程中聊了很多具有启发性的话题.我们将采访的内容整理成了数篇文章.本文是专访系列的第一篇,关于微信你可能不知道的10件事. 事实上,极客公园一直在跟踪微信的发展,在版本4.0 后,我们几乎每个版本

关于PHP你可能不知道的10件事

小编之前也曾报导过PHP开发人员容易忽略的几点精华,除了一些精华技术方法外,很多细微之处也是程序员们容易忽略的,下面我们为您总结了10个关于PHP你可能不知道的事情. 关于PHP更多内容,欢迎访问:PHP开发基础入门 1.使用ip2long() 和long2ip()函数来把IP地址转化成整型存储到数据库里. 这种方法把存储空间降到了接近四分之一(char(15)的15个字节对整形的4个字节),计算一个特定的地址是不是在一个区段内页更简单了,而且加快了搜索和排序的速度(虽然有时仅仅是快了一点).

分享Java程序员应该知道的10个调试技巧_java

可以帮助识别和解决应用程序缺陷,在本文中,作者将使用大家常用的的开发工具Eclipse来调试Java应用程序.但这里介绍的调试方法基本都是通用的,也适用于NetBeans IDE,我们会把重点放在运行时上面. 在开始之前,推荐大家去看看Eclipse shortcuts这篇文章,它将会给你带来很多方便.在本文中使用的是Eclipse Juno版(Eclipse 4.2),在开始前给大家提3点建议! 不要使用System.out.println作为调试工具 把所有涉及到的组件日志级别激活并使用 使

你需要知道的10位Java开发牛人

1.James Gosling 1983 年,Gosling 获得了加州大学的计算机科学学士学位.1990 年,他获得了卡内基梅隆大学的计算机科学博士学位,师从 BobSproull.在攻读博士期间,他自己开发了一款 emacs,叫 Gosling Emacs(Gosmacs),在大学的这段时间,他还开发了一个多处理器版本的 Unix,以及数个编译器和邮件系统,之后才加入 Sun 公司. 1984 到 2010 年间,Gosling 一直在 Sun 公司工作.他被公认为 Java 之父. Ora

4G你一定不知道的10件事

  你们天天说4G,月月说4G,我家怎么就一直没信号?也不是荒山野岭难道被抛弃了?累觉不爱啊!另外,4G那么快的网速到底干啥最爽?一定要去营业厅换卡吗?我买到的所有4G手机速度都一样快吗? 在4G普及初期,很多人都有着各种各样的问题,针对一些关注度较高,或是刁钻古怪的问题,我们特意进行了实地测试,并请教相关资深人士,为大家做出权威解答. 1.我家没4G信号--别急,正以每天2-3平方公里的覆盖速度狂奔 4G不论速度有多快,没信号都是白搭.相信办理过4G业务,或者最近去过营业厅的小伙伴们,都已经大

不能不知道的10个angularjs英文学习网站_AngularJS

AngularJS 是非常棒的JS框架,能够创建功能强大,动态功能的Web app.AngularJS自2009发布以来,已经广泛应用于Web 开发中.但是对想要学习Angular JS 的人而言,只有官方文档,那是万万不够的.大多数人更愿意看一些入门视频,或者是更易于理解学习的Demo程序.因此本文推荐了10个AngularJS 学习指南,助你一臂之力.   1. Year of Moo 超级赞的AngularJS学习指南,是由Year of Moo 创建的,包含AngularJS基本知识以及

DOTA之补刀斧 你所不知道的10大神奇功效

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   [科技讯]11月13日消息,Dota中喜欢玩近战C位的英雄出门都喜欢携带一样物品,补刀斧.因为前期对线大家等级不高,技能也不多,并且开局大家通常情况下都比较谨慎,如果不是严重失误的情况下,很难有人头的爆发,因此在这种情况下,拼的就是补刀的基本功.     我们先来看看补刀斧的物品效果.     补刀斧 价格:225     压制(被动) 近战:对非英雄单位造成3

你可能不知道的10个新的开源项目

1. Bootstrap, 一个来自 Twitter 的工具包,用于快速开发 Web 应用和网站. 2. BrowserID, 一个安全,分散,开源,基于 email 地址的跨浏览器网站同步登录. 3. Canvas, 基于云计算的学习管理系统 LMS 4. Cloud Foundry, 一个开放的平台作为一种服务(PaaS)云,开发框架和应用服务的选择; 5. Moai, 一个移动游戏开发平台,提供基于云的游戏服务和 iOS, Android 应用快速开发平台. 6.Mooege,一个开放源码

PHP你所不知道的10件事

1. 使用 ip2long() 和 long2ip() 以整型(integer)方式储存IP地址到数据库,而非字符串方式.这将几乎减少一半的储存空间(char(15)15个字节,integer则是8个字节),而且也更容易计算某一IP地址是否在一个范围之内.同时也加速搜索和排序. 2. 应用checkdnsrr()检查域名是否存在,来验证email地址的一部分.这个checkdnsrr()内建函数可以通过相应的域名或者IP地址查询DNS记录.有PHP开发者利用这个函数编写了一个自定义函数,能验证e