
Java进阶
文章平均质量分 93
hoxis
这个作者很懒,什么都没留下…
展开
-
成为JavaGC专家Part III:如何优化Java垃圾回收机制
成为JavaGC专家Part III:如何优化Java垃圾回收机制 本文是成为Java GC专家系列文章的第三篇。在第一篇《成为JavaGC专家Part I — 深入浅出Java垃圾回收机制》中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生代和老年代,你应该了解的JDK7中的5种GC类型,以及这5种类型对于应用性能的影响。 在第二篇《成为J原创 2014-05-06 14:20:06 · 796 阅读 · 0 评论 -
Java解析字符串表达式--逆波兰表达式的生成
上回讲了如何计算后缀表达式,其实真正的难点在于如何将一个正常的字符串表达式(中缀表达式)变成一个后缀表达式。如将6 * ( 5 + ( 2 + 3) * 8 + 3)变为6 5 2 3 + 8 * + 3 + * 逆波兰表达式,它的语法规定,表达式必须以逆波兰表达式的方式给出。逆波兰表达式又叫做后缀表达式。这个知识点在数据结构和编译原理这两门课程中都有介绍,下面是一些例子:原创 2014-09-11 14:19:50 · 5378 阅读 · 2 评论 -
排序算法总结之直接选择排序
概念 每一趟在最后的n-i+1(i=1,2,...,n-1)中取最小的记录作为有序表的第i个记录 优点:算法简单,容易实现 缺点:每次只能确定一个元素 Java实现: package com.liuhao.sort; import java.util.Arrays; //定义一个数据包装类 class DataWrap implements Comp原创 2014-08-19 11:55:44 · 2551 阅读 · 1 评论 -
排序算法总结之折半插入排序
基本思想 折半插入排序是对直接插入排序的简单改进,对于直接插入排序而言,当第i-1趟需要将第i个元素插入前面的0~i-1个元素序列中时,总是需要从i-1个元素开始,逐个比较每个元素,直到找到它的位置。这显然没有利用前面0~i-1个元素已经有序这个特点,而折半插入排序则改进了这一点。 对于折半插入排序而言,当需要插入第i个元素时,它不会逐个进行比较每个元素,而是: (1)计算0~i-1索引的中原创 2014-08-29 18:27:29 · 6866 阅读 · 0 评论 -
哈夫曼树(最优二叉树)及其Java实现
一、定义 一些定义: 节点之间的路径长度:在树中从一个结点到另一个结点所经历的分支,构成了这两个结点间的路径上的经过的分支数称为它的路径长度 树的路径长度:从树的根节点到树中每一结点的路径长度之和。在结点数目相同的二叉树中,完全二叉树的路径长度最短。 结点的权:在一些应用中,赋予树中结点的一个有某种意义的实数。 结点的带权路径长度:结点到树根之间的路径长度与该结点原创 2014-08-18 10:50:07 · 20225 阅读 · 6 评论 -
排序算法总结之直接插入排序
基本思想 插入排序(Insertion Sort)基本思想是:依次将待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。具体来说,对于一个有n个数据的序列,排序需要进行n-1趟插入操作。 形象来看,每一趟插入操作就像大家玩扑克牌的摸牌阶段,我们使用左手拿着已经摸到并排好大小的牌,右手从牌堆里边摸牌,每摸一张牌就将其插入到左手理顺的牌中,插入后保持其大原创 2014-08-29 14:33:26 · 1433 阅读 · 0 评论 -
J2EE系统异常的处理准则
异常的处理是每个Java程序员时常面对的问题,但是很多人没有原则,遇到异常也不知道如何去处理,于是遇到检查异常就胡乱try...catch...一把,然后e.printStackTrace()一下了事,这种做法通常除了调试排错有点作用外,没任何价值。对于运行时异常,则干脆置之不理。 原因是很多开发者缺乏对异常的认识和分析,首先应该明白Java异常体系结构,一种分层继承的关系,你必须对层次结转载 2014-09-26 13:26:26 · 1217 阅读 · 0 评论 -
排序算法总结之快速排序
快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。 分治法的基本思想 分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。原创 2014-08-27 16:27:33 · 2217 阅读 · 0 评论 -
【边做项目边学Android】手机安全卫士07-手机防盗之进入限制
上次写到在进入手机但·防盗界面时需要有密码限制,首先第一次进入时会弹出对话框提示用户设置密码;再次进入时会要求用户输入密码;这次来具体实现上述功能。 首次登录,设置密码 首先,我们的密码是保存在SharePreference中的”password”字段里的,在登录时后台需要校验该字段是否已经设置了密码,若未设置则弹出对话框让用户设置,否则要用户输入密码进入手机防盗界面; 校验是否设置了原创 2014-12-29 10:29:36 · 1332 阅读 · 0 评论 -
成为JavaGC专家Part I:深入浅出Java垃圾回收机制
成为JavaGC专家Part I :深入浅出Java垃圾回收机制 对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC如何工作可以帮你写出更好的Java应用。 这仅仅代表我个人的意见,但我坚信一个精通GC的人往往是一个好的Java开发者。如果你对GC的处理过程感兴趣,说明你已经具备...原创 2014-04-02 19:02:55 · 343 阅读 · 0 评论 -
成为JavaGC专家Part II:如何监控Java垃圾回收机制
成为JavaGC专家Part II :如何监控Java垃圾回收机制 本文是成为Java GC专家系列文章的第二篇。在第一篇《深入浅出Java垃圾回收机制》中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生代和老年代,你应该了解的JDK7中的5种GC类型,以及这5种类型对于应用性能的影响。 在本文中,我将解释JVM到底是如何执行垃圾回收处理...原创 2014-04-03 13:00:06 · 266 阅读 · 0 评论 -
成为JavaGC专家Part III:如何优化Java垃圾回收机制
成为JavaGC专家Part III:如何优化Java垃圾回收机制 本文是成为Java GC专家系列文章的第三篇。在第一篇《成为JavaGC专家Part I — 深入浅出Java垃圾回收机制》中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生代和老年代,你应该了解的JDK7中的5种GC类型,以及这5种类型对于应用性能的影响。 在第二篇《成...原创 2014-04-03 20:03:40 · 238 阅读 · 0 评论 -
成为JavaGC专家Part IV:Apache的MaxClients参数详解及其在Tomcat执行FullGC时的影响
成为JavaGC专家Part IV:Apache的MaxClients参数详解及其在Tomcat执行FullGC时的影响 这是“成为Java GC专家系列文章”的第四篇。 在第一篇文章 成为JavaGC专家Part I — 深入浅出Java垃圾回收机制 中我们学习了不同GC算法的执行过程,GC如何工作,新生代及老年代的基本概念,在JDK7中你应该了解的5种GC类型以及...原创 2014-04-03 20:04:09 · 255 阅读 · 0 评论 -
JVM性能优化 Part IV:垃圾回收
JVM性能优化 Part IV:垃圾回收 到目前为止,本系列的文章将stop-the-world式的垃圾回收视为影响Java应用程序伸缩性的一大障碍,而伸缩性又是现代企业级Java 应用程序开发的基础要求,因此这一问题亟待改善。幸运的是,针对此问题,JVM中已经出现了一些新特性,所使用的方式或是对stop-the-world 式的垃圾回收做微调,或是消除冗长的暂停(这样...原创 2014-04-03 20:42:00 · 287 阅读 · 0 评论 -
JVM性能优化 Part I:JVM简介
JVM性能优化 Part I:JVM简介 众所周知,Java应用程序是运行在JVM上的,但是你对JVM有所了解么?作为这个系列文章的第一篇,本文将对经典Java虚拟机的运行机制做简单介绍,内容包括“一次编写,到处运行”的利弊、垃圾回收的基本原理、常用垃圾回收算法的示例和编译器优化等。后续的系列文章将会JVM性能优化的内容进 行介绍,包括新一代JVM的设计思路,以及如何...原创 2014-04-04 14:15:32 · 193 阅读 · 0 评论 -
JVM性能优化 Part II:编译器
JVM性能优化 Part II:编译器 作为JVM性能优化系列文章的第2篇,本文将着重介绍Java编译器,此外还将对JIT编译器常用的一些优化措施进行讨论(参见“JVM性能优化,Part 1″中对JVM的介绍)。Eva Andreasson将对不同种类的编译器做介绍,并比较客户端、服务器端和层次编译产生的编译结果在性能上的区别,此外将对通用的JVM优化做介绍,包括死代码...原创 2014-04-04 14:16:07 · 180 阅读 · 0 评论 -
JVM性能优化 Part III:垃圾回收
JVM性能优化 Part III:垃圾回收 Java平台的垃圾回收机制大大提高的开发人员的生产力,但实现糟糕的垃圾回收器却会大大消耗应用程序的资源。本文作为JVM性能优化系列的第3 篇,Eva Andeasson将为Java初学者介绍Java平台的内存模型和GC机制。她将解释为什么碎片化(不是GC)是Java应用程序出现性能问题的主要原 因,以及为什么当前主要通过分代垃...原创 2014-04-04 14:16:38 · 227 阅读 · 0 评论 -
JVM性能优化 Part V:Java的伸缩性
JVM性能优化 Part V:Java的伸缩性 很多程序员在解决JVM性能问题的时候,花开了很多时间去调优应用程序级别的性能瓶颈,当你读完这本系列文章之后你会发现我可能更加系统地看待这类的问题。我说过JVM的自身技术限制了Java企业级应用的伸缩性。首先我们先列举一些主导因素。 主流的硬件服务器提供了大量的内存 分布式系统有大量内存的需求,...原创 2014-04-04 14:16:55 · 166 阅读 · 0 评论 -
排序算法总结之堆排序
堆的概念。 n个关键字序列Kl,K2,…,Kn称为堆,当且仅当该序列满足如下性质(简称为堆性质): (1) ki≤K2i且ki≤K2i+1 或(2)Ki≥K2i且ki≥K2i+1(1≤i≤ ) 满足(1)的称为小根堆,满足(2)的称为大根堆。 若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树:树中任一非叶结点原创 2014-08-20 15:58:45 · 1560 阅读 · 0 评论 -
排序算法总结之冒泡排序
冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。它的基本思想就是两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 例如:初始序列3,6,4,2,11,10,5;从头开始,两两相比原创 2014-08-21 13:24:34 · 2227 阅读 · 0 评论 -
JVM性能优化 Part V:Java的伸缩性
JVM性能优化 Part V:Java的伸缩性 很多程序员在解决JVM性能问题的时候,花开了很多时间去调优应用程序级别的性能瓶颈,当你读完这本系列文章之后你会发现我可能更加系统地看待这类的问题。我说过JVM的自身技术限制了Java企业级应用的伸缩性。首先我们先列举一些主导因素。 主流的硬件服务器提供了大量的内存 分布式系统有大量内存的需求,而且原创 2014-05-06 14:20:37 · 821 阅读 · 0 评论 -
成为JavaGC专家Part IV:Apache的MaxClients参数详解及其在Tomcat执行FullGC时的影响
成为JavaGC专家Part IV:Apache的MaxClients参数详解及其在Tomcat执行FullGC时的影响 这是“成为Java GC专家系列文章”的第四篇。 在第一篇文章 成为JavaGC专家Part I — 深入浅出Java垃圾回收机制 中我们学习了不同GC算法的执行过程,GC如何工作,新生代及老年代的基本概念,在JDK7中你应该了解的5种GC类型以及他们原创 2014-05-06 14:20:11 · 925 阅读 · 0 评论 -
JVM性能优化 Part III:垃圾回收
JVM性能优化 Part III:垃圾回收 Java平台的垃圾回收机制大大提高的开发人员的生产力,但实现糟糕的垃圾回收器却会大大消耗应用程序的资源。本文作为JVM性能优化系列的第3 篇,Eva Andeasson将为Java初学者介绍Java平台的内存模型和GC机制。她将解释为什么碎片化(不是GC)是Java应用程序出现性能问题的主要原 因,以及为什么当前主要通过分代垃圾回原创 2014-05-06 14:20:32 · 721 阅读 · 0 评论 -
JVM性能优化 Part I:JVM简介
JVM性能优化 Part I:JVM简介 众所周知,Java应用程序是运行在JVM上的,但是你对JVM有所了解么?作为这个系列文章的第一篇,本文将对经典Java虚拟机的运行机制做简单介绍,内容包括“一次编写,到处运行”的利弊、垃圾回收的基本原理、常用垃圾回收算法的示例和编译器优化等。后续的系列文章将会JVM性能优化的内容进 行介绍,包括新一代JVM的设计思路,以及如何支持原创 2014-05-06 14:20:21 · 1081 阅读 · 0 评论 -
成为JavaGC专家Part II:如何监控Java垃圾回收机制
成为JavaGC专家Part II :如何监控Java垃圾回收机制 本文是成为Java GC专家系列文章的第二篇。在第一篇《深入浅出Java垃圾回收机制》中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生代和老年代,你应该了解的JDK7中的5种GC类型,以及这5种类型对于应用性能的影响。 在本文中,我将解释JVM到底是如何执行垃圾回收处理的。什原创 2014-05-06 14:19:55 · 759 阅读 · 0 评论 -
深入理解JVM内幕:从基本结构到Java 7新特性
深入理解JVM内幕:从基本结构到Java 7新特性 每个Java开发者都知道Java字节码是执行在JRE((Java Runtime Environment Java运行时环境)上的。JRE中最重要的部分是Java虚拟机(JVM),JVM 负责分析和执行Java字节码。Java开发人员并不需要去关心JVM是如何运行的。在没有深入理解JVM的情况下,许多开发者已经开发出了非常原创 2014-05-06 14:20:47 · 806 阅读 · 0 评论 -
JVM性能优化 Part II:编译器
JVM性能优化 Part II:编译器 作为JVM性能优化系列文章的第2篇,本文将着重介绍Java编译器,此外还将对JIT编译器常用的一些优化措施进行讨论(参见“JVM性能优化,Part 1″中对JVM的介绍)。Eva Andreasson将对不同种类的编译器做介绍,并比较客户端、服务器端和层次编译产生的编译结果在性能上的区别,此外将对通用的JVM优化做介绍,包括死代码剔除原创 2014-05-06 14:20:26 · 745 阅读 · 0 评论 -
JVM性能优化 Part IV:垃圾回收
JVM性能优化 Part IV:垃圾回收 到目前为止,本系列的文章将stop-the-world式的垃圾回收视为影响Java应用程序伸缩性的一大障碍,而伸缩性又是现代企业级Java 应用程序开发的基础要求,因此这一问题亟待改善。幸运的是,针对此问题,JVM中已经出现了一些新特性,所使用的方式或是对stop-the-world 式的垃圾回收做微调,或是消除冗长的暂停(这样更好原创 2014-05-06 14:20:16 · 828 阅读 · 0 评论 -
成为JavaGC专家Part I:深入浅出Java垃圾回收机制
成为JavaGC专家Part I :深入浅出Java垃圾回收机制 对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC如何工作可以帮你写出更好的Java应用。 这仅仅代表我个人的意见,但我坚信一个精通GC的人往往是一个好的Java开发者。如果你对GC的处理过程感兴趣,说明你已经具备较大原创 2014-05-06 14:19:50 · 733 阅读 · 0 评论 -
java.util.ComparableTimSort中的sort()方法简单分析
TimSort算法是一种起源于归并排序和插入排序的混合排序算法,设计初衷是为了在真实世界中的各种数据中可以有较好的性能。该算法最初是由Tim Peters于2002年在Python语言中提出的。 TimSort 是一个归并排序做了大量优化的版本。对归并排序排在已经反向排好序的输入时表现O(n2)的特点做了特别优化。对已经正向排好序的输入减少回溯。对两种情况混合(一会升序,一会降序)的输入处理比较原创 2014-07-30 13:42:47 · 16187 阅读 · 4 评论 -
Collections中sort()方法源代码的简单分析
Collections的sort方法代码: public static void sort(List list, Comparator c) { Object[] a = list.toArray(); Arrays.sort(a, (Comparator)c); ListIterator i = list.listIterator(); for (int j=0; j i.next原创 2014-07-29 17:56:17 · 11537 阅读 · 0 评论 -
排序二叉树及其Java实现
定义 排序二叉树的定义也是递归定义的,需要满足: (1)若它的左子树不为空,则左子树上所有节点的值要均小于根节点的值; (2)若它的右子树不为空,则右子树上所有节点的值要均大于根节点的值; (3)左、右子树也分别是排序二叉树 如下图,对于排序二叉树,若按中序遍历就可以得到由小到大的有序序列。 创建 创建排序二叉树的步骤就是不断像排序二叉树中添加新节点(p)的过程: (1)以根节原创 2014-08-18 16:30:45 · 7386 阅读 · 1 评论 -
排序算法总结之归并排序
基本思想 设归并排序的当前区间是R[low..high],分治法的三个步骤是: ①分解:将当前区间一分为二,即求分裂点 ②求解:递归地对两个子区间R[low..mid]和R[mid+1..high]进行归并排序; ③组合:将已排序的两个子区间R[low..mid]和R[mid+1..high]归并为一个有序的区间R[low..high]。原创 2014-09-07 19:39:38 · 1659 阅读 · 0 评论 -
排序算法总结之希尔排序
希尔排序(Shell Sort)是插入排序的一种,其实质就是分组插入排序,该方法又称缩小增量排序,因D.L.Shell于1959年提出而得名。它是对直接插入排序的一种改进,通过加大插入排序中元素之间的间隔,并在这些有间隔的元素中进行插入排序,从而使得数据项大跨度的移动。 基本思想 先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后原创 2014-09-07 16:12:12 · 1361 阅读 · 0 评论 -
List.add()方法中的陷阱
今天在做微信项目时,发现了一个奇怪的问题,代码如下: JSONObject j = new JSONObject(); List list = new ArrayList(); j.put("author", "1yuqiaotech"); j.put("title", "1测试标题"); //在图文消息原创 2014-08-26 13:10:20 · 10675 阅读 · 4 评论 -
Java解析字符串表达式--逆波兰表达式的计算
问题来由: 读入一个字符串形式的四则运算表达式,输出对应的计算结果。如读入的是“6 * ( 5 + ( 2 + 3) * 8 + 3)”,那么解析后的输出结果应为288。 思路: 一般的计算过程是这样的,首先计算优先级最高的小括号里面的内容,即“( 5 + ( 2 + 3) * 8 + 3)”, 将“2 + 3”的计算结果并存为A,接着用计算“A*8”,并存为B 计算“5+原创 2014-09-10 16:17:58 · 15434 阅读 · 0 评论 -
Java垃圾收集器
垃圾收集器是内存回收算法的具体实现。下图展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用。 上面有7中收集器,分为两块,上面为新生代收集器,下面是老年代收集器。如果两个收集器之间存在连线,就说明它们可以搭配使用。 Serial收集器:串行收集器 一个单线程的收集器,但它的单线程的意义不仅仅是说明它只会使用一个CPU或一条线程去完原创 2014-08-14 09:13:48 · 1942 阅读 · 2 评论 -
深入理解JVM内幕:从基本结构到Java 7新特性
深入理解JVM内幕:从基本结构到Java 7新特性 每个Java开发者都知道Java字节码是执行在JRE((Java Runtime Environment Java运行时环境)上的。JRE中最重要的部分是Java虚拟机(JVM),JVM 负责分析和执行Java字节码。Java开发人员并不需要去关心JVM是如何运行的。在没有深入理解JVM的情况下,许多开发者已经...原创 2014-04-07 20:31:27 · 190 阅读 · 0 评论