自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不忘初心,好好沉淀

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

原创 [Hibernate Search] (1) 初识Hibernate Search

初识Hibernate Search 要让你的应用具备Hibernate Search赋予的全文搜索的能力,需要做以下三件事: 给项目添加必要的依赖和配置信息给你的实体类添加必要的信息,从而让Lucene知道如何对它们进行索引(Indexing)在需要的地方使用符合Hibernate Sear...

2014-10-31 10:03:03 6184 0

原创 [Java 8] (9) Lambda表达式对递归的优化(下) - 使用备忘录模式(Memoization Pattern)

使用备忘录模式(Memoization Pattern)提高性能 这个模式说白了,就是将需要进行大量计算的结果缓存起来,然后在下次需要的时候直接取得就好了。因此,底层只需要使用一个Map就够了。 但是需要注意的是,只有一组参数对应得到的是同一个值时,该模式才有用武之地。 在很多算法中,典型的...

2014-10-30 09:58:15 7543 2

原创 [Java 8] (8) Lambda表达式对递归的优化(上) - 使用尾递归

递归优化 很多算法都依赖于递归,典型的比如分治法(Divide-and-Conquer)。但是普通的递归算法在处理规模较大的问题时,常常会出现StackOverflowError。处理这个问题,我们可以使用一种叫做尾调用(Tail-Call Optimization)的技术来对递归进行优化。同时...

2014-10-29 09:56:32 14391 1

原创 Effective JavaScript Item 46 优先使用数组而不是Object类型来表示有顺序的集合

本系列作为Effective JavaScript的读书笔记。   ECMAScript标准并没有规定对JavaScript的Object类型中的属性的存储顺序。   但是在使用for..in循环对Object中的属性进行遍历的时候,确实是需要依赖于某种顺序的。正因为ECMAScript没...

2014-10-28 16:27:34 3413 0

原创 [Java 8] (7) 利用Stream类型的"懒"操作

利用懒操作 代码中的很多操作都是Eager的,比如在发生方法调用的时候,参数会立即被求值。总体而言,使用Eager方式让编码本身更加简单,然而使用Lazy的方式通常而言,即意味着更好的效率。 本篇文章就是为了展示Java 8中新特性是如何让我们能够更方便的写出Lazy方式代码。 延迟初始化 ...

2014-10-27 10:14:10 16208 0

原创 [Java 8] (6) Lambda与资源管理

资源处理 Java本身自带了垃圾回收(Garbage Collection)功能,但是只有垃圾回收的目标是内部资源(Internal Resource),典型的比如堆上分配的内存区域等。对于外部资源(External Resource),如数据库连接,文件句柄,套接字等资源,还是需要在程序中进行...

2014-10-26 11:33:03 4511 0

原创 [Java 8] (5) 使用Lambda表达式进行设计

使用Lambda表达式进行设计 在前面的几篇文章中,我们已经见识到了Lambda表达式是如何让代码变的更加紧凑和简洁的。 这一篇文章主要会介绍Lambda表达式如何改变程序的设计,如何让程序变的更加轻量级和简洁。如何让接口的使用变得更加流畅和直观。 使用Lambda表达式来实现策略模式 假...

2014-10-25 06:37:22 6723 3

原创 [Java 8] (4) 列举目录下的所有文件和监视文件变化

列举目录中的所有文件 首先给出代码: Files.list(Paths.get(".")).forEach(System.out::println); Files.list方法得到的是一个Stream类型的对象,它代表了目标路径下所有的文件。如果只想获取目标路径下的所...

2014-10-24 10:18:54 13545 1

原创 [Java 8] (3) 字符串遍历和Comparator接口

遍历一个字符串 在Java 8中,CharSequence接口新添加了一个方法叫做chars(),方法的签名是这个样子的: public default IntStream chars() default关键字修饰的接口方法是Java 8中新添加的特性,目的是向接口中添加已经实现的方法。...

2014-10-23 09:16:23 12304 2

原创 [Java Performance] 数据库性能最佳实践 - JPA缓存

JPA缓存(JPA Caching) JPA有两种类型的缓存: EntityManager自身就是一种缓存。事务中从数据库获取的和写入到数据库的数据会被缓存(什么样的数据会被缓存,在后面有介绍)。在一个程序中也许会有很多个不同的EntityManager实例,每一个实例运行着不同的...

2014-10-22 10:13:21 11338 1

原创 [Java 8] (2) Lambda在集合中的使用

Lambda在集合中的使用 列表的遍历 提起对于集合的遍历,恐怕下面的这种方式已经是一种思维定式了吧: final ListString> friends = Arrays.asList("Brian", "Nate", "Neal&q...

2014-10-21 09:54:25 35514 11

原创 [Java Performance] 数据库性能最佳实践 - JPA和读写优化

数据库性能最佳实践 当应用需要连接数据库时,那么应用的性能就可能收到数据库性能的影响。比如当数据库的I/O能力存在限制,或者因缺失了索引而导致执行的SQL语句需要对整张表进行遍历。对于这些问题,仅仅对应用代码进行优化可能是不够,还需要了解数据库的知识和特点。 示例数据库 该数据库...

2014-10-20 10:06:07 17121 0

原创 [Java 8] (1) 函数式编程简介

思维方式的转变 以从一个城市集合中寻找是否存在Chicago为例: 习惯的方式 boolean found = false; for(String city : cities) { if(city.equals("Chicago")) { foun...

2014-10-17 13:49:01 18434 1

原创 Effective JavaScript Item 40 避免继承标准类型

本系列作为Effective JavaScript的读书笔记。   ECMAScript标准库不大,但是提供了一些重要的类型如Array,Function和Date。在一些场合下,你也许会考虑继承其中的某个类型来实现特定的功能,但是这种做法并不被鼓励。   比如为了操作一个目录,可以让目录...

2014-10-15 09:59:30 3717 0

原创 Effective JavaScript Item 39 绝不要重用父类型中的属性名

本系列作为Effective JavaScript的读书笔记。   如果需要向Item 38中的Actor对象添加一个ID信息: function Actor(scene, x, y) { this.scene = scene; this.x = x; this.y = y; ...

2014-10-14 10:22:12 3527 0

原创 Effective JavaScript Item 38 在子类构造函数中调用父类构造函数

本系列作为Effective JavaScript的读书笔记。   在一个游戏或者图形模拟的应用中,都会有场景(Scene)这一概念。在一个场景中会包含一个对象集合,这些对象被称为角色(Actor)。而每个角色根据其类型会有一个图像用来表示,同时场景也需要保存一个底层图形展示对象的引用,被称为...

2014-10-13 17:17:34 3989 0

原创 Effective JavaScript Item 37 认识this的隐式指向

本系列作为Effective JavaScript的读书笔记。   CSV数据通常都会被某种分隔符进行分隔,所以在实现CSV Reader时,需要支持不同的分隔符。那么,很自然的一种实现就是将分隔符作为构造函数的参数。 function CSVReader(separators) {...

2014-10-11 10:17:22 3391 0

原创 [Java Performance] JVM 线程调优

调整线程栈空间 当非常缺少内存时,可以调整线程使用的内存。每个线程都有一个栈,用来记录该线程的调用栈信息。线程中的栈的默认空间是有OS和JVM的版本决定的: OS 32-bit 64-bit Linux 320 KB 1 MB Mac OS ...

2014-10-10 18:09:18 4891 0

原创 Effective JavaScript Item 36 实例状态只保存在实例对象上

本系列作为EffectiveJavaScript的读书笔记。   一个类型的prototype和该类型的实例之间是”一对多“的关系。那么,需要确保实例相关的数据不会被错误地保存在prototype之上。比如,对于一个实现了树结构的类型而言,将它的子节点保存在该类型的prototype上就是不正...

2014-10-10 10:30:32 3284 0

原创 Effective JavaScript Item 35 使用闭包来保存私有数据

本系列作为EffectiveJavaScript的读书笔记。   JavaScript的对象系统从其语法上而言并不鼓励使用信息隐藏(Information Hiding)。因为当使用诸如this.name,this.passwordHash的时候,这些属性默认的访问级别就是public的,在任...

2014-10-09 10:10:25 3598 0

原创 Effective JavaScript Item 34 在prototype上保存方法

本系列作为EffectiveJavaScript的读书笔记。   不使用prototype进行JavaScript的编码是完全可行的,例如: function User(name, passwordHash) { this.name = name; this.passwordHa...

2014-10-08 17:06:21 3302 0

原创 Effective JavaScript Item 33 让构造函数不再依赖new关键字

本系列作为EffectiveJavaScript的读书笔记。   在将function当做构造函数使用时,需要确保该函数是通过new关键字进行调用的。 function User(name, passwordHash) { this.name = name; this.passw...

2014-10-05 19:13:39 3442 0

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