自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 线程与进程的区别

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

2016-09-01 17:35:12 451 1

原创 Maven Eclipse使用

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

2016-06-21 18:37:44 624

原创 java 序列化机制深度解析

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

2016-06-17 11:02:13 2299

原创 java ArrayList与Vector

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

2016-06-16 16:53:59 593

原创 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 636

原创 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 550

原创 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 1444 2

原创 ConcurrentHashMap源码解析

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

2016-06-14 11:54:48 1226

原创 java LinkedHashMap源码解析

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

2016-06-13 19:01:43 1634

原创 java TreeMap源码解析

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

2016-06-13 11:07:05 1706

原创 java移位运算

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

2016-06-12 12:15:13 427

原创 Java实现红黑树

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

2016-06-08 16:57:11 489

原创 Java 类初始化顺序

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

2016-06-07 16:24:50 476

原创 Java实现二叉查找树

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

2016-06-06 17:23:09 663

原创 Java HashSet源码解析

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

2016-06-01 11:19:38 3242

原创 Java String源码解析

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

2016-05-30 10:14:31 4600

原创 Linux命令解析过程

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

2016-05-27 16:26:38 1179

原创 Linux cut命令

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

2016-05-27 10:06:22 566

原创 Java String不可变

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

2016-05-26 17:42:13 502

原创 Java基本类型数组转ArrayList

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

2016-05-26 10:29:26 2199

原创 java单例模式深度解析

应用场景由于单例模式只生成一个实例, 减少了系统性能开销(如: 当一个对象的产生需要比较多的资源时, 如读取配置, 产生其他依赖对象, 则可以通过在应用启动时直接产生一个单例对象, 然后永久驻留内存的方式来解决)Windows中的任务管理器;文件系统, 一个操作系统只能有一个文件系统;数据库连接池的设计与实现;Spring中, 一个Component就只有一个实例Java-Web中, 一个S

2016-05-23 16:11:29 3602 4

原创 java 枚举源码解析

应用场景枚举通常用来列举一个类型的有限实例集合,我们可以使用常量集来实现,jdk1.5添加了枚举(enum)支持,解决了常量集的一些缺陷 - 常量集中的变量不会必然在指定的范围内 - 常量能够提供的功能很少,难于使用 - 常量意义不明确,没有名字 - 修改或增加枚举值后需要修改的代码多,不便于维护 关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的组

2016-05-23 12:23:12 1901

原创 最长公共子序列

问题描述子序列 X=(ABCBDAB) X的子序列是下标递增的X的字符组成的序列,但是不一定连续,如:ABCD,ACDAB等都是其子序列,而 ADC不是子序列最长公共子序列 如果Z既是X的子序列,又是Y的子序列,那么Z是X与Y的公共子序列,其中最长Z就是最长公共子序列序列相似度 该问题用来描述两个序列的相似度,当然相似度还有其他描述方法 X是Y的子串X转换为Y的操作最少X与Y

2016-05-19 12:15:13 499

原创 LinkedList源码解析

本解析源码来自JDK1.7 LinkedList许多方法是为了适配其实现的接口,本质上都是双向链表的操作LinkedList概要基于双向链表,主要实现了List和Deque接口,Deque接口继承自Queue,所以LinkedList同时实现了Queue接口由于其基于双向链表,操作需要操作连接指针数数较多,所以线性操作系数比ArrayList较大插入删除快,随机访问慢线程不安全,修改列表结

2016-05-17 17:41:24 3083

原创 ArrayList 源码解析

本解析源码来自JDK1.7ArrayList 概要继承Collection接口,实现了随机存取,自动扩容内部使用数组进行存储,size表示List中元素的个数 private transient Object[] elementData; private int size;允许null值与Vector基本相同,但是ArrayList是非同步的,

2016-05-17 11:14:52 2956

原创 HashMap源码解析

本解析源码来自JDK1.7HashMap概要HashMap是基于hash的map接口的非同步实现,允许使用null键和null值,不保证映射顺序HashMap类头部public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable设计初衷 Java中的

2016-05-13 16:28:41 4356 1

原创 字符串匹配算法

算法的改进主要是针对如果出现不匹配字符,应该怎样回退的问题定义在母字符串中找子字符串,如果找到返回字串在母字符串中的位置,如果没有找到,返回-1。 参见 leetcode 28. Implement strStr()朴素的匹配算法逐个跟字串匹配。失败则子串向前移动一位,继续比较顺序匹配字串与母串的每一个字符 - 如果达到子字符串末尾,就返回母串中子串首字符对应位置 - 如果遇到

2016-05-12 16:46:53 1344

原创 leetcode 19. Remove Nth Node From End of List

题目Given a linked list, remove the nth node from the end of list and return its head.For example,Given linked list: 1->2->3->4->5, and n = 2.After removing the second node from the end, the linked list

2016-05-10 16:05:22 327

原创 leetcode 205. Isomorphic Strings

题目Given two strings s and t, determine if they are isomorphic.Two strings are isomorphic if the characters in s can be replaced to get t.All occurrences of a character must be replaced with another cha

2016-05-10 15:36:35 646

原创 Hadoop Join

Hadoop 中的join分为三种Reduce端join,适合于两个大表Map端join,适合一个大表和一个小表,小表放到 Distribute Cache里面semi join 当join只用到其中一个表中的一小部分时Reduce端join读入两个大表,对value按文件进行标记在Reduce端收集属于不同文件的value到不同的list,对同一key的不同list中的value做笛卡

2016-05-10 11:56:47 2776

原创 leetcode dynamic programming

300. Longest Increasing SubsequenceQuestionGiven an unsorted array of integers, find the length of longest increasing subsequence.For example, Given [10, 9, 2, 5, 3, 7, 101, 18], The longest increasi

2015-12-29 16:13:37 426

原创 leetcode 319. Bulb Switcher

QuestionThere are n bulbs that are initially off. You first turn on all the bulbs. Then, you turn off every second bulb. On the third round, you toggle every third bulb (turning on if it’s off or turni

2015-12-28 09:56:44 444

原创 centos 6.5 安装chrome

下载chromechrome 下载安装报错rpm -ivh google-chrome-stable_current_x86_64.rpm 报错error: Failed dependencies: libstdc++.so.6(GLIBCXX_3.4.15)(64bit) is needed by google-chrome-stable-46.0.2490.86-1.x86_64解决

2015-11-21 12:12:36 2657 2

转载 欢迎使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

2015-11-21 11:14:56 494

原创 leetcode fast slow pointer

IntroductionIn questions related to linked list, fast and slow pointer solution is very common. Fast pointer step two and Slow pointer step one. Always we can the regular through draw a picture and mat

2015-11-19 11:06:59 855

原创 第一个Spring restful 项目-从开发到部署

环境开发环境Windows7旗舰版eclipse 版本 Eclipse Java EE IDE for Web Developers. Version: Luna Service Release 2 (4.4.2)部署环境tomcat 版本 tomcat 7.0.65Linux 环境 Centos7 64 位Java版本 java version “1.7.0_79”开发目标

2015-11-18 17:14:38 2684

原创 leetcode Set Matrix Zeroes

QuestionGiven a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.SolutionIf you have to store some thing, but the problem requires in place solution, you may conside

2015-11-16 16:14:04 580

原创 leetcode DFS

leetcode 排列组合Permutation Combinations

2015-11-11 18:00:53 538

原创 leetcode Binary Search

二分查找刷题笔录leetcode 35 Search Insert PositionQuestionGiven a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in ord

2015-11-09 16:24:57 478

空空如也

空空如也

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

TA关注的人

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