4 StubbornAnt

尚未进行身份认证

暂无相关简介

等级
TA的排名 9w+

线程与进程的区别

面试中常见问题线程与进程的区别解答参考Java并发编程实战,从并发历史的角度进行解读。 最初计算机是单任务的,程序拥有计算机所有资源。 为了能够实现多任务,可以让不同的程序在不同的进程中进行,操作系统为每个进程分配独立的资源:内存,文件句柄等。进程之间的通信依靠:套接字,信号处理器,共享内存,信号量及文件等粗粒度的方式进行。 线程可以看做更细粒度的进程,一个进程可以启动多个线程,多个线程

2016-09-01 17:35:12

Maven Eclipse使用

Maven是什么Maven 主要用于Java平台的项目构建,依赖管理,项目信息管理。Maven可以做什么完成Java项目的编译,打包构建jar包依赖管理自动化单元测试,生成测试报告Maven 安装下载最新版的Maven安装包配置环境变量Maven 概念groupId 公司标志artifactId 项目名称version 项目版本使用Maven创建项目两种方式: -

2016-06-21 18:37:44

java 序列化机制深度解析

概要序列化机制允许将实现序列化的Java对象转换为字节序列,这些字节序列可以被保存在磁盘上或通过网络传输,以备以后重新恢复原来的对象,序列化机制使得对象可以脱离程序的运行而独立存在 可序列化的类包括:实现了Serializable的类,数组,枚举,String类也是可序列化对象由于序列化保存的是对象的状态,因此不会保存类的静态变量 -通过ObjectOutputStream和ObjectIn

2016-06-17 11:02:13

java ArrayList与Vector

本文基于JDK1.7Vector与ArrayListVector用同步实现了线程安全,ArrayList是线程不安全的,但是可以通过Collections.synchronizedList(list)来实现线程安全,不要求线程安全的场景用ArrayList效率更高Vector与ArrayList一样是一种可以根据需要自动伸缩的列表,它们都是基于数组实现的,加入了自动扩容机制Vector在初始化

2016-06-16 16:53:59

java Stack源码解析

本源码解析基于JDK1.7概要Stack是基于Vector实现的first-in-last-out数据结构Stack用同步来实现了线程安全,因此在单线程情况下该类会由于加锁开销而效率低Stack在Vector的基础上增加了五个方法 push 入栈pop 出栈peek 取栈顶元素empty 判断栈空search 返回某个元素距离栈顶的距离JDK提供了更为

2016-06-16 15:51:15

java System.arraycopy

概要System.arraycopy(src, srcPos, dest, destPos, length)是系统提供的native方法,将src数组从srcPos开始copy到dest数组从destPos的位置,复制长度length数组copy到自身时并不会覆盖实例注意当copy数据到原数组时并不会因为1覆盖掉2后而使得后面的复制内容全部为1,由于是native方法,无法查看源码,猜想其实现

2016-06-16 15:23:23

java HashTable源码解析

Hashtable 概要与HashMap主要区别是Hashtable的put,get方法都是同步的,线程安全,但是性能较差key和value都不能为null,HashMap中key与value都可以为 null与HashMap类似,key必须实现hashCode()和equals方法,由于equals判断前都会先判断hashCode方法是否相等,两个equals的对象的hashCode()必须

2016-06-14 17:18:08

ConcurrentHashMap源码解析

本源码解析基于JDK1.7,参考[HashMap]HashMap,HashTable概要ConcurrentHashMap实现了HashTable的全部方法,且是线程安全的MapHashTable的put,get等方法都是同步的,效率较低,ConcurrentHashMap通过对table进行分段加锁,当一部分在修改时,其他部分可以同时的操作,在保证线程安全的情况下提高了效率concurren

2016-06-14 11:54:48

java LinkedHashMap源码解析

本源码解析是基于JDK1.7,本篇与HashMap源码解析较强的关联性LinkedHashMap概要LinkedHashMap是基于HashTable与LinkedList原理实现的HashMap是基于数组的,而LinkedHashMap是基于循环双向链表的,即每个节点都有指向前后节点的指针,header节点是不含真实元素的标兵节点,由于每次插入都是在header的前面,header.befo

2016-06-13 19:01:43

java TreeMap源码解析

TreeMap 概要基于红黑树的NavigableMapput,get,remove,containsKey操作时间复杂度 log(n)提供给SortedMap的比较器或者自身的比较函数必须与equals方法一致,因为对于SortedMap,是否相等是基于compare或者compareTo方法的,如果compare方法与equals方法不一致,SortedMap也可以工作,只是与Map接口(

2016-06-13 11:07:05

java移位运算

三种移位运算>>>逻辑右移,没有具体的数学意义>>算术右移,对正数,在不越界的情况下相当于除以二,对负数在不越界的情况下相当于余数为1的除以二(通常负数除以正数,余数应该为负数)<<左移位,无论对于整数负数,在不越界的情况下相当于除以二移位会对所有位(包含符号位)进行移动,左移时低位补零,右移时,>>符号位移走后,高位补原符号位,>>>高位补零示例public class Demo {

2016-06-12 12:15:13

Java实现红黑树

红黑树概要二叉查找树实现了基本操作时间复杂度O(h),但是树的高度h在最坏的情况下可能变为n红黑树是一种平衡二叉树,可以保证树的高度 h = lg(N)红黑树的性质红黑树为每个节点添加了颜色存储位,确保了任何一个从根到叶子的路径长度不会比其他路径长出2倍每个节点是红色或者黑色根节点是黑色的叶子节点是黑色的红色节点的子节点都是黑色的当前节点到其后代叶子节点的所有简单路径路的黑色节点数目

2016-06-08 16:57:11

Java 类初始化顺序

初始化时机初始化分为类变量的初始化与对象的初始化两个相对独立的过程类变量的初始化在程序中第一次用到该类时 类变量的初始化过程:首先将静态变量定义时的初始化语句放到静态初始化块的开始部分,然后从该类的原始祖先开始依次向下执行每个类的静态初始化块对象的初始化发生在创建对象时 对象的初始化过程会先将类的定义成员变量时的初始化语句及非静态初始化块都放到构造函数的开始部分,然后从该类的原始祖先开始依次

2016-06-07 16:24:50

Java实现二叉查找树

二叉查找树基本性质:对任何节点x,其左子树的任意key不大于x.key,其右子树的任意节点不小于x.key实现集合操作 search,minimum,maximum,predecessor,successor,insert,delete以上操作的最坏运行时间与树的高度成正比,平均时间复杂度O(h),其中h为树的高度树的中序遍历是有序序列可以用其实现有序字典,优先队列,实现时间复杂度O

2016-06-06 17:23:09

Java HashSet源码解析

本解析源码来自JDK1.7,HashSet是基于HashMap实现的,方法实现大都直接调用HashMap的方法 实现了Set接口,实际是靠HashMap实现的不保证遍历时的顺序,不保证集合顺序的不变性HashSet允许出现null值假定Hash算法能很好的分散元素,查询的时间复杂度为O(1)遍历的时间复杂度由set的size和其依靠的HashMap的

2016-06-01 11:19:38

Java String源码解析

String类概要所有的字符串字面量都属于String类,String对象创建后不可改变,因此可以缓存共享,StringBuilder,StringBuffer是可变的实现String类提供了操作字符序列中单个字符的方法,比如有比较字符串,搜索字符串等Java语言提供了对字符串连接运算符的特别支持(+),该符号也可用于将其他类型转换成字符串。字符串的连接实际上是通过StringBuffer或

2016-05-30 10:14:31

Linux命令解析过程

命令解析过程将命令行分成由固定元字符集分隔的记号:SPACE, TAB, NEWLINE, ; , (, ), <, >, |, &,记号类型包括单词,关键字,I/O重定向符和分号。检测每个命令的第一个记号,查看是否为不带引号或反斜线的关键字。如果是一个开放的关键字,如if和其他控制结构起始字符串,function,{或(,则命令实际上为一复合命令。shell在内部对复合命令进行处理,读取下一个

2016-05-27 16:26:38

Linux cut命令

用途文本文件按列提取。特点过于简单,只能处理固定格式的分隔符,分隔符不能使用正则表达式。用法命令基本格式-b、-c、-f分别表示字节、字符、字段(即byte、character、field);list表示-b、-c、-f操作范围,-n常常表示具体数字;file表示的自然是要操作的文本文件的名称;delim(英文全写:delimiter)表示分隔符,默认情况下为TAB;-s表示不包括那些不含

2016-05-27 10:06:22

Java String不可变

String是否相等==判断的是对象的内存起始地址是否相同,equals判断自定义的语义是否相同JVM为了提高内存效率,将所有不可变的字符串缓存在常量池中,当有新的不可变的字符串需要创建时,如果常量池中存在相等的字符串就直接将引用指向已有的字符串常量,而不会创建新对象new创建的对象存储在堆内存,不可能与常量区的对象具有相同地址public class Demo { public st

2016-05-26 17:42:13

Java基本类型数组转ArrayList

先来看源码当我们调用Arrays.asList(array) 时,实际是执行了包可见的ArrayList的构造函数(注意通常这个构造函数对用户是不可见的,所以不能通过List list = new ArrayList(array)来进行转换)由于a是一个E[]数组,E又是ArrayList的泛型,所以我们传入的实参array必须是对象数组,或者对象列表如果传入的是基本类型数组,整个数组会被当做

2016-05-26 10:29:26

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!