自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不忘初心,好好沉淀

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

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

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

初识Hibernate Search要让你的应用具备Hibernate Search赋予的全文搜索的能力,需要做以下三件事:给项目添加必要的依赖和配置信息给你的实体类添加必要的信息,从而让Lucene知道如何对它们进行索引(Indexing)在需要的地方使用符合Hibernate Search规范的查询来完成业务逻辑对于需要添加的依赖信息,会在以后进行介绍。我们首先来看看代

2014-10-31 10:03:03 6437

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

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

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

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

递归优化很多算法都依赖于递归,典型的比如分治法(Divide-and-Conquer)。但是普通的递归算法在处理规模较大的问题时,常常会出现StackOverflowError。处理这个问题,我们可以使用一种叫做尾调用(Tail-Call Optimization)的技术来对递归进行优化。同时,还可以通过暂存子问题的结果来避免对子问题的重复求解,这个优化方法叫做备忘录(Memoizatio

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

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

本系列作为Effective JavaScript的读书笔记。 ECMAScript标准并没有规定对JavaScript的Object类型中的属性的存储顺序。 但是在使用for..in循环对Object中的属性进行遍历的时候,确实是需要依赖于某种顺序的。正因为ECMAScript没有对这个顺序进行明确地规范,所以每个JavaScript执行引擎都能够根据自身的特点进行实现,那么在不

2014-10-28 16:27:34 3498

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

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

2014-10-27 10:14:10 16992

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

资源处理Java本身自带了垃圾回收(Garbage Collection)功能,但是只有垃圾回收的目标是内部资源(Internal Resource),典型的比如堆上分配的内存区域等。对于外部资源(External Resource),如数据库连接,文件句柄,套接字等资源,还是需要在程序中进行显式回收的。使用Lambda表达式可以实现一种叫做Execute Around的模式,用来

2014-10-26 11:33:03 4728

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

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

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

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

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

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

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

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

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

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

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

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

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

Lambda在集合中的使用列表的遍历提起对于集合的遍历,恐怕下面的这种方式已经是一种思维定式了吧:final ListString> friends = Arrays.asList("Brian", "Nate", "Neal", "Raju", "Sara", "Scott");for(int i = 0; i friends.size(); i++) {

2014-10-21 09:54:25 36989 12

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

数据库性能最佳实践当应用需要连接数据库时,那么应用的性能就可能收到数据库性能的影响。比如当数据库的I/O能力存在限制,或者因缺失了索引而导致执行的SQL语句需要对整张表进行遍历。对于这些问题,仅仅对应用代码进行优化可能是不够,还需要了解数据库的知识和特点。示例数据库该数据库表示了128只股票在1年内(261个工作日)的股价信息。其中有两张表:STOCKPRICE和S

2014-10-20 10:06:07 17684

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

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

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

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

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

2014-10-15 09:59:30 3852

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

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

2014-10-14 10:22:12 3611

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

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

2014-10-13 17:17:34 4122

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

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

2014-10-11 10:17:22 3481

原创 [Java Performance] JVM 线程调优

调整线程栈空间当非常缺少内存时,可以调整线程使用的内存。每个线程都有一个栈,用来记录该线程的调用栈信息。线程中的栈的默认空间是有OS和JVM的版本决定的:OS32-bit64-bitLinux320 KB1 MBMac OSN/A1 MBSolaris Sparc512 KB1 MBSo

2014-10-10 18:09:18 5033

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

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

2014-10-10 10:30:32 3352

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

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

2014-10-09 10:10:25 3678

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

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

2014-10-08 17:06:21 3350

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

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

2014-10-05 19:13:39 3559

空空如也

空空如也

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

TA关注的人

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