第一章 代码的时间和空间
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大统一理论
IBM的Davaid F。 Bacan 于2004年发表《垃圾回收的统一理论》——任何一种GC算法都是跟踪回收(标记清除和复制收集)和引用计数回收2中思路的结合。
2.5异常处理
产生异常的应对:中断执行或清除异常产生的原因并重试。
2.6闭包
函数对象不一定是闭包;但要理解闭包需要充函数对象谈起
函数对象:作为对象来使用的函数
函数对象也即将函数作为值来利用的方法,其最大用途是高阶函数(用函数作为参数的函数---可以提高通用性)
要理解闭包,需要理解:
作用域:变量的有效范围
生存周期:变量的存在范围
从属于外部作用域的局部变量,被函数对象给封闭在里边了—闭包
在函数对象中,将局部变量这一环节封闭起来的结构叫做闭包
C语言的函数指针不是闭包;JavaScript的函数才是闭包
第三章编程语言的新潮流
3.1语言的设计
Java成功的特点:可移植性、功能强大、高性能、丰富的类库
3.2 Go
2009年11月Google发布
3.3 Dart
2011年10月Google发布
3.4 CoffeeScript
用JavaScript实现的用于编写JavaScript的方便语言。
3.5Lua 巴西人开发
第四章云计算时代的编程
4.1可拓展性
DHT(分布式散列表),将散列表在分布式环境中进行实现的技术的统称.
算法包括:CAN,Chord,Pastry,Tapestry等.数据会以多份副本保存.
运用DHT的NoSQL型数据库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.
相关推荐
下面将详细解读这个领域的核心知识点,并基于"代码质量-读书笔记"的内容展开讨论。 首先,我们要理解什么是代码质量。代码质量不仅仅关乎代码的正确性,更包括其可读性、可维护性、可扩展性等多个方面。良好的代码...
在职业规划方面,读书笔记能够帮助IT从业者明确自己的兴趣所在,识别技能短板,为未来的学习和发展方向提供指导。此外,整理并分享读书笔记,还可以增加个人在行业内的影响力,建立专业声誉。 综上所述,撰写高质量...
通过阅读和分析这些代码,你可以加深对C++语法和编程理念的理解,同时提升实际编程技能。 【笔记辅助理解】 课程笔记是对理论知识的提炼和补充,通常包含关键概念的解释、重要代码段的注解以及解决问题的思路。...
### 计算机专业读书笔记知识点汇总 #### CSS精粹之布局技巧 1. **立即检测疑问** - 在开发过程中遇到CSS布局问题时,应该及时检查代码。 - 利用W3C提供的XHTML与CSS验证工具可以帮助发现并修正错误。 - 文件...
读书笔记中,我们可能会发现以下几个关键知识点: 1. **众包的起源与发展**:众包的概念最早由《连线》杂志的记者Jeff Howe提出,它起源于开放源代码软件开发和维基百科等项目。随着互联网的普及,众包逐渐应用于...
《编写可读代码的艺术》是一本致力于提升代码可读性的书籍,强调了代码可读性在软件工程中的重要性。...通过编写可读的代码,不仅可以增强团队协作效率,还能为未来的自己或其他接手者减轻理解负担,降低维护难度。
《算法导论》是计算机科学领域的一本经典之作,它深入浅出地介绍了算法的设计、分析和实现。...通过持续的阅读、思考和实践,我们可以不断提升自己的编程技能,为未来在IT行业的职业生涯做好准备。
欢迎阅读Shady Khaled阅读笔记! ASAC! ASAC代表LTUC中的Abdul Aziz Al Ghurair高级计算学院。 ASAC于2019年成立,旨在培养学习者的软件开发和编程技能以及能力,同时使他们有资格获得这些领域当前和未来的就业...
在“web读书笔记”这个压缩包中,我们可以推测它包含了关于Web开发的个人学习记录和项目代码。"自己项目代码"这一标签暗示了这些文件可能是作者在实践Web开发过程中积累的经验和成果,尤其是以“二哥java”为名的子...
《吴恩达机器学习课程资源、作业代码及学习笔记详解》 吴恩达(Andrew Ng)的机器学习课程是全球最受欢迎的在线课程之一,由斯坦福大学教授、Coursera联合创始人吴恩达倾力打造。这个课程深入浅出地介绍了机器学习...
《谭浩强C程序设计》是一本非常经典的C语言学习教材,由谭浩强教授编写,深受初学者和教育者喜爱。这份“谭浩强C程序设计读书笔记...通过认真阅读和实践,你可以逐步掌握C语言的精髓,为未来的编程生涯打下坚实的基础。
源代码部分则提供了实际编程的示例,学习者可以通过阅读和分析这些代码来提升编程能力。代码可能涵盖基础的输入输出、数据类型操作、流程控制语句,到更复杂的函数、类的设计和实现,甚至涉及设计模式的应用。实践是...
无论新手用户还是专业人士,都应该会发现这本应用笔记的阅读体验非常舒适,并且最终能够清晰地理解AURIX™架构特性的支持程度。具体来说,应用笔记介绍了如何构建多核工程、设置编译器等基础知识。 接下来,笔记...
未来,该平台还可以进一步完善,比如增加智能推荐算法,根据用户的阅读习惯推送相关内容,提高用户体验;或者引入社交元素,让用户之间建立更紧密的联系。总之,随着技术的进步和应用场景的不断拓展,该平台将发挥更...
这份资料包含了该课程的读书笔记和实验代码,为学习者提供了丰富的学习资源。 读书笔记部分可能涵盖了以下知识点: 1. **操作系统概述**:介绍操作系统的作用、类型和主要功能,比如进程管理、内存管理、文件系统...
- **核心思想:** 每一行代码都应当承担特定的功能或者责任,无用的代码不仅增加阅读难度还可能导致错误。 - **操作指南:** 定期进行代码审查,去除冗余代码,确保每一段代码都是精炼且必要的。 **4. 避免直接使用...
保留字是可能在未来版本中使用的关键词,尽管当前版本中它们未被使用,但同样不能用作标识符。 3. 原始值和引用值: JavaScript中的值分为原始值(Primitive Value)和引用值(Reference Value)。原始值包括...
北航计算机专业的学习资源是众多学子关注的焦点,这个名为"北航计算机专业课 代码及期末复习笔记.zip"的压缩包文件包含了丰富的学习材料,旨在帮助学生更好地理解和掌握计算机科学的关键知识。其中,源码文件是编程...
这份名为“考试类精品--计算机专业课程备考笔记, 面试准备笔记, 论文阅读笔记.zip”的压缩包文件,显然是一份针对计算机专业学生或求职者精心整理的学习资源集合。它涵盖了备考、面试以及论文阅读三个关键环节,旨在...