自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

转载 通配符与正则表达式

网友看法: (总结精辟!) 通配符是系统level的 而正则表达式需要相关工具的支持: egrep, awk, vi, perl。 在文本过滤工具里,都是用正则表达式,比如像awk,sed等,是针对文件的内容的。 通配符多用在文件名上,比如查找find,ls,cp,等等。 通配符...

2013-09-17 11:39:00 168

转载 Scala中隐式转换(implicit conversion)的优先顺序

在学习Scala的时候,隐式转换(implicit conversion)这个特性让我实在是闹不住啊。于是乎一边试用一边感慨:真的是太强大,太方便了。 不过,越是强大且方便的东西,越容易用出毛病来。在我不求甚解的情况下,毛病就来了,我把它称为隐式转换优先顺序问题: ...

2013-08-06 18:29:00 351

转载 Clojure惰性序列的头保持问题

《Clojure编程》一书中有一个例子: (let[[t d](split-with #(< % 12) (range 1e8))] [(countd) (countt)]);= OutOfMemoryError Java heap space clojure.lang...

2013-08-05 11:34:00 198

转载 clojure 新手指南(16):基本迭代&递归

迭代和递归是两种不同的概念,但是它们彼此之间又有点相似。迭代是遍历一组元素,并在遍历的过程中对每一个元素做相应的操作,递归则是执行一个自己调用自己的操作。 从递归和迭代的概念上来看,这完全是两种完全不同的东西,那么它们的相似性又体现在什么地方呢?首先递归也可以作为一种遍历集合元素的方法...

2013-08-04 11:08:00 262

转载 深入理解ThreadLocal

学习一个东西首先要知道为什么要引入它,就是我们能用它来干什么。所以我们先来看看ThreadLocal对我们到底有什么用,然后再来看看它的实现原理。 ThreadLocal如果单纯从名字上来看像是“本地线程"这么个意思,只能说这个名字起的确实不太好,很容易让人产生误解,ThreadLoc...

2013-08-02 10:38:00 110

转载 clojure 新手指南(15):可变性

我们已经知道如何把数据绑定到一个变量上,这给我们提供了一种可共享的数据的持久化存储方式(数据被绑定到一个变量后,我们是无法对数据本身进行修改的,重新绑定又是另一回事了,和修改数据本身无关) ;;将列表绑定到lat上user=> (def lat (list 1 2 3))#...

2013-07-31 23:36:00 163

转载 clojure 新手指南(14):Hash-Maps ,Array-Maps & Sorted...

hash-map 创建 在clojure中,哈希表是最通用的一种Map,和java中的HashMap一样,它们在处理大量数据方面效率非常高,但是不保证顺序。我们可以使用函数hash-map来创建哈希表: =>(hash-map :truck "Toyota" :ca...

2013-07-18 11:24:00 393

转载 clojure 新手指南(13):序列&向量

序列 我们知道clojure是Lisp的一种方言,那么这也意味着对这门语言必然植根于“列表解析”。但是在Clojure中,我们优先使用"序列"来创造列表和管理列表中的元素。 列表 之前我们说过,Lisp系列语言整个都建立在列表之上。我们使用"list"函数来创建一个列表...

2013-07-13 11:25:00 200

转载 clojure 新手指南(12):本地绑定&词法作用域

如果你还没忘的话,仔细回想一下,之前我们是如何将对象绑定到变量名上的。但当时我们只是全局绑定,在那时这种绑定是非常有用的。不过,有很多时候,本地绑定往往比全局绑定更合适,例如把变量限制在一个操作内部的时候。下面就让我们看看如果使用绑定函数 "let " 进行本地绑定。 =>...

2013-07-10 15:24:00 140

转载 clojure 新手指南(11):正则表达式

接着上篇,继续我们的时间和日期函数的探讨。我们可以定义一个函数,将一个日期字符串分成一个列表。列表元素分别为年、月、日、时、分、秒。为了完成这个字符串分割操作,我们使用“re-split‘函数。re-split函数需要一个正则表达式参数用于确定如何分割字符串。Clojure 依赖java的正...

2013-07-08 23:59:00 89

转载 clojure 新手指南(10):与java交互

clojure是基于jvm的语言,就是说clojure会被编译成字节码被jvm执行。但是clojure能做的可不仅仅是被编译成字节码,它提供了一套API让用户与java交互。因此clojure可以直接调用java世界中那些丰富庞大的优秀库了。 数据&转换 =>12....

2013-07-07 16:05:00 168

转载 clojure 新手指南(9):元数据

我们在定义函数的时候提到了如何去定义一个元数据。但之前只是定义它,并没有明说它的用途。让我们再看一下之前定义的select-random函数,我们添加了一个叫做:add的元数据。注意:元数据是以哈希表形式展现的。(键和值可以是任何类型,不过key一般推荐为关键字类型) =>(...

2013-07-07 13:53:00 145

转载 自学编程,十年磨一剑

黄小非译注:本文作者Peter Norvig目前任职于Google,其职位是研究主管(Director of Research). Peter Norvig是享誉世界的计算机科学家和人工智能专家。他是AAAI 和 ACM 的会员,是业界内经典书籍《Artificial Intelli...

2013-07-05 18:45:00 207

转载 clojure 新手指南(8):参数和重载

现在我们首先定义一个支持4个参数相加的函数: (defnadd[v1v2v3v4](+v1v2(ifv3v30)(ifv4v40))) ...

2013-07-05 14:24:00 244

转载 自旋锁学习系列(4):基于数组的队列锁

BackoffLock的缺点 上篇我们用指数后退技术实现了BackoffLock,但是还是不太理想。除了移植性不太好外问题还体现在两个方面: 1、 cache 一致性流量: 不要被这个名词吓到了。其实很好理解,因为我们之前定义的所有锁都共用一个状态变量state,所有的线程都是...

2013-07-05 01:10:00 213

转载 clojure 新手指南(7):定义函数

前几章中,我们用了一种比较迂回的方式创建函数:把匿名函数绑定到一个变量上。实际上,clojure提供了一个更好的方式做同一件事情。“defn” 这个函数就是专门用于定义函数的。 在我们使用defn之前,我们再回顾一下之前我们怎么使用def来创建函数的,然后我们使用defn来做同一件事情...

2013-07-04 22:44:00 180

转载 akka基础:理解Actor路径

actor路径组成 在理解Actor系统这篇文章中我们知道,actor是以一种严格的层级结构方式被创建的。这有点类似一个文件系统,文件夹内又包含子文件夹,子文件夹又包含子子文件夹,以此类推。我们可以把这个文件系统看成一个文件树。每一个节点都只有唯一的一个访问路径。actor 系统也是...

2013-07-04 17:53:00 192

转载 clojure 新手指南(6):全局绑定&匿名函数

绑定变量 在Clojure中,我们可以使用 " def " 给函数和数据赋予一个名字。例如我们定义一个叫做“alphabet”的字符串变量 user=> (def alphabet "abcdefghijklmnopqrstuvwxyz") #'user/alphabe...

2013-07-04 10:57:00 224

转载 自旋锁学习系列(3):指数后退技术

上一篇中分析了测试锁的两种实现TASLock和TTASLock,主要对这两种锁的性能进行了分析。对于TTASLock,我们知道比TASLock性能上要好很多,具体分析已经讲过了。我们最后也说了,TTASLock虽然比TASLock大有改进,但是在性能上还是不够理想。这一篇的目的就是针对TTA...

2013-07-04 00:51:00 188

转载 clojure 新手指南(5):判断&基本类型

判断语句 在Clojure中,所有的语法规则最终都是S表达式。我们如何知道哪些是判断语句呢?这个很简单,clojure中(lisp习惯)有个规定:对于判断功能的函数,函数名后面都有一个“?”号。所以我们只要看到后面带问号的函数名,就知道这一定是一个判断语句。很简单吧! 例如 "...

2013-07-03 23:37:00 357

转载 clojure 新手指南(4)代码保护

有时候,你可能需要防止一个表达式或者部分表达式被执行。这种就需要一种称为“代码保护”的技术。这项技术使用起来非常简单,就是在表达式前面加上一个单引号“ ‘ ”。clojure 遇到这种前缀加上单引号的表达式就会直接跳过求值,直接把其当做一种叫做“符号”的数据结构。 =>(+ 4 5...

2013-07-03 22:45:00 104

转载 clojure 新手指南(3)复杂表达式求值

为了理解复杂的表达式和对它的操作,一个首要的前提就是理解”前缀表达式“。这可能会花费你一点时间来习惯它。不过我相信你会很快的爱上这种规则的。你想想,如果你要对多个值进行同一种运算,你只用写一个运算符在第一个值的最前面,而不是写多个运算符在中间。不信就看下面的例子: 普通: 1 + 2...

2013-07-03 11:28:00 187

转载 clojure 新手指南(2)使用REPL求值

Clojure 拥有动态语言的所有好处。这意味着你可以在程序被加载后依然可以改变它,并且不用采取额外的步骤去编译代码。你既不用停止也不用重启正在运行的应用就可以让修改生效。这对于其他语言来说可是一个非常显著的优势,特别是如果你正打算将变化动态地(不用停止和重启服务器)呈献给用户时。 要...

2013-07-03 10:16:00 143

转载 akka基础 : 理解Actor 系统

Actors 是一些包含状态和行为的一些对象。它们通过显式的传递消息来进行通信,这些消息会被发送到它们收件箱中(消息队列)。某种意义上来说,actor 是面向对象编程中最严格的实现形式。为了更好的理解它们,我们可以把这些actors看做一群人。想象一下,我们把一些子任务分给一群人,这些人根据...

2013-07-02 20:16:00 296

转载 akka入门 (1):akka简介

这个akka入门系列大量参考了akka文档。主要是翻译+自己的一些理解。这里对akka文档吐一下槽,它的文档初看上去感觉挺详细的。但是很多示例代码都是片段,对初学者来说甚至都无法运行起来,所以我这里会对它的文档进行扩展,至少至少会有完整的代码。 what is akka? 我们...

2013-07-02 16:23:00 105

转载 线程通信机制:共享内存 VS 消息传递

在并发编程中,我们必须考虑的问题时如何在两个线程间进行通讯。这里的通讯指的是不同的线程之间如何交换信息。 目前有两种方式: 1、共享内存 2、消息传递(actor 模型) 共享内存: 共享内存这种方式比较常见,我们经常会设置一个共享变量。然后多个线程去操作同...

2013-07-02 15:52:00 1465

转载 clojure 新手指南(1)设置&安装

这篇设置指南的目标读者是那些没有或者很少编程经验的人。内容包括如何访问windows 命令行接口,如何确定java是否被正确安装,如何在REPL上运行clojure。 步骤一:使用命令行接口 所有的操作系统都包含一个命令行接口。这种纯文字接口建立了人机交流的通讯入口,让...

2013-07-02 11:39:00 370

转载 clojure 新手指南-目录

无意中在一个博客上发现《clojure 新手指南系列》系列。感觉很不错,于是决定翻译下来与大家共享。 先列出整个系列的目录: 设置与安装 使用REPL来求值 对复杂表达式求值 代码保护 判断&基本类型 全局绑定&匿名函...

2013-07-02 10:18:00 99

转载 并发 VS 并行

------------------------------------------------------------- 并发与并行是两个既相似而又不相同的概念:并发性,又称共行性,是指能处理多个同时性活动的能力;并行是指同时发生的两个并发事件,具有并发的含义,而并发则不一定并...

2013-07-01 11:09:00 147

转载 匿名函数的递归(2)

先回顾一下上篇的最终的推导成果 对于不多于n个元素的列表,我们可以使用下面的匿名函数来进行计算。虽然有点那么个意思,但是离递归还有很大的距离呢。 ((lambda(mk-length) (lambda(lat) ((mk-length (mk-l...

2013-07-01 01:28:00 99

转载 匿名函数的递归(1)

首先我们定义一个函数length: (define length (lambda(lat) (cond ((null? lat) 0) (else (+ 1 (length (cdr lat))))))) 这个函数很简单,只...

2013-06-28 17:29:00 113

转载 自旋锁学习系列(2):TAS锁

TAS 是test and set 的缩写,直白的翻译过来就是比较然后测试。java中的原子类大量使用了TAS操作。通过TAS 我们可以安全并且无阻塞的设置原子变量,不用加锁也能进行线程安全的操作。本文目的不是谈原子变量的使用和实现原理的,这个以后会单独来讲。我们主要来看如何使用TAS操作来...

2013-06-25 23:54:00 1520

转载 八皇后问题的python实现

以前写的一个八皇后问题求解,思路就是每次循环列出所有的可能解,然后过滤出不符合要求的解。详细见代码: //检查两个点是否在攻击线上def attack(p1,p2): return p1[0]==p2[0] or p1[1] == p2[1] or (abs(p1[0...

2013-06-19 13:27:00 137

转载 自旋锁学习系列(1):一点点硬件知识

java中外部锁实现就用到了自旋锁这个概念,之前看jdk的concurrent包源码的时候,对这部分实现一直是无法透彻的理解。正所谓”外行看热闹,内行看门道“。虽然代码按行看都能看懂,但是连在一起不知道是为什么这么做。只能对Doug Lea大神佩服的十体投地。这么复杂精巧的代码是怎么想出来的...

2013-06-19 02:46:00 217

转载 java 数字操作中的陷阱

代码片段一: byte i; for (i = Byte. MIN_VALUE ; i < Byte. MAX_VALUE; i++) { if (i == 0x99) { System. out.prin...

2013-05-19 22:37:00 139

转载 Integer 中的 “==” 陷阱

先看一段代码: static boolean test(Integer a, Integer b) { return a == b; } public static void main(String[] args) { Sy...

2013-05-13 18:00:00 244

转载 interrupt、interrupted 、isInterrupted 区别

1、interrupt interrupt方法用于中断线程。调用该方法的线程的状态为将被置为"中断"状态。 注意:线程中断仅仅是置线程的中断状态位,不会停止线程。需要用户自己去监视线程的状态为并做处理。支持线程中断的方法(也就是线程中断后会抛...

2013-04-11 00:30:00 86

转载 The j.u.c Synchronizer Framework翻译

摘要 在J2SE 1.5的java.util.concurrent包(下称j.u.c包)中,大部分的同步器(例如锁,屏障等等)都是基于 AbstractQueuedSynchronizer(下称AQS类)这个简单的框架来构建的。这个框架为同步状态的原子性管理、线程的阻塞和解除阻塞 以及...

2013-04-10 23:32:00 157

转载 《javascript语言精粹》读书笔记——第5章:继承

javascript是一门弱类型语言,从不需要类型转换。对象继承关系变得无关紧要。对于一个对象来说重要的是它能做什么,而不是它从哪里来。javascript是一门基于原型的语言,这意味着对象直接从其他对象继承。 1、伪类 javascript不直接让对象从其他对象继承,反而是插入...

2013-04-08 00:27:00 103

转载 interrupt、interrupted 、isInterrupted 区别

1、interrupt interrupt方法用于中断线程。调用该方法的线程的状态为将被置为"中断"状态。 注意:线程中断仅仅是置线程的中断状态位,不会停止线程。需要用户自己去监视线程的状态为并做处理。支持线程中断的方法(也就是线程中断后会抛...

2013-04-07 22:11:00 86

空空如也

空空如也

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

TA关注的人

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