#每日精进#2020年7月28日

开通微信公众号了,同学们可以关注:kiss-note。

WX20200728-075634@2x.png

 
【早读:《深入理解计算机系统》】
第一章 计算机系统漫游
  • 计算机系统由硬件和系统软件组成;
  • 本书的目的是帮助你了解程序在系统上执行时,发生了什么以及为什么会这样;
  • c的hello.c源程序开始,源程序实际上就是一个由值0和1组成的位序列,8个位为1组,称为字节,每个字节表示某些文本字符;
  • 像hello.c这样只由ASCII字符构成的文件称为文本文件,所有其他文件称为二进制文件;
  • 同样的字节序列可能表示不同的对象,唯一区分他们的办法是通过读取到这些数据对象时的上下文信息;
  • C语言的起源:


贝尔实验室的Dennis Ritchie与1969年~1973年之间创建的,之后经历了ANSI C标准到现在的IOS标准。标准定义了C语言和一系列库函数(C标准库)。作者说C语言是“古怪的,有缺陷的,但同时也是一个巨大的成功”。

  1. C语言与Unix操作系统关系密切。C从一开始就是作为一种用于Unix系统的程序语言开发出来的。Unix几乎全部使用C语言编写的;
  2. C语言 小而简单;
  3. C语言是为实践目的设计的。最初设计用来实现Unix操作系统,但是后来发现开发其他程序也很容易。

缺点:指针会造成困惑和麻烦。缺乏对抽象的显示支持,比如类、对象和异常。C++和Java解决了这些问题。


  • 程序需要经过下面的命令,编译成低级机器语言指令才能被最终运行:

linux> gcc -o hello hello.c

  • 编译系统由4个阶段的程序组成:预处理器(cpp)、编译器(ccl)、汇编器(as)、链接器(ld);


预处理阶段:根据#开头的命令,把包含进来的.h或者.c文件直接插入到相应位置,生成一个hello.i文件;
编译阶段:编译器将hello.i翻译成汇编语言程序,生成hello.s文件;
汇编阶段:汇编器将hello.s翻译成机器语言指令,把它们打包成一种可重定位目标程序,生成hello.o文件;
链接阶段:链接器将标准C库中的已经预编译好的.o文件(比如printf.o)以某种方式合并到我们的hello.o中,最终形成可执行文件hello。


  • 汇编语言将不同的高级语言提供了通用的输出语言。相当于一个连接高级语言和机器语言的桥梁。

 
【成为一个优秀的人,可以从这些方面重点切入】
1、拥有强烈的好奇心:
你所能拥有的一切,都源自于探索;而探索的动力,都源自于好奇。正是因为这种好奇,驱动他们离开舒适区,获得更多新知识,不断拓展自己的边界。拥有好奇心的人,就像一块海绵。不断吸收新的知识,获得更大的成长。也因此,他们总是乐意接受更大的挑战。如果已经丢失了孩童时的好奇心,我们还能再捡起来吗?当然可以,当你对一件事情失去兴趣时,“我好奇如果我这么做了,会怎么样?”这么问自己!
 
2、面对不确定性,选择拥抱而不是怀疑:
人们厌恶不确定性,是因为厌恶不确定性背后巨大的风险。但是,不确定性背后,除了巨大的风险,也可能是巨大的收益。因为拥抱比怀疑,永远多一次机会。能成大事儿的人,在面对不确定性时,更容易选择拥抱,而不是怀疑。

3、相比赚钱,他们有更大的目标和想象力:
房子车子都只是附带品。最关键的是,我要不断成长,积累自己的价值,让自己变得稀缺,有能力去解决别人解决不了的问题。所以想要成大事儿,就要有更大的目标和想象力,专注于创造价值,而不是创造财富。
 
4、延迟满足,极度自律:
在这个世界上,要把一件事情做到极致,其实大部分时候都是很平淡,很枯燥的。延迟满足,能够让你在日复一日的枯燥中,不至于选择放弃。
 
5、不怕犯错,善于自省:
很多人不愿尝试做能力范围之外的事情,有一个原因是:害怕犯错。但其实只要不是什么致命错误,犯一些小错,反而是值得高兴的事。不怕犯错,善于自省,不断改进。这样的人,没有天花板。
 
希望我们都能不断成长为心目中那个,最好的自己。
https://mp.weixin.qq.com/s/9vGy6dc1vhBl58GA6F-ARw
 
【怎么理解美国关闭中国休斯顿使馆时间?本质是什么?】
说白了美方就是在故意找事。对美国好处很大,尤其对特朗普而言好处非常大。下面的视频很好的说明了这件政治事件。
https://player.youku.com/embed/XMTg5MDc5MzI3Ng==
对于这些在野党而言,今天的美国经济搞的再稀烂,那也是特朗普的锅。疫情越猛,经济越差,在野党越开心,当然要千方百计的破坏美国抗疫大局。
手段是合法的,用心是险恶的。所以不是特朗普不想消灭病毒,他是真的做不到。当然,特朗普也不是啥好货,他所有政治行为的唯一目的,也是为了选票和连任。其他一切东西,都没有这个重要,包括美国的未来。
这是人性,无关道德。
https://mp.weixin.qq.com/s/9m6Flh3X3wg9Xo-PJJzvuQ 
 
【Go语言核心36讲:第7节 数组与切片】
数组类型的值(以下简称数组)的长度是固定的(是其类型的一部分),而切片类型的值(以下简称切片)是可变长的。
我们其实可以把切片看做是对数组的一层简单的封装,因为在每个切片的底层数据结构中,一定会包含一个数组。数组可以被叫做切片的底层数组,而切片也可以被看作是对数组的某个连续片段的引用(所以Go 语言的切片类型属于引用类型)。
s3 := []int{1, 2, 3, 4, 5, 6, 7, 8}
s4 := s3[3:6]
fmt.Printf("The length of s4: %d\n", len(s4))
fmt.Printf("The capacity of s4: %d\n", cap(s4))
fmt.Printf("The value of s4: %d\n", s4)
s3[3:6] 等同于数学表达式:[3, 6)。所以,s4的长度就是6-3=3。容量是从起始索引开始(无法向左扩展,只能从3开始,及0,1,2切片s4“看不到”),一直到“底层数组”最右端,所以,容量是 8-3=5。
 
切片容量如何增长?
它并不会改变原来的切片,而是会生成一个容量更大的切片,然后将把原有的元素和新元素一并拷贝到新切片中。在一般的情况下,你可以简单地认为新切片的容量(以下简称新容量)将会是原切片容量(以下简称原容量)的 2 倍
但是,当原切片的长度(以下简称原长度)大于或等于1024时,Go 语言将会以原容量的1.25倍作为新容量的基准(以下新容量基准)。新容量基准会被调整(不断地与1.25相乘),直到结果不小于原长度与要追加的元素数量之和(以下简称新长度)。最终,新容量往往会比新长度大一些,当然,相等也是可能的。
另外,如果我们一次追加的元素过多,以至于使新长度比原容量的 2 倍还要大,那么新容量就会以新长度为基准。
 
切片的底层数组什么时候会被替换?
确切地说,一个切片的底层数组永远不会被替换。为什么?虽然在扩容的时候 Go 语言一定会生成新的底层数组,但是它也同时生成了新的切片。它只是把新的切片作为了新底层数组的窗口,而没有对原切片,及其底层数组做任何改动。请记住,
 
  • 在无需扩容时,append函数返回的是指向原底层数组的新切片,
  • 而在需要扩容时,append函数返回的是指向新底层数组的新切片。

 
https://time.geekbang.org/column/intro/100013101
 

0 个评论

要回复文章请先登录注册