工作、生活心得
变量初始化
在我的工作中再一次证明了这一条普适定律的正确性。让变量处于好的状态, 只有好的状态, 你才能确定那些你没有关注到的部分是合乎你想象的
输入检查
通过if判断来确定, 参数传入, 函数返回, 文件读取,获取到的信息是合法的
可能发生的一定会发生, 即便malloc几个字节,我也遇到看起来返回了NULL的情况
正确的数据类型
必须使用正确的数据类型, 要注意无符号数和有符号数的转换
抽象分层
不同功能之间必须抽象出来进行分层, 不然功能拓展的时候就会吃大亏
运算时判断
对于加法的溢出判断我还没有深刻的体会,但是对于除法,一定要确保除数不为0
查看你获得的每一份文件
对于接收一个项目,简单的方法是从入口看下去,但是这样会导致缺失很多信息,所以应该至少把每个文件看一遍, 包括隐藏文件(以.开头的文件)
相等性的判断
相等性是非常重要的特性,比如在hashmap里面相等性是非常重要的,此外在go语言里面的error上,到目前位置我还不知道error是怎么判断相等的。一般都是在写一些error != nil 的代码, 但是 error == io.EOF 是怎么判断的,我也不清楚,所以从这些实际的体会上可以得到相等性是非常重要的。
长度的确定
对于一些具有结构的数据而言,在阅读时,条目的长度是需要注意的,例如每个MFT Entry的长度是1024这个结论是我在看了相当多的资料之后才看到的,但这并不是我在彼时一开始就关注到的东西,所以在此记录一下。
变量值的交换
交换对于一门语言是很重要的, 对于python 和go来说可以使用解压赋值来进行交换, 对于c的基础类型可以使用temp =a ; a = b; b = temp; 这样的方法来交换,对于复杂的结构可以使用memcpy等方法来完成。 但是在java里面的变量交换却不是把水倒过来倒过去那么容易, 需要依靠java保证的参数从左到右压入顺序来完成 a = swap(b, a = b); swap(a, b) : return b; 这样的方法来完成。
所以面对一门语言,需要思考一下交换的问题。
对别人的截图保持好奇心
在看到别人的图片的时候,好奇别人是怎么制作出来这样的图片的,有可能是直接截图截出来的,那么可能我使用的工具不是最科学的,可能需要换一个工具。
比如在博文里看到有MFT Entry的截图上面直接就有了属性头和属性体的高亮,但是当时我并没有好奇这个高亮是怎么做出来的,直到通过使用winhex打开自己的磁盘之后,才看到原来这个工具就带有这样的功能。
另外在张秀宏著作的《自己动手写lua虚拟机/编译器/标准库》一书中,似乎是大量使用了hex.Dump函数返回的字符串,作为文章中的截图使用,这也值得一记
错觉
站在地铁上的时候,对面地铁开走了,你会觉得是自己这边开走了
当你自己开走了的时候,你却觉得自己似乎没有动。
感受和真实 可能不是差距,而是相反
一定有什么方法
如果别人有什么方法做成,那么一定就有什么方法可以做成 (学习MFT得到的思考)
喜欢的界面字体
Bitstream Vera Sans 12
代码字体
Fira Code 12, Ubuntu Mono Derivative Powerline Nerd Font 14
参数间的关系
在写函数的时候,注意参数之间的关系和参数本身被类型限定的值域
少说话: 沉默的人更可爱