代码改变世界

随笔档案-2013年10月

Guava 集合框架

2013-10-29 23:33 by Rollen Holt, 5444 阅读, 收藏, 编辑
摘要: 在本系列中我们首先来学习一些Guava的集合框架,也就是这个package:com.google.common.collect 在这个包下面有一些通用的集合接口和一些相关的类。 集合类型: BiMap 它是java.util.Map接口的一个扩展,它的特性就是它的key和value都是唯一的并且是一一对应的。也就是说“可逆”。简单的描述就是根据key能拿到唯一的value,根据... 阅读全文

Guava 学习计划

2013-10-29 22:50 by Rollen Holt, 1276 阅读, 收藏, 编辑
摘要: Guava这个框架,我想参加过工作了Java程序员都应该不会陌生,这个框架甚至比Apache Commons Lang3框架更受Java程序员的喜欢。但是遗憾的是怎么优秀和成熟的框架,在国内我居然没有找到中文的文档。有时候也仅仅是对一些类的使用进行介绍,也就说并没有一个完整的中文文档。而且说实话,我对Guava其实并不是太熟悉,但是最近工作中一直在使用它,所以我觉得与其等别人翻译个完整的(不知道得等到猴年马月),所以还不如自己动手,丰衣足食。所以我会在每天下班之后抽时间翻译一篇Guava文档。这对我来说是一个巨大的挑战,但是也充满乐趣。同时在翻译的过程中我也会加入一些我经常遇到的问题以及如何使 阅读全文

如何成为强大的程序员?

2013-10-28 23:09 by Rollen Holt, 860 阅读, 收藏, 编辑
摘要: Aaron Stannard是新创公司MarkedUp的CEO,他最近花费大量时间雇佣、评估很多不同的程序员,并和他们一起协作。在这个过程中他发现并总结了十种程序员无法意识到自己潜力的原因,意在让更多程序员发掘出自己的潜力,从而成为强大的程序员。Aaron提到,他的公司中所使用的技术非常复杂,某些大型企业都很难掌握,所以对于想要加入团队的程序员来说,入门门槛非常高。因此,尽管他们非常仔细地雇佣新人,但还是很难找到足够天才的程序员。于是,他总结出十种阻碍程序员职业生涯发展的行为,并据此来帮助想要提升自身的平凡的程序员们。1. 太害怕学不会新的工具、语言和框架一般的程序员会墨守他们最喜欢的工具,而 阅读全文

如何实现“秒杀”系统

2013-10-28 23:04 by Rollen Holt, 18601 阅读, 收藏, 编辑
摘要: 昨晚和一公司工作几年的同事闲扯了一些程序人生和技术问题。感觉自己目前的经验还是太少太少了,看的书也不是太多,惭愧啊。就比如同事问了我一个如何做一个我们很常见的“秒杀”系统,我当时一拍脑门直接回答说加个排它锁不就行了么,但是晚上回到家里google了一番之后,深深的感到脸红啊。一个看似简单的“秒杀”系统,里面涉及到的东西也着实不少,而不仅仅是一个简单的加锁就行了的。我大致整理了一下我想到的和google到的需要注意的地方,当然有很多的不足,同时也希望大神们能够指点一点:1)对现有网站业务的冲击因为秒杀活动只是网站营销的一个附加活动,这个活动具有时间短,并发访问量大的特点,如果和网站原有应用部署在 阅读全文

关于博客园代码样式的调整

2013-10-22 01:07 by Rollen Holt, 586 阅读, 收藏, 编辑
摘要: 我一直在自己的博客中使用的是自定义的syntaxHighlighter代码着色。参考:http://alexgorbatchev.com/SyntaxHighlighter/manual/themes/结果最近发现我的代码着色变成了:发现没有,代码间距变的很大,样式很丑。通过查看源代码发现:博客园的公共css增加了这一行:这是罪魁祸首。解决办法就是在设置里面:增加这一行就搞定了。我的现在的样式为:我比较满意。 阅读全文

Consuming a RESTful Web Service

2013-10-22 00:36 by Rollen Holt, 1240 阅读, 收藏, 编辑
摘要: 本篇文章将介绍使用Spring来建立RESTful的Web Service。 我们通过一个例子来说明这篇文章:这个例子将会使用Spring的RestTemplate来从Facebook的提供的API中获取一些信息。然后对这些信息进行一些处理。Facebook的API为:http://graph.facebook.com/gopivotal 其实在这个例子中,这个API只是为了掩饰用,并没有特别的含义。这个例子也只是为了说明从一个在线的接口中获取一些数据并进行处理。 当我们通过浏览器或者curl请求这个路径的时候会返回数据格式为: { "id": "16111270 阅读全文

memcached的分布式

2013-10-21 21:41 by Rollen Holt, 2733 阅读, 收藏, 编辑
摘要: 今天写点周末在火车上看的memcached的东西:一:memcached的分布式 虽然memcached被称为“分布式”缓存服务器,但是服务器端并没有“分布式”的功能。而是通过客户端来实现的。 Memcached分布式原理: 假设有5台memcached服务器:node1,node2… nod... 阅读全文

linux安装Mac的默认Monaco字体

2013-10-18 11:08 by Rollen Holt, 7011 阅读, 收藏, 编辑
摘要: Monaco字体是我最喜欢的编程字体,如果你想在linux上面安装,只需要在terminal中执行:curl -kL https://raw.github.com/cstrap/monaco-font/master/install-font-ubuntu.sh | bash一切就是那么完美 阅读全文

Mybatis的ResultMap的使用

2013-10-12 20:32 by Rollen Holt, 226563 阅读, 收藏, 编辑
摘要: 本篇文章通过一个实际工作中遇到的例子开始吧: 工程使用Spring+Mybatis+Mysql开发。具体的业务逻辑很重,对象之间一层一层的嵌套。和数据库表对应的是大量的model类,而和前端交互的是Vo类。现在需要做一个需求,有两种方式来实现: 使用现有的Service接口,或者自己在编写一些用到的接口,手动使用Java代码来分别调用Service接口来查出各个model,然后在业务层将model转换为vo,最后返回给前端json串。 为需求相关的页面定义自己的vo,在vo中只定义前端用到的字段。而不是像第一种方式一样vo中一层一层的嵌套model。然后使用sql语句进行表关联,查... 阅读全文

mybatis-spring从1.1升级到1.2所带来的dao层级的编写问题

2013-10-09 10:33 by Rollen Holt, 6905 阅读, 收藏, 编辑
摘要: 我们公司的项目使用spring+mybatis组合。所以就必须得使用mybatis-spring了。所以此处就昨日mybatis-spring从1.1升级到1.2所带来的dao层级的编写问题,做了一个总结。我们可以先来看看mybatis-spring框架的1.1.1版本中关于SqlSessionDa... 阅读全文

win7下面完全删除mysql

2013-10-08 18:17 by Rollen Holt, 22922 阅读, 收藏, 编辑
摘要: 今天因为一些原因重装完成mysql的时候,在启动mysql服务的时候,一直卡死在哪快。最后整的都无语了。在google里搜索:mysql安装失败 ,会找到一堆类似的问题汇总,其实上面说的方法都是正确的,不过基本上都是互相copy过来的,,但是他们都少说了一点,这是在windows xp 的环境下操作的,不是在windows 7下操作的;其实mysql在windows 7 下还暗藏了一招,在C盘的ProgramData文件夹下还有一个MYSQL文件夹,通常这个ProgramData是隐藏文件,需要通过设置显示出来(这个不再熬述),在里面会发现MYSQL的文件夹,通常当按照网上的方法删除干净之后, 阅读全文

groovy-实现接口

2013-10-02 01:36 by Rollen Holt, 2652 阅读, 收藏, 编辑
摘要: Groovy提供了一些非常方便的方法来实现接口使用闭包实现接口只有一个方法的接口可以使用闭包来实现,例如1// a readable puts chars into a CharBuffer and returns the count of chars added2defreadable = { it.put("12 34".reverse());5}asReadable34// the Scanner constructor can take a Readable5defs =newScanner(readable)6asserts.nextInt() ==43当然也可以 阅读全文

groovy-正则表达式

2013-10-02 01:35 by Rollen Holt, 17116 阅读, 收藏, 编辑
摘要: Groovy使用~”pattern”来支持正则表达式,它将使用给定的模式字符串创建一个编译好的Java Pattern 对象。Groovy也支持=~(创建一个Matcher)和==~ (返回boolean,是否给定的字符串匹配这个pattern)操作符。对于groups的匹配,matcher[index] 是一个匹配到的group字符串的List或者string。1importjava.util.regex.Matcher2importjava.util.regex.Pattern3// ~ creates a Pattern from String4defpattern = ~/foo/5a 阅读全文

groovy-输入输出

2013-10-02 01:33 by Rollen Holt, 6109 阅读, 收藏, 编辑
摘要: Groovy为I/O提供了一系列的helper methods,所有的这些方法都适用于标准的Java Reader/Writer ,InputStream/OutputStream 和File 以及URL classes.闭包的使用可以确保资源被正确的关闭,比如遍历文件的每一行可以使用下面的代码:1newFile("foo.txt").eachLine{ line ->println(line) }如果在某些情况下,println()方法抛出了异常,那么eachLine()方法将确保资源被正确的关闭,同样的,如果在读取的时候发生了异常,那么资源也将会被正确的关闭。如果 阅读全文

groovy-真值

2013-10-02 01:32 by Rollen Holt, 567 阅读, 收藏, 编辑
摘要: Boolean expressionsGroovy支持标准的条件运算符的布尔表达式:1defa = true2defb = true3defc = false4asserta5asserta && b6asserta || c7assert!c此外,Groovy中有强制转换非布尔对象为布尔值的特殊规则。集合空集合会被强制转换为false:1defnumbers = [1,2,3]2assertnumbers//true, as numbers in not empty3numbers = []4assert!numbers//true, as numbers is now an 阅读全文

groovy-集合

2013-10-02 01:32 by Rollen Holt, 751 阅读, 收藏, 编辑
摘要: Lists你能使用下面的方法创建一个lists,注意[]是一个空list。1deflist = [5,6,7,8]2assertlist.get(2) ==73assertlist[2] ==74assertlistinstanceofjava.util.List56defemptyList = []7assertemptyList.size() ==08emptyList.add(5)9assertemptyList.size() ==1每个列表表达式都是创建了java.util.List的一个实例。RangesRanges容许你创建一个值序列,这个只序列可以被用作Lists,因为Range 阅读全文

groovy-保留字

2013-10-02 01:30 by Rollen Holt, 719 阅读, 收藏, 编辑
摘要: groovy的保留字:abstractasassertbooleanbreakbytecasecatchcharclassconstcontinuedefdefaultdodoubleelseenumextendsfalsefinalfinallyfloatforgotoifimplementsimportininstanceofintinterfacelongnativenewnullpackageprivateprotectedpublicreturnshortstaticstrictfpsuperswitchsynchronizedthisthreadsafethrowthrowstra 阅读全文

groovy-闭包

2013-10-02 01:29 by Rollen Holt, 4176 阅读, 收藏, 编辑
摘要: 什么是闭包一个groovy闭包就像一个代码块或者方法指针,他是定义然后执行的一段代码,但是他有一些特性:隐含变量,支持自由变量,支持currying 。我们先来看看一些例子:1defclos = {println"hello!"}23println"Executing the Closure:"4clos()//prints "hello!"在上面的例子中”hello!”是因为调用clos()函数才打印出来的,而不是在定义的时候打印出来的。参数闭包的参数在->之前列出,比如:1defprintSum = { a, b -> 阅读全文

groovy-脚本和类

2013-10-02 01:23 by Rollen Holt, 6707 阅读, 收藏, 编辑
摘要: 在groovy中定义类和java中是一样的。类的方法可以是static,也可以是非static的。groovy中的方法可以是public, protected, private,同时也支持java中的修饰符,比如synchronized。在groovy中导入包或者导入类,语法和java是一样的。只不过在groovy中默认已经导入了下面的package:1java.lang2java.io3java.math4java.net5java.util6groovy.lang7groovy.util在groovy和java中不同的一点就是,groovy默认是public的。每一个groovy类,在JV 阅读全文

groovy-语句

2013-10-02 01:22 by Rollen Holt, 6804 阅读, 收藏, 编辑
摘要: groovy语句类似于java语句,但是在groovy中的分号”;”是可选的。比如:1defx = [1,2,3]2printlnx3defy =5;defx = y +74printlnx5assertx ==12而且对于一些方法参数等复杂的事情,我们可以横跨多行:1defx = [1,2,3,24,5,6]3println(4x5)6if(x !=null&&7x.size() >5) {8println("Works!")9}10else{11assertfalse:"should never happen ${x}"12}g 阅读全文

groovy-运算符

2013-10-02 01:21 by Rollen Holt, 2458 阅读, 收藏, 编辑
摘要: 算术和条件运算符Groovy支”!”操作符,例如:1defexpression = false2assert!expression基于集合的运算符:Spread Operator (*.)运算法:spread操作符用来调用集合中的每一个对象的行为,就相当于调用collect方法一样:1parent*.action//equivalent to:2parent.collect{ child -> child?.action }这个行为可能是一个方法调用或者属性访问,并返回一个列表。下面是一个例子:1assert['cat','elephant']*.size 阅读全文

groovy-位运算

2013-10-02 01:20 by Rollen Holt, 805 阅读, 收藏, 编辑
摘要: 从Groovy 1.0 beta 10开始,Groovy支持位运算:>, >>>, |, &, ^, and ~.下表列出了位运算的操作符和其含义:Operator SymbolMeaning>Bitwise Right Shift Operator>>>Bitwise Unsigned Right Shift Operator|Bitwise Or Operator&Bitwise And Operator^Bitwise Xor Operator~Bitwise Negation Operator>=Bitwise Ri 阅读全文

groovy–流程控制

2013-10-02 01:19 by Rollen Holt, 2424 阅读, 收藏, 编辑
摘要: 在本篇文章中,我们将介绍逻辑分支,循环,以及如何从if-else以及try-catch代码块中返回值。if – elseGroovy 支持Java传统的if-else语法:def x = false def y = falseif ( !x ) { x = true}assert x == trueif ( x ) { x = false} else { y = true}assert x == y Groovy 也支持Java传统的if-else if -else 语法:1if( ... ) {2...3}elseif(...) {4...5}else{6...7}三元操作符Groovy . 阅读全文

groovy–运算符重载

2013-10-02 01:18 by Rollen Holt, 2251 阅读, 收藏, 编辑
摘要: Groovy支持运算符重载,各种运算符被映射到普通的java对象的方法调用,这就使得开发者可以利用运算符重载的优势来编写自己的Java或者groovy对象。下面的表格描述了groovy中的操作符所映射到的方法:OperatorMethoda + ba.plus(b)a – ba.minus(b)a * ba.multiply(b)a ** ba.power(b)a / ba.div(b)a % ba.mod(b)a | ba.or(b)a & ba.and(b)a ^ ba.xor(b)a++ or ++aa.next()a– or –aa.previous()a[b]a.getAt( 阅读全文

重新迁回博客园

2013-10-02 00:56 by Rollen Holt, 507 阅读, 收藏, 编辑
摘要: 之前一直在博客园写博客,后来“闲的蛋疼”就自己在Godaddy上面买了个域名,然后在华域迅通上面买了个空间,就搭建了一个wordpress博客,在上面使用了大致多半年吧。结果使用下来,发现自己维护这些还不如在博客园上面呢,而且也不需要升级什么wordpress,跟新插件,删除垃圾评论等等的。 好吧,说了那么多,上面的都是屁话,最主要原因是最近经济紧张,不想花钱买域名和空间,另外一方面也确实不想自己维护wordpress了,就迁移回来了。 不过最近会抽时间将以前的一些文件手动转过来。我试了一下博客园的博客搬家工具,但是会丢失原始文章的格式,而导致代码和文字挤在一块,没法看,所以我也就只... 阅读全文