自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

RowandJJ

阿里巴巴资深开发工程师

  • 博客(50)
  • 资源 (7)
  • 收藏
  • 关注

原创 【源码】HashMap源码剖析

注:以下源码基于jdk1.7.0_11之前的几篇文章介绍了List集合中一些比较常见的类,比如ArrayList、LinkedList、Vector等。本篇文章将介绍集合框架的另一块内容——Map集合。本文主要介绍HashMap。先回顾下哈希表。哈希表定义:根据设定的hash函数和处理冲突的方式(开放定址、公共溢出区、链地址、重哈希...)将一组关键字映

2014-08-14 08:46:27 3896 2

原创 创建线程的三种方式浅析

方式1,继承Thread:new Thread() { public void run() { System.out.println("hello world"); } }.start();方式2,实现Runnable接口:new Thread(new Runnable() { @Override public void run() {

2014-08-28 18:03:46 1529

原创 Callable和Future浅析

从java5开始,java提供了Callable接口,Callable接口提供了一个call方法可以作为线程的执行体,但call方法比run方法功能更加强大。主要体现在:1.call方法可以有返回值;2.call方法可以声明抛出异常。因此我们完全可以提供一个Callable对象作为Thread的target,而该线程的线程执行体就是该Callable对象的call方法,问题

2014-08-28 16:58:08 3042 1

原创 【源码】Timer和TimerTask源码剖析

Timer是java.util包中的一个工具类,提供了定时器的功能。我们可以构造一个Timer对象,然后调用其schedule方法在某个特定的时间或者若干延时之后去执行一个特定的任务,甚至你可以让其以特定频率一直执行某个任务,这个任务用TimerTask描述,我们将需要的操作写在TimerTask类的run方法中即可。本着“知其然,知其所以然”的心态,我决定研究下这个类的源码。打开

2014-08-26 09:26:23 2282

原创 【源码】Set集合源码剖析

注:以下源码基于jdk1.7.0_11Set集合其实是对Map集合的封装,Map集合存储的是键值对,那么我们将值隐藏,不向外界暴露,这样就形成了Set集合。对应Map集合的两个很重要的实现HashMap(基于哈希表),TreeMap(基于红黑树),Set集合也对应了两个类HashSet和TreeSet。由于之前花很多篇幅介绍了HashMap和TreeMap,在此将不再介绍其

2014-08-23 22:58:53 2521

原创 【源码】TreeMap源码剖析

注:以下源码基于jdk1.7.0_11之前介绍了一系列Map集合中的具体实现类,包括HashMap,HashTable,LinkedHashMap。这三个类都是基于哈希表实现的,今天我们介绍另一种Map集合,TreeMap。TreeMap是基于红黑树实现的。介绍TreeMap之前,回顾下红黑树的性质:首先,我们要明确,红黑树是一种二叉排序树,而且是平衡二叉树。因而红黑树

2014-08-23 22:08:00 2284 1

原创 树中两个结点的最低公共祖先

情况1:树为二叉排序树。思路:从根结点开始和输入的两个结点进行比较,如果当前结点的值比两个结点的值都大,那么最低的祖先肯定在左子树中,于是下一步遍历当前结点的左子结点。如果当前结点的值比两个结点的值都小,那么最低的祖先肯定在右子树种,于是下一步遍历当前结点的右子结点。如果当前结点正好是输入的两个结点之一,说明这两个结点有一个是另一个的祖先,这时输出当前结点的父节点即可。/*二

2014-08-21 10:51:28 1455

原创 【源码】LruCache源码剖析

上一篇分析了LinkedHashMap源码,这个Map集合除了拥有HashMap的大部分特性之外,还拥有链表的特点,即可以保持遍历顺序与插入顺序一致。另外,当我们将accessOrder设置为true时,可以使遍历顺序和访问顺序一致,其内部双向链表将会按照近期最少访问到近期最多访问的顺序排列Entry对象,这可以用来做缓存。这篇文章分析的LruCache并不是jdk中的类,而是来自安卓

2014-08-20 09:22:12 3250 5

原创 判断一棵二叉树是否是完全二叉树

题目:判断一棵二叉树是否是完全二叉树思路:1.首先明确完全二叉树的概念。完全二叉树除最后一层外,所有层结点数均达到最大值,最后一层结点连续集中在最左边。空树也是完全二叉树。2.我们可以通过层序遍历的方式遍历这个二叉树,使用一个队列存储遍历的结点。可以利用最后一层的结点集中在左侧这个特性解题,具体看代码:代码:bool isComple

2014-08-19 18:00:57 2616

原创 基于中序遍历找到一个结点的后继结点

题目:基于中序遍历找到一个结点的后继结点。分析:首先明确中序遍历,顺序为:左--->根----->右假设当前结点为p。有两种情况:1.当p有右子树时,那么其右子树的最左结点即为所求:2.当p没有右子树时,有下面两种情况:沿着p向上找,如果p的父结点的左孩子是p,那么该父结点即为所求,否则继续向上找。

2014-08-19 15:05:42 3252

原创 【源码】LinkedHashMap源码剖析

注:以下源码基于jdk1.7.0_11之前的两篇文章通过源码分析了两种常见的Map集合,HashMap和Hashtable。本文将继续介绍另一种Map集合——LinkedHashMap。顾名思义,LinkedHashMap除了是一个HashMap之外,还带有LinkedList的特点,也就是说能够保持遍历的顺序和插入的顺序一致,那么它是怎么做到的呢?下面我们开始分析。

2014-08-19 09:28:23 2196 1

原创 哈希的妙用

如果需要判断多个字符是不是在某个字符串里面出现过或者统计多个字符在某个字符串中出现的次数,我们可以考虑基于数组创建一个简单的hash表,这样可以用很小的空间消耗来换取时间效率的提升。题目1:从第一个字符串中删除第二个字符串中出现的所有字符思路:准备一个hash数组,遍历第二个串,并以每个字符所对应的asc码作为下标,值为是否出现,1代表出现。然后遍历第一个串,每遍历一个

2014-08-18 17:37:12 1573

原创 数字在排序数组中出现的次数

题目描述:统计一个数字在排序数组中出现的次数。输入:每个测试案例包括两行:第一行有1个整数n,表示数组的大小。1第二行有n个整数,表示数组元素,每个元素均为int。第三行有1个整数m,表示接下来有m次查询。1下面有m行,每行有一个整数k,表示要查询的数。输出:对应每个测试案例,有m行输出,每行1整数,表示数组中该数字出现的次数。样例输入:

2014-08-17 17:37:29 1327

原创 不用加减乘除做加法

题目描述:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。输入:输入可能包含多个测试样例。对于每个测试案例,输入为两个整数m和n(1输出:对应每个测试案例,输出m+n的值。样例输入:3 47 9样例输出:716代码:思路:1.先将两个数字异或得到

2014-08-17 13:38:34 1658

原创 求两个单链表公共结点

题目:输入两个单链表,找出公共结点。思路:若两个单链表有公共结点,其形状必定为“Y”型,也就是说公共结点后的所有结点都是相同的。我们首先获得两个链表的长度,求得长度之差为n,再定义两个指针分别指向两个链表首部,长链表先走n步,然后两个指针同时走,直到两个指针所指向的值完全相同时停止。代码:/*求链表公共结点*/#include#inclu

2014-08-17 10:51:47 1748

原创 左旋字符串

题目描述:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!输入:多组测试数据,每个测试数据包含一个字符序列S和非负整数K。其中S的长度不超过1000。

2014-08-16 13:45:15 1225

原创 翻转单词顺序

题目描述:JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?输入:每

2014-08-16 10:13:42 2552 1

原创 【源码】Hashtable源码剖析

注:以下源码基于jdk1.7.0_11上一篇分析了HashMap的源码,相信大家对HashMap都有了更深入的理解。本文将介绍Map集合的另一个常用类,Hashtable。Hashtable出来的比HashMap早,HashMap 1.2才有,而Hashtable在1.0就已经出现了。HashMap和Hashtable实现原理基本一样,都是通过哈希表实现。而且两者处理冲突的方式也一

2014-08-15 10:11:17 10407 6

原创 和为s的连续整数序列

题目描述:小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输入:输入有多

2014-08-14 14:07:55 1386

原创 和为s的两个数字

题目描述:输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输入:每个测试案例包括两行:第一行包含一个整数n和k,n表示数组中的元素个数,k表示两数之和。其中1 第二行包含n个整数,每个数组均为int类型。输出:对应每个测试案例,输出两个数,小的先输出。如果找不到,则输出“-1 -1”

2014-08-14 13:13:08 1271

原创 数组中只出现一次的字符

题目描述:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。输入:每个测试案例包括两行:第一行包含一个整数n,表示数组大小。2第二行包含n个整数,表示数组元素,元素均为int。输出:对应每个测试案例,输出数组中只出现一次的两个数。输出的数字从小到大的顺序。样例输入:82 4 3 6 3 2 5 5

2014-08-14 10:29:09 1843

原创 【源码】Vector、Stack源码解析

注:以下源码基于jdk1.7.0_11Vector算是一个历史遗留下来的类,现在已基本被ArrayList取代。本文出于学习的目的来分析下这个类。从图上可以看出Vector和ArrayList同样都直接继承于AbstractList,说明这两者功能上还是很相像的,事实也正是如此。下面我们依然通过源码的方式解读Vector这个类。public cl

2014-08-11 16:09:35 1879

原创 连续子数组的最大和

题目描述:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天JOBDU测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠

2014-08-11 09:58:37 1339

原创 数组中出现次数超过一半的数字

题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字,例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2},输出2。代码:/*数组中出现次数超过一半的数字by Rowandjj2014/8/9*/#includeusing namespace std;bool isValid = false;//检查数组是否合法b

2014-08-10 10:07:41 1569

原创 最小的k个数

题目描述:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。输入:每个测试案例包括2行:第一行为2个整数n,k(1第二行包含n个整数,表示这n个数,数组中的数的范围是[0,1000 000 000]。输出:对应每个测试案例,输出最小的k个数,并按从小到大顺序打印。样例输入:8 4

2014-08-10 09:58:46 1756

原创 【源码】LinkedList源码剖析

注:以下源码基于jdk1.7.0_11上一篇我们分析了ArrayList,今天我们在来看下LinkedList。首先上一幅框架图:LinkedList同样间接继承了AbstractList抽象类,对外来看,LinkedList提供的操作接口跟ArrayList是很类似的,差别在于内部实现上。稍微有点基础的都知道,LinkedList是基于双向

2014-08-08 22:41:40 1668

原创 8皇后问题

题目:在8×8的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后不得处在同一行、同一列或者同一对角斜线上。请求出总共有多少种摆法。思路:一般是通过递归、回溯来求得,这里有一种新的方式,那就是通过全排列。由于八个皇后的任意两个不能处在同一行,那么这肯定是每一个皇后占据一行。于是我们可以定义一个数组ColumnIndex[8],数组中第i个数字表示位于第i行的皇后的列号。先

2014-08-08 19:58:16 1444

原创 字符串的组合

题目:输入一个字符串,求出其所有的组合。比如字符串abc,其组合为:a、b、c、ab 、ac、 bc 、abc。思路1:采用递归的思想,针对第一个字符,我们有两种选择:一是把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选取m-1个字符;二是不把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选择m个字符。思路2:我们可以把一个长度

2014-08-08 13:24:25 1182

原创 【源码】ArrayList源码剖析

//--------------------------------------------------------------------转载请注明出处:http://blog.csdn.net/chdjjby Rowandjj2014/8/7//-----------------------------------------------------------

2014-08-07 22:54:22 1828

原创 【安卓笔记】带自定义属性的view控件

开发中经常需要自定义view控件或者组合控件,某些控件可能需要一些额外的配置。比如自定义一个标题栏,你可能需要根据不同尺寸的手机定制不同长度的标题栏,或者更常见的你需要配置标题栏的背景,这时候,你就会考虑到你写的view的扩展性问题,通常情况下,我们可以为这个自定义的标题栏加上一些setXXX方法,供外界调用,设置其颜色、长度等属性。但是我们都知道,在使用系统控件时,我们大多数情况下并不需要在代码

2014-08-07 14:20:05 1714

原创 java的String和android的String有什么区别?

这是今天阿里电话面试被问到的,在之前确实没有想过(一直以为是一样的),于是面试完之后,我马上打开了源码,对这两个String类进行了比较,下面是我的发现。首先我观察了这两个String类所导入的包,发现两者有些差异:这是android版本:import java.io.Serializable;import java.io.UnsupportedEncodingExcep

2014-08-06 23:24:13 3497 2

原创 【源码】StringBuilder和StringBuffer源码深度剖析

//------------------------------------------------------------------------写篇博客不容易,请尊重作者劳动成果。转载请注明出处:http://blog.csdn.net/chdjj//--------------------------------------------------------------------

2014-08-06 21:58:52 2573

原创 二叉排序树转化成双向链表

题目描述:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。输入:输入可能包含多个测试样例。对于每个测试案例,输入的第一行为一个数n(0接下来的n行,每行为一个二叉搜索树的先序遍历序列,其中左右子树若为空则用0代替。输出:对应每个测试案例,输出将二叉搜索树转换

2014-08-06 14:11:51 2683

原创 复杂链表的复制

题目:实现复杂链表的复制。在复杂链表中,每个结点除了有一个next指针指向下一个结点之外,还有一个sibling指向链表中的任意结点或者NULL。复杂链表示意图:思路:可以分成三步:1.根据原始链表的每个结点N创建对应的N',并将N'放到N的后面2.设置复制出来的结点的sibling指针假设P为原始链表的某结点,则复制链表的对应结点p'->sibli

2014-08-06 12:33:32 1495

原创 数据库索引

当遇到一个新的知识时,可以通过what-why-how的方式去学习它,下面就通过这种方式去学习下数据库索引。什么是数据库索引?定义1:索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。定义2:索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。索引包含由表或视图中的一列或多列生成的键。这些键存储在一个结构

2014-08-05 13:10:15 1425

原创 如何优化数据库查询

宏观:1.缓存。在持久层或持久层之上做缓存。 从数据库中查询出来的数据先放入缓存中,下次查询时,先访问缓存,如果未命中则查询数据库。2.表分区和拆分.无论是业务逻辑上的拆分还是无业务含义的分区。3.提高磁盘速度.这包括RAID和其他磁盘文件分段的处理。主要的思想是提高磁盘的并发度(多个物理磁盘存放同一个文件)。微观:表设计方面:1.字

2014-08-05 11:09:09 1638

原创 数据库分区

数据库分区:概念:以mysql为例。mysql数据库中的数据是以文件的形式存在磁盘上的,默认放在/mysql/data下面(可以通过my.cnf中的datadir来查看),一张表主要对应着三个文件,一个是frm存放表结构的,一个是myd存放表数据的,一个是myi存表索引的。如果一张表的数据量太大的话,那么myd,myi就会变的很大,查找数据就会变的很慢,这个时候我们可以利用mysql的

2014-08-05 10:41:34 1828 3

原创 2014-8-4阿里电话面试

电话打来时,我正在愉快的煮着面条,看着电影(尼玛,真屌丝),看到一个杭州的号码,小心脏跳了一下,马上暂停电影跑出去接电话~废话不多说,下面就是面试经过(投的是客户端开发):1.自我介绍。(我去,完全没准备,很久之前准备的全部忘了~)2.android如何处理OOM?主要从图片压缩、缓存、加载方式方面去回答。3.listView如何优化?主要从convertV

2014-08-04 22:12:01 4620 10

原创 二叉树中和为某一值的路径

题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。比如:上面这棵二叉树,如果寻找和为22的路径,那应该有两条,首先是10,5,7,另外一条是10,12.思路:可以按照先序遍历的方式访问二叉树,这样可以确保根先于子树被访问到,另外需准备一个栈

2014-08-04 11:54:36 2390

原创 二叉搜索树的后序遍历序列

题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。输入:每个测试案例包括2行:第一行为1个整数n(1第二行包含n个整数,表示这个数组,数组中的数的范围是[0,100000000]。输出:对应每个测试案例,如果输入数组是某二叉搜索树的后序遍历的结果输出Yes,否则输出

2014-08-03 13:59:49 1320

Android Programming Push the Limits

Android Programming Push the Limits,非常好的一本书。 不要分。

2015-04-08

volley测试代码

包括客户端以及对应的服务端(servlet),客户端代码中的各种url需要改成你电脑的ip。 配合这篇文章:http://blog.csdn.net/chdjj/article/details/43836615

2015-02-15

手机号码归属地离线数据库文件

手机号码归属地离线数据库文件(格式为.db)

2014-07-21

service全面解析

请查看我的博客:全面解析service组件一文的相关描述

2014-02-17

android下解析xml文件的demo

android下解析xml文件的demo

2014-02-08

软件工程 课件

软件工程 课程 的所有课件,非常完整 内容包括概述、软件过程、项目管理、需求、面向对象分析与设计、实现、测试、软件演化等内容

2013-06-04

jdbc连接mysql的文档

MySQL Connector/J Developer's Guide Abstract This manual describes how to install, configure, and develop database applications using MySQL Connector/J, the JDBC driver for communicating with MySQL servers. For release notes detailing the changes in each release of Connector/J, see MySQL Connector/J Release Notes. Document generated on: 2013-01-25 (revision: 34037)

2013-05-04

空空如也

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

TA关注的人

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