0%

基本信息

名称: HTML5敏捷实践
作者信息: 作者: Jesse Cravens [ 英文 pdf ]

简单介绍

HTML5 is already transforming web development, though it’s still under construction in some areas. HTML5 Hacks shows you how to use the latest tools to make your sites and applications more interactive, more functional, and more capable of competing with desktop applications. Each hack shows you how to make a concrete improvement, applying the latest in JavaScript, HTML, and CSS power to common web development issues. Learn the latest techniques with HTML, CSS, and JavaScript Discover new markup and multimedia features Take off with new graphics features in Canvas and SVG Use new presentation models and tools in CSS3 Apply CSS transformation and animation to reduce the amount of JavaScript you need for exciting sites Implement local storage with hash tables and databases Improve client-server communication with web sockets and XmlHttpRequest

目录

1
2


亚马逊链接

基本信息

名称: 黑客攻防技术宝典. iOS实战篇(英文版)
作者信息: 作者: Charlie Miller [ 英文 epub ]

简单介绍

Discover all the security risks and exploits that can threaten iOS-based mobile devices iOS is Apple’s mobile operating system for the iPhone and iPad. With the introduction of iOS5, many security issues have come to light. This book explains and discusses them all. The award-winning author team, experts in Mac and iOS security, examines the vulnerabilities and the internals of iOS to show how attacks can be mitigated. The book explains how the operating system works, its overall security architecture, and the security risks associated with it, as well as exploits, rootkits, and other payloads developed for it. Covers iOS security architecture, vulnerability hunting, exploit writing, and how iOS jailbreaks work Explores iOS enterprise and encryption, code signing and memory protection, sandboxing, iPhone fuzzing, exploitation, ROP payloads, and baseband attacks Also examines kernel debugging and exploitation Companion website includes source code and tools to facilitate your efforts iOS Hacker’s Handbook arms you with the tools needed to identify, understand, and foil iOS attacks.

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Introduction xv 

Chapter 1 iOS Security Basics 1

Chapter 2 iOS in the Enterprise 15

Chapter 3 Encryption 47

Chapter 4 Code Signing and Memory Protections 69

Chapter 5 Sandboxing 107

Chapter 6 Fuzzing iOS Applications 139

Chapter 7 Exploitation 185

Chapter 8 Return-Oriented Programming 219

Chapter 9 Kernel Debugging and Exploitation 249

Chapter 10 Jailbreaking 297

Chapter 11 Baseband Attacks 327

Appendix References 365

Index 369

亚马逊链接

基本信息

名称: Java How to Program (9th Edition)
作者信息: 作者: Paul Deitel [ 英文 pdf ]

简单介绍

The Deitels’ groundbreaking How to Program series offers unparalleled breadth and depth of object-oriented programming concepts and intermediate-level topics for further study. Their Live Code Approach features thousands of lines of code in hundreds of complete working programs. This enables readers to confirm that programs run as expected. Java How to Program (Early Objects) 9e contains an optional extensive OOD/UML 2 case study on developing and implementing the software for an automated teller machine.This edition covers both Java SE7 and SE6.

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Preface xxiii
Before You Begin xxxiii
1 Introduction to Computers and Java 1
1.1 Introduction 2
1.2 Computers: Hardware and Software 5
1.3 Data Hierarchy 6
1.4 Computer Organization 8
1.5 Machine Languages, Assembly Languages and High-Level Languages 10
1.6 Introduction to Object Technology 11
1.7 Operating Systems 13
1.8 Programming Languages 16
1.9 Java and a Typical Java Development Environment 18
1.10 Test-Driving a Java Application 22
1.11 Web 2.0: Going Social 26
1.12 Software Technologies 29
1.13 Keeping Up-to-Date with Information Technologies 31
1.14 Wrap-Up 32

2 Introduction to Java Applications 37 2.1 Introduction 38 2.2 Your First Program in Java: Printing a Line of Text 38 2.3 Modifying Your First Java Program 44 2.4 Displaying Text with printf 46 2.5 Another Application: Adding Integers 47 2.6 Memory Concepts 52 2.7 Arithmetic 53 2.8 Decision Making: Equality and Relational Operators 56 2.9 Wrap-Up 60

3 Introduction to Classes, Objects, Methods and Strings 71 3.1 Introduction 72 3.2 Declaring a Class with a Method and Instantiating an Object of a Class 72 3.3 Declaring a Method with a Parameter 76 3.4 Instance Variables, set Methods and get Methods 79 3.5 Primitive Types vs. Reference Types 84 3.6 Initializing Objects with Constructors 85 3.7 Floating-Point Numbers and Type double 88 3.8 (Optional) GUI and Graphics Case Study: Using Dialog Boxes 92 3.9 Wrap-Up 95

4 Control Statements: Part 1 102 4.1 Introduction 103 4.2 Algorithms 103 4.3 Pseudocode 104 4.4 Control Structures 104 4.5 if Single-Selection Statement 107 4.6 if…else Double-Selection Statement 107 4.7 while Repetition Statement 112 4.8 Formulating Algorithms: Counter-Controlled Repetition 113 4.9 Formulating Algorithms: Sentinel-Controlled Repetition 118 4.10 Formulating Algorithms: Nested Control Statements 125 4.11 Compound Assignment Operators 130 4.12 Increment and Decrement Operators 130 4.13 Primitive Types 134 4.14 (Optional) GUI and Graphics Case Study: Creating Simple Drawings 134 4.15 Wrap-Up 138

5 Control Statements: Part 2 151 5.1 Introduction 152 5.2 Essentials of Counter-Controlled Repetition 152 5.3 for Repetition Statement 154 5.4 Examples Using the for Statement 158 5.5 do…while Repetition Statement 162 5.6 switch Multiple-Selection Statement 164 5.7 break and continue Statements 172 5.8 Logical Operators 173 5.9 Structured Programming Summary 179 5.10 (Optional) GUI and Graphics Case Study: Drawing Rectangles and Ovals 184 5.11 Wrap-Up 187

6 Methods: A Deeper Look 197 6.1 Introduction 198 6.2 Program Modules in Java 198 6.3 static Methods, static Fields and Class Math 200 6.4 Declaring Methods with Multiple Parameters 202 6.5 Notes on Declaring and Using Methods 205 6.6 Method-Call Stack and Activation Records 206 6.7 Argument Promotion and Casting 207 6.8 Java API Packages 208 6.9 Case Study: Random-Number Generation 210 6.9.1 Generalized Scaling and Shifting of Random Numbers 214 6.9.2 Random-Number Repeatability for Testing and Debugging 214 6.10 Case Study: A Game of Chance; Introducing Enumerations 215 6.11 Scope of Declarations 219 6.12 Method Overloading 222 6.13 (Optional) GUI and Graphics Case Study: Colors and Filled Shapes 224 6.14 Wrap-Up 227

7 Arrays and ArrayLists 240 7.1 Introduction 241 7.2 Arrays 242 7.3 Declaring and Creating Arrays 243 7.4 Examples Using Arrays 244 7.5 Case Study: Card Shuffling and Dealing Simulation 254 7.6 Enhanced for Statement 258 7.7 Passing Arrays to Methods 259 7.8 Case Study: Class GradeBook Using an Array to Store Grades 262 7.9 Multidimensional Arrays 268 7.10 Case Study: Class GradeBook Using a Two-Dimensional Array 271 7.11 Variable-Length Argument Lists 278 7.12 Using Command-Line Arguments 279 7.13 Class Arrays 281 7.14 Introduction to Collections and Class ArrayList 284 7.15 (Optional) GUI and Graphics Case Study: Drawing Arcs 286 7.16 Wrap-Up 289

8 Classes and Objects: A Deeper Look 311 8.1 Introduction 312 8.2 Time Class Case Study 312 8.3 Controlling Access to Members 316 8.4 Referring to the Current Object’s Members with the this Reference 317 8.5 Time Class Case Study: Overloaded Constructors 320 8.6 Default and No-Argument Constructors 326 8.7 Notes on Set and Get Methods 326 8.8 Composition 328 8.9 Enumerations 331 8.10 Garbage Collection and Method finalize 333 8.11 static Class Members 334 8.12 static Import 338 8.13 final Instance Variables 339 8.14 Time Class Case Study: Creating Packages 340 8.15 Package Access 345 8.16 (Optional) GUI and Graphics Case Study: Using Objects with Graphics 347 8.17 Wrap-Up 351

9 Object-Oriented Programming: Inheritance 359 9.1 Introduction 360 9.2 Superclasses and Subclasses 361 9.3 protected Members 363 9.4 Relationship between Superclasses and Subclasses 364 9.4.1 Creating and Using a CommissionEmployee Class 364 9.4.2 Creating and Using a BasePlusCommissionEmployee Class 370 9.4.3 Creating a CommissionEmployee—BasePlusCommissionEmployee Inheritance Hierarchy 375 9.4.4 CommissionEmployee—BasePlusCommissionEmployee Inheritance Hierarchy Using protected Instance Variables 377 9.4.5 CommissionEmployee—BasePlusCommissionEmployee Inheritance Hierarchy Using private Instance Variables 380 9.5 Constructors in Subclasses 385 9.6 Software Engineering with Inheritance 386 9.7 Class Object 387 9.8 (Optional) GUI and Graphics Case Study: Displaying Text and Images Using Labels 388 9.9 Wrap-Up 391

10 Object-Oriented Programming: Polymorphism 394 10.1 Introduction 395 10.2 Polymorphism Examples 397 10.3 Demonstrating Polymorphic Behavior 398 10.4 Abstract Classes and Methods 400 10.5 Case Study: Payroll System Using Polymorphism 403 10.5.1 Abstract Superclass Employee 404 10.5.2 Concrete Subclass SalariedEmployee 407 10.5.3 Concrete Subclass HourlyEmployee 408 10.5.4 Concrete Subclass CommissionEmployee 410 10.5.5 Indirect Concrete Subclass BasePlusCommissionEmployee 412 10.5.6 Polymorphic Processing, Operator instanceof and Downcasting 413 10.5.7 Summary of the Allowed Assignments Between Superclass and Subclass Variables 418 10.6 final Methods and Classes 418 10.7 Case Study: Creating and Using Interfaces 419 10.7.1 Developing a Payable Hierarchy 421 10.7.2 Interface Payable 422 10.7.3 Class Invoice 422 10.7.4 Modifying Class Employee to Implement Interface Payable 425 10.7.5 Modifying Class SalariedEmployee for Use in the Payable Hierarchy 427 10.7.6 Using Interface Payable to Process Invoices and Employees Polymorphically 428 10.7.7 Common Interfaces of the Java API 430 10.8 (Optional) GUI and Graphics Case Study: Drawing with Polymorphism 431 10.9 Wrap-Up 433

11 Exception Handling: A Deeper Look 438 11.1 Introduction 439 11.2 Example: Divide by Zero without Exception Handling 439 11.3 Example: Handling ArithmeticExceptions and InputMismatchExceptions 442 11.4 When to Use Exception Handling 447 11.5 Java Exception Hierarchy 447 11.6 finally Block 450 11.7 Stack Unwinding and Obtaining Information from an Exception Object 454 11.8 Chained Exceptions 457 11.9 Declaring New Exception Types 459 11.10 Preconditions and Postconditions 460 11.11 Assertions 461 11.12 (New in Java SE 7) Multi-catch: Handling Multiple Exceptions in One catch 462 11.13 (New in Java SE 7) try-with-Resources: Automatic Resource Deallocation 463 11.14 Wrap-Up 463

12 ATM Case Study, Part 1: Object-Oriented Design with the UML 469 12.1 Case Study Introduction 470 12.2 Examining the Requirements Document 470 12.3 Identifying the Classes in a Requirements Document 478 12.4 Identifying Class Attributes 484 12.5 Identifying Objects’ States and Activities 489 12.6 Identifying Class Operations 493 12.7 Indicating Collaboration Among Objects 499 12.8 Wrap-Up 506

13 ATM Case Study Part 2: Implementing an Object-Oriented Design 510 13.1 Introduction 511 13.2 Starting to Program the Classes of the ATM System 511 13.3 Incorporating Inheritance and Polymorphism into the ATM System 516 13.4 ATM Case Study Implementation 522 13.4.1 Class ATM 523 13.4.2 Class Screen 528 13.4.3 Class Keypad 529 13.4.4 Class CashDispenser 530 13.4.5 Class DepositSlot 531 13.4.6 Class Account 532 13.4.7 Class BankDatabase 534 13.4.8 Class Transaction 537 13.4.9 Class BalanceInquiry 53…

亚马逊链接

基本信息

名称: 浪潮之巅
作者信息: 作者: 吴军 [ 中文 pdf ]

简单介绍

《浪潮之巅》梳理了IT产业发展的历史脉络,叙述了美国硅谷明星公司的兴衰沉浮。通过对各大公司从技术轨迹到经营理念的剖析,作者吴军想向读者展现的并不仅仅是一幅有关科技产业更迭和大公司成长规律的历史景观,而是为了让中国的读者能更真实地了解美国、了解科技产业,以此理解科技创新和商业公平在美国文化生活中的深刻意义

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
序言
前言 有幸见证历史
第 1 章 帝国的余辉—AT&T
第 2 章 蓝色巨人—IBM 公司
第 3 章 “水果”公司的复兴—乔布斯和苹果公司
第 4 章 计算机工业的生态链
第 5 章 奔腾的芯 — 英特尔公司
第 6 章 IT 领域的罗马帝国—微软公司
第 7 章 互联网的金门大桥—思科公司
第 8 章 英名不朽—杨致远、菲洛和雅虎公司
第 9 章 硅谷的见证人—惠普公司
第 10 章 没落的贵族—摩托罗拉公司
第 11 章 硅谷的另一面
第 12 章 短暂的春秋—与机会失之交臂的公司
第 13 章 幕后的英雄—风险投资
第 14 章 信息产业的规律性
第 15 章 硅谷的摇篮—斯坦福大学
第 16 章 科技公司的吹鼓手—投资银行
第 17 章 挑战者—Google 公司
第 18 章 成功的转基因—诺基亚、3M、GE 公司
第 19 章 印钞机—最佳的商业模式
第 20 章 互联网 2.0
第 21 章 金融风暴的冲击
第 22 章  云计算
第 23 章 下一个 Google
后记
索引

亚马逊链接

基本信息

名称: Objective-C程序设计 第4版
作者信息: 作者: Stephen G. Kochan [ 中文 pdf ]

简单介绍

这是一本Objective-C编程领域最畅销的书籍,内容涵盖Xcode 4.2和自动引用计数(ARC)。
本书详细介绍了Objective-C和苹果iOS、Mac平台面向对象程序编程的知识。
本书结合独特的学习方法,在每章都编写有大量的小程序例子和练习,使Objective-C程序设计适合于课堂教学和自学。
本书已经为iOS 5和Xcode 4.2中的重大变更做了全面更新,最大的改动是引入了自动引用计数(ARC),并详细说明了如何在Objective-C编程过程中使用ARC提升和简化内存管理。

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
1引言
1.1本书内容
1.2本书组织方式
1.3支持
1.4致谢
1.5第4版前言
2Objective—C编程
2.1编译并运行程序
2.1.1使用Xcode
2.1.2使用Terminal
2.2解释第一个程序
2.3显示变量的值
2.4小结
2.5练习
3类、对象和方法
3.1到底什么是对象
3.2实例和方法
3.3用于处理分数的Objective—C类
3.4@interface部分
3.4.1选择名称
3.4.2类方法和实例方法
3.5@implementation部分
3.6program部分
3.7实例变量的访问及数据封装
3.8小结
3.9练习
4数据类型和表达式
4.1数据类型和常量
4.1.1int类型
4.1.2float类型
4.1.3char类型
4.1.4限定词:long、long long、short、unsigned及signed
4.1.5id类型
4.2算术表达式
4.2.1运算符的优先级
4.2.2整数运算和一元负号运算符
4.2.3模运算符
4.2.4整型值和浮点值的相互转换
4.2.5类型转换运算符
4.3赋值运算符
4.4Calculator类
4.5练习
5循环结构
5.1for语句
5.1.1键盘输入
5.1.2嵌套的for循环
5.1.3for循环的变体
5.2while语句
5.3do语句
5.4break语句
5.5continue语句
5.6小结
5.7练习
6选择结构
6.1if语句
6.1.1if—else结构
6.1.2复合条件测试
6.1.3嵌套的if语句
6.1.4else if结构
6.2switch语句
6.3Boolean变量
6.4条件运算符
6.5练习
7类
7.1分离接口和实现文件
7.2合成存取方法
7.3使用点运算符访问属性
7.4具有多个参数的方法
7.4.1不带参数名的方法
7.4.2关于分数的操作
7.5局部变量
7.5.1方法的参数
7.5.2static关键字
7.6self关键字
7.7在方法中分配和返回对象
7.8练习
8继承
8.1一切从根类开始
8.2通过继承来扩展:添加新方法
8.2.1Point类和对象创建
8.2.2@class指令
8.2.3具有对象的类
8.3覆写方法
8.4抽象类
8.5练习
9多态、动态类型和动态绑定
9.1多态:相同的名称,不同的类
9.2动态绑定和id类型
9.3编译时和运行时检查
9.4id数据类型与静态类型
9.5有关类的问题
9.6使用@try处理异常
9.7练习
10变量和数据类型
10.1对象的初始化
10.2作用域回顾
10.2.1控制实例变量作用域的指令
10.2.2全局变量
10.2.3静态变量
10.3枚举数据类型
10.4typedef语句
10.5数据类型转换
10.6位运算符
10.6.1按位与运算符
10.6.2按位或运算符
10.6.3按位异或运算符
10.6.4一次求反运算符
10.6.5向左移位运算符
10.6.6向右移位运算符
10.7练习
……
11分类和协议
12预处理程序
13基本的C语言特性
14Foundation框架简介
15数字、字符串和集合
16使用文件
17内存管理和自动引用计数
18复制对象
19归档
20Cocoa和Cocoa Touch简介
21编写iOS应用程序
附录A术语表
附录B地址簿示例源代码

亚马逊链接

基本信息

名称: 七周七语言
作者信息: 作者: 泰特 [ 中文 pdf ]

简单介绍

《7周7语言:理解多种编程范型》适合从事程序设计工作的人员阅读。
Bruce A. Tate是软件行业的一名老兵,他有一个宏伟目标:用一本书的篇幅切中要害地探索七种不同的语言。《七周七语言:理解多种编程范型》就是他的成果。书中介绍了Ruby、Io、Prolog、Scala、Erlang、Cloiure和Haskell这七种语言。关注每一门语言的精髓和特性,重点解决如下问题:这门语言的类型模型是什么。编程范型是什么。如何与其交互。有哪些决策构造和核心数据结构,有哪些独特的核心特性。
在这个飞速发展的信息时代。程序员仅仅掌握甚至精通一门语言是远远不够的。了解多门语言蕴涵的思维方式。在编码中互相借鉴。再挑出一两门对自己口味的语言深入学习,这些已经成为在软件行业中安身立命之本。从这个意义上说。每个程序员都应该看看这本《七周七语言》。

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
第1章 简介 1
1.1 不走寻常路 1
1.2 语言 2
1.3 谁应该买这本书 4
1.3.1 学会如何学习 4
1.3.2 乱世英雄 4
1.4 谁不应该买这本书 5
1.4.1 超越语法 5
1.4.2 不是安装指南 6
1.4.3 不是编程参考 6
1.4.4 严格督促 6
1.5 最后一击 7

第2章 Ruby 8 2.1 Ruby简史 9 2.2 第一天:找个保姆 10 2.2.1 快速起步 10 2.2.2 从命令行执行Ruby 10 2.2.3 Ruby的编程模型 11 2.2.4 判断 12 2.2.5 鸭子类型 15 2.2.6 第一天我们学到了什么 16 2.2.7 第一天自习 16 2.3 第二天:从天而降 17 2.3.1 定义函数 17 2.3.2 数组 17 2.3.3 散列表 19 2.3.4 代码块和yield 20 2.3.5 定义类 22 2.3.6 编写Mixin 25 2.3.7 模块、可枚举和集合 26 2.3.8 第二天我们学到了什么 27 2.3.9 第二天自习 28 2.4 第三天:重大改变 28 2.4.1 打开类 29 2.4.2 使用method_missing 30 2.4.3 模块 31 2.4.4 第三天我们学到了什么 35 2.4.5 第三天自习 35 2.5 趁热打铁 35 2.5.1 核心优势 35 2.5.2 不足之处 37 2.5.3 最后思考 37

第3章 Io 38 3.1 Io简介 38 3.2 第一天:逃学吧,轻松一下 39 3.2.1 开场白 39 3.2.2 对象、原型和继承 40 3.2.3 方法 43 3.2.4 列表和映射 44 3.2.5 true、false、nil以及单例 46 3.2.6 Steve Dekorte访谈录 48 3.2.7 第一天我们学到了什么 49 3.2.8 第一天自习 50 3.3 第二天:香肠大王 50 3.3.1 条件和循环 51 3.3.2 运算符 52 3.3.3 消息 54 3.3.4 反射 56 3.3.5 第二天我们学到了什么 57 3.3.6 第二天自习 57 3.4 第三天:花车游行和各种奇妙经历 58 3.4.1 领域特定语言 58 3.4.2 Io的method_missing 60 3.4.3 并发 62 3.4.4 第三天我们学到了什么 64 3.4.5 第三天自习 64 3.5 趁热打铁 65 3.5.1 核心优势 65 3.5.2 不足之处 66 3.5.3 最后思考 66

第4章 Prolog 67 4.1 关于Prolog 68 4.2 第一天:一名优秀的司机 68 4.2.1 基本概况 68 4.2.2 基本推论和变量 69 4.2.3 填空 70 4.2.4 合一,第一部分 73 4.2.5 实际应用中的Prolog 75 4.2.6 第一天我们学到了什么 77 4.2.7 第一天自习 77 4.3 第二天:离瓦普纳法官开演还有15分钟 78 4.3.1 递归 78 4.3.2 列表和元组 79 4.3.3 列表与数学运算 82 4.3.4 在两个方向上使用规则 83 4.3.5 第二天我们学到了什么 86 4.3.6 第二天自习 87 4.4 第三天:维加斯的爆发 87 4.4.1 解决数独问题 87 4.4.2 八皇后问题 91 4.4.3 第三天我们学到了什么 96 4.4.4 第三天自习 96 4.5 趁热打铁 96 4.5.1 核心优势 97 4.5.2 不足之处 97 4.5.3 最后思考 98

第5章 Scala 99 5.1 关于Scala 99 5.1.1 与Java的密切关系 100 5.1.2 没有盲目崇拜 100 5.1.3 Martin Odersky访谈录 100 5.1.4 函数式编程与并发 101 5.2 第一天:山丘上的城堡 102 5.2.1 Scala 类型 102 5.2.2 表达式与条件 103 5.2.3 循环 105 5.2.4 范围与元组 107 5.2.5 Scala中的类 109 5.2.6 扩展类 111 5.2.7 第一天我们学到了什么 113 5.2.8 第一天自习 114 5.3 第二天:修剪灌木丛和其他新把戏 114 5.3.1 对比var和val 115 5.3.2 集合 115 5.3.3 集合与函数 119 5.3.4 第二天我们都学到了什么 124 5.3.5 第二天自习 124 5.4 第三天:剪断绒毛 125 5.4.1 XML 125 5.4.2 模式匹配 126 5.4.3 并发 128 5.4.4 实际中的并发 129 5.4.5 第三天我们学到了什么 132 5.4.6 第三天自习 132 5.5 趁热打铁 133 5.5.1 核心优势 133 5.5.2 不足之处 134 5.5.3 最后思考 135

第6章 Erlang 136 6.1 Erlang简介 136 6.1.1 为并发量身打造 137 6.1.2 Joe Armstrong博士访谈录 138 6.2 第一天:以常人面目出现 139 6.2.1 新手上路 140 6.2.2 注释、变量和表达式 140 6.2.3 原子、列表和元组 141 6.2.4 模式匹配 142 6.2.5 函数 144 6.2.6 第一天我们学到了什么 147 6.2.7 第一天自习 147 6.3 第二天:改变结构 148 6.3.1 控制结构 148 6.3.2 匿名函数 150 6.3.3 列表和高阶函数 150 6.3.4 列表的一些高级概念 153 6.3.5 第二天我们学到了什么 156 6.3.6 第二天自习 157 6.4 第三天: 红药丸 157 6.4.1 基本并发原语 157 6.4.2 同步消息 160 6.4.3 链接进程以获得可靠性 162 6.4.4 第三天我们学到了什么 167 6.4.5 第三天自习 167 6.5 趁热打铁 167 6.5.1 核心优势 168 6.5.2 不足之处 169 6.5.3 最后思考 169

第7章 Clojure 170 7.1 Clojure入门 170 7.1.1 一切皆Lisp 170 7.1.2 JVM 171 7.1.3 为并发更新 171 7.2 第一天:训练Luke 172 7.2.1 调用基本函数 172 7.2.2 字符串和字符 174 7.2.3 布尔值和表达式 175 7.2.4 列表、映射表、集合以及向量 176 7.2.5 定义函数 179 7.2.6 绑定 180 7.2.7 匿名函数 182 7.2.8 Rich Hickey访谈录 183 7.2.9 第一天我们学到了什么 184 7.2.10 第一天自习 185 7.3 第二天:Yoda与原力 185 7.3.1 用loop和recur递归 185 7.3.2 序列 186 7.3.3 延迟计算 189 7.3.4 defrecord和protocol 191 7.3.5 宏 193 7.3.6 第二天我们学到了什么 194 7.3.7 第二天自习 195 7.4 第三天:一瞥魔鬼 195 7.4.1 引用和事务内存 196 7.4.2 使用原子 197 7.4.3 使用代理 198 7.4.4 future 200 7.4.5 还差什么 200 7.4.6 第三天我们学到了什么 201 7.4.7 第三天自习 201 7.5 趁热打铁 201 7.5.1 Lisp悖论 202 7.5.2 核心优势 202 7.5.3 不足之处 203 7.5.4 最后思考 204

第8章 Haskell 205 8.1 Haskell简介 205 8.2 第一天:逻辑 206 8.2.1 表达式和基本类型 206 8.2.2 函数 208 8.2.3 元组和列表 211 8.2.4 生成列表 214 8.2.5 Philip Wadler访谈录 217 8.2.6 第一天我们学到了什么 218 8.2.7 第一天自习 218 8.3 第二天:Spock的超凡力量 218 8.3.1 高阶函数 219 8.3.2 偏应用函数和柯里化 220 8.3.3 惰性求值 221 8.3.4 Simon Peyton-Jones访谈录 223 8.3.5 第二天我们学到了什么 224 8.3.6 第二天自习 225 8.4 第三天:心灵融合 226 8.4.1 类与类型 226 8.4.2 monad 231 8.4.3 第三天我们学到了什么 236 8.4.4 第三天自习 237 8.5 趁热打铁 237 8.5.1 核心优势 237 8.5.2 不足之处 238 8.5.3 最后思考 239

第9章 落幕时分 240 9.1 编程模型 240 9.1.1 面向对象(Ruby、Scala) 241 9.1.2 原型编程(Io) 241 9.1.3 约束-逻辑编程(Prolog) 241 9.1.4 函数式编程(Scala、Erlang、Clojure、Haskell) 241 9.1.5 范型演进之路 242 9.2 并发 242 9.2.1 控制可变状态 243 9.2.2 Io、Erlang和Scala中的actor 243 9.2.3 future 243 9.2.4 事务型内存 243 9.3 编程结构 244 9.3.1 列表解析 244 9.3.2 monad 244 9.3.3 匹配 245 9.3.4 合一 246 9.4 发现自己的旋律 246

附录 参考书目 247

亚马逊链接

基本信息

名称: 深入理解计算机系统
作者信息: 作者: 布莱恩特 [ 中文 pdf ]

简单介绍

“2005年,我开始采用Bryant和O’Hallaron的这本书作为本科生计算机系统课程的教材。现今,这本书仍然是我的计算机系统课程教科书的首选。”
  ——Mirela Damian,维拉诺瓦大学
“本书表述清晰、恰到好处——举重若轻地呈现了那些非常复杂的内容。”
  ——Ibrahim Matta,波士顿大学
“这是一本学习计算机硬件和软件如何‘真正’协同工作的好书,还教会你为什么了解这些知识会使你成为一个更有价值的程序员。本书还帮你为学习像操作系统和编译器这样的高级课程做好准备。在本书中,我最喜欢的章节是关于缓存的,当我第一次发现缓存有多重要时,真是难以置信!”
  ——Vishal Shah,Ask.com总架构师

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
出版者的话
译者序
前言
第1章 计算机系统漫游 1
1.1 信息就是位+上下文 1
1.2 程序被其他程序翻译成不同的格式 3
1.3 了解编译系统如何工作是大有益处的 4
1.4 处理器读并解释存储在存储器中的指令 5
1.4.1 系统的硬件组成 5
1.4.2 运行hello程序 7
1.5 高速缓存至关重要 7
1.6 存储设备形成层次结构 9
1.7 操作系统管理硬件 10
1.7.1 进程 11
1.7.2 线程 12
1.7.3 虚拟存储器 12
1.7.4 文件 13
1.8 系统之间利用网络通信 13
1.9 重要主题 15
1.9.1 并发和并行 15
1.9.2 计算机系统中抽象的重要性 17
1.10 小结 17
参考文献说明 18

第一部分 程序结构和执行 第2章 信息的表示和处理 20 2.1 信息存储 22 2.1.1 十六进制表示法 22 2.1.2 字 25 2.1.3 数据大小 25 2.1.4 寻址和字节顺序 26 2.1.5 表示字符串 31 2.1.6 表示代码 31 2.1.7 布尔代数简介 32 2.1.8 C语言中的位级运算 34 2.1.9 C语言中的逻辑运算 36 2.1.10 V语言中的移位运算 36 2.2 整数表示 38 2.2.1 整型数据类型 38 2.2.2 无符号数的编码 39 2.2.3 补码编码 40 2.2.4 有符号数和无符号数之间的转换 44 2.2.5 C语言中的有符号数与无符号数 47 2.2.6 扩展一个数字的位表示 49 2.2.7 截断数字 51 2.2.8 关于有符号数与无符号数的建议 52 2.3 整数运算 54 2.3.1 无符号加法 54 2.3.2 补码加法 57 2.3.3 补码的非 59 2.3.4 无符号乘法 60 2.3.5 补码乘法 60 2.3.6 乘以常数 63 2.3.7 除以2的幂 64 2.3.8 关于整数运算的最后思考 67 2.4 浮点数 67 2.4.1 二进制小数 68 2.4.2 IEEE浮点表示 70 2.4.3 数字示例 71 2.4.4 舍入 74 2.4.5 浮点运算 76 2.4.6 C语言中的浮点数 77 2.5 小结 79 参考文献说明 80 家庭作业 80 练习题答案 90

第3章 程序的机器级表示 102 3.1 历史观点 103 3.2 程序编码 105 3.2.1 机器级代码 106 3.2.2 代码示例 107 3.2.3 关于格式的注解 109 3.3 数据格式 111 3.4 访问信息 112 3.4.1 操作数指示符 112 3.4.2 数据传送指令 114 3.4.3 数据传送示例 116 3.5 算术和逻辑操作 118 3.5.1 加载有效地址 118 3.5.2 一元操作和二元操作 119 3.5.3 移位操作 120 3.5.4 讨论 120 3.5.5 特殊的算术操作 122 3.6 控制 123 3.6.1 条件码 124 3.6.2 访问条件码 125 3.6.3 跳转指令及其编码 127 3.6.4 翻译条件分支 129 3.6.5 循环 132 3.6.6 条件传送指令 139 3.6.7 switch语句 144 3.7 过程 149 3.7.1 栈帧结构 149 3.7.2 转移控制 150 3.7.3 寄存器使用惯例 151 3.7.4 过程示例 152 3.7.5 递归过程 156 3.8 数组分配和访问 158 3.8.1 基本原则 158 3.8.2 指针运算 159 3.8.3 嵌套的数组 159 3.8.4 定长数组 161 3.8.5 变长数组 163 3.9 异质的数据结构 164 3.9.1 结构 164 3.9.2 联合 167 3.9.3 数据对齐 170 3.10 综合:理解指针 172 3.11 应用:使用GDB调试器 174 3.12 存储器的越界引用和缓冲区溢出 175 3.13 x86-64:将ia32扩展到64位 183 3.13.1 x86-64的历史和动因 184 3.13.2 x86-64简介 185 3.13.3 访问信息 187 3.13.4 控制 192 3.13.5 数据结构 200 3.13.6 关于x86-64的总结性评论 200 3.14 浮点程序的机器级表示 201 3.15 小结 201 参考文献说明 202 家庭作业 202 练习题答案 212

第4章 处理器体系结构2 30 4.1 Y86指令集体系结构 231 4.1.1 程序员可见的状态 231 4.1.2 Y86指令 232 4.1.3 指令编码 233 4.1.4 Y86异常 237 4.1.5 Y86程序 237 4.1.6 一些Y86指令的详情 241 4.2 逻辑设计和硬件控制语言HCL 242 4.2.1 逻辑门 243 4.2.2 组合电路和HCL布尔表达式 243 4.2.3 字级的组合电路和HCL整数表达式 245 4.2.4 集合关系 248 4.2.5 存储器和时钟 248 4.3 y86的顺序实现 250 4.3.1 将处理组织成阶段 250 4.3.2 SEQ硬件结构 258 4.3.3 SEQ的时序 259 4.3.4 SEQ阶段的实现 262 4.4 流水线的通用原理 267 4.4.1 计算流水线 268 4.4.2 流水线操作的详细说明 269 4.4.3 流水线的局限性 271 4.4.4 带反馈的流水线系统272 4.5 Y86的流水线实现273 4.5.1 SEQ+:重新安排计算阶段 273 4.5.2 插入流水线寄存器 276 4.5.3 对信号进行重新排列和标号 277 4.5.4 预测下一个PC 279 4.5.5 流水线冒险 280 4.5.6 用暂停来避免数据冒险 283 4.5.7 用转发来避免数据冒险 285 4.5.8 加载/使用数据冒险 288 4.5.9 异常处理 289 4.5.10 pipe各阶段的实现 291 4.5.11 流水线控制逻辑 297 4.5.12 性能分析 305 4.5.13 未完成的工作 306 4.6 小结 308 参考文献说明309 家庭作业309 练习题答案 314

第5章 优化程序性能 324 5.1 优化编译器的能力和局限性 325 5.2 表示程序性能 328 5.3 程序示例 330 5.4 消除循环的低效率 332 5.5 减少过程调用 336 5.6 消除不必要的存储器引用 336 5.7 理解现代处理器 340 5.7.1 整体操作 340 5.7.2 功能单元的性能 343 5.7.3 处理器操作的抽象模型 344 5.8 循环展开 348 5.9 提高并行性 351 5.9.1 多个累积变量 351 5.9.2 重新结合变换 354 5.10 优化合并代码的结果小结 358 5.11 一些限制因素 359 5.11.1 寄存器溢出359 5.11.2 分支预测和预测错误处罚 360 5.12 理解存储器性能 363 5.12.1 加载的性能 363 5.12.2 存储的性能 364 5.13 应用:性能提高技术 369 5.14 确认和消除性能瓶颈 369 5.14.1 程序剖析 370 5.14.2 使用剖析程序来指导优化 371 5.14.3 Amdahl定律 374 5.15 小结 375 参考文献说明 375 家庭作业 376 练习题答案 378

第6章 存储器层次结构 382 6.1 存储技术 382 6.1.1 随机访问存储器 383 6.1.2 磁盘存储 389 6.1.3 固态硬盘 398 6.1.4 存储技术趋势 399 6.2 局部性 401 6.2.1 对程序数据引用的局部性 402 6.2.2 取指令的局部性 403 6.2.3 局部性小结 403 6.3 存储器层次结构 405 6.3.1 存储器层次结构中的缓存 406 6.3.2 存储器层次结构概念小结 408 6.4 高速缓存存储器 408 6.4.1 通用的高速缓存存储器结构 409 6.4.2 直接映射高速缓存 410 6.4.3 组相联高速缓存 416 6.4.4 全相联高速缓存 418 6.4.5 有关写的问题 420 6.4.6 一个真实的高速缓存层次结构的解剖 421 6.4.7 高速缓存参数的性能影响 422 6.5 编写高速缓存友好的代码 423 6.6 综合:高速缓存对程序性能的影响 426 6.6.1 存储器山 426 6.6.2 重新排列循环以提高空间局部性 430 6.6.3 在程序中利用局部性 433 6.7 小结 433 参考文献说明 434 家庭作业 434 练习题答案 442

第二部分 在系统上运行程序 第7章 链接 448 7.1 编译器驱动程序 449 7.2 静态链接 450 7.3 目标文件 450 7.4 可重定位目标文件 451 7.5 符号和符号表 452 7.6 符号解析 454 7.6.1 链接器如何解析多重定义的全局符号 455 7.6.2 与静态库链接 457 7.6.3 链接器如何使用静态库来解析引用 460 7.7 重定位 461 7.7.1 重定位条目 461 7.7.2 重定位符号引用 462 7.8 可执行目标文件 465 7.9 加载可执行目标文件 466 7.10 动态链接共享库 467 7.11 从应用程序中加载和链接共享库 468 7.12 与位置无关的代码(PIC) 471 7.13 处理目标文件的工具 473 7.14 小结 473 参考文献说明 474 家庭作业 474 练习题答案 479

第8章 异常控制流 480 8.1 异常 481 8.1.1 异常处理 481 8.1.2 异常的类别 482 8.1.3 Linux/IA32系统中的异常 484 8.2 进程 487 8.2.1 逻辑控制流 487 8.2.2 并发流 487 8.2.3 私有地址空间488 8.2.4 用户模式和内核模式 488 8.2.5 上下文切换 489 8.3 系统调用错误处理 491 8.4 进程控制 492 8.4.1 获取进程ID 492 8.4.2 创建和终止进程 492 8.4.3 回收子进程 495 8.4.4 让进程休眠 499 8.4.5 加载并运行程序500 8.4.6 利用fork和execve运行程序502 8.5 信号 504 8.5.1 信号术语 505 8.5.2 发送信号 506 8.5.3 接收信号 509 8.5.4 信号处理问题 511

…… 第9章 虚拟存储器 534 第10章 系统级I/O 596 第11章 网络编程 614 第12章 并发编程 648 附录A 错误处理 694

亚马逊链接

基本信息

名称: 松本行弘的程序世界
作者信息: 作者: 松本行弘 [ 中文 pdf ]

简单介绍

《松本行弘的程序世界》为“Ruby之父”经典力作,展现了大师级的程序思考方式。作者凭借对编程本质的深刻认识和对各种技术优缺点的掌握,阐述了Ruby的设计理念,并由此延伸,带领读者了解编程的本质,一窥程序设计的奥秘。
《松本行弘的程序世界》不是为了介绍某种特定的技术,而是从宏观的角度讨论与编程相关的各种技术。书中第1章介绍了作者对编程问题的新思考和新看法,剩下的内容出自《日经Linux》杂志于2005年5月到2009年4月连载的“松本编程模式讲坛”,其中真正涉及“模式”的内容并不多,大量篇幅都用于介绍技术内幕和背景分析等内容,使读者真正了解相关技术的立足点。另外,书中还包含许多以Ruby、Lisp、Smalltalk、ErIang、JavaScrlpl等动态语言所写成的范例。
Ruby之父佳作,进入不同凡响的程序世界,深入剖析程序设计的道与术,举一反三,触类旁通。

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
第1章 我为什么开发Ruby 1
1.1 我为什么开发Ruby 2
1.1.1 编程语言的重要性 2
1.1.2 Ruby的原则 3
1.1.3 简洁性 4
1.1.4 扩展性 5
1.1.5 稳定性 6
1.1.6 一切皆因兴趣 7

第2章 面向对象 9 2.1 编程和面向对象的关系 10 2.1.1 颠倒的构造 10 2.1.2 主宰计算机的武器 11 2.1.3 怎样写程序 12 2.1.4 面向对象的编程方法 12 2.1.5 面向对象的难点 13 2.1.6 多态性 13 2.1.7 具体的程序 14 2.1.8 多态性的优点 15 2.2 数据抽象和继承 16 2.2.1 面向对象的历史 16 2.2.2 复杂性是面向对象的敌人 18 2.2.3 结构化编程 18 2.2.4 数据抽象化 19 2.2.5 雏形 21 2.2.6 找出相似的部分来继承 22 2.3 多重继承的缺点 23 2.3.1 为什么需要多重继承 23 2.3.2 多重继承和单一继承不可分离 24 2.3.3 goto语句和多重继承比较相似 25 2.3.4 解决多重继承的问题 25 2.3.5 静态语言和动态语言的区别 26 2.3.6 静态语言的特点 26 2.3.7 动态语言的特点 27 2.3.8 静态语言和动态语言的比较 27 2.3.9 继承的两种含义 28 2.3.10 接口的缺点 28 2.3.11 继承实现的方法 29 2.3.12 从多重继承变形而来的Mix-in 29 2.3.13 积极支持Mix-in的Ruby 30 2.4 两个误解 31 2.4.1 面向对象的编程 31 2.4.2 对象的模板=类 33 2.4.3 利用模块的手段=继承 33 2.4.4 多重继承不好吗 34 2.4.5 动态编程语言也需要多重继承 35 2.4.6 驯服多重继承的方法 35 2.4.7 Ruby中多重继承的实现方法 37 2.4.8 Java实现多重继承的方法 38 2.5 Duck Typing诞生之前 39 2.5.1 为什么需要类型 39 2.5.2 动态的类型是从Lisp中诞生的 40 2.5.3 动态类型在面向对象中发展起来了 41 2.5.4 动态类型和静态类型的邂逅 42 2.5.5 静态类型的优点 42 2.5.6 动态类型的优点 43 2.5.7 只关心行为的Duck Typing 44 2.5.8 避免明确的类型检查 45 2.5.9 克服动态类型的缺点 46 2.5.10 动态编程语言 46 2.6 元编程 46 2.6.1 元编程 46 2.6.2 反射 47 2.6.3 元编程的例子 48 2.6.4 使用反射功能 48 2.6.5 分布式Ruby的实现 49 2.6.6 数据库的应用 50 2.6.7 输出XML 51 2.6.8 元编程和小编程语言 51 2.6.9 声明的实现 52 2.6.10 上下文相关的实现 52 2.6.11 单位的实现 53 2.6.12 词汇的实现 53 2.6.13 层次数据的实现 54 2.6.14 适合DSL的语言,不适合DSL的语言 54

第3章 程序块 57 3.1 程序块的威力 58 3.1.1 把函数作为参数的高阶函数 58 3.1.2 C语言高阶函数的局限 59 3.1.3 可以保存外部环境的闭包 60 3.1.4 块的两种使用方法 60 3.1.5 最终来看,块到底是什么 61 3.1.6 块在循环处理中的应用 62 3.1.7 内部迭代器和外部迭代器 62 3.1.8 在排序和比较大小中的应用 63 3.1.9 用块保证程序的后处理 63 3.1.10 用块实现新的控制结构 64 3.1.11 在回调中使用块 65 3.1.12 块处理的特别理由 65 3.2 用块作循环 66 3.2.1 块是处理的集合 67 3.2.2 块应用范围的扩展 68 3.2.3 高阶函数和块的本质一样 69 3.2.4 用Enumerable来利用块 69 3.2.5 Enumerable的局限 74 3.3 精通集合的使用 77 3.3.1 使用Ruby的数组 77 3.3.2 修改指定范围的元素内容 78 3.3.3 Ruby中的哈希处理 78 3.3.4 支持循环的Enumerable 79 3.3.5 用于循环的each方法 81 3.3.6 使用inject、zip和grep 81 3.3.7 用来指定条件的select方法 82 3.3.8 排序与比较大小的方法 83 3.3.9 在类中包含(include)Enumerable模块 84 3.3.10 List的内部包和块的区别 85

第4章 设计模式 89 4.1 设计模式(1) 90 4.1.1 设计模式的价值和意义 91 4.1.2 设计模式是程序抽象化的延伸 92 4.1.3 Ruby中的设计模式 92 4.1.4 Singleton模式 92 4.1.5 Proxy模式 94 4.1.6 Iterator模式 95 4.1.7 外部与内部,哪一个更好 96 4.1.8 内部迭代器的缺陷 97 4.1.9 外部迭代器的缺陷 98 4.2 设计模式(2) 98 4.2.1 模式与动态语言的关系 99 4.2.2 重复使用既存对象的Prototype模式 99 4.2.3 亲身体验Io语言 100 4.2.4 Ruby中的原型 101 4.2.5 编写抽象算法的Template Method模式 101 4.2.6 用Ruby来尝试TemplateMethod 102 4.2.7 动态语言与Template Method模式 104 4.2.8 避免高度依赖性的Observer模式 104 4.2.9 Observable模块 105 4.2.10 Observer模式与动态语言 107 4.3 设计模式(3) 107 4.3.1 软件开发的悲剧 108 4.3.2 开放-封闭原则 108 4.3.3 面向对象的情况 109 4.3.4 非面向对象的情况 110 4.3.5 OCP与Template Method模式 111 4.3.6 Observer模式 113 4.3.7 使用Strategy模式 114 4.3.8 Strategy模式与OCP 116

第5章 Ajax 119 5.1 Ajax和JavaScript(前篇) 120 5.1.1 通信及异步页面更新 120 5.1.2 技术要素之一:JavaScript 122 5.1.3 技术要素之二:XML 122 5.1.4 XML以外的数据表现形式 123 5.1.5 技术要素之三:DHTML 124 5.1.6 JavaScript技术基础 124 5.1.7 原型模式的面向对象编程语言 126 5.1.8 使用prototype.js库 127 5.1.9 prototype.js的功能 127 5.2 Ajax和JavaScript(后篇) 130 5.2.1 巧妙使用DHTML 131 5.2.2 获取document节点 132 5.2.3 获取和更新标签数据 133 5.2.4 设定事件处理程序 133 5.2.5 追加标签节点 135 5.2.6 本地HTML应用 135 5.2.7 和服务器间的通信 137 5.2.8 使用Prototype.js的优点 138 5.2.9 在服务器上保存数据 138 5.2.10 Web应用的脆弱性 140 5.2.11 使用JavaScript的感觉 141

第6章 Ruby on Rails 143 6.1 MVC和Ruby on Rails 144 6.1.1 模型、视图和控制的作用 144 6.1.2 用秒表的例子来学习MVC模式 145 6.1.3 生成视图和控制部分 147 6.1.4 GUI工具箱与MVC 148 6.1.5 同时使用工具箱和MVC 149 6.1.6 MVC的优缺点 151 6.1.7 Web应用中的MVC 152 6.2 开放类和猴子补丁 153 6.2.1 开放类 154 6.2.2 猴子补丁的目的 154 6.2.3 猴子补丁的技巧 155 6.2.4 灵活使用开放类的库 159 6.2.5 猴子补丁的几点问题 161 6.2.6 其他办法 162 6.2.7 Ruby on Rails和开放类 165 6.2.8 ActiveSupport带来的扩展 166 6.2.9 字节单位系列 168 6.2.10 复数形和序数 168 6.2.11 大规模开发和Ruby 169 6.2.12 信赖性模型 170 6.2.13 猴子补丁的未来 170

第7章 文字编码 173 7.1 文字编码的种类 174 7.1.1 早期的文字编码 174 7.1.2 纸带与文字表现 175 7.1.3 文字是什么 176 7.1.4 走向英语以外的语言(欧洲篇) 177 7.1.5 英语以外的语言(亚洲篇) 177 7.1.6 Unicode的问世 180 7.1.7 统一编码成16位的汉字统合 181 7.1.8 Unicode的两个问题 181 7.1.9 Unicode的文字集 182 7.1.10 文字表示的不确定性 183 7.1.11 Unicode的字符编码方式 183 7.2 程序中的文字处理 185 7.2.1 文字编码有多个意思 185 7.2.2 只能处理文字集中包含的文字 185 7.2.3 纷繁复杂的文字编码方式 186 7.2.4 影响力渐微的Shift_JIS与EUC-JP 186 7.2.5 Unicode有多种字符编码方式 186 7.2.6 为什么会发生乱码 188 7.2.7 字符编码方式错误 188 7.2.8 没有字体 189 7.2.9 变换为内部码时出错 189 7.2.10 发生不完全变换 189 7.2.11 文字集的不同 190 7.2.12 字节顺序错误 191 7.2.13 从编程语言的角度处理文字 191 7.2.14 以变换为前提的UCS方式 191 7.2.15 原封不动处理的CSI方式 192 7.2.16 使用UTF-16的Java 192 7.2.17 使用UTF-8的Perl 193 7.2.18 用UTF-16的Python 194 7.2.19 采用CSI方式的Ruby 1.8 194 7.2.20 强化了功能的Ruby 1.9 195 7.2.21 是UCS还是CSI 196

第8章 正则表达式 199 8.1 正则表达式基础 200 8.1.1 检索“像那样的东西” 200 8.1.2 正则表达式的语法 200 8.1.3 3个陷阱 203 8.1.4 正则表达式对象 204 8.1.5 选项 205 8.1.6 正则表达式匹配的方法 206 8.1.7 特殊变量 207 8.1.8 字符串与正则表达式 207 8.1.9 split的本质 207 8.1.10 字符串的扫描 208 8.1.11 置换 208 8.2 正则表达式的应用实例与“鬼车” 210 8.2.1 解析日志文件的方法 211 8.2.2 避免使用$的方法 213 8.2.3 从邮件中取出日期的方法 215 8.2.4 典型拼写错误的检索方法 216 8.2.5 Ruby 1.9的新功能“鬼车” 216

第9章 整数和浮点小数 219 9.1 深奥的整数世界 220 9.1.1 整数是有范围的 221 9.1.2 尝试位运算 222 9.1.3 操作特定的位 223 9.1.4 表示负数的办法 225 9.1.5 Ruby的整数 226 9.1.6 挑战公开密钥方式 227 9.2 扑朔迷离的浮点小数世界 228 9.2.1 计算机对小数的处理 229 9.2.2 固定小数点数不易使用 229 9.2.3 科学计数法也有问题 229 9.2.4 小数不能完全表示 230 9.2.5 有不能比较的时候 231 9.2.6 误差积累 232 9.2.7 不是数的特别“数” 232 9.2.8 计算误差有多种 233 9.2.9 误差导致的严重问题 235 9.2.10 BigDecimal是什么 236 9.2.11 能够表示分数的Rational类 236

第10章 高速执行和并行处理 239 10.1 让程序高速执行(前篇) 240 10.1.1 是不是越快越好 240 10.1.2 高速执行的乐趣与效率 240 10.1.3 以数据为基础作出判断 241 10.1.4 改善系统调用 241 10.1.5 数据可靠吗 243 10.1.6 只需改善瓶颈 243 10.1.7 profiler本身成了累赘 245 10.1.8 算法与数据结构 245 10.1.9 理解O记法 245 10.1.10 选择算法 246 10.1.11 调查算法的性能 246 10.1.12 高速执行的悲哀 247 10.1.13 性能优化的格言 248 10.2 让程序高速执行(后篇) 248 10.2.1 确认程序概要 249 10.2.2 发现瓶颈 250 10.2.3 使用更好的profiler 251 10.2.4 高速优化之一:削减对象 252 10.2.5 高速优化之二:利用立即值 254 10.2.6 高速优化之三:利用C语言 255 10.2.7 高速优化之四:采用合适的数据结构 256 10.2.8 全部以C语言计算 257 10.2.9 还存在其他技巧 257 10.3 并行编程 258 10.3.1 使用线程的理由 258 10.3.2 生成线程 259 10.3.3 线程的执行状态 260 10.3.4 传递值给线程的方法 261 10.3.5 信息共有所产生的问题 262 10.3.6 数据完整性的丧失 262 10.3.7 死锁 263 10.3.8 用锁来实现对资源的独占 264 10.3.9 二级互斥 265 10.3.10 用队列协调线程 265 10.3.11 锁模型与队列模型的比较 267 10.4 前景可期的并行编程技术,Actor 268 10.4.1 何谓Actor 268 10.4.2 操作Actor的3种处理系统 269 10.4.3 Erlang的程序 270 10.4.4 Pingpong处理的开始 270 10.4.5 启动pingpong程序 271 10.4.6 Erlang的错误处理 272 10.4.7 Erlang的使用场所 273 10.4.8 面向Ruby的库“Revactor” 273 10.4.9 Revactor的应用场合 274 10.4.10 另一个库Dramatis 275

第11章 程序安全性 279 11.1 程序的漏洞与攻击方法 280 11.1.1 4种软件漏洞 280 11.1.2 因权限被窃取而成为重大问题 281 11.1.3 安全问题的根源 281 11.1.4 “守护神”引起的问题 282 11.1.5 多 样化的攻击手段 282 11.1.6 缓冲区溢出 283 11.1.7 整数溢出 284 11.1.8 SQL注入 285 11.1.9 Shell注入 286 11.1.10 跨站点脚本攻击 287 11.1.11 跨站点伪造请求 288 11.1.12 社会工程 289 11.2 用异常进行错误处理 290 11.2.1 异常的历史 292 11.2.2 Java的受控异常 292 11.2.3 Icon的面向目标判断 293 11.2.4 Ruby的异常 294 11.2.5 异常发生 295 11.2.6 异常类 296 11.2.7 异常处理的设计方针 297 11.2.8 异常发生的设计原则 298

第12章 关于时间的处理 301 12.1 用程序处理时刻与时间 302 12.1.1 时差与时区 302 12.1.2 世界协调时间 302 12.1.3 夏令时(DST) 303 12.1.4 改历 304 12.1.5 日期与时间的类 305 12.1.6 2038年问题 308 12.1.7 DateTime类 309 12.1.8 Time与DateTime的相互变换 310

第13章 关于数据的持久化 313 13.1 持久化数据的方法 314 13.1.1 保存文本 314 13.1.2 变换成文本的Marshal 314 13.1.3 使用Marshal模块 315 13.1.4 复制有两种方式 316 13.1.5 仔细看Marshal的格式 316 13.1.6 不能保存的3类对象 317 13.1.7 制作面向对象数据库 318 13.1.8 试用PStore 318 13.1.9 变换为文本的YAML 320 13.1.10 用YAML制作数据库 321 13.2 对象的保存 322 13.2.1 高速的Object Prevalence 322 13.2.2 Object Prevalence的问题点 323 13.2.3 使用Madeleine 323 13.2.4 访问时刻信息 325 13.2.5 让Madeleine更容易使用 326 13.2.6 Madeleine的实用例Instiki 328 13.3 关于XML的考察 328 13.3.1 XML的祖先是SGML 329 13.3.2 XML是树结构的数据表现 329 13.3.3 优点在于纯文本 330 13.3.4 缺点在于冗长 331 13.3.5 不适合重视效率的处理 331 13.3.6 适合于信息交换的格式 332 13.3.7 XML的解析 332 13.3.8 XML处理库REXML 333 13.3.9 XML的代替 336

第14章 函数式编程 339 14.1 新范型——函数式编程 340 14.1.1 具有多种函数式性质的Lisp 341 14.1.2 彻底的函数式编程语言Haskell 342 14.1.3 延迟计算:不必要的处理就不做 343 14.1.4 灵活的“静态多态性”类型系统 344 14.1.5 近代函数式语言之父OCaml 345 14.1.6 强于并行计算的Erlang 345 14.1.7 用Ruby进行函数式编程 346 14.1.8 用枚举器来实现延迟计算 347 14.2 自动生成代码 348 14.2.1 在商业中利用Ruby 349 14.2.2 使用Ruby自动生成代码 350 14.2.3 消除重复代码 350 14.2.4 代码生成的应用 351 14.2.5 代码生成的效果 352 14.2.6 编写代码生成器 353 14.2.7 也可以使用XML 354 14.2.8 在EJB中使用代码生成 355 14.3 内存管理与垃圾收集 356 14.3.1 内存管理的困难 357 14.3.2 垃圾收集亮相之前 358 14.3.3 评价垃圾收集的两个指标 359 14.3.4 垃圾收集算法 360 14.3.5 引用计数方式 360 14.3.6 标记和扫除方式 361 14.3.7 标记和紧缩方式 362 14.3.8 复制方式 363 14.3.9 多种多样的垃圾收集算法 364 14.3.10 分代垃圾收集 364 14.3.11 保守垃圾收集 366 14.3.12 增量垃圾收集 366 14.3.13 并行垃圾收集 367 14.3.14 位图标记 367 14.4 用C语言来扩展Ruby 368 14.4.1 开发与执行速度的取舍 368 14.4.2 扩展库 369 14.4.3 看例题学习扩展模块 370 14.4.4 QDBM函数 372 14.4.5 初始化对象 373 14.4.6 实现方法 374 14.4.7 关于垃圾收集的注意事项 376 14.4.8 其他的Ruby API 376 14.4.9 扩展库的编译 376 14.4.10 扩展库以外的工具 377 14.5 为什么要开源 380 14.5.1 自由软件的思想 380 14.5.2 自由软件的历史 381 14.5.3 Emacs事件的发生 381 14.5.4 开源的诞生 382 14.5.5 OSS许可证 383 14.5.6 开源的背景 385 14.5.7 企业关注开源的理由 386 14.5.8 Ruby与开源 386 14.5.9 选择许可证的方法 387

亚马逊链接

基本信息

名称: 信息简史(英文版)
作者信息: 作者: James Gleick [ 英文 pdf ]

简单介绍

The story of information begins in a time profoundly unlike our own, when every thought and utterance vanished as soon as it was born. From the invention of scripts and alphabets to the long misunderstood “talk­ing drums” of Africa, James Gleick tells the story of information technologies that changed the very nature of human consciousness. He provides portraits of the key figures contributing to the inexorable develop­ment of our modern understanding of information: Charles Babbage, the idiosyncratic inventor of the first great mechanical computer; Ada Byron, the po­et’s brilliant and doomed daughter, who became the first true programmer; pivotal figures like Samuel Morse and Alan Turing; and Claude Shannon, the cre­ator of information theory itself. Chapter 1. Drums That Talk
Chapter 2. The Persistence of the Word
Chapter 3. Two Wordbooks
Chapter 4. To Throw the Powers of Thought into Wheel-Work
Chapter 5. A Nervous System for the Earth
Chapter 6. New Wires, New Logic
Chapter 7. Information Theory
Chapter 8. The Informational Turn
Chapter 9. Entropy and Its Demons
Chapter 10. Life’s Own Code
Chapter 11. Into the Meme Pool
Chapter 12. The Sense of Randomness
Chapter 13. Information Is Physical
Chapter 14. After the Flood
Chapter 15. New News Every Day

目录

1
2


亚马逊链接

基本信息

名称: 响应式Web设计 HTML5和CSS3实战
作者信息: 作者: Ben Frain [ 中文 pdf ]

简单介绍

《响应式Web设计:HTML5和CSS3实战》作者Ben Frain将当前Web设计中热门的响应式设计技术与HTML和CSS3完美结合,帮助读者全面掌握最新的Web设计技术,一步跨入最前沿;《响应式Web设计:HTML5和CSS3实战》是前端设计人员必备教程。

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
第1章  HTML5、CSS3及响应式设计入门 1
1.1  为什么智能手机很重要(而老版的IE不再重要) 2
1.2  响应式设计一定是最佳选择吗 3
1.3  响应式网页设计的定义 3
1.4  为什么要在响应式设计上停滞不前 4
1.5  响应式网页设计示例 4
1.5.1  下载视口调试工具 4
1.5.2  在线创意源泉 11
1.6  为什么HTML5很优秀 12
1.6.1  省时省力 12
1.6.2  新增了语义化标签元素 13
1.7  CSS3为响应式设计和更多创新奠定了基础 13
1.7.1  底线:CSS3不破坏任何东西 14
1.7.2  CSS3如何解决日常设计问题 14
1.8  看呐,不用图片 17
1.9  HTML5和CSS3现在就能用吗 20
1.10  响应式网页设计不是灵丹妙药 20
1.11  引导客户:网站不必在所有浏览器中表现一致 21
1.12  小结 22
第2章  媒体查询:支持不同的视口 23
2.1  现在就能使用媒体查询 23
2.2  为什么响应式设计需要媒体查询 24
2.2.1  媒体查询语法 24
2.2.2   媒体查询能检测那些特性 26
2.2.3  用媒体查询改造我们的设计 27
2.2.4  加载媒体查询的最佳方法 27
2.3  我们的第一个响应式设计 27
2.3.1  我们的设计是固定宽度的,不要惊讶 28
2.3.2  响应式设计中要保证图片尽可能精简 32
2.3.3  小视口下的内容剪切 33
2.4  阻止移动浏览器自动调整页面大小 34
2.5  针对不同视口宽度修正设计 37
2.6  响应式设计中内容始终优先 38
2.7  媒体查询只是必要条件之一 42
2.8  小结 42
第3章  拥抱流式布局 43
3.1  固定布局经不起未来考验 43
3.2  为什么响应式设计需要百分比布局 44
3.3  将网页从固定布局修改为百分比布局 44
3.3.1  需要牢记的公式 45
3.3.2  设置百分比元素的上下文 47
3.3.3  必须时刻牢记上下文 52
3.4  用em替换px 54
3.5  弹性图片 56
3.5.1  让图片随视口缩放 56
3.5.2  为特定图片指定特定规则 58
3.5.3  给弹性图片设置阈值 59
3.5.4  超级全能的max-width属性 61
3.6  为不同的屏幕尺寸提供不同的图片 61
3.7  流动网格布局和媒体查询的默契配合 66
3.8  CSS网格系统 66
3.9  小结 72
第4章  响应式设计中的HTML5 73
4.1  HTML5的哪些部分现在就能用 73
4.1.1  大多数网站可以用HTML5编写 74
4.1.2  腻子脚本和Modernizr 74
4.2  如何编写HTML5网页 75
4.2.1  HTML5的精简之道 76
4.2.2  HTML5标签的合理写法 76
4.2.3  伟大的标签万岁 77 4.2.4  HTML的废弃零件 77 4.3  HTML5的全新语义化元素 78 4.3.1    78 4.3.2    79 4.3.3    79 4.3.4    79 4.3.5    79 4.3.6    81 4.3.7    81 4.3.8    81 4.4  HTML5结构元素的实际用法 81 4.5  HTML5的文本级语义元素 87 4.5.1   88 4.5.2   88 4.5.3   88 4.5.4  在页面中应用文本层语义元素 88 4.6  遵循WAI-ARIA实现无障碍站点 90 4.7  在HTML5中嵌入媒体 93 4.8  用HTML5的方法为页面添加视频或音频 93 4.8.1  提供备用的媒体源文件 95 4.8.2  针对老版本浏览器的备用方案 95 4.8.3  和标签的用法基本一致 96 4.9  响应式视频 96 4.10  离线Web应用 99 4.10.1  离线Web应用概述 99 4.10.2  让网页可离线使用 99 4.10.3  理解manifest文件 100 4.10.4  页面被自动加载到离线缓存 101 4.10.5  版本注释的用途 101 4.10.6  离线访问网站 101 4.10.7  离线Web应用的故障诊断 102 4.11  小结 103 第5章  CSS3:选择器、字体和颜色模式 104 5.1  CSS3给前端开发人员带来了什么 104 5.1.1  Internet Explorer 6到8对CSS3的支持 105 5.1.2  使用CSS3设计和开发页面 105 5.2  CSS规则解析 105 5.3  私有前缀及其用法 106 5.4  快速而有效的CSS技巧 108 5.4.1  CSS3多栏布局 108 5.4.2  文字换行 110 5.5  CSS3的新增选择器及其用法 111 5.5.1  CSS3属性选择器 111 5.5.2  CSS3结构伪类 113 5.5.3  对伪元素的修正 122 5.6  自定义网页字体 123 5.6.1  @font-face规则 124 5.6.2  使用@font-face嵌入网页字体 124 5.7  帮帮我,标题模糊怎么办 127 5.8  新的CSS3颜色格式和透明度 129 5.8.1  RGB颜色 130 5.8.2  HSL颜色 131 5.8.3  针对IE6、IE7和IE8提供备用颜色值 132 5.8.4  透明通道 132 5.9  小结 134 第6章  用CSS3创造令人惊艳的美 135 6.1  文字阴影 136 6.1.1  HEX、HSL或RGB颜色都可以 136 6.1.2  px、em或rem都行 136 6.1.3  取消文字阴影 138 6.1.4  制作浮雕文字阴影效果 139 6.1.5  多重文字阴影 140 6.2  盒阴影 140 6.2.1  内阴影 141 6.2.2  多重阴影 142 6.3  背景渐变 143 6.3.1  线性背景渐变 144 6.3.2  径向背景渐变 147 6.3.3  重复渐变 149 6.4  背景渐变图案 151 6.5  CSS3的响应性 153 6.6  组合使用CSS3属性 155 6.7  多重背景图片 159 6.7.1  背景图片大小 161 6.7.2  背景图片位置 161 6.7.3  背景属性的缩写语法 161 6.8  更多CSS特性 162 6.9  可缩放图标:响应式设计中的完美选择 162 6.10  小结 163 第7章  CSS3过渡、变形和动画 164 7.1  什么是CSS3过渡以及如何使用它 164 7.1.1  过渡相关的属性 166 7.1.2  响应式网站中的有趣过渡 168 7.2  CSS3的2D变形 169 7.3  尝试CSS3的3D变形 174 7.3.1  分析3D变形效果 176 7.3.2  3D变形尚未成熟 178 7.4  CSS3动画效果 179 7.5  小结 185 第8章  用HTML5和CSS3征服表单 186 8.1  HTML5表单 186 8.1.1  理解HTML5表单中的元素 188 8.1.2  placeholder 189 8.1.3  required 189 8.1.4  autofocus 190 8.1.5  autocomplete 191 8.1.6  list(及对应的datalist元素) 191 8.1.7  HTML5的新输入类型 192 8.1.8  日期和时间输入类型 198 8.2  如何给不支持新特性的浏览器打补丁 203 8.3  使用CSS3美化HTML5表单 204 8.4  小结 210 第9章  解决跨浏览器问题 211 9.1  渐进增强与优雅降级 215 9.2  该不该修复老版本IE 216 9.2.1  统计数据(再看看世界的变化) 216 9.2.2  个人选择 216 9.3  前端的瑞士军刀:Modernizr 217 9.3.1  使用Modernizr辅助修正样式问题 219 9.3.2  使用Modernizr让老版本IE支持HTML5元素 221 9.3.3  给IE6、7、8追加min/max媒体查询功能 222 9.3.4  使用Modernizr按需加载资源 223 9.4  必要时将导航链接转换为下拉菜单 225 9.5  高分辨率设备(未来趋势) 228 9.6  小结 231

亚马逊链接