《代码整洁之道》读书笔记

相对于任何宏伟愿景,对细节的关注甚至是更为关键的专业性基础。首先,开发者通过小型实践获得可用于大型实践的技能和信用度。其次,宏大建筑中最细小的部分,比如关不紧的门、有点儿没铺平的地板,甚至是凌乱的桌面,都会将整个大局的魅力毁灭殆尽。这就是整洁代码之所系。     阅读全文
WincerChan's avatar
WincerChan 4月 19, 2018

《黑客与画家》读书笔记

去年年底那会,花了大概一周多时间,阅读完了《黑客与画家》这本书,收获颇丰。可惜当时确实没多少时间整理出读书笔记,期末考试结束后,回到家中,本想着有时...     阅读全文
WincerChan's avatar
WincerChan 1月 26, 2018

为什么学习算法

前言对于算法,我个人的心情是挺复杂的,去年的时候有去刷过一段时间的 ACM 算法题,后来就不知怎么荒废了,直到最近看「SICP」才决定捡起来,这篇文章也算是对算法的一点感想。 增长的阶不同计算过程在消耗计算资源速率可能存在巨大差异。为了描述这些差异的一种方法是采用「增长的阶」的记法,分析这一过程消耗的资源也就是我们平时所说的「算法分析」。 「令 $n$ 为一个参数,它能作为问题规模的一种度量,令 $R(n)$ 是一个计算过程在处理规模为 n 的问题时所需要的资源量。 我们称 $R(n)$ 具有 $\Theta(f(n))$ 的增长阶,记为 $R(n)=Θ(f(n))$,如果存在与 $n$ 无关的整数 $k_1$ 和 $k_2$,使得:$k_1f(n)\leq R(n)\le k_2f(n)$ 对于足够大的$n$值都成立。」     阅读全文
WincerChan's avatar
WincerChan 7月 16, 2017

树形递归

树形递归与上一篇介绍的「线性递归」类似的另一种常见计算模式为「树形递归」。本质嘛,可以看作许多分支的线性递归。 还是直接上具体的例题。 「斐波那契数列^1」的定义如下 看到这个定义我们马上就能把它编写成程序: (define (fib n) (cond ((= n 0) 0) ((= n 1) 1) (else (+ (fib (- n 1)) (fib (- n 2))))))     阅读全文
WincerChan's avatar
WincerChan 7月 16, 2017

谈谈递归和迭代

前言首次接触递归(recursion)这个概念是在学习 C 语言的时候,当时老师是根据「汉诺塔」^1这一具体问题的求解来介绍递归这个概念,至于迭代(iterate),好像 C 语言老师压根没提这个概念,第一次是在 MIT 的 Python 导论中听说的,但当时听完之后也只是对迭代和递归只有极其有限的了解。正好借着 SICP,好好弄清楚二者的概念。 首先明确二者的概念: 递归:是指在函数的定义中使用函数自身的方法。 迭代:迭代是程序中对一组指令(或一定步骤)的重复。在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。     阅读全文
WincerChan's avatar
WincerChan 7月 10, 2017

Python 的迭代器和生成器

我最初接触 Python 是在 17 年 2 月份,现在半年过去了,对迭代器和生成器的概念却及其有限,其实也是因为其它主流语言如:C、Java 中没有生成器的概念,所以当时学了就忘了。现在正准备好好复习一下迭代器和生成器。 容器容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代(即可以通过 for 循环去遍历)获取,可以用 in,not in 关键字判断元素是否包含在容器中。 在 Python 中,常见的容器对象有: list, deque set, frozensets dict, defaultdict, OrderedDict, Counter tuple, namedtuple str     阅读全文
WincerChan's avatar
WincerChan 7月 02, 2017

Java 抽象类和接口

抽象类在说抽象类之前,先说说抽象方法。抽象方法是用 abstract 修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。 在《Java 编程思想》一书中,将抽象类定义为「包含抽象方法的类」,但是如果一个类不包含抽象方法,只是用 abstract 修饰的话也是抽象类。许多初学者会觉得很奇怪:如果一个抽象类不包含任何抽象方法,为何还要设计为抽象类?记住以下这一点: 一个抽象类里面没有一个抽象方法可用来禁止产生这种类的对象。 对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行具体的实现,那么就可以就将这个方法声明为 abstract 方法,此时这个类也就成为了 abstract 类了。如: [public] abstract class Name{ abstract void func(); }     阅读全文
WincerChan's avatar
WincerChan 6月 17, 2017

Java 的重载和重写

重载(Overload)重载是让类以统一的方式处理不同类型的数据的一种手段。多个同名的函数同时存在,具有不同的参数类型。最典型的应用是:构造函数。 class Dog{ public void bark(){ System.out.println("狗可以吠叫"); } public void bark(String name){ System.out.println(name+"可以吠叫"); } }     阅读全文
WincerChan's avatar
WincerChan 6月 16, 2017

Python 正则表达式

目前在跟 Udacity 的 cs212 课程,避免懒癌发作,开篇博客来记录一下 Python 的正则表达式正则表达式模式 special example match * a* ‘’, a, aa, aaa, . . . ? a? ‘’, a, . . . . . a, b, c, 7, ! . . . ^ ^b ba, bb, . . . abc $ a$ ba, . . . ab ‘’ ‘’ ‘’ a a a ba bba ba, aa, bb     阅读全文
WincerChan's avatar
WincerChan 5月 26, 2017

书推:雪中悍刀行

简介有个白狐儿脸,佩双刀绣冬春雷,要做那天下第一; 湖底有白发老魁爱吃荤; 缺门牙老仆背剑匣; 山上有个骑青牛的年轻师叔祖,不敢下山; 有个骑熊猫扛向日葵不太冷的少女杀手; 这个江湖,高人出行要注重出尘装扮,女侠行走江湖要注意培养人气,宗派要跟庙堂打好关系; 而主角,则潇洒带刀,把江湖捅了一个通透; 江湖是一张珠帘。大人物小人物,是珠子,大故事小故事,是串线。情义二字,则是那些珠子的精气神。     阅读全文
WincerChan's avatar
WincerChan 5月 06, 2017