Java
文章平均质量分 51
Java.Sheng
这个作者很懒,什么都没留下…
展开
-
我爱学Java之Thread中stop(),suspend(),resume()为什么不安全
当调用stop()方法时会发生两件事:1.即刻停止run()方法中剩余的全部工作,包括在catch或finally语句中,并抛出ThreadDeath异常(通常情况下此异常不需要显示的捕获),因此可能会导致一些清理性的工作的得不到完成,如文件,数据库等的关闭。2.会立即释放该线程所持有的所有的锁,导致数据得不到同步的处理,出现数据不一致的问题。举个例子:public class Main{原创 2016-05-02 22:24:59 · 3292 阅读 · 0 评论 -
Java实现布隆过滤器(已爬URL过滤)
最近写爬虫需要降低内存的占用,现在用的是HashSet进行已爬URL的过滤,所以想到用布隆过滤器(Bloom Filter)来替换,从而减少内存的开销。因为HashSet内部是由HashMap处理的,HashMap则通过计算一个int型的hash值得出信息指纹,所以一个信息指纹占8字节,但是由于哈希的存储效率一般只有一半,所有说一条URL就需要16字节的信息指纹,而Bloom Filter 则只需要原创 2016-04-29 17:19:01 · 11328 阅读 · 2 评论 -
我爱学Java之枚举
在实际编程中,有时会需要一些固定的数量有限的数据集合,例如周一到周日,春夏秋冬四个季节,这时候就需要用到Java中的枚举类型。枚举类型用enum修饰,除了不能继承自一个enum外,基本上可以将它看作一个类,而其中所枚举的常量可以看做是这个类的相应实例。下面结合代码说明下枚举的具体用法。/** * 枚举用法详解 * * @author JavaSheng * */public class原创 2016-02-19 17:12:58 · 450 阅读 · 0 评论 -
URL队列(爬虫队列)-Berkeley DB的使用示例(Java)
网络爬虫中URL队列即爬虫队列是较为关键的数据结构,对于数据量要求不大的爬虫,我们可以简单的使用Java类库中的内存数据结构,例如链表或者队列来实现URL队列,但是当我们面对数以亿计的链接时,内存数据结构就会因内存的持续增长显得力不从心,这时就需要用到内存数据库-Berkeley DB,它能够存储海量数据,当数据超出内存限制时,能够把它固化在硬盘上,而且存取速度也非常快并且支持多线程访问。Berke原创 2016-04-18 17:19:50 · 4196 阅读 · 0 评论 -
我爱学Java之四种引用类型(强软弱虚)
1.强引用(StrongReference)强引用就是指在程序代码之中普遍存在的,类似与Object obj = newObject()这类的引用。上面的式子创建了一个Object对象,并将这个对象的(强)引用存到变量obj中。只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象。在介绍下面三种引用之前,先说一下引用队列(ReferenceQueue):当对象改变其可达性状态时,对该对象的引用就可原创 2016-05-17 19:44:16 · 924 阅读 · 0 评论 -
我爱学Java之JVM中的OopMap
调用栈里的引用类型数据是GC的根集合(root set)的重要组成部分;找出栈上的引用是GC的根枚举(root enumeration)中不可或缺的一环。 JVM选择用什么方式会影响到GC的实现:如果JVM选择不记录任何这种类型的数据,那么它就无法区分内存里某个位置上的数据到底应该解读为引用类型还是整型还是别的什么。这种条件下,实现出来的GC就会是“保守式GC(conservative GC)”。在转载 2016-05-17 20:40:52 · 13266 阅读 · 9 评论 -
JDK6和JDK7中的substring()
原文链接: programcreek 翻译: ImportNew.com - 刘志军 译文链接: http://www.importnew.com/7418.htmlsubstring(int beginIndex, int endIndex)在JDK6与JDK7中的实现方式不一样,理解他们的差异有助于更好的使用它们。为了简单起见,下面所说的substring()指的就是substring(int转载 2016-04-23 09:45:36 · 314 阅读 · 0 评论 -
性能分析神器VisualVM
VisualVM 是一款免费的,集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU 分析,同时它还支持在 MBeans 上进行浏览和操作。本文主要介绍如何使用 VisualVM 进行性能分析及调优。准备工作自从 JDK 6 Update 7 以后已经作为 Or转载 2016-05-09 11:02:31 · 2090 阅读 · 0 评论 -
JVM性能调优监控工具jps、jstat、jinfo、jmap、jhat、jstack使用详解
除了集成式的VisualVM和JConsole外,JDK本身还提供了如jps、jstack、jmap、jhat、jstat等性能调优监控工具。在Java开发中,有时候我们会碰到下面这些问题:OutOfMemoryError,内存不足内存泄露线程死锁锁争用(Lock Contention)Java进程消耗CPU过高……这些问题在日常开发中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大原创 2016-05-09 16:59:22 · 2913 阅读 · 0 评论 -
Java实现二叉树遍历(递归,非递归)
public class BinaryTree { class TreeNode{ private T data; private TreeNode leftNode; private TreeNode rightNode; public TreeNode(T data, TreeNode<T> leftNode, TreeNod原创 2016-06-17 13:47:47 · 845 阅读 · 0 评论 -
Java下利用Jackson进行Json的转化解析
1.导入相应jackson的jar包2.需要转化解析的类Person.javapublic class Person{ private String name; private int age; public String getName() { return name; } public void setName(String name) {原创 2016-07-08 16:43:06 · 856 阅读 · 0 评论 -
ArrayList jdk1.6 1.7 1.8
ArrayList(jdk1.6) /** * The array buffer into which the elements of the ArrayList are stored. * The capacity of the ArrayList is the length of this array buffer. */ private tran...原创 2018-05-16 00:06:11 · 1119 阅读 · 0 评论 -
我爱学Java之中间缓存变量机制
有一段代码如下:public class Test { public static void main(String[] args) { int j = 0; for (int i = 0; i < 100; i++) { j = j++;转载 2016-05-02 21:00:02 · 695 阅读 · 0 评论 -
URLDecoder: Incomplete trailing escape (%) pattern错误处理
爬虫过程中可能会碰到url普通含义的%字符的情况,如果直接用URLDecode.decode()则会出现如题的错误,解决方法就是先将’%’编码为’%25’,在对整体进行url解码。public static void main(String[] args) throws Exception{ String test = "http://www.baidu.com?123%";//随意构造的原创 2016-04-15 13:32:00 · 16731 阅读 · 4 评论 -
我爱学Java之读取Properties的几种方法
首先贴出目录结构:db.properties1.Properties类的load()方法:public static void main(String[] args) throws IOException{ InputStream in = new BufferedInputStream(new FileInputStream("src/db.properties"));//相对于原创 2016-03-29 10:45:41 · 845 阅读 · 0 评论 -
我爱学Java之(非)静态代码块、(非)静态方法
首先我们建立一个简单的测试类:package com.test;public class Test { public static void main(String[] args){ Father father = new Father(); father.StaticFunction(); father.NoStaticFunction();原创 2016-03-19 23:47:27 · 755 阅读 · 0 评论 -
每天学点JQuery(3)—事件
加载DOM:JQuery用$(document).ready()方法来代替JS中的window.onload()方法,但两者之间也存在着细微的差别:window.onload()方法是在网页中所有的元素(包括元素的所有关联文件)完全加载到浏览器之后才执行,而$(document).ready()方法可以在DOM载入就绪时就可以执行,例如有一个大的图片库,为每张图片都加上链接,window.onloa原创 2016-04-01 16:35:43 · 464 阅读 · 0 评论 -
我爱学Java之对象序列化
Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,当JVM停止运行时,这些对象就不复存在,但在实际应用中,我们需要持久化的保存指定的对象,并在特定的时间重新读取被保存的对象,Java对象序列化就能够帮助我们实现该功能。在进行Java对象序列化的时候,会把其状态保存为一组字节,在对这些对象反序列化的时候再将这些字节组装成对象。但值得注意的事原创 2016-03-09 21:46:31 · 313 阅读 · 0 评论 -
我爱学Java之Map操作详解
首先列举出Map的简单操作,之后重点讲解Map遍历的几种方式。int size() 返回此映射中的键-值映射关系数boolean isEmpty() 如果此映射未包含键-值映射关系,则返回 trueV get(Object key) 返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 nullboolean containsKey(Object key) 如果此映射包含指定键的映射原创 2016-03-12 15:28:06 · 638 阅读 · 0 评论 -
深入分析 Java 中的中文编码问题
转载出处:http://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/编码问题一直困扰着开发人员,尤其在 Java 中更加明显,因为 Java 是跨平台语言,不同平台之间编码之间的切换较多。本文将向你详细介绍 Java 中编码问题出现的根本原因,你将了解到:Java 中经常遇到的几种编码格式的区别;Java 中经常需要编码的转载 2016-03-13 18:15:19 · 1835 阅读 · 2 评论 -
我爱学Java之Comparable与Comparator的区别与用法
Comparable与Compator都是Java提供的用来比较大小的接口,但Comparable是在类内定义比较方法,而Compator则是在类外定义比较方法。Comparable接口位于java.lang包下:public interface Comparable<T>{ public int compareTo(T o);//唯一一个方法}Compator接口位于java.util包原创 2016-03-24 18:56:34 · 579 阅读 · 0 评论 -
我爱学Java之内部类
在Java中,可以将一个类的定义放在另一个类的内部,这就是内部类。 内部类可以被private,default,protected,public修饰,且内部类是一个编译时状态,虚拟机并不知道内部类与常规类有什么不同,一旦编译成功,就会与外部类成为完全不同的两类,所以内部类的成员变量和成员方法可以与外部类相同 。 内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内原创 2016-04-11 00:28:39 · 513 阅读 · 0 评论 -
我爱学Java之正则表达式
在程序开发过程中,难免会遇到需要匹配、查找、替换、判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力,而正则表达式善于处理文本,对匹配、搜索和替换等操作都有意想不到的作用,因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段。1.匹配单个字符:”.”,如需匹配文本中的”.”,则需要对字符进行转义即”.”Pattern pattern = Patte原创 2016-03-25 11:34:29 · 526 阅读 · 0 评论 -
我爱学Java之接口和抽象类
对于面向对象编程来说,抽象是它的一大特征之一,而接口(interface)和抽象类(abstract)正是Java语言中支持抽象的两种机制。下面我就说一下两者的使用与区别:抽象类是用关键字abstract修饰,抽象类在使用上与普通类没有什么区别,可以有自己的成员变量,成员函数,构造函数,唯一不同的是抽象类中可能包含0个或多个抽象方法并且不能被实例化(即不能通过new创建),即用abstract修饰并原创 2016-04-09 13:09:22 · 394 阅读 · 0 评论 -
我爱学Java之Pattern和Matcher用法
Java正则表达式通过java.util.regex包下的Pattern和Matcher类实现Pattern类用于创建一个正则表达式,也可以说是创建一个匹配模式,可以通过两个静态方法创建:compile(String regex)和compile(String regex,int flags),其中regex是正则表达式,flags为可选模式(如:Pattern.CASE_INSENSITIVE 忽原创 2016-03-24 11:54:36 · 36466 阅读 · 4 评论 -
jdk1.6 1.7 1.8 LinkedList源码实现原理及区别
LinkedList(jdk1.6)private transient Entry<E> header = new Entry<E>(null, null, null);定义一个空的Entry对象作为头结点,Entry是其内部定义的一个内部静态类,结构如下:private static class Entry<E> { E element...原创 2018-06-01 16:45:44 · 1558 阅读 · 0 评论