java
文章平均质量分 79
morningsun1990
这个作者很懒,什么都没留下…
展开
-
Java内存管理:深入Java内存区域
Java内存管理:深入Java内存区域 本文引用自:深入理解Java虚拟机的第2章内容 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。 概述: 对于从事C和C++程序开发的开发人员来说,在内存管理领域,他们既是拥有最高权力的皇帝,又是从事最基础工作的劳动人民—既拥有每一个对象的“所有权”转载 2014-11-12 20:14:55 · 491 阅读 · 0 评论 -
java内存回收机制
在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是由JVM自动完成的,降低了Java程序员的学习难度,避免了像C/C++直接操作内存的危险。但是,也正因为内存管理完全由JVM负责,所以也使Java很多程序员不再关心内存分配,导致很多程序低效,耗内存。因此就有了Java程序员到最后应该去了解JVM,才能写出更高效,充分利用有限的内存的程序。1转载 2014-04-28 14:52:17 · 518 阅读 · 0 评论 -
java实现各种基础排序
前言经过两个月的各种笔试面试,对各种基础排序算法原理了然于胸,用c闭着眼都能写出完美ac的代码来,今天刚看完java的数组,忍不住用java将各种排序实现一遍注意,这篇文章只是为了锻炼java语法,不会深入讲各种排序原理,有兴趣的同学可以看我之前的博客,各自排序我都用c讲的非常清楚了冒泡排序[java] view plaincop转载 2014-04-29 08:05:58 · 442 阅读 · 0 评论 -
Java里的堆(heap)栈(stack)和方法区(method)
基础数据类型直接在栈空间分配, 方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收。 引用数据类型,需要用new来创建,既在栈空间分配一个地址空间,又在堆空间分配对象的类变量 。 方法的引用参数,在栈空间分配一个地址空间,并指向堆空间的对象区,当方法调用完成后从栈空间回收。局部变量 new 出来时,在栈空间和堆空间中分配空间,当局部变量生命周期结束后,栈空间立刻被回收,堆空间区转载 2014-03-08 10:00:53 · 2064 阅读 · 1 评论 -
JDK1.5/1.6/1.7之新特性总结
JDK1.5新特性:1.自动装箱与拆箱:Integer iObj = 3;System.out.println(iObj + 12); Integer i1 = 137(-128--127范围时,为true); Integer i2 = 137(-128--127范围时,为true); System.out.println(i1 == i2);转载 2014-02-19 10:36:17 · 1020 阅读 · 0 评论 -
JAVA线程间的状态转换
线程间的状态转换: 1. 新建(new):新创建了一个线程对象。2. 可运行(runnable):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。3. 运行(running):可运行状态(runnable)的线程获得了cpu 时间片(timeslice)转载 2014-02-18 15:05:28 · 887 阅读 · 0 评论 -
FileDescriptor详解
FileDescriptor 介绍FileDescriptor 是“文件描述符”。FileDescriptor 可以被用来表示开放文件、开放套接字等。以FileDescriptor表示文件来说:当FileDescriptor表示某文件时,我们可以通俗的将FileDescriptor看成是该文件。但是,我们不能直接通过FileDescriptor对该文件进行操作;若需要通过FileD转载 2014-02-21 20:53:15 · 15004 阅读 · 0 评论 -
Tomcat处理HTTP请求源码分析
很多开源应用服务器都是集成tomcat作为web container的,而且对于tomcat的servlet container这部分代码很少改动。这样,这些应用服务器的性能基本上就取决于Tomcat处理HTTP请求的connector模块的性能。本文首先从应用层次分析了tomcat所有的connector种类及用法,接着从架构上分析了connector模块在整个tomcat中所处的位置,最后对c转载 2014-01-16 14:13:48 · 1077 阅读 · 0 评论 -
MyEclipse无法找到BASE64Encoder
相信大家也有遇到这样的情况,明明有相应的包,但却就是提示找不到BASE64Encoder(本身是包含在JDK里面的).为什么在Myeclipse中或者eclipse中会遇到这样的情况呢,首先我们先介绍一下BASE64Encoder,他是sun公司的一种编码方式,常用于邮件(Java Mail)的编码转换的开发中。今天我也遇到了这样的问题,解决办法如下:右键项目-》属性-》java转载 2014-01-15 15:02:36 · 699 阅读 · 0 评论 -
JSP/Servlet工作原理
ServletServlet 没有 main 方法,不能够独立的运行,它的运行需要容器的支持,Tomcat 是最常用的 JSP/Servlet 容器。Servlet 运行在 Servlet 容器中,并由容器管理从创建到销毁的整个过程。Servlet 的生命周期(1) 加载和实例化Servlet 容器装载和实例化一个 Servlet。创建出该 Servlet 类的一个实例。转载 2013-12-26 18:23:45 · 458 阅读 · 0 评论 -
java代码单元和代码点的区别
String可以定义为一个不可变的库例程中的一个预定义的一个类。不可变:是指一个String的对象是不容修改的,如:String g = "Hello"; 想变为“Help”,只能让g引用另外一个String对象,而“Hello”会被回收,这看起来效率比较低,但是Java的字符串是可以共享的。库类:是指Java中没有内置的字符串类型。String是库例程中的一个预定转载 2014-01-09 21:55:50 · 5753 阅读 · 0 评论 -
Servlet,GenericServlet,HttpServelet 的关系
当编写一个servlet时,必须直接或间接实现servlet接口,最可能实现的方法就是扩展javax.servlet.genericservlet或javax.servlet.http.httpservlet当实现javax.servlet.servlet接口时必须实现5个方法 init(servletconfig config) service(servletrequ转载 2013-12-25 23:23:34 · 650 阅读 · 0 评论 -
java模拟Filter,FilterChain的实现
有这样一个应用场景,对于传入后台的Request和返回页面的Response信息,如果页面的Request带有敏感信息或危险字符串,就会对系统造成影响,所以我们会写过滤器(Filter)处理Request,不同的信息处理会有不同的处理方式,如果我们只用一个Filter来处理所有的信息,扩展性就不够强,所以会针对不同的信息处理写不同的Filter,然后把Filter放在一个FilterChain中,转载 2013-12-26 10:25:47 · 2080 阅读 · 0 评论 -
java常见异常总结
最近在抽时间看面试题,很多面试题都提出了写出java常见的5个运行时异常。现在来总结一下,java运行时异常是可能在java虚拟机正常工作时抛出的异常。java提供了两种异常机制。一种是运行时异常(RuntimeExepction),一种是检查式异常(checked execption)。检查式异常:我们经常遇到的IO异常及sql异常就属于检查式异常。对于这种异常,java转载 2014-01-08 20:25:48 · 701 阅读 · 0 评论 -
Common-dbutils简介
1. 介绍commons-dbutils是Apache组织提供的一个开源 JDBC工具类库,能让我们更简单的使用JDBC。它是一个非常小的类包,花几分钟的时间就能掌握它的使用。2. 下载进入apache官方网站的commons-dbutils网页:http://commons.apache.org/dbutils/选择左边导航栏的Down转载 2013-12-24 18:56:55 · 1781 阅读 · 0 评论 -
java深浅拷贝
1.浅复制与深复制概念(1)浅复制(浅克隆)被复制对象的所有变量都含有与原来对象相同的值,而所有的对其他对象的引用仍然只指向原来的对象,换言之,浅复制仅仅复制锁考虑的对象,而不复制它所引用的对象。(2)深复制(深克隆)被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量,那些引用其他对象的变量将指向被复制过的新对象,而不再试原有的那些被引用的对象,换言之,深复制把要复转载 2014-01-08 16:00:06 · 517 阅读 · 0 评论 -
java线程同步机制
1、多线程的同步:1.1、同步机制:在多线程中,可能有多个线程试图访问一个有限的资源,必须预防这种情况的发生。所以引入了同步机制:在线程使用一个资源时为其加锁,这样其他的线程便不能访问那个资源了,直到解锁后才可以访问。1.2、共享成员变量的例子:成员变量与局部变量:成员变量:如果一个变量是成员变量,那么多个线程对同一个对象的成员变量进行操作,这多转载 2014-01-08 14:11:04 · 506 阅读 · 0 评论 -
模板方法模式
模板方法模式定义为:在一个方法中定义了一个算法的骨架或者步骤,而将一些步骤延迟到子类中去实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某一些步骤。模板方法在基类中定义了一个操作的流程顺序,能够保证该步骤按序进行,有一些步骤的具体实现在基类中已经声明,而将一些变化的步骤的具体实现交给了子类去实现,从而就达到了延迟一些步骤到子类中,模板方法一个最大的好处就是能够设定一转载 2014-03-30 10:40:43 · 467 阅读 · 0 评论 -
java URL协议处理
URLConnection是一个协议处理器中的一个类,它是表示指向URL所指定的资源的活动连接。主要用于两个方面,一个是与服务器(特别是HTTP服务器)的交互,可以用来查看服务器发送的首部,设置连接的属性,设置客户端的请求的首部等。利用它也可以实现POST和PUT方法来发送数据。另一个方面是Java的协议处理器机制的一部分。所谓的协议处理器就是将处理协议的细节从处理特定数据类型中分离出,会涉及到客转载 2014-04-02 10:54:42 · 3994 阅读 · 0 评论 -
数字签名原理剖析
本系列通过通俗易懂的讲解,让您就像读小说一般,轻轻松松就能理解数字签名的基本原理和应用方法(即使您是一个并不精通计算机的企业老总,也能读懂本篇文章)。然后我们再逐步深入技术细节,最后将给出一个在B/S信息系统中使用数字签名的DEMO。由于数字签名基于非对称加密技术,所以我们需要先啰嗦一下对称加密和非对称加密技术。对称加密何谓加密?加密是一种“把数据搞乱掉”的技术。加密技术涉转载 2014-09-12 17:45:07 · 587 阅读 · 0 评论 -
https原理
我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取。所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。HTTPS简介HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。具体是如何进行加密,解密,验证的,且看下图。1转载 2014-09-12 17:18:25 · 427 阅读 · 0 评论 -
HashMap.values().add()抛出UnsupportedOperationException的原因
Collection collection = new HashSet();collection.add("lala");collection.add("haha");Map map = new HashMap();map.put("1", "zhagsan");map.put("2", "lisi");map.put("3", "wangwu");map.keySet原创 2014-06-26 15:56:37 · 1550 阅读 · 0 评论 -
TreeMap中是否能存储多个键为null的键值对
对于存储进TreeMap及TreeSet中的元素,要求元素自身具有比较性或者在创建集合时传入一个比较器对象。当调用TreeMap.put(key,value)时,如果root为空,也就是集合中没有元素时,不管key值是否为null,TreeMap都创建一个节点并将该节点作为树根节点存入集合中。当第二次存入key为null的键值对时,此时如果集合自身不带比较器,那么调用元素自身的compareTo(原创 2014-04-28 09:22:41 · 4593 阅读 · 0 评论 -
java虚拟机类加载机制浅谈
Java语言是一种编译后再经过解释器执行的过程, 解释器主要就是如何处理解释Class文件的二进制字节流。JVM主要包含三大核心部分:运行时数据区,类加载器和执行引擎。 虚拟机将描述类的数据从Class文件加载到内存,并对数据进行校验、准备、解析和初始化,最终就会形成可以被虚拟机使用的Java类型,这就是一个虚拟机的类加载机制。Java中的类是动态加载的,只有在运行期间使用转载 2014-04-28 13:51:09 · 613 阅读 · 0 评论 -
HashMap与HashTable深入详解
Java集合类是个非常重要的知识点,HashMap、HashTable、ConcurrentHashMap等算是集合类中的重点,可谓“重中之重”,首先来看个问题,如面试官问你:HashMap和HashTable有什么区别,一个比较简单的回答是:1、HashMap是非线程安全的,HashTable是线程安全的。2、HashMap的键和值都允许有null值存在,而HashTable则不转载 2014-05-12 20:57:43 · 934 阅读 · 0 评论 -
如何创建不可变java类或对象
摘要 在前一篇文章里将了如何实现线程安全的Java程序,其中有一条就是可以通过创建不可变的对象来实现!因为不可变的对象默认就是线程安全的,他们一旦创建就不能发生改变!那么如何创建不可变的Java类或者对象呢?follow me,I'll show you ~java 多线程 线程安全不可变对象(immutable objects),后面文章我将使用immutable o转载 2014-04-25 09:02:51 · 950 阅读 · 0 评论 -
java中String类对象为什么不可变
什么是不可变对象?众所周知, 在Java中, String类是不可变的。那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的。不能改变状态的意思是,不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变。区分对象和对象的引用对于Ja转载 2014-04-25 08:35:54 · 671 阅读 · 0 评论 -
java策略设计模式
在阎宏博士的《JAVA与模式》一书中开头是这样描述策略(Strategy)模式的: 策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式的结构 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模转载 2014-05-10 09:33:35 · 561 阅读 · 0 评论 -
java内存泄漏常见情况
所谓内存泄露就是指一个不再被程序使用的对象或变量一直被占据在内存中。java中有垃圾回收机制,它可以保证一对象不再被引用的时候,即对象变成了孤儿的时候,对象将自动被垃圾回收器从内存中清除掉。由于Java 使用有向图的方式进行垃圾回收管理,可以消除引用循环的问题,例如有两个对象,相互引用,只要它们和根进程不可达的,那么GC也是可以回收它们的。下面列出常见的内存泄漏问题产生原因:长生命周期的对原创 2014-05-10 09:03:22 · 1231 阅读 · 0 评论 -
Servlet生命周期
Servlet生命周期分为三个阶段: 1,初始化阶段 调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法Servlet初始化阶段: 在下列时刻Servlet容器装载Servlet: 1,Servlet容器启动时自动装载某些Servlet,实现它只需要在web.X转载 2014-04-24 09:48:43 · 434 阅读 · 0 评论 -
HtmlParser使用教程详解
HTMLParser具有小巧,快速的优点,缺点是相关文档比较少(英文的也少),很多功能需要自己摸索。对于初学者还是要费一些功夫的,而一旦上手以后,会发现HTMLParser的结构设计很巧妙,非常实用,基本你的各种需求都可以满足。 这里我根据自己这几个月来的经验,写了一点入门的东西,希望能对新学习HTMLParser的朋友们有所帮助。(不过当年高考本人语文只比及格高一分,所以文法方面的问题转载 2014-05-08 19:28:05 · 1262 阅读 · 0 评论 -
Socket与TCP/IP关系解析
要写网络程序就必须用Socket,这是程序员都知道的。而且,面试的时候,我们也会问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,write等几个基本的操作。是的,就跟常见的文件操作一样,只要写过就一定知道。 对于网络编程,我们也言必称TCP/IP,似乎其它网络协议已经不存在了。对于TCP/IP,我们还知道TCP和转载 2014-04-07 19:52:01 · 925 阅读 · 0 评论 -
Socket深入剖析
建立TCP连接 新的Socket实例创建后,就立即能用于发送和接收数据。也就是说,当Socket实例返回时,它已经连接到了一个远程终端,并通过协议的底层实现完成了TCP消息或握手信息的交换。 客户端连接的建立 Socket构造函数的调用与客户端连接建立时所关联的协议事件之间的关系下图所示: 当转载 2014-04-07 19:59:14 · 1129 阅读 · 0 评论 -
java注解解析
一、什么是注释 说起注释,得先提一提什么是元数据(metadata)。所谓元数据就是数据的数据。也就是说,元数据是描述数据的。就象数据表中的字段一样,每个字段描述了这个字段下的数据的含义。而J2SE5.0中提供的注释就是java源代码的元数据,也就是说注释是描述java源代码的。在J2SE5.0中可以自定义注释。使用时在@后面跟注释的名字。转载 2014-04-07 18:25:01 · 623 阅读 · 0 评论 -
Java中用HttpsURLConnection访问https链接的问题
在web应用交互过程中,有很多场景需要保证通信数据的安全;在前面也有好多篇文章介绍了在Web Service调用过程中用WS-Security来保证接口交互过程的安全性,值得注意的是,该种方式基于的传输协议仍然是Http,采用这种方式可扩展性和数据交互效率比较高;另外一种实现方式就是用Https,他是在协议层对Http的再次封装,加入了SSL/TLS,采用该协议进行通信的数据全部都会被加密,由于目转载 2014-05-07 18:41:26 · 563 阅读 · 0 评论 -
java动态代理Proxy源码解析(Jdk 1.6)
一、 源码package java.lang.reflect;import java.lang.ref.Reference;import java.lang.ref.WeakReference;import java.util.Arrays;import java.util.Collections;import java.util.HashMap;转载 2014-01-08 20:08:00 · 2394 阅读 · 0 评论 -
java代理设计模式(静态代理与动态代理)
JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 按照代理的创建时期,代理类可以分为转载 2014-01-08 18:59:41 · 584 阅读 · 0 评论 -
java设计模式
一、设计模式的分类总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式转载 2014-01-08 12:20:53 · 440 阅读 · 0 评论 -
java ClassLoader内部原理
一、什么是ClassLoader? 大家都知道,当我们写好一个Java程序之后,不是管是CS还是BS应用,都是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都被封装在不同的class文件当中,所以经常要从这个class文件中要调用另外一个class文件中的方法,如果另外一个文件不存在转载 2013-11-14 22:24:23 · 679 阅读 · 0 评论 -
String,StringBuffer,StringBuilder的区别
String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常转载 2013-11-14 14:30:27 · 510 阅读 · 0 评论