java
文章平均质量分 77
快乐的燕子会飞
拥有将近5年项目开发经验。专注于分布式系统、并发编程、中间件和系统架构
展开
-
JAVA中使用FTPClient工具类上传下载
在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件、下载文件。本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件。1、写一个javabean文件,描述ftp上传或下载的信息public class FtpUseBean { private String host; private Integer原创 2012-12-31 14:03:34 · 11270 阅读 · 0 评论 -
java源码分析之LinkedHashMap
LinkedHashMap类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点;而在迭代访问时反而更快,因为它使用链表维护内部次序(HashMap是基于散列表实现的,相关HashMap的内容可以看《Java集合类》和《HashMap源码分析》)。1 public class LinkedHashMap exte原创 2013-01-25 09:53:01 · 4768 阅读 · 0 评论 -
java源码分析之TreeMap深入篇
TreeMap有Values、EntrySet、KeySet、PrivateEntryIterator、EntryIterator、ValueIterator、KeyIterator、DescendingKeyIterator、NavigableSubMap、AscendingSubMap、DescendingSubMap、SubMap、Entry共十三个内部类。Entry是在TreeMap中用于原创 2013-01-25 09:59:16 · 6318 阅读 · 2 评论 -
java源码分析之TreeMap基础篇
常见的数据结构有数组、链表,还有一种结构也很常见,那就是树。前面介绍的集合类有基于数组的ArrayList,有基于链表的LinkedList,还有链表和数组结合的HashMap,今天介绍基于树的TreeMap。 TreeMap基于红黑树(点击查看树、红黑树相关内容)实现。查看“键”或“键值对”时,它们会被排序(次序由Comparable或Comparator决定)。TreeMap的原创 2013-01-25 09:57:21 · 13215 阅读 · 6 评论 -
java源码分析之ArrayList
ArrayList就是传说中的动态数组,就是Array的复杂版本,它提供了如下一些好处:动态的增加和减少元素、灵活的设置数组的大小...... 认真阅读本文,我相信一定会对你有帮助。比如为什么ArrayList里面提供了一个受保护的removeRange方法?提供了其他没有被调用过的私有方法? 首先看到对ArrayList的定义:public class Arr原创 2013-01-25 08:52:19 · 30490 阅读 · 16 评论 -
java源码分析之LinkedList
LinkedList也和ArrayList一样实现了List接口,但是它执行插入和删除操作时比ArrayList更加高效,因为它是基于链表的。基于链表也决定了它在随机访问方面要比ArrayList逊色一点。 除此之外,LinkedList还提供了一些可以使其作为栈、队列、双端队列的方法。这些方法中有些彼此之间只是名称的区别,以使得这些名字在特定的上下文中显得更加的合适。原创 2013-01-25 09:28:45 · 35474 阅读 · 13 评论 -
java源码分析之HashSet及LinkedHashSet
Java容器类的用途是“保存对象”,分为两类:Map——存储“键值对”组成的对象;Collection——存储独立元素。Collection又可以分为List和Set两大块。List保持元素的顺序,而Set不能有重复的元素。 本文分析Set中最常用的HashSet类,并简单介绍和对比LinkedHashSet。 首先对Set接口进行简要的说明。 存原创 2013-01-25 09:54:45 · 5532 阅读 · 1 评论 -
String、StringBuffer与StringBuilder之间区别
最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBuilder的东西,现在整理一下。关于这三个类在字符串处理中的位置不言而喻,那么他们到底有什么优缺点,到底什么时候该用谁呢?下面我们从以下几点说明一下 1.三者在执行速度方面的比较:StringBuilder > StringBuffer > String原创 2013-01-12 09:43:57 · 1449 阅读 · 1 评论 -
java动态代理(JDK和cglib)
JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 按照代理的创建时期,代理类可以分为原创 2013-01-30 14:45:22 · 1435 阅读 · 0 评论 -
java serializable深入了解
一、串行化的概念和目的 1. 什么是Serialization?串行化(Serialization)是计算机科学中的一个概念,它是指将对象存储到介质(如文件、内在缓冲区等)中或是以二进制方式通过网络传输。之后可以通过反串行化从这些连续的位数据重新构建一个与原始对象状态相同的对象,因此在特定情况下也可以说是得到一个副本,但并不是所有情况都这样。Java有Serializati原创 2013-01-24 17:13:33 · 9206 阅读 · 1 评论 -
哈希表(HashMap)分析及实现(JAVA)
探讨Hash表中的一些原理/概念,及根据这些原理/概念,自己设计一个用来存放/查找数据的Hash表,并且与JDK中的HashMap类进行比较。我们分一下七个步骤来进行。 一。 Hash表概念二 . Hash构造函数的方法,及适用范围三. Hash处理冲突方法,各自特征四. Hash查找过程五. 实现一个使用Hash存数据的场景--Hash查找算法,插入算法六. JDK中原创 2013-01-31 16:43:01 · 4960 阅读 · 1 评论 -
深度解析Java内存的原型及工作原理
本文主要通过分析Java内存分配的栈、堆以以及常量池详细的讲解了其的工作原理。一、java虚拟机内存原型寄存器:我们在程序中无法控制栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中堆:存放用new产生的数据静态域:存放在对象中用static定义的静态成员常量池:存放常量非RAM存储:硬盘等永久存储空间。二、常量池(const原创 2013-01-22 12:08:48 · 1281 阅读 · 0 评论 -
Java内存溢出详解及解决方案
内存溢出与数据库锁表的问题,可以说是开发人员的噩梦,一般的程序异常,总是可以知道在什么时候或是在什么操作步骤上出现了异常,而且根据堆栈信息也很容易定位到程序中是某处出现了问题。内存溢出与锁表则不然,一般现象是操作一般时间后系统越来越慢,直到死机,但并不能明确是在什么操作上出现的,发生的时间点也没有规律,查看日志或查看数据库也不能定位出问题的代码。更严重的是内存溢出与数据库锁表在系统开发和单原创 2013-01-22 12:05:07 · 3799 阅读 · 0 评论 -
Java枚举的七种常见用法
DK1.5引入了新的类型——枚举。在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便。用法一:常量在JDK1.5 之前,我们定义常量都是: public static fianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。public enum Color { RED, GREEN, BLANK,原创 2013-01-22 11:06:04 · 1083 阅读 · 0 评论 -
Java与Http协议(HttpURLConnection和HttpClient)
引言 http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式。HTTP协议的主要特点是: 1.支持客户/服务器模式。 2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。由于HTTP协议简单,通信速度很快。 3.灵原创 2013-05-05 13:37:41 · 4652 阅读 · 0 评论 -
struts2和servlet的共存问题 (已在实际问题中验证)
先看一下struts2 的web.xml文件:struts2org.apache.struts2.dispatcher.FilterDispatcherstruts2/*在请求应用时,struts2将会截获所有请求,对于servlet请求将不能够正常相应,是struts2把servlet当成action了,因为servlet和action都是没有后缀的解决方法目前有原创 2013-05-09 11:20:05 · 1513 阅读 · 0 评论 -
昨天面试新浪 java试题
昨天去了新浪网面试,感觉新浪真的挺不错的,工作环境那叫一个好啊。对于一般屌丝的话进到这种公司就可以呆一辈子了。做了面试之后感觉不管大公司还是小公司都还是注重基础和你平时工作的积累的。所以不能抱怨现在工作不好找,压力大,更应该重自身出发,打好基础才是王道! 1、 public、private、protect、friendly区别 public公共,加上这个修饰的类或属性,可以在同一个包原创 2013-07-31 10:30:07 · 5493 阅读 · 3 评论 -
java源码分析之HashMap
在Java集合类中最常用的除了ArrayList外,就是HashMap了。本文尽自己所能,尽量详细的解释HashMap的源码。一山还有一山高,有不足之处请之处,定感谢指定并及时修正。 在看HashMap源码之前先复习一下数据结构。 Java最基本的数据结构有数组和链表。数组的特点是空间连续(大小固定)、寻址迅速,但是插入和删除时需要移动元素,所以查询快,增加删除慢。链表原创 2013-01-25 09:50:05 · 6428 阅读 · 7 评论 -
Java数组与内存控制
一、Java数组初始化 Java数组是静态的,即当数组被初始化之后,该数组的长度是不可变的。Java数组使用之前必须先对数组对象进行初始化,所谓初始化,就是为数组的所有元素分配内存空间,并为每个数组元素指定初始值。(文章来源于李刚老师的《突破java程序员的16课》)1:基本类型数组的两种初始化方式静态初始化:初始化时由程序员显式指定每个数组元素的初原创 2013-01-24 16:47:00 · 1789 阅读 · 0 评论 -
JAVA Properties工具类
今天遇到一个问题就是new FileInputStream(“”)不能获取相对路径的输入流,只能写绝对路径才能访问。本人通过参考一些文件现总结如下:1、首先是加载property属性文件private static Properties properties; private static Logger log = Logger.getLogger(Configuration.cl原创 2012-12-31 12:54:25 · 2187 阅读 · 0 评论 -
httpClient 用于发送HTTP请求的工具类
package util;import java.io.BufferedInputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.Reader;import java.io.UnsupportedEnc原创 2012-12-31 15:07:09 · 7041 阅读 · 0 评论 -
日期工具类DateUtils
package date.util;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;public class DateUtils { static final String form原创 2012-12-31 13:28:32 · 12214 阅读 · 1 评论 -
java JDBC最基本的操作读取、调用存储过程、执行批处理、事务等
package test.jdbc;import java.sql.*;public class JDBCTest { private static Connection conn = null; static{ try { Class.forName("oracle.jdbc.driver.OracleDriver"); conn = Drive原创 2013-01-02 13:05:26 · 1851 阅读 · 0 评论 -
Java io文件操作(按字符、字节、行、随机读取,追加,文件操作)
什么是流: 流是一个抽象的概念。当Java程序需要从数据源读取数据时,会开启一个到数据源的流。数据源可以是文件,内存或者网络等。同样,当程序需要输出数据到目的地时也一样会开启一个流,数据目的地也可以是文件、内存或者网络等。流的创建是为了更方便地处理数据的输入输出。 流分为字节流和字符流。字节流也称为原始数据,需要用户读入后进行相应的编码转换。而字符流的实现是基于自动转换的,读取数原创 2013-01-02 13:56:02 · 9068 阅读 · 5 评论 -
JAVA中集合map,set,list详解
在JAVA的util包中有两个所有集合的父接口Collection和Map,它们的父子关系: java.util +Collection 这个接口extends自 --java.lang.Iterable接口 +List 接口 -ArrayList 类 -LinkedL原创 2013-01-04 18:41:30 · 2172 阅读 · 2 评论 -
java实现简单的单点登录
摘要:单点登录(SSO)的技术被越来越广泛地运用到各个领域的软件系统当中。本文从业务的角度分析了单点登录的需求和应用领域;从技术本身的角度分析了单点登录技术的内部机制和实现手段,并且给出Web-SSO和桌面SSO的实现、源代码和详细讲解;还从安全和性能的角度对现有的实现技术进行进一步分析,指出相应的风险和需要改进的方面。本文除了从多个方面和角度给出了对单点登录(SSO)的全面分析,还并且讨论了如何转载 2013-01-02 13:23:24 · 1628 阅读 · 0 评论 -
Java垃圾回收
1 引言 Java的堆是一个运行时数据区,类的实例(对象)从中分配空间。Java虚拟机(JVM)的堆中储存着正在运行的应用程序所建立的所有对象,这些对象通过new、newarray、anewarray和multianewarray等指令建立,但是它们不需要程序代码来显式地释放。一般来说,堆的是由垃圾回收 来负责的,尽管JVM规范并不要求特殊的垃圾回收技术,甚至根本就不需要垃圾回收,但原创 2013-01-05 10:49:04 · 1364 阅读 · 0 评论 -
Java中反射机制(Reflection)学习
首先看下基本概念: (一)在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法?答案是肯定的。这种动态获取类的信息以及动态调用对象的方法的功能来自于Java 语言的反射(Reflection)机制。 Java 反射机制主要提供了以下功能: ①:在运行时判断任意一个对象所属的类。 ②:在运行时构造原创 2013-01-04 22:39:39 · 1289 阅读 · 0 评论 -
java RMI远程方法调用详解
RMI是Java的一组拥护开发分布式应用程序的API。RMI使用Java语言接口定义了远程对象,它集合了Java序列化和Java远程方法协议(Java Remote Method Protocol)。简单地说,这样使原先的程序在同一操作系统的方法调用,变成了不同操作系统之间程序的方法调用,由于J2EE是分布式程序平台,它一RMI机制实现程序组件在不同操作系统之间的通信。比如,一个EJB可以通过RM原创 2013-01-07 14:43:27 · 4475 阅读 · 0 评论 -
java多线程概念和原理
多线程是程序员面试时常常会面对的问题,对多线程概念的掌握和理解水平,也会被一些老鸟用来衡量一个人的编程实力的重要参考指标。不论是实际工作需要还是为了应付面试,掌握多线程都是程序员职业生涯中一个必须经过的环节。其实当你把“多线程”和你的“职业生涯”联系在一起考虑的时候,就会觉得“多线程”是多么的渺小,对,没有跨越不过的山。不过就算它很渺小,但也有可能改变你的人生轨迹。不用担心,如果你对多线程还不太熟原创 2013-01-07 15:39:47 · 1776 阅读 · 0 评论 -
Java 动态代理机制分析及扩展
简介: 本文通过分析 Java 动态代理的机制和特点,解读动态代理类的源代码,并且模拟推演了动态代理类的可能实现,向读者阐述了一个完整的 Java 动态代理运作过程,希望能帮助读者加深对 Java 动态代理的理解和应用引言Java 动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类。代理类会负责将所有的方法调原创 2013-01-23 15:09:52 · 995 阅读 · 0 评论 -
学习java必知的概念
1、java面向对象的特征 1)封装:封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。 面向对象程序设计中,一个非常重要的技术便是封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。这样做的好处在于可以使类内原创 2013-01-05 11:24:42 · 1642 阅读 · 0 评论 -
Java堆和栈的区别
堆和栈的区别 栈与堆都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。 Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不原创 2013-01-23 10:17:23 · 1549 阅读 · 2 评论 -
JAVA中静态数组与动态数组
前面我们学习的数组都是静态数组,其实在很多的时候,静态数组根本不能满足我们编程的实际需要,比方说我需要在程序运行过程中动态的向数组中添加数据,这时我们的静态数组大小是固定的,显然就不能添加数据,要动态添加数据必须要用到动态数组,动态数组中的各个元素类型也是一致的,不过这种类型已经是用一个非常大的类型来揽括—Object类型。 Object类是JAVA.LANG包中的顶层超类。所有的类原创 2013-01-23 14:27:35 · 2972 阅读 · 0 评论 -
Java动态代理
没事的时候翻看lang.reflect包下的代码,发现有两部分内容:涉及反射和动态代理。 很多地方都可以看到动态代理的影子,只是一直没仔细看下。 在学习之前,先提出几个问题,带着问题来看代码: 1.什么是动态代理? 2.为什么使用动态代理? 3.使用它有哪些好处? 4.哪些地方需要动态代理? 熟悉设计模式的人对于代理模式可 能都不陌生。 代理对象和被代理原创 2013-01-23 14:50:22 · 1040 阅读 · 0 评论 -
java RMI入门指南
感觉这篇文章不错,直接转了RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。但是传统RPC并不能很好地应用于分布式对象系统。而Java RMI 则支持存储于不同地址空间的程序级对象原创 2014-11-12 10:39:14 · 5691 阅读 · 2 评论