SICP Python 描述 2.2 数据抽象

2016-08-12
阅读 5 分钟
1.9k
由于我们希望在程序中表达世界中的大量事物,我们发现它们的大多数都具有复合结构。日期是年月日,地理位置是精度和纬度。为了表示位置,我们希望程序语言具有将精度和纬度“粘合”为一对数据的能力 -- 也就是一个复合数据结构 -- 使我们的程序能够以一种方式操作数据,将位置看做单个概念单元,它拥有两个部分。

SICP Python 描述 第二章 使用对象构建抽象 2.1 引言

2016-08-11
阅读 3 分钟
2.1k
在第一章中,我们专注于计算过程,以及程序设计中函数的作用。我们看到了如何使用原始数据(数值)和原始操作(算术运算),如何通过组合和控制来形成复合函数,以及如何通过给予过程名称来创建函数抽象。我们也看到了高阶函数通过操作通用计算方法来提升语言的威力。这是编程的本质。

SICP Python 描述 1.6 高阶函数

2016-08-10
阅读 10 分钟
2.7k
并且永远不会显式提及square。这种实践适合类似square的简单操作。但是对于更加复杂的操作会变得困难。通常,缺少函数定义会对我们非常不利,它会强迫我们始终工作在特定操作的层级上,这在语言中非常原始(这个例子中是乘法),而不是高级操作。我们应该从强大的编程语言索取的东西之一,是通过将名称赋为常用模式来构...

SICP Python 描述 1.5 控制

2016-08-09
阅读 6 分钟
2.1k
我们现在可以定义的函数能力有限,因为我们还不知道一种方法来进行测试,并且根据测试结果来执行不同的操作。控制语句可以让我们完成这件事。它们不像严格的求值子表达式那样从左向右编写,并且可以从它们控制解释器下一步做什么当中得到它们的名称。这可能基于表达式的值。

SICP Python 描述 1.4 实践指南:函数的艺术

2016-08-08
阅读 2 分钟
1.9k
函数是所有程序的要素,无论规模大小,并且在编程语言中作为我们表达计算过程的主要媒介。目前为止,我们讨论了函数的形式特性,以及它们如何使用。我们现在跳转到如何编写良好的函数这一话题。

SICP Python 描述 1.3 定义新的函数

2016-08-08
阅读 6 分钟
2k
1.3 定义新的函数 来源:1.3 Defining New Functions 译者:飞龙 协议:CC BY-NC-SA 4.0 我们已经在 Python 中认识了一些在任何强大的编程语言中都会出现的元素: 数值是内建数据,算数运算是函数。 嵌套函数提供了组合操作的手段。 名称到值的绑定提供了有限的抽象手段。 现在我们将要了解函数定义,一个更加强大的抽象...

SICP Python 描述 1.2 编程元素

2016-08-05
阅读 5 分钟
2.9k
编程语言是操作计算机来执行任务的手段,它也在我们组织关于过程的想法中,作为一种框架。程序用于在编程社群的成员之间交流这些想法。所以,程序必须为人类阅读而编写,并且仅仅碰巧可以让机器执行。

SICP Python描述 1.1 引言

2016-08-04
阅读 5 分钟
3k
计算机科学是一个极其宽泛的学科。全球的分布式系统、人工智能、机器人、图形、安全、科学计算,计算机体系结构和许多新兴的二级领域,每年都会由于新技术和新发现而扩展。计算机科学的快速发展广泛影响了人类生活。商业、通信、科学、艺术、休闲和政治都被计算机领域彻底改造。

Java 8 并发教程:原子变量和 ConcurrentMa

2016-07-23
阅读 7 分钟
3.9k
欢迎阅读我的Java8多线程编程系列教程的第三部分。这个教程包含并发API的两个重要部分:原子变量和ConcurrentMap。由于最近发布的Java8中的lambda表达式和函数式编程,二者都有了极大的改进。所有这些新特性会以一些简单易懂的代码示例来描述。希望你能喜欢。

Java 8 并发教程:同步和锁

2016-07-23
阅读 7 分钟
7.1k
欢迎阅读我的Java8并发教程的第二部分。这份指南将会以简单易懂的代码示例来教给你如何在Java8中进行并发编程。这是一系列教程中的第二部分。在接下来的15分钟,你将会学会如何通过同步关键字,锁和信号量来同步访问共享可变变量。

[译] 在 Nashron 中使用 Backbone.js

2016-07-22
阅读 3 分钟
2.4k
这个例子展示了如何在Java8的Nashron JavaScript引擎中使用Backbone.js模型。Nashron在2014年三月首次作为Java SE 8 的一部分发布,并通过以原生方式在JVM上运行脚本扩展了Java的功能。对于Java Web开发者,Nashron尤其实用,因为它可以在Java服务器上复用现有的客户端代码。传统的Node.js具有明显优势,但是Nashorn也能...

Java 8 API 示例:字符串、数值、算术和文件

2016-07-22
阅读 5 分钟
3k
大量的教程和文章都涉及到Java8中最重要的改变,例如lambda表达式和函数式数据流。但是此外许多现存的类在JDK 8 API中也有所改进,带有一些实用的特性和方法。

[译] Java 8 Nashorn 教程

2016-07-22
阅读 9 分钟
7.3k
这个教程中,你会通过简单易懂的代码示例,来了解Nashorn JavaScript引擎。Nashorn JavaScript引擎是Java SE 8 的一部分,并且和其它独立的引擎例如Google V8(用于Google Chrome和Node.js的引擎)互相竞争。Nashorn通过在JVM上,以原生方式运行动态的JavaScript代码来扩展Java的功能。

Java 8 简明教程

2016-07-21
阅读 15 分钟
1.6k
欢迎阅读我编写的Java 8介绍。本教程将带领你一步一步地认识这门语言的新特性。通过简单明了的代码示例,你将会学习到如何使用默认接口方法,Lambda表达式,方法引用和重复注解。看完这篇教程后,你还将对最新推出的API有一定的了解,例如:流控制,函数式接口,map扩展和新的时间日期API等等。

Java 8 并发教程:线程和执行器

2016-07-21
阅读 8 分钟
3.3k
欢迎阅读我的Java8并发教程的第一部分。这份指南将会以简单易懂的代码示例来教给你如何在Java8中进行并发编程。这是一系列教程中的第一部分。在接下来的15分钟,你将会学会如何通过线程,任务(tasks)和 exector services来并行执行代码。

在 Java 8 中避免 Null 检查

2016-07-21
阅读 2 分钟
1.9k
如何预防 Java 中著名的 NullPointerException 异常?这是每个 Java 初学者迟早会问到的关键问题之一。而且中级和高级程序员也在时时刻刻规避这个错误。其是迄今为止 Java 以及很多其他编程语言中最流行的一种错误。

使用Intellij IDEA 解决Java8的数据流问题

2016-07-21
阅读 3 分钟
3.7k
Java8在2014年三月发布,距离现在(2015年三月五号)快有一年了。我们打算将Pondus的所有生产服务器升级到这一新版本。从那时起,我们将大部分代码库迁移到lambda表达式、数据流和新的日期API上。我们也会使用Nashorn来把我们的应用中运行时发生改变的部分变成动态脚本。

Java 8 数据流教程

2016-07-21
阅读 17 分钟
2.3k
这个示例驱动的教程是Java8数据流(Stream)的深入总结。当我第一次看到StreamAPI时,我非常疑惑,因为它听起来和Java IO的InputStream 和 OutputStream一样。但是Java8的数据流是完全不同的东西。数据流是单体(Monad),并且在Java8函数式编程中起到重要作用。

Kali Linux 秘籍 第四章 信息收集

2016-07-19
阅读 10 分钟
3.3k
我也强调这一阶段的一个重要方面,它就是记录。在编写这本书的时候,最新的Kali发行版包含了一组工具用于帮助我们核对和组织来自目标的数据,允许我们更好地侦查目标。类似Maltego CaseFile和 KeepNote的工具就是一个例子。

操作系统思考 第十章 条件变量

2016-07-12
阅读 7 分钟
2.6k
像上一章所展示的那样,许多简单的同步问题都可以用互斥体解决。这一章中我会介绍一个更大的挑战,著名的“生产者-消费者”问题,以及一个用于解决它的新工具,条件变量。

操作系统思考 第十一章 C语言中的信号量

2016-07-11
阅读 5 分钟
3.8k
这一章展示了C语言用于处理信号量的API,以及我用于使它更加容易使用的代码。而且它展示了一个终极挑战:你能不能使用互斥体和条件变量来实现一个信号量?

操作系统思考 第九章 线程

2016-07-11
阅读 5 分钟
2k
当你创建进程时,操作系统会创建一块新的地址空间,它包含text段、static段、和堆区。它也会创建新的“执行线程”,这包括程序计数器和其它硬件状态,以及运行时栈。

操作系统思考 第八章 多任务

2016-07-10
阅读 3 分钟
2.1k
在当前的许多系统上,CPU包含多个核心,也就是说它可以同时运行多个进程。而且,每个核心都具有“多任务”的能力,也就是说它可以从一个进程快速切换到另一个进程,创造出同时运行许多进程的幻象。

操作系统思考 第七章 缓存

2016-07-09
阅读 7 分钟
2.8k
当程序启动时,代码(或者程序文本)通常位于硬盘上。操作系统创建新的进程来运行程序,之后“加载器”将代码从存储器复制到主存中,并且通过调用main来启动程序。

操作系统思考 第零章 前言

2016-07-07
阅读 2 分钟
4.7k
在许多计算机科学的课程中,操作系统都是高级话题。学生在上这门课之前,它们已经知道了如何使用C语言编程,他们也可能上过计算机体系结构(组成原理)的课程。通常这门课的目标是让学生们接触操作系统的设计与实现,并带有一些他们未来在该领域所研究的隐含假设,或者让他们手写OS的一部分。

操作系统思考 第六章 内存管理

2016-07-07
阅读 4 分钟
2.6k
malloc,它接受表示字节单位的大小的整数,返回指向新分配的、(至少)为指定大小的内存块的指针。如果不能满足要求,它会返回特殊的值为NULL的指针。

操作系统思考 第五章 更多的位与字节

2016-07-06
阅读 4 分钟
1.8k
对于负数,最清晰的表示法使用符号位来表明一个数是正数还是负数。但是还有另一种表示法,叫做“补码”(two's complement),它更加普遍,因为它和硬件配合得更好。

操作系统思考 第四章 文件和文件系统

2016-07-05
阅读 4 分钟
2.9k
当一个进程运行完毕(或崩溃)时,任何储存在主存的数据都会丢失。但是储存在机械硬盘(HDD)或固态硬盘(SSD)的数据是“持久”的。也就是说,它在进程结束之后,甚至关机之后仍旧存在。

操作系统思考 第三章 虚拟内存

2016-07-02
阅读 5 分钟
2.2k
比特是二进制的数字,也是信息的单位。一个比特有两种可能的情况,写为0或者1。如果是两个比特,那就有四种可能的组合,00、01、10和11。通常,如果你有b个比特,你就可以表示2 ** b个值之一。一个字节是8个比特,所以它可以储存256个值之一。

操作系统思考 第二章 进程

2016-06-30
阅读 3 分钟
2.1k
抽象(Abstraction):抽象是复杂事物的简单表示。例如,如果你开车的话,应该知道车轮向左转的时候车也会向左行驶,反之亦然。当然,方向盘由一系列机械和传动系统所连接,用于使轮子转向,并且轮子和路面的相互作用方式也很复杂。但是作为一个司机,你通常不需要考虑这些细节。你可以仅仅建立方向盘的心智模型,这种心...