《代码大全》之表驱动法

表驱动法是一种编程模式——从表里查找信息而不是使用逻辑语句(if 和 case)。事实上,凡是能通过逻辑语句来选择的事务,都可以通过查表来选择。对简单的情况而言,使用逻辑语句更为容易和直白。但随着逻辑链的越来越复杂,查表法也就愈发显得更具吸引力。

表驱动法使用总则

例子一:
使用复杂的逻辑对字符分类

if((('a' <= inputChar) && (inputChar <= 'z')) || 
(('A' <= inputChar) && (inputChar <= 'Z‘))){
    charType = CharacterType.Letter;
}else if ((inputChar == ' ') || (inputChar == ',') || (inputChar == '.') || (inputChar == '!') || (inputChar == '(') || (inputChar == ')') || (inputChar == ':') || (inputChar == ';') || (inputChar == '?') || (inputChar == '-')) {
    charType = CharacterType.Punctuation;
} else if (('0' <= inputChar) && (inputChar <= '9')){
    charType = CharacterType.Digit;
}

使用一个查询表,就可以把每个字符的类型保存在一个用字符编码访问的数组里,那么上述代码可以替换为:

charType = charTypeTable[ inputChar ];

使用表驱动法,必须要解决两个问题。

1,怎样从表中查询条目。 比如你希望把数据按月进行分类,那么创建一个月份表是非常直截了当的,你可以用一个下标从 1 到 12 的数组实现它。而另一些数据可能很难直接用于查表。

2,你应该在表里存些什么。有
时候,表查询出来的结果是数据,有时候,表查询出来的结果是动作,或者有时候,查出来的是子程序的引用。无论何种情况,表都会变得更为复杂。

《代码大全》之变量名的力量

一,选择好变量名的注意事项

一个好的变量名是可读的、易记的和恰如其分的。可以通过应用多条原则来实现这些目标。

1,最重要的命名注意事项

为变量命名时最重要的考虑事项是,该名字要完全、准确地描述出该变量所代表的事物。获得好名字的一种使用技巧是用文字表达变量所代表的是什么

2,以问题为导向

一个好名字通常表达的是“什么”,而不是“如何”。

3,最适当的名字长度

平均名字长度在 8 到 20 个字符的程序容易调试。当然这并不意味着你应该尽量把变量名控制到这个范围。它强调的是,如果你查看自己写的代码时发现了很多更短的名字,那么你需要认真检查,确保这些名字含义足够清晰

4,变量名对作用域的影响

较长的名字适用于很少用到的变量或者全局变量,而较短的名字则适用于局部变量或者循环变量。

对位于全局命名空间中的名字加以限定词。

南京

大概只有在旅行的时候才能真正认识一个城市吧。

我睁大眼睛仔细观察着,目光扫过之处,皆是独特的事物,路边拥有曲折枝干的悬铃木的木纹,掩映在钢铁水泥之中偶尔出现的古建筑,或者是窄小且并不干净的秦淮河。

此时我正坐在1路公交上,在南京。

周五

在上周,就跟同事J约好周末去南京玩两天。幸运的是,J曾经去过南京,因此她轻车熟路地帮我们两定好了国际青年旅舍夫子庙店。令我惊讶的是,周一订房间的时候,就被告知周五周六男生方面只剩下男女混住的房间了,这个对我来说自然是无所谓,觉得女生应该接受不了这样的房间,也从侧面体现出,青旅不错,生意火爆。

带着激动和小期待,傍晚在食堂草草解决晚饭,踏上了去南京的旅途。

透过动车,外面有着各种颜色的亮点。

完成以前博客的搬家

花费了四五个小时,终于把以前的博客全部搬到新的博客里。将所有的图片都存成外链。

一方面,觉得工作量真是大;另一方面,又觉得以前积累的博客实在是太少。

幸好去年开始使用有道云笔记,有了记录笔记的习惯。如果开始写博客,估计可以整理出好多篇。

hexo搭建初自动生成的”Hello,world”那篇博客我就不删除了,当做”之前”与”现在”的分割线。

由此,以前博客可以删除。开始正式使用现在的博客了。

最后,是我最喜欢的星空图。

给计算机相关专业大一学生的一点建议

现在是15年3月,还有四个月我将毕业工作。大学四年就这样过去,现在回校已经有一种复杂的别离情绪。大学四年到底过得如何,是好是坏,是成功还是失败,这个很难回答。但是有些曾经迷茫过的问题,现在看来,似乎已经有了一些答案。因此在这里做一些记录与分享。如果你还为时未晚,希望可以帮助到你。

将来的路

就本科生而言,可以分成两个大方向:一,就业。就业又可分为进外企、进事业单位、进国企、进民企;二,读研。读研又可分为保研、考研、出国留学。

到底选哪条路,这个问题对于大一乃至大四的某些同学,都是一个难题。未来似乎就把握在自己手里,又似乎自己无力去掌控。因此,有明确的目标的人是幸运的,当然最后能否成事,还看他能否真正用心去做。

我且谈谈计算机方面的就业(这里特指普通的,专业对口的就业)。

首先我绝对不是这方面的高手,因此我只能分享一下在我求职过程中的感悟还有周围同学的经历给我的启发。我觉得比较重要的几个要点是:一,项目经验;二,专业基础;三,实习经验;四,算法;五,比赛经验。

要点没有先后之分,我觉得不可缺少的是第二点“专业基础”,不管你选择了去什么公司,这个是必然会考察到的。这里的“专业基础”,指的就是你在学校里课堂上学的例如数据结构、算法、操作系统、计算机组成结构等等。——实际上,不只是就业,走其他出路你也必须学好这些。

你一定注意到第四点“算法”和第二点“基础”有重复。这里的“算法”,已经超出了“基础”的范围。算法一直是诸多IT公司考察的一个重要的点。不管是国内的BAT,还是国外的Google、facebook,如果你算法好,那拿offer的概率就大很多。如果对算法感兴趣的话,可以尝试加入学校的ACM队伍。

Fork me on GitHub