第一章 代码的时间和空间
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.
相关推荐
欢迎阅读Shady Khaled阅读笔记! ASAC! ASAC代表LTUC中的Abdul Aziz Al Ghurair高级计算学院。 ASAC于2019年成立,旨在培养学习者的软件开发和编程技能以及能力,同时使他们有资格获得这些领域当前和未来的就业...
缩排格式使java代码易于阅读。由于java是一种自由格式(free-form)的语言,所以,空格,制表符,换行都不会影响程序的执行结果。 注意,尽管一下代码在C和C++中是合法的,但是在java中却不能这样书写: { int ...
源代码说明 这个项目用来记录原始码阅读笔记,包括C,python,未来可能会有go
在阅读本文时,建议读者在阅读的过程中动手实践,尤其是在示例代码部分。通过自己编写和运行代码,加深对凯撒密码加密和解密过程的理解。同时,读者可以借此机会探索简单加密应用场景,如保护个人信息、信息传递等,...
在此存储库中运行代码的安装步骤: 通过运行pip install -r requirements.txt安装python依赖项通过使用您喜欢的软件包管理来安装外部依赖关系graphviz,例如:在mac brew install graphvizTL; DR 用一种有趣的方式...
使用此应用程序,我们已经创建了一个中央位置,用于保存,阅读和分享有关课堂上提出的主题的笔记。 我们的目标是制作一个我们希望在学习过程中拥有的应用程序,该应用程序会使我们的学习过程更加轻松。 尽管有很多...
个人技术博客读书笔记设计数据密集型应用指定系统代码阅读笔记高朗卡夫卡级别数据库岩石数据库TiDB时雄Executor主要作用是产生未来,将执行转换为相应的任务,然后由运行时去执行任务,不断的调用未来的轮询接口,...
阅读笔记 自我介绍 我是Mohammad Zytoon,今年...代码102阅读笔记 任务 关联 Lab02a 读1 Read02a Read02b 阅读03 阅读04 阅读05 阅读06 代码201阅读笔记 任务 关联 读:01 读:02 阅读:03 阅读:04 阅读:05 阅读:06
我强烈建议您阅读讲师在网站上发布的所有论文的课堂笔记和参考。 在阅读本书时,应使用这些笔记本,并且不要超出参考文献的范围。 我建议您观看David Silver的视频并同时阅读本书。 当您完成了几章之后,就开始...
您可以通过下载PDF阅读本自述文件,以正确呈现的打印格式阅读。 介绍 笔记 SYM是一个开放源代码命令行实用程序和一个Ruby库,使用一个更大的项目-Open SSL中提供的经过数学验证的模型和密码来加密您的应用程序秘密...
读书笔记和示例代码 包括 线程基础/同步sync/并发concurrent/容器/线程池 示例代码 JUC容器的源码解析 Synchronized 同步容器 Concurrent 并发容器: Map/List/Queue 阻塞队列 JUC锁: CountDownLatch 闭锁 AQS 锁的...
他们可以阅读我的学历,浏览我的技能,链接到代码示例,查看建议以及链接到社交媒体资料。 这些信息将帮助招聘人员和未来的雇主了解我的个性以及我作为全职Web开发人员的资格。 作者 玛莉亚·哈维利切克(Malia ...
该模板旨在使您的项目组合就绪,以打动将要审核它的未来雇主。 储存库内容 以下是该存储库内容的列表-有关使用它们的说明在下一部分中。 README.md :此repo分支的README解释其内容-您正在阅读 TEMPLATE_README.md...
这是阅读和总结GitHub中的书籍和笔记网站。 介绍 我是As-har Abuhelweh,今年28岁。 我拥有土木工程学士学位。 我曾在大安曼市担任现场工程师。 在活动策划方面,我是一家新兴公司的成员。 我决定将自己的职业转向...
未来几天还会添加更多文件夹 如何使用此仓库? 寻找什么新的。 由于大多数代码保持不变,因此只有几位发生变化。 找到他们。 你会明白的。 搜索“ #This is new”评论 您如何找到新内容? 查看basicNet回购。 这...
如果在通过Github仓库阅读,点这里切换到。 该网站托管我的项目,帖子和联系信息。 它使用内置++ 堆栈。 本网站支持, 中文内部化。 Netlify CMS。 Netlify身份。 分页。 Mailchimp订阅。 发布分类。 网站...
这个功能很重要,未来将成为jQuery的核心方法,它彻底改变了如何在jQuery中使用ajax。为了实现它,jQuery的全部ajax代码都被改写了。 但是,它比较抽象,初学者很难掌握,网上的教程也不多。所以,我把自己的学习...
读书笔记,先是effective C++,然后是CSAPP 希望每次在Leetcode上遇到的hard都记录一篇 最近在读的espresso逻辑优化源码 未来要完成的: 从零开始完成一个文本编辑器,参考; 或者再开始Neatpad之前,算是简单复习...
面试了好未来,跟谁学,头条,极客保险,百度文库,百度知道等等公司 PHP 面试题汇总、剑指 Offer PHP 代码实现版本 Java 面试 + Java 学习指南 关于面试/谈 Offer /程序员职场生涯等 剑指 Offer 50 题视频讲解 用...
我应该在未来重新审视的问题,因为我花了太长时间来解决它。 *** = 有后续或不同方法的问题。 ^ = 我喜欢的问题。 日志 解决了 150 个问题(截至 2020 年 1 月 3 日)。 解决了 100 个问题(截至 2019 年 10 月 29 ...