自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HDFS分布式文件系统系列---基础

1、概述1、背景HDFS(Hadoop Distributed File System)Hadoop分布式文件系统; Hadoop内核包括:HDFS,Yarn,MapReduce; HDFS源于Google的一篇论文:GFS - 该论文发表与2003年10月; - HDFS是GFS的克隆版;HDFS是一个易于扩展的分布式文件系统;运行在大量廉价机器上,提供容错机制;为大量用户提供性

2016-09-30 17:09:35 873

原创 算法---求数组的所有集合

第一种情况题目给出的数组中没有重复元素,求所有的集合,并且每个集合递增;分析递推 每个集合,每个元素加入或不加入实现/* * 求数组的所有子集合 * 1)数组中没有重复元素 * 对于每个元素,是否加入 * 递归 * 从[]开始,遍历每个元素; * 对于每个元素,加入后递归 * 移除,判断下一个元素 *

2016-09-19 00:16:16 450

原创 java内存模型

1、内存模型的相关概念缓存一致性问题。 通常称这种被多个线程访问的变量为共享变量。也就是说,如果一个变量在多个CPU中都存在缓存(一般在多线程编程时才会出现),那么就可能存在缓存不一致的问题。为了解决缓存不一致性问题,通常来说有以下2种解决方法:通过在总线加LOCK#锁的方式通过缓存一致性协议这2种方式都是硬件层面上提供的方式。 上面的方式1会有一个问题,由于在锁住总线期间,其他CPU无法

2016-09-18 20:21:12 256

原创 动态规划问题系统---climbing-stairs

题目给定n个台阶,每次走1个或2个台阶;总共有多少种走法?分析动态规划 dp[i]表示i个台阶的走法 dp[i]=dp[i-1]+dp[i-2]dp[0]=0; dp[1]=1; dp[2]=2;实现public static int climbStairs(int n){ if(n==0){ return 0; } i

2016-09-18 01:59:12 211

原创 动态规划问题系统---edit-distance

题目给定2个字符串,str1,str2,求这两个字符串的最小Edit Distance; Edit Distance:用于衡量两个strings之间的相似性。 两个strings之间的Minimum edit distance是指把其中一个string通过编辑(包括插入,删除,替换操作)转换为另一个string的最小操作数。分析那么如何找到两个strings的minimun edit dista

2016-09-18 01:10:55 290

原创 数组---求数组组成的集合的所有子集

题目给定一个数组,求数组的所有子集,要求每个子集中的元素是升序的; 如:[1,2,3] 则: [] [1] [2] [3] [1,2] [1,3] [2,3] [1,2,3]解法1递归,利用二叉树思想; 第0层为空集;第i层表示将数组第i个元素是否加入到集合中,左子树表示加入,右子树表示不加入; 最后,每个叶子表示一个子集;如下所示:

2016-09-18 00:01:54 2479

原创 动态规划问题系列---Unique Paths II

题目给定一个m行n列矩阵,其中0表示空闲,1表示障碍物,求从0,0到m-1,n-1中的可通路径数目;(0表示可通)分析动态规划 设dp[i][j]表示从i,j到m-1,n-1的路径个数; 则转移方程:if(a[i][j]==0) dp[i][j]=dp[i+1][j]+dp[i][j+1]else dp[i][j]=0初始化if(a[m-1][n-1]==0) dp[m-1

2016-09-16 22:07:16 245

原创 动态规划问题系列---Minimum Path Sum(路线上元素和的最小值)

题目Minimum Path Sum(路线上元素和的最小值); 给定一个m行n列的矩阵,从左上角到右下角所有可能的路径中,求经过的元素和最小值。分析动态规划 dp[i][j]表示从i,j的位置到右下角的位置的所有可能路径中,经过的元素和的最小值; 则状态转移方程:dp[i][j]=min{dp[i+1][j],dp[i][j+1]}+a[i][j];初始化:dp[m-1][n-1]=a[m-1

2016-09-16 21:45:17 566

原创 java集合框架系列---包装器

Arrays类1)排序 Arrays的静态方法sort() Arrays.sort(Int型数组) 按照int大小排序,默认升序 Arrays.sort(String型数组)按照元素的自然顺序进行升序排序; Arrays.sort(String数组, String.CASE_INSENSITIVE_ORDER)不区分大小写; Arrays.sort(数组,start,end)可以指定数组

2016-09-14 23:19:29 221

转载 java集合框架系列---Iterator和Enumeration比较

Iterator和Enumeration区别通过“Iterator(迭代器)” 或 “Enumeration(枚举类)” 去遍历集合; Enumeration是一个接口,它的源码如下:package java.util;public interface Enumeration<E> { boolean hasMoreElements(); E nextElement();}Itera

2016-09-14 23:12:45 222

转载 java集合框架系列---TreeSet

1、介绍TreeSet简介TreeSet 是一个有序的集合,它的作用是提供有序的Set集合。它继承于AbstractSet抽象类,实现了NavigableSet, Cloneable, java.io.Serializable接口。TreeSet 继承于AbstractSet,所以它是一个Set集合,具有Set的属性和方法。TreeSet 实现了NavigableSet接口,意味着它支持一

2016-09-14 23:01:30 254

转载 java集合框架系列---HashSet

1、介绍HashSet 简介HashSet 是一个没有重复元素的集合。它是由HashMap实现的,不保证元素的顺序,而且HashSet允许使用 null 元素。HashSet是非同步的。如果多个线程同时访问一个哈希 set,而其中至少一个线程修改了该 set,那么它必须 保持外部同步。这通常是通过对自然封装该 set 的对象执行同步操作来完成的。如果不存在这样的对象,则应该使用 Colle

2016-09-14 22:57:02 202

原创 java集合框架系列---Set接口

(01) Set 是继承于Collection的接口。它是一个不允许有重复元素的集合。 (02) AbstractSet 是一个抽象类,它继承于AbstractCollection,AbstractCollection实现了Set中的绝大部分函数,为Set的实现类提供了便利。 (03) HastSet 和 TreeSet 是Set的两个实现类。 HashSet依赖于HashMa

2016-09-14 22:39:57 209

原创 java集合框架系列---LinkedHashMap

1、介绍LinkedHashMap是HashMap的一个子类,它保留插入的顺序,如果需要输出的顺序和输入时的相同,那么就选用LinkedHashMap。LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。LinkedHashMap实现与HashMa

2016-09-14 22:13:29 176

转载 java集合框架系列---Map接口

HashMap 是基于“拉链法”实现的散列表。一般用于单线程程序中。   Hashtable 也是基于“拉链法”实现的散列表。它一般用于多线程程序中。   WeakHashMap 也是基于“拉链法”实现的散列表,它一般也用于单线程程序中。相比HashMap,WeakHashMap中的键是“弱键”,当“弱键”被GC回收时,它对应的键值对也会被从WeakHashMap中删除;而HashMap中的键是

2016-09-14 21:18:08 179

原创 java集合框架系列---WeakHashMap

1、介绍WeakHashMap简介WeakHashMap 继承于AbstractMap,实现了Map接口。和HashMap一样,WeakHashMap 也是一个散列表,它存储的内容也是键值对(key-value)映射,而且键和值都可以是null。不过WeakHashMap的键是“弱键”。在 WeakHashMap 中,当某个键不再正常使用时,会被从WeakHashMap中被自动移除。更精确

2016-09-14 20:55:36 214

原创 java集合框架系列---TreeMap

1、介绍简介TreeMap 是一个有序的key-value集合,它是通过红黑树实现的。TreeMap 继承于AbstractMap,所以它是一个Map,即一个key-value集合。TreeMap 实现了NavigableMap接口,意味着它支持一系列的导航方法。比如返回有序的key集合。TreeMap 实现了Cloneable接口,意味着它能被克隆。TreeMap 实现了java.io.

2016-09-14 11:11:39 528

原创 java集合框架系列---HashMap

1、介绍HashMap简介HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。 HashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。 HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。HashMap 的实例有

2016-09-14 10:50:43 386

转载 java集合框架系列---Map接口

1、概要Map框架 (01) Map 是映射接口,Map中存储的内容是键值对(key-value)。 (02) AbstractMap 是继承于Map的抽象类,它实现了Map中的大部分API。其它Map的实现类可以通过继承AbstractMap来减少重复编码。 (03) SortedMap 是继承于Map的接口。SortedMap中的内容是排序的键值对,排序的方法是通过比较器(Comparat

2016-09-14 10:16:56 198

转载 Java 集合框架系列---Collection

Java 集合框架系列—Collection概要首先,我们对Collection进行说明。下面先看看Collection的一些框架类的关系图:Collection是一个接口,它主要的两个分支是:List 和 Set。List和Set都是接口,它们继承于Collection。List是有序的队列,List中可以有重复的元素;而Set是数学概念中的集合,Set中没有重复元素!List和Set都有它们各

2016-09-14 10:07:01 211

原创 java集合框架系列---fail-fast机制

介绍fail-fast 机制是java集合(Collection)中的一种错误机制。当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件。 例如:当某一个线程A通过iterator去遍历某集合的过程中,若该集合的内容被其他线程所改变了;那么线程A访问集合时,就会抛出ConcurrentModificationException异常,产生fail-fast事件。示例import

2016-09-14 09:57:11 395

原创 java集合框架系列---LinkedList

1、介绍LinkedList简介LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。 LinkedList 实现 List 接口,能对它进行队列操作。 LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。 LinkedList 实现了Cloneable接口,即覆盖了函数clo

2016-09-14 09:11:00 458

原创 java集合框架系列---ArrayList

ArrayList简介是一个动态数组。 与Java中的数组相比,它的容量能动态增长。它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。 ArrayList 实现了Ran

2016-09-13 01:19:06 304

原创 java集合框架系列---遗留下来的集合框架

java第一版遗留下来的集合框架(容器类): Vector Stack Hashtable Dictionary Properties1、Vector特点1、Vector类实现了一个动态数组; 2、可以往其中随意插入不同类的对象,即不需顾及类型也不需预先选定向量的容量; 4、Vector: 底层用数组实现List接口的另一个类 5、重量级,占据更多的系统开销 线程安全源码分析在这

2016-09-13 00:09:56 430

原创 java集合框架系列

1、java集合框架的接口 2、java集合框架的类层次结构 3、java集合框架中的遗留类层次结构 整个层次图

2016-09-12 23:19:02 1150

原创 java内存模型中的先行发生原则

先行发生原则前言由上一篇,我们知道并发问题的一个原因是有序性,而java中volatile和synchronized可以保证有序性; 但是在java中,并不是所有的操作都是由volatile和synchronized实现的,java中存在”先行发生“的原则。 “先行发生”原则是判断数据是否存在竞争、线程是否安全的主要依据;什么是先行发生原则?先行发生原则是指:如果说操作A先行发生于操作B,也就是

2016-09-12 22:33:29 2296

原创 根据java内存模型理解并发出现的问题

原子性1、某些读写共享变量的操作如果不是原子操作,多线程并发的情况下会出现并发问题。 2、原子性实现了多个线程并发访问某段代码的时候,使这些线程能够有序访问。因为实现原子操作代码的一旦被执行,就不能被打断,其他线程想要访问的时候,只能阻塞等待。 3、java中实现原子性使用了synchronized关键字,在synchronized块之间的代码具备原子性。可见性并发问题并不只是由于原子性导致的;

2016-09-12 22:21:27 704

转载 动态规划问题系列---word break问题

题目 给定一个字符串和一个字典,在字符串中添加空格来构造一个句子,使句子中的每个单词在字典中都存在; 输入 :字符串 输出:所有可能的句子例如: s=”catsanddog” dict=[“cat”,”cats”,”and’,”sand”,”dog”] 输出:cats and dog和cat sand dog分析 将字符串分割成2部分s1和s2,如果s1包含在字典中,则递归计算s2;然

2016-09-12 01:40:10 412

原创 动态规划问题系列---扔玻璃珠

题目 某幢大楼有100层。你手里有两颗一模一样的玻璃珠。当你拿着玻璃珠在某一层往下扔的时候,一定会有两个结果,玻璃珠碎了或者没碎。这幢大楼有个临界楼层。低于它的楼层,往下扔玻璃珠,玻璃珠不会碎,等于或高于它的楼层,扔下玻璃珠,玻璃珠一定会碎。玻璃珠碎了就不能再扔。现在让你设计一种方式,使得在该方式下,最坏的情况扔的次数比其他任何方式最坏的次数都少。也就是设计一种最有效的方式。分析 1)最笨的办法

2016-09-11 21:36:57 2523

原创 TCP协议状态

tcp状态LISTEN:侦听来自远方的TCP端口的连接请求SYN-SENT:再发送连接请求后等待匹配的连接请求SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认ESTABLISHED:代表一个打开的连接FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认FIN-WAIT-2:从远程TCP等待连接中断请求CLOSE-WAIT:等待从本地用户发来的连接中

2016-09-11 17:42:40 295

原创 数据库---视图

什么是视图  视图(view):从一个或几个基本表中根据用户需要而做成一个虚表   1:视图是虚表,它在存储时只存储视图的定义,而没有存储对应的数据   2:视图只在刚刚打开的一瞬间,通过定义从基表中搜集数据,并展现给用户   视图与查询的区别:   视图和查询都是用由sql语句组成,这是他们相同的地方,但是视图和查询有着本质区别:   它们的区别在于:   1:存储上的区别:视图存储为

2016-09-11 16:40:52 274

原创 HTTP协议

介绍HTTP协议用于定义客户端和web服务器之间通信的格式; HTTP,超文本传输协议,基于TCP/IP协议的一个应用层协议,用于定义浏览器和web服务器之间交换数据的过程; 有2个版本1.0 1.1 在HTTP1.0中,客户端和服务器之间建立连接后,只能获得一个web资源; 在HTTP1.1中,客户端和服务器之间建立连接后,在一个连接上可以获得多个资源;HTTP请求http请求格式 请

2016-09-11 11:31:51 393

原创 旅行商问题(TSP问题)

题目 TSP问题(旅行商问题)是指旅行家要旅行n个城市,要求各个城市经历且仅经历一次然后回到出发城市,并要求所走的路程最短。 假设现在有四个城市,0,1,2,3,他们之间的代价如图一,可以存成二维表的形式 现在要从城市0出发,最后又回到0,期间1,2,3都必须并且只能经过一次,使代价最小。分析 TSP问题是NP完全问题;

2016-09-09 21:54:07 27128 1

原创 动态规划问题系列---Disk Schedule

题目有很多从磁盘读取数据的需求,包括顺序读取、随机读取。为了提高效率,需要人为安排磁盘读取。然而,在现实中,这种做法很复杂。我们考虑一个相对简单的场景。 磁盘有许多轨道,每个轨道有许多扇区,用于存储数据。当我们想在特定扇区来读取数据时,磁头需要跳转到特定的轨道、具体扇区进行读取操作。为了简单,我们假设磁头可以在某个轨道顺时针或逆时针匀速旋转,旋转一周的时间是360个单位时间。磁头也可以随意移动到某

2016-09-09 17:05:22 373

原创 动态规划问题系列---连续子数组(二维)的最大和

题目1一维数组的连续子数组的最大和 输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间负责度为O(n)。分析假如输入数组为{1,-2,3,10,-4,7,2,-5},我们尝试从头到尾累加其中的正数,初始化和为0,第一步加上1,此时和为1,第二步加上-2,此时和为-1,第三步加上3,此时我们发现-1+3=2,最大和2反而比3一个单独的

2016-09-09 00:30:06 641

原创 动态规划问题系列---Labyrinth(迷宫)

题目度度熊是一只喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫只能从矩阵左上角第一个方格开始走,只有走到右上角的第一个格子才算走出迷宫,每一次只能走一格,且只能向上向下向右走以前没有走过的格子,每一个格子中都有一些金币(或正或负,有可能遇到强盗拦路抢劫,度度熊身上金币可以为负,需要给强盗写欠条),度度熊刚开始时身上金币数为0,问度度熊走出迷宫时候身上最多有多少金币? Input 输入的

2016-09-08 23:58:33 2477

原创 微软面试100题系列---调整数组顺序,使奇数位于偶数之前

题目调整数组顺序,使奇数位于偶数之前;实现设置2个指针,一个从前向后寻找偶数,一个从后向前寻找奇数,然后交换; 代码:int i=0,j=a.length-1; while(i<j){ while((a[i]&1)==1 && i<j){ i++; } if(i>a.length

2016-09-05 03:25:03 330

原创 微软面试100题系列---字符串的排列

题目输入一个字符串,打印出该字符串中字符的所有排列; 如输入”abc”,则由a,b,c组成的所有排列: abc,acb,bac,bca,cab,cba实现思路:这是一个递归问题;依次从字符串中取出一个字符作为第一个字符,对剩余字符组成的字符串生成全排列,最后结果为取出的字符和剩余字符全排列的组合; 代码:void permutation(String str,int begin,int end

2016-09-05 03:03:05 289

原创 微软面试100题系列---二叉树的深度

实现int TreeDepth(Node root){ if(root==null){ return 0; } int nleft=TreeDepth(root.left); int nright=TreeDepth(root.right); return (nleft>nright)?:(nleft+1):(nright+1);}

2016-09-05 02:41:10 267

原创 微软面试100题系列---二叉树的遍历递归和非递归实现

题目用递归和非递归两种方法实现二叉树的遍历实现前序遍历递归实现void preorderRecursive(Node root{ if(node==null){ return; } visit(root); preorderRecursive(root.left); preorderRecursive(root.right);}非递归实现借助

2016-09-05 02:31:50 328

空空如也

空空如也

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

TA关注的人

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