摘要: 1、栈(stack)和堆(heap) stack为自动分配的内存空间,它由系统自动释放;而heap则是动态分配的内存,大小不定也不会自动释放。 2、基本类型和引用类型 (1)基本类型:存放在栈内存中的简单数据段,数据大小确定,内存空间大小可以分配。   5种基本数据类型有Undefined、Null、Boolean、Number 和 String,它们是直接按值存放的,所以可以直接访问。 (2)引用类型:存放在堆内存中的对象,变量实际保存的是一个指针,这个指针指向另一个位置。每个空间大小不一样,要根据情况开进行特定的分配。   当我们需要访问引用类型(如对象,数组,函数等)的值时,首先从栈中获得该对象的地址指针,然后再从堆内存中取得所需的数据。 3、传值与传址   前面之所以要说明什么是内存中的堆、栈以及变量类型,实际上是为了更好的理解什么是“浅拷贝”和“深拷贝”。   基本类型与引用类型最大的区别实际就是传值与传址的区别。测试用例: 阅读全文
posted @ 2015-10-16 11:19 jingwhale 阅读(4215) 评论(0) 推荐(2) 编辑
摘要: HTML5 canvas标签用于绘制图像(通过脚本,通常是 JavaScript)。 不过,canvas元素本身并没有绘制能力(它仅仅是图形的容器) - 您必须使用脚本来完成实际的绘图任务。 getContext() 方法可返回一个对象,该对象提供了用于在画布上绘图的方法和属性。 本手册提供完整的 getContext("2d") 对象属性和方法,可用于在画布上绘制文本、线条、矩形、圆形等等。 浏览器支持 Internet Explorer 9、Firefox、Opera、Chrome 以及 Safari 支持 canvas 及其属性和方法。 阅读全文
posted @ 2015-10-06 22:46 jingwhale 阅读(5135) 评论(2) 推荐(6) 编辑
摘要: 排序:就是重新排列表中的元素,是表中的元素满足按关键字递增或递减的过程。为了查找方便,通常要求计算机中的表是按关键字有序的。排序的确切定义如下: 输入:n个记录R1,R2, ...,Rn对应的关键字为k1,k2,...,kn。 输出:输入序列的一个重排R1',R2', ...,Rn',使得有k1'<=k2'<=...<=kn'(其中“<=”办以换成其他的比较大小的符号)。 算法的稳定性:如果待排序表中有两个元素Ri、Rj,其对应的关键字keyi=keyj,且排序前Ri在Rj前面,如果使用某—排序算法排序后,Ri仍然在Rj前面,则称这个的,否则称排序算法是稳定的,否则称排序算法是不稳定的。需要注意的是,算法是否具有稳定性并不能衡量一个算法的优劣,它主要是对算法的性质进行描述。 注意:对于不稳定的排序算法,只需举出一组关键字的实例说明它的不稳定性即可。 在排序的过程中,根据数据元素是否完全在内存中,可将排序算法分为两类:内部排序是指在排序期间元素全部存放在内存中的排序;外部排序是指在排序期间元素无法全部同时存放在内存中,必须在排序的过程中根据要求不断地在内、 阅读全文
posted @ 2015-08-31 21:00 jingwhale 阅读(1412) 评论(0) 推荐(0) 编辑
摘要: 算法效率的度量是通过时间复杂度和空间复杂度来描述的。 一.时间复杂度 —个语句的频度是指该语句在算法中被重复执行的次数。算法中所有语句的频度之和记作T(n),它是该算法问题规模n的函数,时间复杂度主要分析T(n)的数量级。算法中的基本运算(最深层循环内的语句)的频度与T(n)同数量级,所以通常采用算法中基本运算的频度制来分析算法的时间复杂度。因此,算法的时间复杂度也记为: T(n)=O(f(n)) 上式中“O”的含义是T(n)的数量级,其严格的数学定义是:若T(n)和f(n)是定义在正整数集合上的两个函数,则存在正常数C和no,使得当n>=no时,都满足0<=T(n)<=C*F(n)。 算法的时间复杂度不仅依赖于问题的规模n,也取决于待输入数据的性质(如输入数据元素的初始状态)。 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多 阅读全文
posted @ 2015-08-30 18:01 jingwhale 阅读(2963) 评论(0) 推荐(1) 编辑
摘要: 本文介绍了布局解决方案,主要分为三个部分来讲居中布局,多列布局,等列布局。每个部分又分为定宽和不定宽的讨论。 阅读全文
posted @ 2015-08-24 01:07 jingwhale 阅读(4400) 评论(3) 推荐(4) 编辑
摘要: HTML页面的加载 HTML页面的加载实际上是基于http过程+浏览器对数据的解析渲染。 http协议的请求过程是基于TCP协议的。http是要基于TCP连接基础上,简单的说,TCP单纯建立连接,不涉及任何我们需要请求的实际数据,简单的传输。http基于TCP建立的连接来收发数据,即实际应用上来的。 一个HTML页面的加载的交互流程大致如下: 0.输入URL 1.解析URL 2.构造并发送HTTP请求 服务器的永久重定向响应(从 http://example.com 到 http://www.example.com) 浏览器跟踪重定向地址 3.HTTP报文传输过程 4.服务器接受并处理HTTP报文 5.服务器构造并发送响应报文(传输过程略) 6.浏览器接收报文,并开始构建页面 7.(可选)浏览器发送嵌入在 HTML 中的静态资源如图片、音频、视频、CSS、JS等等) 8.(可选)浏览器发送Ajax异步请求(处理过程略) 9.页面构建完成 阅读全文
posted @ 2015-08-08 22:38 jingwhale 阅读(8048) 评论(1) 推荐(8) 编辑
摘要: 时间花哪里去了? 只有10%-20%的最终用户响应时间花在了下载html文档上,其余80%-90%时间花在了下载页面的相关组件上。如:图片、Flash等。 所以主要优化: 减少http请求 缓存 减少文件大小:压缩文件+优化代码 健康的优化因该是根据页面的加载过程,全面的优化过程 第一步、浏览器预处理 查询Cache:读取Cache 或者发送304请求 第二步、查询DNS 优化规则--减少DNS查找 DNS缓存 浏览器DNS缓存 计算机DNS缓存 服务器DNS缓存(TTL) 使用Keep-Alive特性 减少DNS查找 当客户端的DNS缓存为空时,DNS查找的数量与Web页面中唯一主机名的数量相等。减少唯一主机名的数量就可以减少DNS查找的数量。 较少的域名来减少DNS查找(2-4个主机) 阅读全文
posted @ 2015-08-02 18:20 jingwhale 阅读(1810) 评论(2) 推荐(1) 编辑
摘要: ECMAScript 有两种开发模式:1.函数式(过程化),2.面向对象(OOP)。面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象。但是,ECMAScript 没有类的概念,因此它的对象也与基于类的语言中的对象有所不同。一.创建对象 创建一个对象,然后给这个对象新建属性和方法。构造函数的方法构造函数的方法有一些规范: 1)函数名和实例化构造名相同且大写,(PS:非强制,但这么写有助于区分构造函数和 普通函数); 2)通过构造函数创建对象,必须使用new 运算符。三.原型 我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个对象,它的用途是包含可以由特定类型的所有实例共享的属性和方法。逻辑上可以这么理解:prototype 通过调用构造函数而创建的那个对象的原型对象。使用原型的好处可以让所有对象实例共享它所包含的属性和方法。也就是说,不必在构造函数中定义对象信息,而是可以直接将这些信息添加到原型中。四.继承 继承是面向对象中一个比较核心的概念。其他正统面向对象语言都会用两种方式实现继承:一个是接口实现,一个是继承 阅读全文
posted @ 2015-07-26 20:42 jingwhale 阅读(51126) 评论(2) 推荐(3) 编辑
摘要: 什么是Unix时间戳(Unix timestamp): Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。Unix时间戳不仅被使用在Unix系统、类Unix系统中,也在许多其他操作系统中被广泛采用。 目前相当一部分操作系统使用32位二进制数字表示时间。此类系统的Unix时间戳最多可以使用到格林威治时间2038年01月19日03时14分07秒(二进制:01111111 11111111 11111111 11111111)。其后一秒,二进制数字会变为10000000 00000000 00000000 00000000,发生溢出错误,造成系统将时间误解为1901年12月13日20时45分52秒。这很可能会引起软件故障,甚至是系统瘫痪。使用64位二进制数字表示时间的系统(最多可以使用到格林威治时间292,277,026,596年12月04日15时30分08秒)则基本不会遇到这类溢出问题。 阅读全文
posted @ 2015-07-24 22:11 jingwhale 阅读(377893) 评论(9) 推荐(11) 编辑
摘要: BOM 也叫浏览器对象模型,它提供了很多对象,用于访问浏览器的功能。BOM 缺少规范,每个浏览器提供商又按照自己想法去扩展它,那么浏览器共有对象就成了事实的标准。所以,BOM 本身是没有标准的或者还没有哪个组织去标准它。 window对象 BOM 的核心对象是window,它表示浏览器的一个实例。window 对象处于JavaScript 结构的最顶层,对于每个打开的窗口,系统都会自动为其定义window 对象。 Window 对象表示浏览器中打开的窗口。如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个额外的 window 对象。 注释:没有应用于 window 对象的公开标准,不过所有浏览器都支持该对象。 阅读全文
posted @ 2015-07-23 21:32 jingwhale 阅读(1434) 评论(0) 推荐(0) 编辑