我要啦免费统计

Blog Archives

[译]15分钟学会Emacs Lisp

原文地址:http://bzg.fr/learn-emacs-lisp-in-15-minutes

原文作者:bzg

原文发布日期:2013年7月25日

译者:lichenbo

以下为译文:

我在http://learnxinyminutes.com上面找了一下,居然没有找到Emacs Lisp的介绍,于是我写下了这篇文章。我把这个简介发到了github上面,希望哪天能够被合并进去。

非常欢迎大家的评论和反馈,也感谢@squintar一直鼓励我坚持(为她)写下了这篇文章。

Read more »

jdk7源码剖析之标准库(2)—— 从AbstractList到AbstractCollection

由于在上篇文章中,我们已经详细的看过ArrayList的代码以及实现,所以在之后的分析中,对于类似的代码,我们只是给出重点方法的signature,除非在实现方面和ArrayList有很大的不同。

在ArrayList的实现中,除了它继承了AbstractList外还有一点值得在意的是它还实现了一个叫做List的接口。实际上如果我们再去看看其他的集合类,就会发现至少在Collection这一块,带有“Abstract”的类和相应的接口联系的非常紧密。下面我们看看对于ArrayList及其父类AbstractList与AbstractCollection之间的关系。

Deepin-jdk_1
Read more »

jdk7源码剖析之标准库(1)—— 从Arraylist到AbstractList

一切从ArrrayList开始

话说在上大学之前,也算是稍微接触过一些数据结构,所以一开始看到Java里面的ArrayList就觉得奇怪。以前见过的数据结构无非是Array或者List,怎么又出来个ArrayList,这到底是Array还是List啊。后来上课时发现,这从来没听说过的ArrayList貌似还用的挺多。众所周知,List算是和Array是不分伯仲的两种数据结构。Array擅长随机存储(RandomAccess),但是对在任意位置添加删除元素却很不在行。而List则相反,因为其本身是一个链表,只需要对节点的指针进行操作就可以了。那么ArrayList又是怎么实现的呢,我们不妨先看一看这货的signature:


Read more »

Windows的四种链接方式

习惯Linux的用户会经常忘记还有一种操作系统叫Windows,或者说的更准确一些,是忘记了Windows也是一种“操作系统”。这里所说的“操作系统”的意思是,Windows也符合我们在操作系统课上学的诸多概念的设计及实现。但是由于Linux经常将这些细节暴露给我们,所以我们经常会把操作系统课上学到的东西和Linux相联系,却没有意识到Windows也实现了相应设计。

Read more »

欲求理解,先求创造

前几天在面试腾讯的时候,面试官问了我这样一道题:如何用C语言来实现一个闭包。虽然我之前的面试回答不堪入目(基础不扎实啊),但听到这道题后还是小小的兴奋了一下。由于我平时就偏爱fp一些,再加上神级课程programming language把闭包讲的很透彻,还动手实现了一个解析闭包的解释器,所以这道题我还是很有自信的。

闭包是fp中的基本概念,其含义就是函数体+其定义时的环境(lexical scope)。因为c语言并不支持lexical scope,所以我们必须将函数定义时的环境保存到某个变量中,需要时再将函数指针和这个变量一起传递即可。

这其实并不是我原生的想法,在programming language 课程中,老师Dan为了让大家理解什么是闭包分别在静态语言的ml中和动态的scheme中分别演示了lexical scope的作用域。但真正使我印象深刻,也是真正使我确定什么是闭包的,是Dan在最后又写了一段java代码和一段c代码,告诉我们这就是闭包。

Read more »

[SimplerExplained]为什么只给出前序以及后序遍历,不能生成唯一的二叉树

我们在学习二叉树的遍历时,都会不可避免的学到二叉树的三种遍历方式,分别是遵循(根-左-右)的前序遍历、遵循(左-根-右)的中序遍历以及遵循(左-右-根)的后序遍历。并且每一个二叉树都可以用这三种遍历方式并且分别转换为字符串序列,以便在计算机上面保存。但是我们在进行逆向操作的时候却会遇到困难:我们并不能从某一种遍历方式推断出唯一的二叉树,也就是说,这是个单向编码的过程。而当我们有一个二叉树的两种遍历方式的表述时,似乎也不能做到尽善尽美:前序遍历和中序遍历的组合或者中序遍历和后序遍历的组合可以逆向生成唯一的二叉树,但是偏偏前序遍历和后续遍历却不可以。这其中的原因是什么呢?

Read more »

[译]在C中表示TMin

在给一同学解决C的一个问题时,偶然发现如果直接输出-2147483648会得到2147483648。一开始我以为是整数溢出,然而输出(int)-2147483648则会得到正确的结果-2147483648。int型数据类型的取值范围是-2^31 ~ 2^31-1,也就是说,int型可以表示-2147483648这个数。那么为什么第一个数会underflow呢?综合Stackoverflow上面热心网友的回答,以及同学提供的一份CSAPP的补充资料,终于解决了这个问题。下面我就把这份同学给出的详细的资料翻译出来,供大家参考。

原文下载:http://www.csapp.cs.cmu.edu/public/waside/waside-tmin.pdf

原作者:Randal E. Bryant and David R. O’Hallaron

Read more »

为什么处理一个排序数组要比处理一个未排序的数组更快?

以前无意看到了stackoverflow上面的一个帖子

为什么这段代码在数据排序后的运行时间要比排序前快6倍?

Read more »