SF 黑客马拉松赛后回顾

上个周末,也就是10月24、25号,参加了人生中第一次黑客马拉松(hackathon),虽然最终没有获奖,但是这个比赛过程中还是 hack 的挺爽,趁现在还有余热,纪录下比赛时的一些心得与收获。

阅读更多

转载『非科班出身的人学习编程不负责任指南』

来我们这个实验室里读研的学生可能自从来到这里的第一天就觉得自己的命运很苦逼。他们读本科时主修的是机械设计、制造以及自动化之类的专业,毕业时的简历上也顶多是写写擅长 MS Word、PowerPoint、UGNX、AutoCAD 之类的应用软件。他们有限的学习生涯里,怎么也不会想到来到这里竟然要首先重新学习 C 语言,然后还要学 C++,接下来还要学习 Python 或 Lua 什么的,而且竟然还不让用 Windows,只能用连个 QQ 都没有并且经常出故障的 Linux……

阅读更多

我的第一个玩具语言 JCScheme 问世了

记得在上大学那会,就想着能够实现个自己的编程语言。由于之前技能不足,一直没敢去尝试。现赶上国庆七天假期,SICP 看的也正起劲,终于鼓起勇气,把这个坑给填上了。甚是开心。
实现 JCScheme 这个语言前后大概用了一天时间,功能虽然简单,但是“麻雀虽小,五脏俱全”,编程语言中最基本的类型、作用域、函数都涵盖了,以后在扩展时也很方便。
如果你和之前的我一样,想实现一门语言但又苦于无从下手,那么你应该花半个小时看看本文,相信你肯定会有所收获。
本文没有复杂难懂的编译原理知识,没有学过编译原理的人不要害怕。

阅读更多

Java WeakHashMap 源码解析

前面把基于特定数据结构的Map介绍完了,它们分别利用了相应数据结构的特点来实现特殊的目的,像HashMap利用哈希表的快速插入、查找实现O(1)的增删改查,TreeMap则利用了红黑树来保证key的有序性的同时,使得增删改查的时间复杂度为O(log(n))

阅读更多

SICP 第二章总结

到今天为止终于把第二章看完了,相比于第一章,感觉难点少了些,这章主要是通过大量例子(主要有图形语言、区间运算、符号求导、集合的表示、通用型算术运算)来熟悉构造数据抽象的相关技能。下面来回顾总结一下第二章。

数据抽象的意义

在第一章中,只是进行了一些数值演算,这是比较简单的数据,并没有体现出数据抽象的意义,本章一开始就通过有理数的运算这个例子引出了数据抽象的意义。
数据抽象的基本思想,就是设法构造出一些使用复合数据对象的程序,使它们可以像操作数值等简单数据类型一样操作“抽象数据”。通过构造复合数据(与构造复合过程类似)可以达到下面的效果:

阅读更多

Java LinkedHashMap源码解析

上周把HashMapTreeMap这两个Map体系中比较有代表性的类介绍完了,大家应该也能体会到,如果该类所对应的数据结构与算法掌握好了,再看这些类的源码真是太简单不过了。

阅读更多

Java TreeMap 源码解析

上篇文章介绍完了HashMap,这篇文章开始介绍Map系列另一个比较重要的类TreeMap
大家也许能感觉到,网络上介绍HashMap的文章比较多,但是介绍TreeMap反而不那么多,这里面是有原因:一方面HashMap的使用场景比较多;二是相对于HashMap来说,TreeMap所用到的数据结构更为复杂。

阅读更多

Java HashMap 源码解析

继上一篇文章Java集合框架综述后,今天正式开始分析具体集合类的代码,首先以既熟悉又陌生的HashMap开始。

阅读更多

Java集合框架综述

最近被陆陆续续问了几遍HashMap的实现,回答的不好,打算复习复习JDK中的集合框架,并尝试分析其源码,这么做一方面是这些类非常实用,掌握其实现能更好的优化我们的程序;另一方面是学习借鉴JDK是如何实现了这么一套优雅高效的类库,提升编程能力。

阅读更多

SICP 第一章总结

最近两个月除了工作之外,业余时间一直在研习sicp这本经典书。关于这本书的讨论有很多,像老赵写过SICP的书托,我觉得与其讨论这本书有没有读的价值,不如花上些,随手翻翻,如果感兴趣,就读下去;否则直接忽略即可。计算机理论发展到了现在,有太多太多经典需要我们去读了,恐怕我们这一辈子都无法读完,为什么不找你感兴趣的来读呢?

阅读更多