自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

LiuHe

Strive to be Extraordinary.

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

原创 Android基础&进阶

基础总结篇之一:Activity生命周期基础总结篇之二:Activity的四种launchMode基础总结篇之三:Activity的task相关

2013-07-26 17:19:08 41698 26

原创 数据结构与算法简记:红黑树

上次记录了AVL树的相关内容,其规定节点左右子树高度之差不超过1,在添加或移除多个节点后能够对自身重新建立平衡,使其仍可维持一棵良好的二叉查找树结构,不过AVL树为了维护良好的结构,在添加或删除频繁时,性能也会相应的下降。一种替代的方案是使用红黑树。红黑树(Red Black Tree) 也是一种自平衡二叉查找树,它是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(sym

2016-08-15 10:46:37 3167 3

原创 数据结构与算法简记:AVL树

前面记录了二叉查找树,它在搜索方面的效率显而易见,可它也存在某种缺陷,假设我们连续插入较小或较大的数据,那么二叉查找树将会逐渐退变为一个线性结构,从而搜索就变为了线性查找,效率将会大打折扣。所以,我们需要一棵这样的树,它在插入新节点后,能够重新调整自己的结构,使左右恢复平衡。AVL树就符合这个条件。AVL树是最先发明的自平衡二叉查找树,其得名于它的发明者 G.M. Adelson-Velsky 和

2016-08-10 16:50:49 3092 2

原创 数据结构与算法简记:二叉查找树相关操作

二叉查找树(Binary Search Tree)又称或二叉搜索树或二叉排序树,它满足下面的条件:1. 如果左子树不为空,则左子树上的所有节点值都小于根节点2. 如果右子树不为空,则右子树上的所有节点值都大于根节点3. 所有子树都遵循以上规则所以二叉查找树从整体看来,是按中序序列从小到大排序的一棵二叉树,如下图所示:二叉查找树有常用的几个基本操作,包括:向树中插入一个指定值的节点,查找

2016-08-03 13:10:43 2478

原创 数据结构与算法简记:线索化二叉树

二叉树是一个复杂的非线性结构,所以在遍历结点时,一个结点只能获取左右子结点,不能直接获取遍历序列中的后继结点,这显然不太方便。线索化二叉树就可以很好的解决这个问题,将遍历中的前驱和后继结点串联起来,让我们在遍历二叉树时,像线性表一样方便快捷。今天就来记录一下:中序线索化二叉树和遍历线索二叉树。对上图的二叉树进行中序线索化,思路如下:由于中序遍历的特点,要想访问A结点,首先要访问B结点,然后递归的方

2016-07-29 13:00:35 2034

原创 数据结构与算法简记:按层次顺序遍历和存储二叉树

前面曾经记录过,给出一个按层次顺序排放的存储数据,进而可以构建出一棵二叉树,今天就来简单记录一下,如何按层次顺序遍历二叉树,最后又如何根据二叉树生成层次存储数据,对于满二叉树来讲这十分必要。对与这棵二叉树来说,它的层次遍历顺序和层次存储顺序分别为: A B E C D F A B E C D # F按层次遍历思路:首先将根节点放入队列。取出队首元素并访问该节点,然后探索其左子树,如果

2016-07-22 13:53:01 6549

原创 数据结构与算法简记:非递归遍历二叉树

前几次在创建二叉树时也顺带写了几个二叉树遍历的方法,包括前序、中序和后序遍历,都是递归的方法,今天就记录几个对应的非递归方式。还是这个二叉树,我们需要使用栈结构对其进行非递归方式的前序、中序和后序遍历。前序思路:在遍历一颗子树时,首先访问其根节点,然后将其入栈,接着继续探索其左子树,如果左子树不为空,则访问左子树根节点,同样将其入栈,如此进行下去,直到二叉树根节点左边部分的子树根

2016-07-21 13:40:42 1368

原创 数据结构与算法简记:根据层次顺序存储结构构建二叉树---改进版

上次记录了如何根据二叉树层次顺序存储结构来构建一颗二叉树,其思路是求出每一层的节点个数,然后根据当前节点层的指针遍历每个节点,并与父层节点指针指向的节点建立关联,逐层进行。不过这种思路显得不够开阔,算法不够精简,代码也有些冗余,所以今天记录一个改进版的构建函数。还是同样一张图,还是同样的存储结构:这次我们的思路如下:在满二叉树中,每一层的节点树必定是上一层的2倍,如果我们记录父节点的

2016-07-15 16:35:51 1592

原创 数据结构与算法简记:根据层次顺序存储结构构建二叉树

在存储满二叉树或近似满二叉树时,按节点层次顺序存储是个不错的主意,我们从根节点开始,逐层由左到右扫描各个节点,依次将节点数据存放到指定的数组中,如果偶尔遇到空的子节点,就用特殊符号来表示。这个树结构已接近满二叉树了,如果使用按层次顺序存储,将会更简单,更节省空间。按照上面的方法,这棵树所对应的存储结构应该是:['A', 'B', 'E', 'C', 'D', '#', 'F']其

2016-07-12 12:13:40 6159 1

原创 数据结构与算法简记:通过前序中序或中序后序构建二叉树

上次记录了广义表生成二叉树的过程,我们也可以通过前序和中序,或者中序和后序,来构建一棵唯一的二叉树。还是同样的图,它的前序,中序,后序遍历序列分别是:pre: ABCDEFin: CBDAEFpost: CDBFEA以下是通过前序和中序构建二叉树的过程:获取前序字符串的第一个字符A,它作为当前根节点,然后扫描中序字符串,找到A的位置,创建根节点存储结构。然后在中序字符

2016-07-08 12:10:16 6009

原创 数据结构与算法简记:根据广义表构建二叉树

使用广义表(generalized lists)来表示二叉树非常方便,假如我们有这么一个二叉树:它可以表示为L = (A (B (C, D), E ( , F)) ),直观地表达了树中各个节点之间的关系。今天主要记录如何通过解析这个广义表,构建出真实的树存储结构。下面是其主要思路:逐个获取广义表字符串中除空格之外的每个字符,遇到左括号就标记START_LEFT_CHILD,遇到

2016-07-07 11:56:32 25868 2

原创 数据结构与算法简记:归并排序

归并排序是建立在归并操作上的一种有效的排序算法,简单来讲,就是对一个指定的数据区间进行划分,划分出概念上的左子区间和右子区间,然后对两个子区间进行合并,合并后当前整个区间的数据是顺序存放的。在一趟归并操作开始时,我们需要先获取中间位,把当前区间划分为左子区间和右子区间,然后定义两个指针,分别指向左子区间和右子区间的起始位置,开始比较左右子区间当前指针对应的数据大小,如果左边较小,则将该值放入临时数据

2016-07-04 12:12:32 936

原创 数据结构与算法简记:快速排序

快速排序是对冒泡排序的一种改进。首先选定数组中任意位置的元素值做分隔值,然后定义两个指针(可以称为低位和高位),从数组起始位置和结束位置同时向中间靠拢,这个过程中获取它们对应的元素值分别和分隔值进行比较,如果低位指针遇到元素比分隔值大,则暂停,同样地,如果高位指针遇到元素比分隔值小,也暂停,然后交换高低位指针对应的值,交换完成后两指针继续向中间靠拢。一趟下来,比分隔值小的元素都出现在左边,比分隔值大

2016-07-01 12:36:28 839

原创 数据结构与算法简记:希尔排序

希尔排序是直接插入排序的增强版。直接插入排序以单个元素为单位进行比较和插入,与之不同的是,希尔排序设定一个增量,初始增量小于数组长度,然后以增量为单位对数组进行分组划分,进而对每个分组内的序列进行直接插入排序。在对所有分组进行一次插入排序之后,增量递减,然后进行下一轮的排序过程,以此类推。最后一轮时,增量已经变为1,等同于一次直接插入排序,不过这时数组元素已趋于有序状态。下面是实现代码

2016-06-30 12:12:04 1005

原创 数据结构与算法简记:折半插入排序

上次记录了直接插入排序的算法,这种排序算法需要在每一轮插入操作前,拿待插入元素跟前面排好序的元素逐个进行比较,然后找到合适的位置,这种比较其实是不必要的,因为前面的序列已经是排好序的,我们可以直接通过折半查找方式找到该位置,进而可以节省不少运算成本。折半查找通过高位和低位来限制数据区间,然后获取中间位和它的元素值,跟待插入元素值比较,如果大于待插入元素,则区间折半为前半部分,相似地,如果小于待插入元

2016-06-29 12:30:48 1192

原创 数据结构与算法简记:直接插入排序

插入排序把待排序序列看成是一手扑克牌,刚开始是没有顺序的,然后从后面逐个抽出较大的牌,在前面找到合适的位置,这个位置前面的元素都是较大的值,后面的元素都是较小的只,最后插入进去,若干次之后,这手扑克牌就会按照从小到大的顺序排列好,可以排成一个顺子。而直接插入排序是和前面有序序列的元素逐个进行比较,直至找到合适的位置,然后插入。下面是直接插入排序的实现代码:JS版://直接插入排序function

2016-06-28 11:15:33 951

原创 数据结构与算法简记:冒泡排序

冒泡排序是一种相邻元素之间比较和交换的排序算法,n个元素的数组从小到大排序时,每一轮比较都会使较大的元素冒泡到数组的末端,然后这个过程会执行n-1趟。由于第一趟比较之后,最大的元素冒泡到了数组末端,下一次再比较时,待排序区间就减去一个元素的位置,依次类推,每次新的待排序区间等于原数组区间减去已排序次数。由于每一趟排序都需要比较相邻元素的大小,如果数组待排序区域剩余的元素已经是排好序了,程序可能会做一些无用功,

2016-06-27 17:07:03 1325

原创 数据结构与算法简记:选择排序

最近把数据结构与算法方面的书又温习了一遍,觉得有必要在这里做个备忘记录,以后就算是生疏了,也可以很方便查阅。今天就来简明扼要地总结一下选择排序的要点,拿n个元素的数组升序排列举例:先以数组第一个位置做参照,然后遍历数组剩余元素,遍历过程中会跟第一个的元素进行比较,如果小于第一个元素,则交换;一趟下来,最小值被交换到了第一个位置,然后,数组的第二个位置将作为新的参照,开始新一轮的比较和交

2016-06-24 16:25:39 1272

原创 搭建ES6运行环境

当ES5还没有完全普及时,ES6就接踵而来了,2015年6月17日,ECMAScript 6发布正式版本,即ECMAScript 2015,我们也简称它为ES6或ES2015。在发布之后的将近一年内,很多小伙伴都踊跃的学习这门新的语言,之所以说是一门新的语言,是因为跟ES5相比,语法方面变化确实有点大,可以说新的JavaScript语法看上去有种脱胎换骨的感觉。博主也曾跃跃欲试,看了很多语法方面的...

2016-06-06 12:47:14 24492 8

翻译 彻底理解Flexbox

注:本文翻译自CHRIS COYIER的A Complete Guide to Flexbox这篇文章,点击链接可前往原版博文:https://css-tricks.com/snippets/css/a-guide-to-flexbox/ Tips: This tutorial is translated from the most popular article in CSS-Tricks -

2016-06-02 13:01:00 10804

原创 React入门实践之TodoList: 添加事件和搜索框

在上篇文章中,我们使用React实现了一个TodoList,可以显示基本的待办事项的列表,今天我们继续添加一些功能,比如选中一个TodoItem的checkbox进而可以改变它的完成状态,添加一个搜索框,在搜索框中输入关键字可以对多条数据进行过滤。 我们还是在原来的基础上做改动,下面是最新的TodoList模块:var TodoList = React.createClass({ getIni

2016-05-23 12:53:10 6760 2

原创 React入门实践之Todo List

上次我们介绍了React入门的Hello World程序,还搭建了一个简单的React运行环境,今天就来写一个TodoList程序,逐步学习React开发。 注意,下面的程序是基于上篇文章中的react-dev项目的,如果没有看过,大家可以移步至:React入门之HelloWorld及环境搭建 根据React的开发思想,一切皆为模块和复合组件,所以我们要做一个TodoList,首先要对这个功能进

2016-05-20 13:20:50 4172 1

原创 响应式设计之媒介查询

你必须像水那样无形:当你把水倒进杯子中,水就变成了杯子的形状;当你把水倒进瓶子中,水就变成了瓶子的形状;当你把水倒进茶壶中,水就变成了茶壶的形状。 — 李小龙 之前读《响应式Web设计实践》,这大概是我印象最深的一句话了。李小龙的功夫了得,可他的功夫哲学更是令人叹服。如今的前端,面临着更多的挑战,尺寸大小不一的设备涌现出来,就像形状各异的容器,而我们的网页必须像水一般, 能够接受各式各样的考验。

2016-05-16 22:41:22 9023

原创 HTML5 New Feature Series: Geolocation

Today handheld devices are so popularly spreading over our around, and the position feature plays an vital role in the application developed for these devices. Some applications, such as Uber, can find the near

2016-05-10 11:04:59 1053

原创 HTML5新特性之Geolocation

在手持设备如此普遍的今天,位置信息对于应用程序来讲是极其重要的,打车应用可以根据用户的位置信息呼叫附近的车辆,团购软件可以根据当前的位置推荐附近的影院和美食,地图应用可以根据用户的位置快速规划到目的地的路线,可以说位置信息对于移动应用是不可或缺的。为了顺应这个潮流,HTML5为我们提供了Geolocation库,有了它我们就能够在Web应用中轻而易举地实现上述这些功能。那么今天我就为大家介绍一下这个库的使用。

2016-05-10 11:04:01 1680

原创 详解defer和async的原理及应用

defer和async是script标签的两个属性,用于在不阻塞页面文档解析的前提下,控制脚本的下载和执行。 在介绍他们之前,我们有必要先了解一下页面的加载和渲染过程: 1. 浏览器通过HTTP协议请求服务器,获取HMTL文档并开始从上到下解析,构建DOM; 2. 在构建DOM过程中,如果遇到外联的样式声明和脚本声明,则暂停文档解析,创建新的网络连接,并开始下载样式文件和脚本文件; 3. 样

2016-05-03 10:37:34 24729 5

原创 React入门之HelloWorld及环境搭建

关注React也已经很久了,一直没能系统地深入学习,最近准备好好研究一下,并且亲自动手做一些实践。 学习一门语言也好,学习一个框架也好,都是从最初的hello world程序开始的,今天我们也来用React写一个hello world出来,了解一下如何编写及运行React。 在官方文档中,有一种方式是基于npm的,我比较喜欢这种方式,这也是官方比较推荐的,下面我们就一步一步创建一个React的...

2016-04-22 11:18:50 16114

原创 ES5规范之严格模式

现如今JavaScript早已不仅仅是网页特效脚本了,更多是用来构建大规模的Web应用,所以语言规范的制定者们也逐渐意识到要对JS进行语法方面的规范,并且有意地引导开发者编程习惯,消除一些不规范和不安全的语法,进而更好的满足以后大规模开发的要求,ES5规范中的严格模式就是其中重要的一环,今天我们就来详细介绍一下严格模式的使用以及它对语法的种种限制和规范。启用严格模式只需使用'use strict';这条语句即可,对于支持严格模式的浏览器,在声明'use strict';语句之后的代码都将会在严格模式的限制

2016-04-21 12:45:20 12281

原创 ES5规范之Object增强

在ES5规范中,还有一个比较重要的改进,就是Object对象的增强,ES5为Object新增了一系列函数,用于编写安全健壮的程序,今天我们就来一一介绍它们的使用方法。下面就是ES5中Object新增的函数:Object.defineProperty(object, propertyName, descriptor);Object.defineProperties(object, descriptors);Object.getOwnPropertyDescriptor(object, property

2016-04-07 12:45:36 6776

原创 ES5新增函数之二: Function.prototype.bind();

在上一篇文章里我们分析了ES5对几个常用类新增的函数,今天就重点来讲解一下Function中的bind函数。简单来说,bind函数用于将当前函数和指定对象绑定,返回一个新的函数,当新函数被调用时,代码会在指定对象的上下文中执行。这就涉及到JavaScript程序执行上下文Context的知识了,在JavaScript中函数内部如果存在与Context有关的代码,如果我们在调用之前改变其Context,那么执行结果就不同,这一点我们可以用一个最基本的例子来说明:

2016-04-02 17:00:37 3966 2

原创 ES5新增函数之一: Array, JSON, String, Date

ES5即ECMAScript 5.1,在JavaScript语言基础之上添加了很多新的特性,对现有的对象和语句进行相应的增强和规范,主要包括一些新增函数、对象类型增强,以及严格模式编程规范。今天我们先来介绍以下几个新增的函数:Array.isArray(obj);Array.prototype.forEach();Array.prototype.indexOf();Array.prototype.lastIndexOf();Array.prototype.filter();Array.prot

2016-03-31 20:43:17 4314

原创 Angular中实现树形结构视图

近两年当中使用Angular开发过很多项目,其中也涉及到一些树形结构的显示,最近的在项目中封装了大量的组件,其中一些组件也涉及到树形结构,所以写出来总结一下。相信大家都知道,树结构最典型的例子就是目录结构了吧,一个目录可以包含很多子目录,子目录又可以包含若干个子孙目录,那咱们今天就以目录结构为例来说明一下Angular中树结构的实现。首先,我们希望封装一个组件,用于显示整个目录的树形机构,代码如下:angular.module('treeDemo', []) .controller("TreeCo

2016-03-23 21:41:22 26235 5

原创 HTML5 New Feature Series: Web Workers

As we know, client-side JavaScript runs in single thread, in other words, JavaScript and UI rendering program share the main thread, that means, UI rendering will be blocked when JavaScript is working on high-loading processing, thereby user experience wil

2016-03-08 13:11:42 1122

原创 HTML5新特性之Web Workers

我们知道浏览器端JavaScript是以单线程的方式执行的,也就是说JavaScript和UI渲染占用同一个主线程,那就意味着,如果JavaScript进行高负载的数据处理,UI渲染就很有可能被阻断,从而造成用户体验的大打折扣。Web Workers作为HTML5新特性之一,为浏览器端JavaScript开创了一种新的运行模式,使之能够在另外的线程中创建新的运行环境,以便使JavaScript能够

2016-03-08 13:09:30 2552

原创 HTML5 New Feature Series: WebSocket

Nowadays Web Application becomes increasingly complex, hence, message pushing is playing an vital role in Web Application functionalities. With message pushing, Web page will be able to receive the me

2016-01-21 23:30:39 1400

原创 HTML5新特性之WebSocket

在Web应用越来越复杂的今天,消息推送已经成为一个非常重要的功能了,有了消息推送,Web页面就能够及时的接收到来自服务端的消息,为用户展现最好的交互体验。过去我们在实现Web页面的消息推送时,一般都是由页面发起请求,以轮询的方式向服务器获取数据,实现起来极为不便,业务逻辑也相对较为复杂。为了解决这个问题,进而实现真正意义上的消息推送,HTML5定义了一套新的规范,这就是WebSocket。下面

2016-01-21 23:22:21 19284 4

原创 HTML5 New Feature Series: Communication

Communication is one of the most important HTML5 Features, it provides an interaction mechanism based on the security policy of cross origins, and web applications can message each other even though t

2015-05-31 22:07:44 2012 2

原创 HTML5新特性之Communication

Communication是众多HTML5新特性中比较重要的一个,它提供一种基于安全策略的跨站交互的机制,即使来自不同的站点的应用之间也能自由的通信,正是这一特性的出现,使得不同站点内容的集成简化了许多。我们都知道,基于安全方面的考虑,浏览器会合理地限制脚本的执行,禁止访问其他站点的数据服务或操作非本站点的DOM对象,这些安全机制在一定程度上解决了安全攻击的隐患,但也给前端开发者带了一定的麻烦

2015-05-31 22:06:29 1863

原创 HTML5 New Feature Series: History

The rise of Ajax technology has brought new vitality to Internet since few years ago, in the meantime, it has achieved a qualitative leap on user experience. The page can easily fetch new data without

2015-04-23 23:23:08 1953

原创 HTML5新特性之History

几年前,Ajax的兴起给互联网带来了新的生机,同时也使用户体验有了质的飞跃,用户无需刷新页面即可获取新的数据,而页面也以一种更具有交互性的形式为用户展现视图,可以说这种变化对互联网发展的贡献是史无前例的。但随着Ajax大规模应用,越来越多的开发人员开始注意到其中存在的问题,因为Ajax的视图展现是在页面无刷新情况下进行的,这也就意味着在用户做了一系列操作之后,页面的URL是没有任何变化的,这些

2015-04-23 23:21:17 6476 2

空空如也

空空如也

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

TA关注的人

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