关于Java的10个谎言

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

Published: 10 May 2014

日志还是调试?

调试太挫了,你应该使用日志。
如果你的代码是结构化的,根本不需要通过日志来进行调试。

Published: 09 May 2014

Java中字符串switch的实现细节

自从Java允许在switch及case语句中使用字符串以来,许多开发人员都使用了这一特性,不过如果使用整型或者枚举的话会更好。这是JDK7中最受欢迎的特性之一,同样的还有自动资源管理以及多异常捕获。尽管我个人不太喜欢这个特性,因为使用枚举的方式其实更好,但我并不是特别反对使用它。一个原因当然是它很方便,如果程序中已经用到了字符串,这样做的确很顺手,不过我建议在生产环境的代码中使用新特性之前最好了解下它是如何工作的。我第一次听说这个特性的时候,我认为这肯定是通过equals()和hashCode()方法来实现的,我更关心的是Java 7中的字符串的switch是如何实现的。我对这个感兴趣还有一个原因,是我想在面试中问一下这个问题,如果面试中有类似这样的一个问题的话会非常有趣。验证它其实非常简单,你只需用字符串写一段switch的代码,然后反编译一下,看看编译器是如何翻译它们的就可以了。那么还等什么,赶快来看下switch中的字符串是如何工作的吧?

Published: 08 May 2014

Java函数式编程(十四)监控文件修改

Published: 07 May 2014

为什么不应该加班?

经常加班有好处也有坏处,下面我会把它们一一都列举出来。有些原因大家都知道,有些则是我个人的经验,如果你还有别的理由,请不吝赐教,我会把它们加到列表里来。

加班的坏处:

Published: 07 May 2014

Java的内存泄露

Java有垃圾回收,因此不会出现内存泄露。

Published: 06 May 2014

64位JVM带来的问题及解决方案

这篇文章会检验你有关JVM的知识以及项目交付相关的技能;尤其是涉及到JVM升级的时候。期待你们的评论及回复,一起探讨下如何规避这类的项目可能产生的性能问题。

Published: 05 May 2014

数据库连接池简析

序言

Published: 04 May 2014

Java 8那些被冷落的新特性

lambda表达式,lambda表达式,还是lambda表达式。一提到Java 8就只能听到这个,但这不过是其中的一个新功能而已,Java 8还有许多新的特性——有一些功能强大的新类或者新的用法,还有一些功能则是早就应该加到Java里了。

Published: 04 May 2014

日志打印的5点建议

最近我们介绍了几款日志分析的工具,比如Scribe和LogStash这类的开源项目,以及Splunk这样的企业级工具,还有像SumoLogic和PaperTrail这样的托管服务。你可以使用这些工具从海量的日志数据提取到一些有价值的信息。

Published: 03 May 2014