自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不忘初心,好好沉淀

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

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

原创 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 4002

原创 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 3678

原创 [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 4224

原创 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

原创 Effective JavaScript Variable Scope Item 8-9 Globals and Locals

本系列作为Effective JavaScript的读书笔记。 Item 8:少用全局对象 重点:全局对象能够带来便利,但是有经验的程序员都会视图避免它。因为它会带来潜在的命名冲突的风险全局变量是维系不同模块之间的纽带,模块之间只能通过全局变量来访问对方提供的功能能使用局部变量的时候,绝不要使用全局变量在browser中,this关键字会指向全局的window对

2014-08-22 12:47:54 4991

原创 Effective JavaScript String Encoding Item 7

本系列作为Effective JavaScript的读书笔记。 提起Unicode,也许许多程序员都会觉得这玩意很麻烦,可以本质上,Unicode并不复杂。世界上每种语言的每一个文字都有一个整形数值用来表示它们。范围是0到1114111,这个值在Unicode术语中被称为Code Point。在字符到整形数值的映射上,Unicode和其它编码方式诸如ASCII并没有区别。 但是

2014-08-21 12:04:00 3963

翻译 理解Angular中的$apply()以及$digest()

$apply()和$digest()在AngularJS中是两个核心概念,但是有时候它们又让人困惑。而为了了解AngularJS的工作方式,首先需要了解$apply()和$digest()是如何工作的。这篇文章旨在解释$apply()和$digest()是什么,以及在日常的编码中如何应用它们。探索$apply()和$digest()AngularJS提供了一个非常酷的特性叫做双向数据

2014-08-20 13:49:13 107284 22

原创 Effective JavaScript Basics Item 1-6

Item 1:了解你正在使用的JavaScript 重点:如果使用了strict mode,那么需要将你的代码在ES5环境中进行测试use strict只在script或者function的最开始处才能被识别,所以在进行script拼接的时候需要注意永远不要将non strict和strict的scripts进行拼接如果确实需要将non strict和strict的

2014-08-19 19:56:41 3861

原创 [Java 8 Lambda] java.util.stream 简介

包结构如下所示:这个包的结构很简单,类型也不多。 BaseStream接口所有Stream接口类型的父接口,它继承自AutoClosable接口,定义了一些所有Stream都具备的行为。 因为继承自AutoClosable接口,所以所有的Stream类型都可以用在Java 7中引入的try-with-resource机制中,以达到自动关闭资源

2014-05-15 23:49:18 9503 1

原创 求解强连通分量算法之---Kosaraju算法

本文提纲:问题描述Kosaraju 算法问题描述:什么是强连通分量(StronglyConnected Component)(或者,被称为强连通子图,Strongly Connected Subgraph)?首先需要明白的是,强连通分量只可能存在于有向图中,无向图中是不存在强连通分量的,当然,无向图中也有对应物,被称为连通分量(Connect

2013-01-29 21:50:57 28951 8

原创 [Maven Essentials] 生命周期和插件

概述maven命令行的输入往往就对应了生命周期,如mvn package就表示执行默认生命周期阶段package。Maven的生命周期是抽象的,其实际行为都由插件来完成,如package阶段的任务可能就会由maven-jar-plugin来完成。 生命周期和插件两者协同工作,密不可分。 生命周期Maven生命周期就是为了对所有的构建过程进行抽象和统一。 包括了:

2013-01-22 11:30:50 5005

原创 [Maven Essentials] 坐标和依赖

坐标要素:groupId当前maven项目隶属的实际项目。Maven项目和实际项目不一定是一对一的关系。 artifactId定义实际项目中的一个maven项目(模块),推荐的做法是使用实际项目名称作为artifactId的前缀。 version定义maven项目当前所处的版本。 packaging定义maven项目的打包方式。默认为jar。

2013-01-22 11:22:18 4245

原创 [Effective Java Distilled] Item 4 通过私有构造方法来加强化不可实例化的性质

关于Effective Java Distilled:《Effective Java》这本书我断断续续的读了近两遍,里面的内容挺有深度,对提高工程代码质量也非常有帮助。我打算慢慢的整理出来一个系列,之所以命名为Effective Java Distilled,也是想将本书的精华尽可能的整理出来,方便复习查阅使用,毕竟自己的记忆力也很有限,很多东西经常忘记,一言以蔽之,就是对这本书的一些读书

2013-01-19 23:32:31 4668

原创 [Effective Java Distilled] Item 3 通过使用私有构造方法或者枚举类型来强化单例属性

关于Effective Java Distilled:《Effective Java》这本书我断断续续的读了近两遍,里面的内容挺有深度,对提高工程代码质量也非常有帮助。我打算慢慢的整理出来一个系列,之所以命名为Effective Java Distilled,也是想将本书的精华尽可能的整理出来,方便复习查阅使用,毕竟自己的记忆力也很有限,很多东西经常忘记,一言以蔽之,就是对这本书的一些读书

2013-01-19 11:40:15 5329

原创 [Effective Java Distilled] Item 2 当构造方法中有多个参数时,考虑建造者模式

关于Effective Java Distilled:《Effective Java》这本书我断断续续的读了近两遍,里面的内容挺有深度,对提高工程代码质量也非常有帮助。我打算慢慢的整理出来一个系列,之所以命名为Effective Java Distilled,也是想将本书的精华尽可能的整理出来,方便复习查阅使用,毕竟自己的记忆力也很有限,很多东西经常忘记,一言以蔽之,就是对这本书的一些读书

2013-01-18 14:21:53 5311 1

原创 [Effective Java Distilled] Item 1 考虑使用静态工厂方法来替换构造方法

关于Effective Java Distilled:《Effective Java》这本书我断断续续的读了近两遍,里面的内容挺有深度,对提高工程代码质量也非常有帮助。我打算慢慢的整理出来一个系列,之所以命名为Effective Java Distilled,也是想将本书的精华尽可能的整理出来,方便复习查阅使用,毕竟自己的记忆力也很有限,很多东西经常忘记,一言以蔽之,就是对这本书的一些读书

2013-01-17 15:26:27 4926

原创 由“栈的逆序”谈谈递归算法

最近看到一道题目:要求将一个栈逆序,使用递归。 我们先看看最常规的解法应该是怎样的,显然对于“逆序”这种问题描述,栈这种数据结构就会蹦入我们的脑海。 实现代码如下:public static LinkedStack reverseStackDirectly(LinkedStack stack) { if(null != stack && !stack.isEmpty(

2012-09-22 20:23:51 8214

原创 并查集(Union-Find) 应用举例 --- 基础篇

本文是作为上一篇文章 《并查集算法原理和改进》 的后续,焦点主要集中在一些并查集的应用上。材料主要是取自POJ,HDOJ上的一些算法练习题。首先还是回顾和总结一下关于并查集的几个关键点:以树作为节点的组织结构,结构的形态很是否采取优化策略有很大关系,未进行优化的树结构可能会是“畸形”树(严重不平衡,头重脚轻,退化成链表等),按尺寸(正规说法叫做秩,后文全部用秩来表示)进行平

2012-07-22 23:54:14 38479 26

原创 拓扑排序的原理及其实现

本文将从以下几个方面介绍拓扑排序:拓扑排序的定义和前置条件和离散数学中偏序/全序概念的联系典型实现算法Kahn算法基于DFS的算法解的唯一性问题实际例子取材自以下材料:http://en.wikipedia.org/wiki/Topological_sortinghttp://en.wikipedia.org/wiki/Hamiltonian_pat

2012-07-04 13:27:31 210597 47

翻译 TestNG 并发运行相关的核心概念 - 补充

翻译自:http://beust.com/weblog/2009/12/13/more-on-multithreaded-topological-sorting-2/ 限于翻译水平有限,有兴趣的同学可以直接看原文。翻译上如果有什么不妥之处,还麻烦指正,感谢!---------------------------------------------------正文的分割线

2012-06-15 23:07:17 5275

翻译 TestNG 并发运行相关的核心概念

翻译自:http://beust.com/weblog/2009/11/28/hard-core-multicore-with-testng/限于翻译水平有限,有兴趣的同学可以直接看原文。翻译上如果有什么不妥之处,还麻烦指正,感谢!---------------------------------------------------正文的分割线-------------------

2012-06-14 23:29:54 8201

空空如也

空空如也

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

TA关注的人

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