`

《代码的未来》读书笔记

阅读更多

第一章  代码的时间和空间

1.1编程的本质

创建出一种人类和计算机都能理解的语言(编程语言),并通过这样的语言将人类的意图传递给计算机,这样的行为叫编程.

 

编程的本质是思考.

人类到底想要什么?想要这些东西的本质是什么?要实现这个目的需要哪些操作步骤?

因此,编程是人来完成的工作,因此我不相信未来计算机可以自己编程.

 

能够按照自己的意愿创造世界,是编程的最大魅力所在.

 

1.2预测未来

IT领域的未来容易预测的根本理由:从计算机的出现到现在已经过了半个世纪,但计算机的基本架构没有变化.

 

第二章编程语言的过去/现在和未来

2.1编程语言的世界

最早的编程语言是FORTRAN.

自动生成机器语言的程序,叫汇编器.

编程语言是编程者根据自己的需要发明出来的.

目前主流语言:系统描述语言C/C++,商务语言Java,Web领域热门的Ruby/Perl/Python/PHP.

 

编程语言是在不断的试错中发展起来的.

从编程语言进化过程看,一个关键词是抽象”.编程语言进化的动机,不是工具和语言本身的简化,而是通过这些工具和语言所得到的结果更简洁的表达出来.

 

2.2DSL特定领域语言

优势:提高了生产线率,让程序在整体上以更整洁的方式表达.

DSL并不仅仅是一种技术,而是应用程序开发的重要设计原理和原则之一,适用于任何软件开发.

 

2.3元编程

元编程:用程序编写程序

获取和变更程序本身的功能称之为反射.

Lisp早期的编译器早就具备的垃圾回收的机制,比Java早。

 

程序在运行过程中也可以对程序本身进行操作的过程叫做元编程。

 

2.4内存管理

计算机系统通过双重“幻觉”,让我们觉得内存无限:GC机制、虚拟内存机制。

将内存管理,尤其是内存空间的释放实现自动化,就是GC

将“死亡”对象找出来,并作为垃圾进行回收,就是GC的本质。

 

GC的三种方式:标记清除方式(变形:标记压缩方式)、复制收集方式(提高了内存使用的局部性)、引用计数方式。

GC算法的改良剂高阶算法:分代回收、增量回收/并行回收

 

分代回收

像这种只扫描新生代对象的垃圾回收操作,被称之为小回收.具体步骤是:

1)从根开始1次常规扫描,找到存活对象.这个步骤采用标记清除或复制收集(大部分)算法都可以.

2)将存留下来的对象划分到老生代.

 

若遇到来自老生代对新生代对象的引用,为了不让它被误认为死亡”,在分代回收中会对对象的更新进行监视,将从老生代对新生代的引用,记录在一个叫做记录集的表中,在执行回收的过程中,记录集也作为根.

 

对全部区域为对象的GC操作叫做完全回收或大回收.分代回收通过减少GC中扫描的对象数量,达到缩短GC带来的平均中断时间的效果.

检查程序需要对所有涉及对象内容的地方进行保护,因此被称为写屏障.

 

增量回收

实时性高的系统更重视缩短GC的最大中断时间.

GC细分为多个部分逐一执行,这种方式叫增量回收.

为了防止已经完成扫描和标记的对象呗修改,对新的对象产生了引用,以至于新对象不被标记而误认为死亡,也要写屏障.

当已经被标记的对象的引用关系发生变化时,通过写屏障会将新被引用的对象作为扫描的起点记录下来.

 

并行回收

利用多CPU的处理能力进行GC的操作叫并行回收.

并行回收的原理:在原有的程序运行的同时进行GC的操作.利用多CPU的性能,尽可能让这些GC任务并行执行

并行回收也要写屏障对当前的状态信息保持更新。

 

GC大统一理论

IBMDavaid F Bacan 2004年发表《垃圾回收的统一理论》——任何一种GC算法都是跟踪回收(标记清除和复制收集)和引用计数回收2中思路的结合。

 

2.5异常处理

产生异常的应对:中断执行或清除异常产生的原因并重试。

 

2.6闭包

函数对象不一定是闭包;但要理解闭包需要充函数对象谈起

函数对象:作为对象来使用的函数

函数对象也即将函数作为值来利用的方法,其最大用途是高阶函数(用函数作为参数的函数---可以提高通用性)

 

要理解闭包,需要理解:

作用域:变量的有效范围

生存周期:变量的存在范围

 

从属于外部作用域的局部变量,被函数对象给封闭在里边了闭包

在函数对象中,将局部变量这一环节封闭起来的结构叫做闭包

C语言的函数指针不是闭包;JavaScript的函数才是闭包

 

第三章编程语言的新潮流

3.1语言的设计

Java成功的特点:可移植性、功能强大、高性能、丰富的类库

 

3.2 Go

200911Google发布

 

3.3 Dart

201110Google发布

 

3.4 CoffeeScript

JavaScript实现的用于编写JavaScript的方便语言。

3.5Lua 巴西人开发

 

第四章云计算时代的编程

4.1可拓展性

DHT(分布式散列表),将散列表在分布式环境中进行实现的技术的统称.

算法包括:CAN,Chord,Pastry,Tapestry.数据会以多份副本保存.

运用DHTNoSQL型数据库KV数据库(Roma DB)

 

4.2C10K问题(Client 10000 Problem,即在同时连接服务器的客户端数量超过10000个的环境中,即便硬件性能足够,依然无法正常提供服务)

 

在使用套接字Socket的网络连接中,不能忽视第一次连接索要的开销.HTTP访问中,如果对一个个的小数据传输请求每次都进行套接字连接,当访问数据增加时,反复连接所需要的开销是巨大的.

 

为了避免这种浪费,HTTP 1.1 开始,对同一台服务器产生的多个请求都通过相同的套接字连接完成,Keep-alive技术.

 

4.3HashFold(MapReduce的变体)

以散列表的方式接受Map后的数据,然后通过Hold过程实现对散列表元素的去重.

当进程数量过多时,几乎所有的时间都消耗在对硬盘的访问,实际的处理则陷入停滞,产生抖动.

为此的优化:写时复制技术:创建子进程时,对于所有的内存空间并非一开始就创建副本,而是进行共享,只有当实际发生对数据的改写时才进行复制.以此减少对内存的浪费

 

4.4进程间的通信

同一台计算机上的进程通信:管道,消息,信号量,共享内存,TCP套接字,UDP套接字,UNIX域套接字.

 

第五章支持大数据的数据存储技术

5.1 KV键值存储

大规模环境中的CAP(ACID演化):一致性(Consistency),可用性(Availability),分裂容忍性(Partition Tolerance),满足三个条件中的2.

 

5.2 NoSQL

类型:KV,面向文档型(CouchDB,MongoDB:不具备事务,分数据库/几何/文档三层,采用乐观并发控制),面向对象型.

 

5.4SQL DB的反击

SQL数据库进行分割;

MYSQL:Spider存储引擎

VoltDB:面向特定领域的DB,内存DB系统

 

5.5 Memcached及小伙伴

用于高速访问的缓存(对数据访问的局部性)

缓存:可以高速访问,以改善性能为目的,仅用于临时存放数据,数据是否放于缓存中,不产生性能以外的其他影响.

 

Memcached提供缓存,主要面向Web应用,DB的查询进行缓存处理.

其他: MemcacheDB,Roma,Flare,Tokyo Tyrant,Kumofs.Redis.

 

 

 

 

分享到:
评论

相关推荐

    代码质量-读书笔记

    下面将详细解读这个领域的核心知识点,并基于"代码质量-读书笔记"的内容展开讨论。 首先,我们要理解什么是代码质量。代码质量不仅仅关乎代码的正确性,更包括其可读性、可维护性、可扩展性等多个方面。良好的代码...

    读书笔记 3000字数以上

    在职业规划方面,读书笔记能够帮助IT从业者明确自己的兴趣所在,识别技能短板,为未来的学习和发展方向提供指导。此外,整理并分享读书笔记,还可以增加个人在行业内的影响力,建立专业声誉。 综上所述,撰写高质量...

    达内C++课程代码及笔记

    通过阅读和分析这些代码,你可以加深对C++语法和编程理念的理解,同时提升实际编程技能。 【笔记辅助理解】 课程笔记是对理论知识的提炼和补充,通常包含关键概念的解释、重要代码段的注解以及解决问题的思路。...

    计算机专业读书笔记.docx

    ### 计算机专业读书笔记知识点汇总 #### CSS精粹之布局技巧 1. **立即检测疑问** - 在开发过程中遇到CSS布局问题时,应该及时检查代码。 - 利用W3C提供的XHTML与CSS验证工具可以帮助发现并修正错误。 - 文件...

    《众包》群体力量驱动商业未来ppt读书笔记.rar

    读书笔记中,我们可能会发现以下几个关键知识点: 1. **众包的起源与发展**:众包的概念最早由《连线》杂志的记者Jeff Howe提出,它起源于开放源代码软件开发和维基百科等项目。随着互联网的普及,众包逐渐应用于...

    如何让代码更可读-读《编写可读代码的艺术》读书笔记.pdf

    《编写可读代码的艺术》是一本致力于提升代码可读性的书籍,强调了代码可读性在软件工程中的重要性。...通过编写可读的代码,不仅可以增强团队协作效率,还能为未来的自己或其他接手者减轻理解负担,降低维护难度。

    算法导论系列读书笔记之三

    《算法导论》是计算机科学领域的一本经典之作,它深入浅出地介绍了算法的设计、分析和实现。...通过持续的阅读、思考和实践,我们可以不断提升自己的编程技能,为未来在IT行业的职业生涯做好准备。

    阅读笔记:软件开发阅读笔记

    欢迎阅读Shady Khaled阅读笔记! ASAC! ASAC代表LTUC中的Abdul Aziz Al Ghurair高级计算学院。 ASAC于2019年成立,旨在培养学习者的软件开发和编程技能以及能力,同时使他们有资格获得这些领域当前和未来的就业...

    web读书笔记

    在“web读书笔记”这个压缩包中,我们可以推测它包含了关于Web开发的个人学习记录和项目代码。"自己项目代码"这一标签暗示了这些文件可能是作者在实践Web开发过程中积累的经验和成果,尤其是以“二哥java”为名的子...

    吴恩达机器学习课程的资源、作业代码以及学习笔记.zip

    《吴恩达机器学习课程资源、作业代码及学习笔记详解》 吴恩达(Andrew Ng)的机器学习课程是全球最受欢迎的在线课程之一,由斯坦福大学教授、Coursera联合创始人吴恩达倾力打造。这个课程深入浅出地介绍了机器学习...

    谭浩强C程序设计读书笔记以及PPT.rar

    《谭浩强C程序设计》是一本非常经典的C语言学习教材,由谭浩强教授编写,深受初学者和教育者喜爱。这份“谭浩强C程序设计读书笔记...通过认真阅读和实践,你可以逐步掌握C语言的精髓,为未来的编程生涯打下坚实的基础。

    c++课件+课堂笔记+源代码+习题和答案

    源代码部分则提供了实际编程的示例,学习者可以通过阅读和分析这些代码来提升编程能力。代码可能涵盖基础的输入输出、数据类型操作、流程控制语句,到更复杂的函数、类的设计和实现,甚至涉及设计模式的应用。实践是...

    Aurix多核编程精华应用笔记

    无论新手用户还是专业人士,都应该会发现这本应用笔记的阅读体验非常舒适,并且最终能够清晰地理解AURIX™架构特性的支持程度。具体来说,应用笔记介绍了如何构建多核工程、设置编译器等基础知识。 接下来,笔记...

    基于Springboot的学生读书笔记共享系统源码数据库.doc

    未来,该平台还可以进一步完善,比如增加智能推荐算法,根据用户的阅读习惯推送相关内容,提高用户体验;或者引入社交元素,让用户之间建立更紧密的联系。总之,随着技术的进步和应用场景的不断拓展,该平台将发挥更...

    哈工大人工智能专业2023秋《操作系统》课程读书笔记及实验代码.zip

    这份资料包含了该课程的读书笔记和实验代码,为学习者提供了丰富的学习资源。 读书笔记部分可能涵盖了以下知识点: 1. **操作系统概述**:介绍操作系统的作用、类型和主要功能,比如进程管理、内存管理、文件系统...

    代码整洁之道笔记

    - **核心思想:** 每一行代码都应当承担特定的功能或者责任,无用的代码不仅增加阅读难度还可能导致错误。 - **操作指南:** 定期进行代码审查,去除冗余代码,确保每一段代码都是精炼且必要的。 **4. 避免直接使用...

    javascript读书笔记

    保留字是可能在未来版本中使用的关键词,尽管当前版本中它们未被使用,但同样不能用作标识符。 3. 原始值和引用值: JavaScript中的值分为原始值(Primitive Value)和引用值(Reference Value)。原始值包括...

    北航计算机专业课 代码及期末复习笔记.zip

    北航计算机专业的学习资源是众多学子关注的焦点,这个名为"北航计算机专业课 代码及期末复习笔记.zip"的压缩包文件包含了丰富的学习材料,旨在帮助学生更好地理解和掌握计算机科学的关键知识。其中,源码文件是编程...

    考试类精品--计算机专业课程备考笔记, 面试准备笔记, 论文阅读笔记.zip

    这份名为“考试类精品--计算机专业课程备考笔记, 面试准备笔记, 论文阅读笔记.zip”的压缩包文件,显然是一份针对计算机专业学生或求职者精心整理的学习资源集合。它涵盖了备考、面试以及论文阅读三个关键环节,旨在...

Global site tag (gtag.js) - Google Analytics