- 浏览: 450778 次
- 性别:
- 来自: 北京
博客专栏
-
Java函数式编程
浏览量:41549
最新评论
-
niqingyang:
看到lambda表达式后,感觉Java不再优雅了,还是喜欢面向 ...
Java函数式编程(一) -
tomqyp:
太过危言耸听了,抛开那少比较底层的语言,高级语言中反到是不少都 ...
动态语言已死? -
windshome:
设计这样JVM的人和在真正产品实现里写这样代码的人都是疯子。前 ...
JVM的自愈能力 -
yixiandave:
有多少人把JAVA8用在生产环境了?
JVM的自愈能力 -
ljbupc:
这个好像是1.8版jvm的新特性;1.7以下的不行(JVM-H ...
JVM的自愈能力
文章列表
文档需要全面,实时更新,并且易懂。我说的全面是指除了介绍程序的功能外还应该覆盖到代码中一些重要的地方。对很多人来说文档的重要性不言而喻,但很难保持它的及时性和准确性。糟糕的文档的后果通常会浪费更多的资 ...
作为一名Java程序员和软件开发人员,那些_每个程序员都应该知道的XXX_的文章教会了我不少东西,它们提供了某个特定领域的一些实用的并且有深度的信息,这些东西通常很难找到。在我学习的过程中我读到过许多非常有用的文 ...
本文我们将会介绍JVM的一个更新,这就是持久代的移除。我们会介绍为什么需要移除持久代,以及它的替代者,元空间(metaspace)。这是上一篇文章内存管理之垃圾回收的续集。
Java 6中的堆结构是这样的:
持久代
持久代中 ...
本文介绍的是Java里一个内建的概念,Finalizer。你可能对它如数家珍,但也可能从未听闻过,这得看你有没有花时间完整地看过一遍java.lang.Object类了。在java.lang.Object里面就有一个finalize()的方法。这个方法的实现是空的,不过一旦实现了这个方法,就会触发JVM的内部行为,威力和危险并存。
如果JVM发现某个类实现了finalize()方法的话,那么见证奇迹的时刻到了。我们先来创建一个实现了这个非凡的finalize()方法的类,然后看下这种情况下JVM的处理会有什么不同。我们先从一个简单的示例程序开始:
import java.util.co ...
URL无处不在,不过似乎开发人员并没有真正地理解它们,因为我在Stack Overflow上经常看到有人在问如何正确的创建一个URL。想知道URL语法是如何工作的,可以看下Lunatech的这篇文章,非常不错 。
本文不会深入介绍URL的全部语法( ...
查找List中的元素有两种方法,一个是使用contains()方法,还有一个是使用Collectoins.binarySearch()。binarySearch()方法有两种实现,一个版本是接受List和Comparator对象作为参数,另一个是接受List以及Comparable对象。这个方法使用二分查找算法来查询指定列表中的某个元素。在调用这个方法前,列表中的元素得按照它们的自然顺序进行升序排列。如果列表没有排序的话,方法调用的结果是不确定的。如果列表有多个元素与查找的元素一样,那么返回的具体是哪一个是不确定的。对于一个可”随机访问“的列表来说,算法的时间复杂度是O(log(n)。如果指定的 ...
下面的这些都算是比较高级的问题了,面试中一般也很少问到,因为它们可能会把面试者拒之门外。不过你可以自己找个时间来实践一下。
1. System.exit(0)会跳过finally块的执行
System.setSecurityManager(new SecurityManager() {
@Override
...
调试太挫了,你应该使用日志。
如果你的代码是结构化的,根本不需要通过日志来进行调试。
这是两种截然相反的态度。一般来说,我都是持中庸的立场,下面我来说下原因。
首先使用日志还是调试没有本质的区别。这只不过 ...
自从Java允许在switch及case语句中使用字符串以来,许多开发人员都使用了这一特性,不过如果使用整型或者枚举的话会更好。这是JDK7中最受欢迎的特性之一,同样的还有自动资源管理以及多异常捕获。尽管我个人不太喜欢这个特性,因为使用枚举的方式其实更好,但我并不是特别反对使用它。一个原因当然是它很方便,如果程序中已经用到了字符串,这样做的确很顺手,不过我建议在生产环境的代码中使用新特性之前最好了解下它是如何工作的。我第一次听说这个特性的时候,我认为这肯定是通过equals()和hashCode()方法来实现的,我更关心的是Java 7中的字符串的switch是如何实现的。我对这个感兴趣还有一个 ...
本系列文章译自Venkat Subramaniam的Functional Programming in Java
未完待续,后续文章请继续关注[url={{ site.url }}]Java译站[/url]。
使用flatMap列出子目录
前面已经看到如何列出指定目录下的文件了。我们再来看下如何遍历指定目录的直接子目录(深度为1),先实现一个简单的版本,然后再用更方便的flatMap()方法来实现。
我们先用传统的for循环来遍历一个指定的目录。如果子目录中有文件,就添加到列表里;否则就把子目录添加到列表里。最后,打印出所有文件的总数。代码在下面——这个是困难模式的。
publ ...
经常加班有好处也有坏处,下面我会把它们一一都列举出来。有些原因大家都知道,有些则是我个人的经验,如果你还有别的理由,请不吝赐教,我会把它们加到列表里来。
加班的坏处:
你正在制造新的BUG
你不可能长时间的集中精力,如果你的大脑没有休息好的话,注意力会急剧下降。就算在早晨已经休息得很好,非常专注的时候,你也可能会写出BUG,真不敢想像晚上10点那会儿灾难性的时刻。
一天8小时的脑力劳动对你的大脑来说已经够多的了。
你改动的代码没法及时评审
代码评审(Code Review)是一个非常有用的工具,它也被许多团队广泛地采用,这样能够保证代码的质量。如果代码写完很快就开始评审并且可 ...
Java有垃圾回收,因此不会出现内存泄露。
大错特错。
这个说法存在好几个问题。尽管Java的确有垃圾回收器来回收那些不用的内存块,但你不要指望它能够点铁成金。GC减轻了开发人员肩上的负担,而原本的那些工作非常容易 ...
这篇文章会检验你有关JVM的知识以及项目交付相关的技能;尤其是涉及到JVM升级的时候。期待你们的评论及回复,一起探讨下如何规避这类的项目可能产生的性能问题。
背景
最近碰到了一个影响到线上生产环境的问题,我们使用的是WebLogic 10以及32位的Hotspot JVM 1.6 。鉴于目前的一些问题以及未来负载上升的预测,我们决定将HotSpot JVM 1.6升级成64位的。
注意我们并没有修改JVM的启动参数。
经过几周的功能测试及规划,这次升级成功地部署到了线上环境。不过,技术支持团队发现第二天便出现了严重的性能下降,其中还有线程锁竞争的问题,迫使部署团队不得不回滚了这次升级。 ...
序言
我参与的这些项目都用到了数据库连接池,这自然是有它的原因的。有时候我们可能会忘了当初为什么使用了某种设计模式或者某项技术,因此很有必要从头再推理一遍。每项技术或者技术决策肯定都有它的优势和劣势,如果发现它没有缺点的话,那你最好仔细想想是不是漏掉了什么。
数据库连接的生命周期
数据库的每一个读写操作都需要有一个连接。我们来看下数据库连接的调用流是什么样的:
调用流程是这样的:
1. 应用程序的数据访问层请求DataSource来获取一个数据库连接。
2. DataSource使用数据库驱动来打开一个数据库连接。
3. 创建数据库连接,同时打开了一个TCP socket。
4. ...
lambda表达式,lambda表达式,还是lambda表达式。一提到Java 8就只能听到这个,但这不过是其中的一个新功能而已,Java 8还有许多新的特性——有一些功能强大的新类或者新的用法,还有一些功能则是早就应该加到Java里了。
这里我 ...