07H_JH
阿里云高级工程师,专注于大数据与数据库领域
展开
-
java-工具-轮子
几乎每个程序员都知道要“避免重复发明轮子”的道理——尽可能使用那些优秀的第三方框架或库,但当真正进入开发时,我却经常发现他们有时并不知道那些轮子在哪里。最近,我在业余时间带几个年轻的程序员一起做了一个很小的商业项目,而在一起开发的过程中,我几乎在所有需要判断字符串是否为空的地方,看到了下面的代码:if(inputString == null || inputString.length == 0){.转载 2016-08-07 11:30:52 · 3985 阅读 · 1 评论 -
java-jvm-full gc频繁的分析及解决
返回博客列表转 关于施用full gc频繁的分析及解决 DEC_LIU发布时间: 2013/10/13 20:32 阅读: 3431 收藏: 14 点赞: 1 评论: 1关于应用full gc频繁的分析及解决 很久前的工作日记了,移到ITeye上来。现象系统报警full gc次数过多,每2分钟达到了5~6次,这是不正常的现象转载 2016-08-04 10:21:57 · 9868 阅读 · 0 评论 -
java-jvm-GC剖析
Java垃圾回收概况 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代 码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢。这是因为在Java虚拟机中,存在自动内存管理和垃圾清扫机制。概括地说,该机制对 JVM(Java Virtual Machine)转载 2016-08-04 10:20:56 · 751 阅读 · 0 评论 -
java-jvm-内存分区
学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆、栈以及静态数据区。那么在Java语言当中,内存又是如何划分的呢? 由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分。在讨论JVM内存区域划分之前,先来看一下Java程序具体执行的过程:转载 2016-07-30 15:30:33 · 864 阅读 · 0 评论 -
java-IO-基本概念
1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法。 Java.io是大多数面向数据流的输入/输出类的主要软件包。此外,Ja转载 2016-07-30 15:33:33 · 6235 阅读 · 0 评论 -
java-IO-字节流与和字符流
字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件,如图12-6所示。 下面以两个写文件的操作为主进行比较,但是在操作时字节流和字符流的操作完成之后都不关闭输出流。范例:使用字节流不关闭执行package org.lxh转载 2016-07-30 15:36:32 · 564 阅读 · 0 评论 -
java-基础-内部类
说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉。原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法。今天我们就来一探究竟。下面是本文的目录大纲: 一.内部类基础 二.深入理解内部类 三.内部类的使用场景和好处 四.常见的与内部类相关的笔试面试题 若有不正之处,请多谅解并欢迎批评指转载 2016-07-30 15:39:09 · 790 阅读 · 0 评论 -
java-jvm-GC
说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联系起来。在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给了JVM来处理。顾名思义,垃圾回收就是释放垃圾占用的空间,那么在Java中,什么样的对象会被认定为“垃圾”?那么当一些对象被确定为垃圾之后,采用什么样的策略来进行回收(释放空间)?在目前的商业虚拟机中,有哪些典型的垃圾收集转载 2016-07-30 15:37:22 · 493 阅读 · 0 评论 -
java-基础-final
谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字。另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法。下面是本文的目录大纲: 一.final关键字的基本用法 二.深入理解final关键字 若有不正之处,请多多谅解并欢迎指正。 请尊重作者劳动成果,转载请标明原文链接转载 2016-07-30 15:40:44 · 541 阅读 · 0 评论 -
java-基础-接口和抽象类
对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。 一.抽象类 在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为:abstract void fun(); 抽象方原创 2016-07-30 15:44:18 · 444 阅读 · 0 评论 -
java-基础-类与继承
类文件是以.java为后缀的代码文件,在每个类文件中最多只允许出现一个public类,当有public类的时候,类文件的名称必须和public类的名称相同,若不存在public,则类文件的名称可以为任意的名称(当然以数字开头的名称是不允许的)。 在类内部,对于成员变量,如果在定义的时候没有进行显示的赋值初始化,则Java会保证类的每个成员变量都得到恰当的初始化: 1)对于 char、short、原创 2016-07-30 15:54:27 · 619 阅读 · 0 评论 -
java-基础-static
“static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”这段话虽然只是说明了static方法的特殊之处,但是可以看出static关键字的基本作用,简而言之,一句话来描述就是: 方便在没有创建对象的情况下来进行调用(方法/变量)。 很显然,原创 2016-07-30 15:59:22 · 640 阅读 · 0 评论 -
java-基础-Clone()
假如说你想复制一个简单变量。很简单:int apples = 5; int pears = apples; int apples = 5;int pears = apples;不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,float,double.long)同样适用于该类情况。但是如果你复制的是一个对象,情况就有些复杂了。假设说我是一个beginne原创 2016-07-30 16:02:23 · 864 阅读 · 0 评论 -
java-工具-tomcat-加载机制
最近看了Tomcat后, 对Tomcat类加载还不是很清楚, 在网上找了这篇文章, 很赞. 原文排版更精美, 推荐阅读原文.前言 说到本篇的tomcat类加载机制,不得不说翻译学习tomcat的初衷。 之前实习的时候学习javaMelody的源码,但是它是一个Maven的项目,与我们自己的web项目整合后无法直接断点调试。后来同事指导,说是直接把java类复制到转载 2016-08-02 21:54:50 · 855 阅读 · 3 评论 -
java-优化-代码优化(2)
Java中的内存泄漏 1.Java内存回收机制不论哪种语言的内存分配方式,都需要返回所分配内存的真实地址,也就是返回一个指针到内存块的首地址。Java中对象是采用new或者反射的方法创建的,这些对象的创建都是在堆(Heap)中分配的,所有对象的回收都是由Java虚拟机通过垃圾回收机制完成的。GC为了能够正确释放对象,会监控每个对象的运行状况,对他们的申请、引用、被引用、赋值等状况进行监控,Java原创 2016-08-02 23:19:41 · 1118 阅读 · 0 评论 -
java-优化-代码中的优化(1)
1.尽量使用final修饰符。 带有final修饰符的类是不可派生的。在JAVA核心API中,有许多应用final的例子,例如java.lang.String。为String类指定final防止了使用者覆盖length()方法。另外,如果一个类是final的,则该类所有方法都是final的。java编译器会寻找机会内联(inline)所有的final方法(这和具体的编译器实现有关)。此举能够使性能原创 2016-08-02 22:48:53 · 3221 阅读 · 0 评论 -
java-基础-volatile和sychronized
1、锁提供了两种主要特性: 互斥(mutual exclusion) 和可见性(visibility)。 互斥即一次只允许一个线程持有某个特定的锁,因此可使用该特性实现对共享数据的协调访问协议,这样,一次就只有一个线程能够使用该共享数据。 可见性要更加复杂一些,它必须确保释放锁之前对共享数据做出的更改对于随后获得该锁的另一个线程是可见的 —— 如果没有同步机制提供的这种可见性保证,线程看到的共原创 2016-07-30 16:25:14 · 778 阅读 · 0 评论 -
java-工具-开源
什么是开源?「开源」是从英文「Open Source」翻译精简而来,其实是开放源码的意思,我们知道所有的软件都是由代码编写,经编译生成的系统或者应用。而一旦你把它开源,意味着任何人、任何组织都可以使用你的代码或者软件,当然也可以给你免费贡献代码,优化你的应用,开放源码意味着自由选择的权力,而自由选择意味着激发更多创新的能量。Linux 就是最著名的开源操作系统,而 Java 与 And转载 2016-08-02 21:51:52 · 846 阅读 · 0 评论 -
java-工具-Webservice wsdl解析
wsdl解析首先必然是理解第三方webservice的接口描述,也就是解析wsdl文件。wsdl文件是webservice服务接口描述文档,一个wsdl文件可以包含多个接口,一个接口可以包含多个方法。public class WsdlInfo { private String wsdlName; private List<InterfaceInfo> interfaces; /转载 2016-07-30 15:24:59 · 8009 阅读 · 8 评论 -
java-基础-hashcode()及其优化
哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率。在Java的Object类中有一个方法:public native int hashCode();根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现对于包含容器类型的程序设计语言来说,基本上都会涉及到hashCode。在Java中也一样,hashC原创 2016-07-30 15:21:20 · 1742 阅读 · 0 评论 -
java-基础-TreeMap和HashMap
HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。 HashMap 非线程安全 TreeMap 非线程安全 线程安全 在Java里,线程安全一般体现在两个方面: 1、多个thread对同一个java实例的访问(read和mod原创 2016-07-30 14:47:20 · 1112 阅读 · 0 评论 -
java-基础-Arrays剖析
Arrays.sort()数组排序Java Arrays中提供了对所有类型的排序。其中主要分为Primitive(8种基本类型)和Object两大类。基本类型:采用调优的快速排序;对象类型:采用改进的归并排序。 也就是说,优化的归并排序既快速(nlog(n))又稳定。 对于对象的排序,稳定性很重要。比如成绩单,一开始可能是按人员的学号顺序排好了的,现在让我们用成绩排,那么你应该保证,本来张三在李原创 2016-07-30 14:42:40 · 756 阅读 · 0 评论 -
java-基础-LinkedList剖析
一、源码解析1、 LinkedList类定义2、LinkedList数据结构原理3、私有属性4、构造方法5、元素添加add()及原理6、删除数据remove()7、数据获取get()8、数据复制clone()与toArray()9、遍历数据:Iterator()二、ListItr 一、源码解析 1、 LinkedLis转载 2016-07-30 14:35:49 · 659 阅读 · 0 评论 -
java-基础-ArrayList剖析
ArrayList是List接口的可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增长。自动增长会带来数据向新数组的重新拷贝,因此,原创 2016-07-30 14:34:01 · 581 阅读 · 0 评论 -
java-基础-hashset剖析
HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet 的实现比较简单,相关HashSet的操作,基本上都是直接调用底层HashMap的相关方法来完成。public cl原创 2016-07-30 13:53:21 · 587 阅读 · 0 评论 -
java-基础-hashmap剖析
HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。的顺序,特别是它不保证该顺序恒久不变。HashMap底层就是一个数组结构,数组中的每一项又是一个链表。当新建一个HashMap的时候,就会初始化一个数组。/** * The table, resi原创 2016-07-30 13:50:34 · 745 阅读 · 0 评论 -
java-设计模式-观察者模式
简单观察者模式观察者模式中,一个被观察者管理所有依赖它的观察者,并且在本身的状态改变时主动发出通知。这通常通过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。 角色 抽象被观察者角色:把所有对观察者对象的引用保存在一个集合中,每个被观察者角色都可以有任意数量的观察者。被观察者提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。 抽象观察者角色:为所有具体的原创 2016-07-28 17:41:58 · 732 阅读 · 0 评论 -
java-基础-hashcode()和equal()
首先equals()和hashcode()这两个方法都是从object类中继承过来的。 equals()方法在object类中定义如下: public boolean equals(Object obj) { return (this == obj); } 很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。但是我们必需清楚,当String 、Math、还有Integer、Do原创 2016-07-29 11:46:22 · 574 阅读 · 0 评论 -
java-基础-强、软、弱、虚引用
Java的四种引用,强弱软虚,用到的场景。JDK1.2之前只有强引用,其他几种引用都是在JDK1.2之后引入的.强引用(Strong Reference) 最常用的引用类型,如Object obj = new Object(); 。只要强引用存在则GC时则必定不被回收。软引用(Soft Reference) 用于描述还有用但非必须的对象,当堆将发生OOM(Out Of Memory)时则会回收软引用原创 2016-07-29 17:50:27 · 3134 阅读 · 0 评论 -
java-jvm-常量池
Java中的常量池,实际上分为两种形态:静态常量池和运行时常量池。 所谓静态常量池,即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。 而运行时常量池,则是jvm虚拟机在完成类装载操作后,将class文件中的常量池载入到内存中,并保存在方法区中,我们常说的常量池,就是指方法区转载 2016-07-29 22:03:53 · 3139 阅读 · 0 评论 -
java-基础-装箱与拆箱
八种基本数据类型的大小,以及他们的封装类。八种基本数据类型,int ,double ,long ,float, short,byte,character,boolean对应的封装类型是:Integer ,Double ,Long ,Float, Short,Byte,Character,Booleanint(4字节)Integerby原创 2016-07-29 22:32:37 · 544 阅读 · 0 评论 -
java-基础-throwblw下的exception和error
Excption与Error区别Error表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的状况;Exception表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的情况。Excption与Error包结构。OOM你遇到过哪些情况,SOF你遇到过原创 2016-07-29 22:35:13 · 466 阅读 · 0 评论 -
java-基础-面向对象特性
Java面向对象的三个特征与含义继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段。封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。面向对象的本质就是将现实世界描绘成一系列完全自治、封原创 2016-07-29 22:38:32 · 448 阅读 · 0 评论 -
java-基础-多态实现剖析
当JVM执行Java字节码时,类型信息会存储在方法区中,为了优化对象的调用方法的速度,方法区的类型信息会增加一个指针,该指针指向一个记录该类方法的方法表,方法表中的每一个项都是对应方法的指针。方法区:方法区和JAVA堆一样,是各个线程共享的内存区域,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。注意重载是编译前绑定,覆盖是后绑定。 运行时常量池:它是原创 2016-07-29 22:53:24 · 671 阅读 · 0 评论 -
java-基础-反射
反射机制JAVA反射机制是在运行状态中, 对于任意一个类, 都能够知道这个类的所有属性和方法; 对于任意一个对象, 都能够调用它的任意一个方法和属性; 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制.主要作用有三:运行时取得类的方法和字段的相关信息。创建某个类的新实例(.newInstance())取得字段引用直接获取和设置对象字段原创 2016-07-29 23:03:37 · 727 阅读 · 0 评论 -
java-基础-String、StringBuilder以及StringBuffer剖析
String源码分析从一段代码说起:public void stringTest(){ String a = "a"+"b"+1; String b = "ab1"; System.out.println(a == b);}大家猜一猜结果如何?如果你的结论是true。好吧,再来一段代码:public void stringTest(){原创 2016-07-29 23:20:00 · 917 阅读 · 0 评论 -
java-基础-泛型
泛型的优缺点优点:使用泛型类型可以最大限度地重用代码、保护类型的安全以及提高性能。泛型最常见的用途是创建集合类。缺点:在性能上不如数组快。泛型常用特点,List能否转为List能,但是利用类都继承自Object,所以使用是每次调用里面的函数都要通过强制转换还原回原来的类,这样既不安全,运行速度也慢。原创 2016-07-29 23:22:32 · 572 阅读 · 0 评论 -
java-工具-XML解析工具对比
-------------------------------------SAX解析xml----------------------------------》Sax定义 SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于android等移动设备 SAX全称是Simple API for Xml,既是指一种接口,也是一个软件包转载 2016-07-29 23:25:02 · 7070 阅读 · 0 评论 -
java-基础-java/c++
JAVA和C++都是面向对象语言。也就是说,它们都能够实现面向对象思想(封装,继乘,多态)。而由于c++为了照顾大量的C语言使用者,而兼容了C,使得自身仅仅成为了带类的C语言,多多少少影响了其面向对象的彻底性!JAVA则是完全的面向对象语言,它句法更清晰,规模更小,更易学。它是在对多种程序设计语言进行了深入细致研究的基础上,据弃了其他语言的不足之处,从根本上解决了c++的固有缺陷。原创 2016-07-29 23:26:53 · 478 阅读 · 0 评论 -
java-基础-JNI本地栈
jni全称是Java Native Interface是在JAVA和Native层(包括但不限于C/C++)相互调用的接口规范。JNI在JAVA1.1中正式推出,在JAVA1.2版本中加入了JNI_OnLoad,JNI_OnUnload方法,这两个方法还是很有用的,后面再说。JNI基础篇Java通过JNI调用本地方法的过程大致是写一个Java类,在其中声明对应要转载 2016-07-29 23:29:38 · 2853 阅读 · 0 评论