自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不忘初心,好好沉淀

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

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

本系列作为Effective JavaScript的读书笔记。   和Object.getPrototypeOf相比,__proto__的特殊之处还体现在它能够修改一个对象的原型继承链。因为它是一个属性,除了执行获取它的操作外,还能够对它进行设置。   但是,绝不要修改__proto__。...

2014-09-30 10:08:54 3755 0

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

本系列作为Effective JavaScript的读书笔记。   在ES5中引入了Object.getPrototypeOf作为获取对象原型对象的标准API。但是在很多执行环境中,也提供了一个特殊的__proto__属性来达到同样的目的。   因为并不是所有的环境都提供了这个__prot...

2014-09-30 10:08:02 3947 0

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

本系列作为Effective JavaScript的读书笔记。   prototype,getPropertyOf和__proto__是三个用来访问prototype的方法。它们的命名方式很类似因此很容易带来困惑。   它们的使用方式如下:   prototype: 一般用来为一个类...

2014-09-28 11:13:10 5705 1

原创 [Java Performance] Java集合API

Java集合API Java 7提供了至少58个功能和实现各异的集合类型,在不同的场景下选择合适的集合类型十分重要。因为,程序的性能和集合类型的选择有莫大的关联。 关于选择哪个集合类型,第一个需要考虑的就是程序使用的算法和操作方式。实际上这就是从数据结构的出发点来看问题,和使用的语言无...

2014-09-27 10:37:59 3767 0

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

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

2014-09-26 12:38:52 3451 0

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

字符串拼接(String Concatenation) // 编译器优化前 String answer = integerPart + "." + mantissa; // 编译器优化后 String answer = new StringBuilder(integer...

2014-09-26 12:32:53 3908 0

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

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

2014-09-25 23:08:03 4009 0

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

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

2014-09-25 09:56:33 3578 0

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

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

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

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

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

2014-09-24 09:59:42 3933 0

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

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

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

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

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

2014-09-23 10:51:16 3997 0

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

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

2014-09-22 10:04:36 3746 0

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

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

2014-09-21 15:24:23 4083 0

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

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

2014-09-19 19:49:37 3672 0

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

本系列作为Effective JavaScript的读书笔记。   arguments对象只是一个类似数组的对象,但是它并没有数组对象提供的方法,比如shift,push等。因此调用诸如:arguments.shift(),arguments.push()是错误的。   在Item 20和...

2014-09-19 09:40:07 3658 0

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

本系列作为Effective JavaScript的读书笔记。   在Item 21中,介绍了结合apply方法实现的可变参数列表函数average,它实际上只声明了一个数组作为参数,但是利用apply方法,实际上可以接受若干元素作为参数:   function averageOfArra...

2014-09-18 10:08:46 3702 0

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

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

2014-09-17 13:27:11 4066 0

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

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

2014-09-16 09:54:22 4412 0

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

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

2014-09-15 09:54:16 4678 0

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

本系列作为Effective JavaScript的读书笔记。   Function绝对是JavaScript中的重中之重。在JavaScript中,Function承担了procedures, methods, constructors甚至是classes以及modules的功能。  ...

2014-09-11 14:18:10 3949 0

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

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

2014-09-10 19:26:14 3688 0

原创 Effective JavaScript Item 12 理解Variable Hoisting

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

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

原创 Effective JavaScript Item 11 掌握闭包

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

2014-09-05 12:49:54 3642 0

原创 Effective JavaScript Item 10 避免使用with

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

2014-09-04 17:06:20 3330 0

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