自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Thinking_IN_Java

一切都是相对的。 ——伟大的阿尔伯特·爱因斯坦

  • 博客(37)
  • 收藏
  • 关注

原创 HashSet、HashMap,散列表数据结构(哈希表)

HashSet、HashMap,散列表数据结构(哈希表)前几天介绍了ArrayList的底层实现以及对性能的简单分析。今天再来看看HashSet,HashMap。HashSet:很多开发者,初学者都知道HashSet无序,不可重复,线程非同步。底层是哈希表结构。但它是怎么做到的?什么是散列表数据结构(哈希表)?有什么特性?都清楚吗?不清楚继续往下看。它是

2013-06-06 14:14:51 4507 2

原创 带你实现一个简单的MyApacheTomcat,迷你并发服务器

Apache Tomcat,首先要明确他们之间的关系,Apache是web服务器,Tomcat是应用服务器(Servlet容器),可以认为是Apache的扩展,也就是说Servlet由Tomcat进行处理。现在我们要通过Socket技术实现Apache Web服务器的一些功能,比如:------->并发访问(应用线程池)------->处理GET请求------->处理POST请求

2013-05-28 17:06:57 1590

原创 Executors工厂类创建线程池的底层实现

上一篇介绍了ThreadPoolExecutor的基本使用,现在再来看看Executors工厂类的基本使用与底层实现方式。三种创建线程池的工厂方法源码:// 无界线程池public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_

2013-05-26 21:01:34 1978

原创 ThreadPoolExecutor线程池的使用与理解

ThreadPoolExecutor线程池的使用与理解线程池的作用就是用尽可能少的线程来执行尽可能多的Runnable,以实现对线程的充分利用。从ThreadPoolExecutor类的构造方法说起:ThreadPoolExecutorpublic ThreadPoolExecutor(int corePoolSize, // 核心线程数

2013-05-26 17:44:47 3132 2

原创 图解Arraylist内存分配,以及底层实现,扩容性能分析

图解Arraylist内存分配,以及底层实现,扩容性能分析1:集合内存分配以及初始化过程图解2:源码解读ArrayList内部实现(数组结构)构造ArrayList的时候,默认初始化容量为10,保存容器为 Object[] elementData。向集合添加元素的时候,调用add方法,比如list.add("a");add方法做的操作是:elementData[

2013-05-20 23:21:17 7247

转载 synchronized与ReentrantLock锁机制对比

多线程和并发性并不是什么新内容,但是 Java 语言设计中的创新之一就是,它是第一个直接把跨平台线程模型和正规的内存模型集成到语言中的主流语言。核心类库包含一个 Thread 类,可以用它来构建、启动和操纵线程,Java 语言包括了跨线程传达并发性约束的构造 —— synchronized 和 volatile 。在简化与平台无关的并发类的开发的同时,它决没有使并发类的编写工作变得更繁琐,只是使它

2013-05-16 16:51:11 1133

原创 Java多线程要点分析总结

1:继承Thread类跟实现Runnable接口实现Runnable接口的优点:摆脱单继承的局限可以实现资源共享来看一下Thread类的部分源码:public class Thread implements Runnable { private Runnable target; // What will be run. public Thread(Runnable

2013-05-16 16:31:07 1282

原创 透彻理解异常并合理使用异常

对于异常(Exception)的基本使用相信大家已经比较了解了。不了解的童鞋请参见博文:Java异常处理机制其实比较棘手的问题是什么场合用什么异常?checked异常还是runtime异常?是抛出异常还是捕获异常?下面举例来探讨一下这个问题;回顾异常处理机制:异常机制使程序中异常处理代码和正常业务代码分离,也就是把某些异常交给异常处理器去处理,不让JVM直接处理。JMV

2013-05-13 11:17:14 1435

转载 Java异常处理机制

异常机制已经成为判断一门编程语言是否成熟的标准,异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。         Java异常机制主要依赖于try、catch、finally、throw、throws五个关键字。         1.try:它里面放置可能引发异常的代码         2.catch:后面对应异常类型和一个代码块

2013-05-11 21:07:41 1905

原创 Java内部类与final关键字详解

详解Java内部类与final关键字内部类的几种创建方法:1、成员内部类class Outer{ private int i = 1; class Inner{ public void fun() {System.out.println("Outer I=" + i)} } } 2、方法内部类class Outer{ public void fu

2013-05-10 17:40:44 2982

转载 Android Dalvik虚拟机初识

首先,让我们来思考下面几个问题:什么是Dalvik虚拟机?Dalvik VM与JVM有什么区别?Dalvik VM有什么新的特点?Dalvik VM的架构是怎么样的?首先,我得承认第一个问题问得很傻:什么是Dalvik虚拟机?没有人给出过一个明确的定义,但是,我们似乎可以从人们对Java虚拟机的描述中得到些信息。Jav

2013-05-09 15:17:20 1095

原创 图解Java多态内存分配以及多态中成员方法的特点

图解Java多态内存分配以及多态中成员方法的特点Person worker = new Worker(); 子类实例对象地址赋值给父类类型引用变量。多态的体现。多态中成员方法的特点分析:【子类有,父类没有】编译失败!!!worker.startWork(); 为什么编译不通过呢?提示:找不到符号。因为引用变量worker是Person类型,在Person

2013-05-05 22:34:39 4459 6

原创 图解Java继承内存分配

图解Java继承内存分配继承的基本概念:(1)Java不支持多继承,也就是说子类至多只能有一个父类。(2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法。(3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承。(4)子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员

2013-05-04 10:20:41 7311 7

原创 图解Java单例模式内存分配

图解Java单例模式内存分配1:虚拟机加载StaticDemo类,保存类型信息到方法区。2:通过保存在方法区的字节码,虚拟机开始main方法,main方法入栈。3:进入main方法第一条指令, Person.getInstance(); 首先虚拟机加载Person类到方法区,然后完成对Person类的初始化操作。疑问来了,类变量不是保存在方法

2013-05-03 22:52:18 2887

转载 类和对象的初始化

上一篇博文简要分析了Java程序的执行流程,现在再来深入了解一下类和对象的初始化,下面是转载的博文,人家整理的不错,就拿来主义了,哈哈。类的生命周期:分为装载,链接,初始化 如图:1)装载:查找并装载类型的二进制数据2)连接:执行验证,准备,和解析(可选)         a) 验证:确保导入类型正确         b) 准备:为类变量分配内存,并

2013-05-02 22:33:27 1217

原创 图解Java对象初始化过程以及方法调用

图解Java对象初始化过程以及方法调用1:虚拟机加载OOPDemo类(省略详细加载过程(装载、链接、初始化)),提取类型信息(具体保存哪些类型信息查看博文:Java虚拟机体系结构),存储到方法区中,对应图中的绿色矩形区域。2:通过保存在方法区的字节码,虚拟机开始执行main方法,main方法入栈。图中箭头1方法压栈。3:进入main方法的第一条指令,ne

2013-05-02 12:17:45 3649 1

转载 32种设计模式趣谈

创建型模式 1、FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应

2013-05-02 06:30:19 1127

转载 Java抽象类和接口的区别(好长时间没看这种文章了)

abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstract class和interface的选择显得比较随意。其实,两者之间还是有很

2013-05-02 06:25:23 801

转载 Java引用介绍与应用

注:本文作者是阿里巴巴B2B的谢中富;一、前言前阵子在工作中遇到java.lang.Reference这个类,发现很多三方库中都用到这个类,如apache中的httpclient工具等,所以就找了一些资料了解了下。本文主要介绍Java中SoftReference、WeakReference、PhantomReference这三种引用类型的作用以及与GC的关系。之后引用ibm

2013-04-18 16:41:18 913

原创 浅谈Java中的数据类型以及面向对象

在汇编语言中,没有类型的划分,只有数据跟指令,当然这也是从程序的角度去理解,对CPU来说,一切都是数据。1:数据类型的概念啥子叫类型?它是抽象的,是对具有相同特征跟行为的对象的描述。万物皆对象,对于大自然中的万物,类型这个概念都是存在的。2:Java中的数据类型那对于数据来说,首先明白数据有大有小,有长有短,那么我们就用不同的类型来描述数据所能表示的大小。这样做有啥好处呢?可以

2013-04-14 08:50:50 1326

转载 Class文件结构

大家都知道,Java之所以如此受人喜欢,很大的原因是要规于它的跨平台性。“一次编写,到处运行”,Java诞生之时曾提出的著名的宣传口号,充分表达了软件开发人员对冲破平台界限的渴求。或许大部分程序员都认为Java虚拟机执行Java程序是一件理所当然和天经地义的事,但时至今日,商业机构和开源机构已经在Java语言之外发展出一大批在Java虚拟机之上运行的语言,如Clojure、Groovy、J

2013-03-31 10:57:25 1056

原创 JVM:Java Virtual Machine,Java虚拟机。

JVM:Java Virtual Machine,Java虚拟机。        作用:由类装载器装载class字节码文件,通过执行引擎执行被装载类中方法中的指令。        生命周期:启动一个Java程序,就会创建一个虚拟机实例,该程序关闭,虚拟机实例随之消亡。                            虚拟机实例通过调用某个初始类的main方法来运行一个Java程序

2013-03-31 10:37:20 1212

转载 8086 CPU 寄存器简介

引子打算写几篇稍近底层或者说是基础的博文,浅要介绍或者说是回顾一些基础知识,自然,还是得从最基础的开始,那就从汇编语言开刀吧,从汇编语言开刀的话,我们必须还先要了解一些其他东西,像  CPU ,内存这些知识点还是理解深刻一点的比较好,所以这一篇博文就绕着 80x86  CPU 中寄存器的基础部分下手,至于其他的一些将会在后续的博文中介绍 。同时在这里

2013-03-22 17:20:17 1167

原创 探讨i++跟++i

通常的理解:Java中,提起i++就知道是先赋值后自增,提起++i就知道是先自增后赋值,那么来看下面一段程序:public class Demo{ public static void main(String[] args) { int x = 0; for (int y = 0; y < 5; y++) { x = x++; System.out.println

2013-03-19 10:10:02 1141

转载 JAVA虚拟机体系结构

JAVA虚拟机的生命周期  一个运行时的Java虚拟机实例的天职是:负责运行一个java程序。当启动一个Java程序时,一个虚拟机实例也就诞生了。当该程序关闭退出,这个虚拟机实例也就随之消亡。如果同一台计算机上同时运行三个Java程序,将得到三个Java虚拟机实例。每个Java程序都运行于它自己的Java虚拟机实例中。  Java虚拟机实例通过调用某个初始类的main()方法来

2013-03-19 09:47:46 1651

转载 深入解析补码的意义

相信大家看到这个标题都不屑一顾,因为在任何一本计算机基础知识书的第一章都有他们的解释,但是在书上我们只能找到一些简单的定义,没次看过之后不久就忘了。最近论坛里有人问起这些概念,看到很多人的回复是以前看过现在忘了去看看某某书之类,很少有给出一个合理的解释。于是本人就开始思考(虽然上帝会发笑,我还是要思考。),于是得出了以下的结论。  数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是

2013-03-17 21:50:23 1101

原创 为什么Java中byte类型的取值范围是-128~127

byte 长度是1字节,也就是8位,八位二进制数转换为十进制最大值是多少?是255。如果是unsigned byte 那么取值范围就是 0-255,而Java中的byte是有符号位的,第一位表示正负数,0代表正数,1代表负数。下面引用其它博友的解答并加以分析:博友解答:概念:负数的补码为其原码除符号位外取反然后总体加一步骤:1.确定byte是1个字节

2013-03-17 21:47:39 3096

原创 汇编学习小结

【基础概念:】汇编指令,是机器指令的助记符,每一种CPU都有自己的机器指令集。汇编,程序员用汇编语言(汇编指令)编写源程序,汇编编译器将其编译为机器码,由计算机执行。【计算机常用计量单位:】bit(位) byte(字节) kb(千字节) mb(兆) gb(千兆字节) 一般以字节(byte)作为计算机存储容量的基本单位,一个字节是八个二进制位(1Byte=8Bit),共有

2013-03-16 14:40:13 869

转载 段寄存器的引用

段寄存器是因为对内存的分段管理而设置的。16位CPU有四个段寄存器,所以,其程序可同时访问四个不同含义的段。段寄存器及其偏移量的引用关系如图所示。段寄存器CS指向存放程序的内存段,IP是用来存放下条待执行的指令在该段的偏移量,把它们合在一起可在该内存段内取到下次要执行的指令。段寄存器SS指向用于堆栈的内存段,SP是用来指向该堆栈的栈顶,把它们合在一起可访问栈顶单元。另外,当

2013-03-12 11:09:52 1029

原创 汇编学习笔记:第一个程序,Hello World!!!

==============第一个程序,Hello World!!!===========================编写执行过程:1:用文本编辑器编写汇编源程序2:对源程序进行编译连接,使用汇编语言编译程序对源文件中的程序进行编译,产生目标文件。   再用连接程序对目标程序进行连接,生成可在操作系统中直接运行的可执行文件(.exe)。3:由操作系统执行可执行文件中的程序

2013-01-07 14:27:16 1166

原创 汇编学习笔记:寄存器(内存访问)

==============寄存器(内存访问)===========================CPU用16位寄存器存储一个字,高八位存放高位字节,低八位存放低位字节。在内存中存储时,内存单元是字节单元(一个单元存放一个字节,即8位),所以使用两个连续的内存单元来存放。字在内存中的存储,重点解释“字单元”的概念:字单元,即存放一个字型数据(16位)的内存单元,由两个地址连续的内

2013-01-07 14:24:49 1356

原创 汇编学习笔记:CPU内部组成,寄存器讲解

==============CPU内部组成,寄存器讲解===========================一个典型的CPU由控制器、运算器、寄存器等器件构成,这些器件通过【内部总线】相连!运算器进行信息处理、寄存器进行信息存储、控制器控制各种器件进行工作。8086CPU的寄存器都是16位的,可以存放两个字节。字在寄存器中的存储:字节 Byte:

2013-01-07 14:20:07 1968

原创 汇编学习笔记:基础知识,CPU对存储器的读写

CPU(central processing unit):中央处理单元。每一种微处理器,由于硬件设计和内部结构的不同,就需要用不同的电平脉冲来控制,使它工作。所以,每一种微处理器都有自己的机器指令集,也就是机器语言。汇编语言的主体是汇编指令,汇编指令和机器指令的差别在于表示方式上,汇编指令是机器指令便于记忆的书写格式。程序员用汇编语言写出的源程序,再用汇编编译器将其

2013-01-07 14:14:21 1430

原创 进制转换小记

首先,进制就是计数规则。名副其实,进制分为2进制,8进制,10进制,16进制。我们平时生活中,最常用的是10进制,而在计算机里,数据全是2进制表现形式。首先来说下10进制,有10个基数,0-9; 计数规则是满十进一。0...5...9,10,过了9、则变成10、

2013-01-04 10:46:54 813

转载 现代程序员的几个错误观点(翻老帖)

VC、VB、Delphi …… ,你该学哪个?   具体到编程而言,我要告诉你:任何一种计算机语言,都是计算机科学理论的载体或表现形式。C++很神吗?Java很酷吗?它们差距很远吗?是的。但从理论的层面上讲,它们没有区别,都是“面向对象”理论的一个具体形式而已。   现在的程序员们被发行编译软件(通常我们将其称为“系统软件”)的商家不断推出的产品搞得眼花缭乱,头痛欲裂。不断地跟在新语言后面

2012-11-29 15:13:14 1270

原创 准备写博客了,就是记录,交流,共同进步;

CSDN提供的博客真的很好,实用大方,在此必须要感谢CSDN提供给我们这个交流平台。我打算先把以前学过的技术重新过一遍,把过程记录在这里,就这样吧,在这个特殊的年份,祝福大家。先上一段伟大的代码:/** * @author Syskey */public class HelloWorld { public static void main(String[] args

2012-11-10 15:35:03 822 1

最全的博客、网站提交入口(备用)

一直以来都想用心做个网站或者博客,但由于种种原因,还是未能坚持下来。下面收集的一些网站提交入口,为网站提交做好准备,当然SEO还是最重要的。网站提交:将网站提交给百度: [url]http://www.baidu.com/search/url_submit.html[/url]将网站提交给谷歌: [url]http://www.google.com/addurl/[/url]将网站...

2010-11-29 15:47:03 1584

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除