自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不忘初心,好好沉淀

后端工程师,前端技术爱好者

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

原创 Effective JavaScript Item 32 绝不要修改__proto__

本系列作为Effective JavaScript的读书笔记。 和Object.getPrototypeOf相比,__proto__的特殊之处还体现在它能够修改一个对象的原型继承链。因为它是一个属性,除了执行获取它的操作外,还能够对它进行设置。 但是,绝不要修改__proto__。原因如下: 首先,最显而易见的原因就是便携性。因为不是所有的JavaScript执行环境都支持

2014-09-30 10:08:54 3924

原创 Effective JavaScript Item 31 优先使用Object.getPrototypeOf,而不是__proto__

本系列作为Effective JavaScript的读书笔记。 在ES5中引入了Object.getPrototypeOf作为获取对象原型对象的标准API。但是在很多执行环境中,也提供了一个特殊的__proto__属性来达到同样的目的。 因为并不是所有的环境都提供了这个__proto__属性,且每个环境的实现方式各不相同,因此一些结果可能不一致:// 在某些环境中va

2014-09-30 10:08:02 4102

原创 Effective JavaScript Item 30 理解prototype, getPrototypeOf和__proto__的不同

本系列作为Effective JavaScript的读书笔记。 prototype,getPropertyOf和__proto__是三个用来访问prototype的方法。它们的命名方式很类似因此很容易带来困惑。 它们的使用方式如下: prototype:一般用来为一个类型建立它的原型继承对象。比如C.prototype = xxx,这样就会让使用new C()得到的

2014-09-28 11:13:10 6232 2

原创 [Java Performance] Java集合API

Java集合APIJava 7提供了至少58个功能和实现各异的集合类型,在不同的场景下选择合适的集合类型十分重要。因为,程序的性能和集合类型的选择有莫大的关联。关于选择哪个集合类型,第一个需要考虑的就是程序使用的算法和操作方式。实际上这就是从数据结构的出发点来看问题,和使用的语言无关。比如,LinkedList不适合用在搜索操作较多的场合;如果需要以O(1)的开销从集合中得

2014-09-27 10:37:59 4001

原创 Effective JavaScript Item 29 避免使用非规范的Stack Inspection属性

本系列作为Effective JavaScript的读书笔记。 由于历史原因,很多JavaScript执行环境中都提供了某些方式来查看函数调用栈。在一些环境中,arguments对象(关于该对象可以查看Item 22,23,24)上有两个额外的属性: arguments.callee -它引用了正在被调用的函数arguments.caller -它引用了调用当前函数

2014-09-26 12:38:52 3576

原创 [Java Performance] 字符串拼接注意事项

字符串拼接(String Concatenation)// 编译器优化前String answer = integerPart + "." + mantissa;// 编译器优化后String answer = new StringBuilder(integerPart).append(".").append(mantissa).toString();因为编译器会对字符串的

2014-09-26 12:32:53 4129

原创 [Java Performance] 缓冲I/O(Buffered I/O)

缓冲I/O(Buffered I/O)InputStream.read()以及OutputStream.write()操作的对象是单个字节。根据它们访问的资源的不同,使用这些方法可能会相当慢。比如在使用FileInputStream.read()时,速度会慢的令人发指。因为每次调用都会访问操作系统的内核去拿到1个字节的数据。在现代的操作系统中,内核往往会使用缓冲I/O实现,因此这个

2014-09-25 23:08:03 4256

原创 Effective JavaScript Item 28 不要依赖函数的toString方法

本系列作为Effective JavaScript的读书笔记。 在JavaScript中,函数对象上存在一个toString方法,它能够方便地将函数的源代码转换返回成一个字符串对象。(function(x) { return x + 1;}).toString(); // "function (x) {\n return x + 1;\n}"toString方法不

2014-09-25 09:56:33 3677

原创 [Java Performance] JIT编译器简介

使用JIT(Just-In-Time)编译器JIT编译器概览JIT编译器是JVM的核心。它对于程序性能的影响最大。CPU只能执行汇编代码或者二进制代码,所有程序都需要被翻译成它们,然后才能被CPU执行。C++以及Fortran这类编译型语言都会通过一个静态的编译器将程序编译成CPU相关的二进制代码。PHP以及Perl这列语言则是解释型语言,只需要安装正确的解释器,它们就能运行在

2014-09-24 22:07:28 10413 4

原创 Effective JavaScript Item 27 使用闭包而不是字符串来封装代码

本系列作为Effective JavaScript的读书笔记。 对于代码封装,在JavaScript中有两种方式可以办到。第一种就是使用function,第二种则是利用eval()函数,传入到该函数的字符串参数可以是一段代码。 当对使用哪种方式犹豫不决时,使用function。因为使用字符串的一个重要缺点是,传入的字符串并不是一个闭包,而function则可以代表一个闭包。关于闭包

2014-09-24 09:59:42 4098

原创 [Java Performance] 线程及同步的性能 - 线程池/ThreadPoolExecutors/ForkJoinPool

线程池和ThreadPoolExecutors虽然在程序中可以直接使用Thread类型来进行线程操作,但是更多的情况是使用线程池,尤其是在Java EE应用服务器中,一般会使用若干个线程池来处理来自客户端的请求。Java中对于线程池的支持,来自ThreadPoolExecutor。一些应用服务器也确实是使用的ThreadPoolExecutor来实现线程池。对于线程池的性能调优,最

2014-09-23 22:52:19 18772 3

原创 Effective JavaScript Item 26 使用bind来进行函数的柯里化(Curry)

本系列作为Effective JavaScript的读书笔记。 在上一个Item中介绍了bind的一种用法:用来绑定this对象。但是实际上,bind含有另一种用法,就是帮助函数进行柯里化。关于柯里化,这里有一份百科可以参考:http://zh.wikipedia.org/wiki/%E6%9F%AF%E9%87%8C%E5%8C%96 但是实际上,关于柯里化只需要记住一点就够

2014-09-23 10:51:16 4223

原创 Effective JavaScript Item 25 使用bind方法来得到一个固定了this指向的方法

本系列作为Effective JavaScript的读书笔记。 当需要将方法抽取出来作为回调函数使用的时候,常常会因为this的指向不明而发生错误,比如:var buffer = { entries: [], add: function(s) { this.entries.push(s); }, concat: function() { return this.

2014-09-22 10:04:36 3918

原创 [Java Performance] Java垃圾回收简介

本系列作为Java Performance:The Definitive Guide的读书笔记。概览在目前的JVM中,主要有4中垃圾回收器(Garbage Collector):串行回收器(Serial Collector),主要用于单核计算机吞吐量(并行)回收器(Throughput/Parallel Collector)并发回收器(Concurrent/CMS Co

2014-09-21 15:24:23 4391

原创 Effective JavaScript Item 24 使用一个变量来保存arguments的引用

本系列作为Effective JavaScript的读书笔记。 假设需要一个API用来遍历若干元素,像下面这样:var it = values(1, 4, 1, 4, 2, 1, 3, 5, 6);it.next(); // 1it.next(); // 4it.next(); // 1相应的实现可以是:function values() { var

2014-09-19 19:49:37 3785

原创 Effective JavaScript Item 23 永远不要修改arguments对象

本系列作为Effective JavaScript的读书笔记。 arguments对象只是一个类似数组的对象,但是它并没有数组对象提供的方法,比如shift,push等。因此调用诸如:arguments.shift(),arguments.push()是错误的。 在Item 20和Item 21中,知道了函数对象上存在call和apply方法,那么是不是可以利用它们来让argu

2014-09-19 09:40:07 3835

原创 Effective JavaScript Item 22 使用arguments来创建接受可变参数列表的函数

本系列作为Effective JavaScript的读书笔记。 在Item 21中,介绍了结合apply方法实现的可变参数列表函数average,它实际上只声明了一个数组作为参数,但是利用apply方法,实际上可以接受若干元素作为参数: function averageOfArray(a) { for (var i = 0, sum = 0, n = a.length; i <

2014-09-18 10:08:46 3896

原创 Effective JavaScript Item 21 使用apply方法调用函数以传入可变参数列表

本系列作为Effective JavaScript的读书笔记。 下面是一个拥有可变参数列表的方法的典型例子:average(1, 2, 3); // 2average(1); // 1average(3, 1, 4, 1, 5, 9, 2, 6, 5); // 4average(2, 7, 1, 8, 2, 8, 1, 8); // 4.625而以下则是一个只接

2014-09-17 13:27:11 4229

原创 Effective JavaScript Item 20 使用call方法来绑定this变量

本系列作为Effective JavaScript的读书笔记。通常而言,一个函数中this的指向和该函数的调用类型相关,比如当函数直接作为函数被调用时,this一般指向的是全局对象(StrictMode时指向undefined);当函数作为方法被调用时(即x.method()这种形式),this指向的是x;当函数作为构造方法被调用时,this指向的是一个新创建的对象。 但是

2014-09-16 09:54:22 4619

原创 Effective JavaScript Item 19 使用高阶函数 (High-Order Function)

本系列作为Effective JavaScript的读书笔记。 不要被高阶函数这个名字给唬住了。实际上,高阶函数只是代表了两类函数:接受其他函数作为参数的函数返回值为函数的函数 有了这个定义,你也许就发现你已经使用过它们了,典型的就是对于一些事件的处理时传入的回调函数。 另外的一个典型使用场景就是Array类型的sort函数,它可以接受一个function作为排

2014-09-15 09:54:16 4887

原创 Effective JavaScript Item 18 理解Function, Method, Constructor调用之间的区别

本系列作为Effective JavaScript的读书笔记。 Function绝对是JavaScript中的重中之重。在JavaScript中,Function承担了procedures, methods, constructors甚至是classes以及modules的功能。 在面向对象程序设计中,functions,methods以及class constructor

2014-09-11 14:18:10 4189

原创 Effective JavaScript Item 13 使用即时调用的函数表达式(IIFE)来创建局部域

本系列作为Effective JavaScript的读书笔记。 所谓的即时调用的函数表达式,这个翻译也许不太准确,它对应的英文原文是Immediately Invoked Function Expression (IIFE)。下文也使用IIFE来表达这一概念。 首先看一个程序:function wrapElements(a) { var result = [], i,

2014-09-10 19:26:14 3893

原创 Effective JavaScript Item 12 理解Variable Hoisting

本系列作为Effective JavaScript的读书笔记。 JavaScript中并没有Block Scoping,只有Function Scoping。因此如果在一个Block中定义了一个变量,那么这个变量相当于是被定义到了这个Block属于的Function中,比如:function isWinner(player, others) { var highest

2014-09-09 10:55:28 4212 1

原创 Effective JavaScript Item 11 掌握闭包

本系列作为Effective JavaScript的读书笔记。 掌握闭包,需要知道以下几个关键点:JavaScript允许在当前的function中访问该function外部的变量。function makeSandwich() { var magicIngredient = "peanut butter"; function make(filling)

2014-09-05 12:49:54 3824

原创 Effective JavaScript Item 10 避免使用with

本系列作为Effective JavaScript的读书笔记。 Item 9:避免使用with关键字 重点:设计with关键字本来是为了让代码变简洁,但是却起到了相反的效果,比如:function f(x, y) { with (Math) { return min(round(x), sqrt(y)); // ambiguous references

2014-09-04 17:06:20 3442

空空如也

空空如也

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

TA关注的人

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