深入理解Nginx:模块开发与架构解析(第2版)

深入理解Nginx:模块开发与架构解析(第2版)

程序语言
本站提供《深入理解Nginx:模块开发与架构解析(第2版)》 的PDF格式电子书为程序自动采集自网络,如损害了您的利益,请申请删除。

本书介绍

本书是阿里巴巴资深Nginx技术专家呕心沥血之作,是作者多年的经验结晶,也是目前市场上唯一一本通过还原Nginx设计思想,剖析Nginx架构来帮助读者快速高效开发HTTP模块的图书。 
本书首先通过介绍官方Nginx的基本用法和配置规则,帮助读者了解一般Nginx模块的用法,然后重点介绍如何开发HTTP模块(含HTTP过滤模块)来得到定制的Nginx,其中包括开发一个功能复杂的模块所需要了解的各种知识,如Nginx的基础数据结构、配置项的解析、记录日志的工具以及upstream、subrequest的使用方法等。在此基础上,综合Nginx框架代码分析Nginx的架构,介绍其设计理念和技巧,进一步帮助读者自由、有效地开发出功能丰富、性能一流的Nginx模块。
陶辉,毕业于西安交通大学计算机科学与技术专业,曾就职于华为中央软件部、腾讯QQ空间、思科中国CRDC等公司,目前在阿里巴巴云计算公司的飞天团队工作,研究方向为介于IaaS和PaaS间的弹性计算,多年以来专注于Nginx的定制化应用,对Nginx的设计与特性有深刻认识,实战经验丰富,编写过许多优秀的Nginx模块并应用于企业级产品中,同时撰写了大量关于Nginx的技术文章。擅长Linux环境下高性能服务器的开发,以及分布式环境下海量数据存储的设计开发。

目录

前 言
 第一部分 Nginx能帮我们做什么
 第1章 研究Nginx前的准备工作 / 2
 1.1 Nginx是什么 / 2
 1.2 为什么选择Nginx / 4
 1.3 准备工作 / 7
 1.3.1 Linux操作系统 / 7
 1.3.2 使用Nginx的必备软件 / 7
 1.3.3 磁盘目录 / 8
 1.3.4 Linux内核参数的优化 / 9
 1.3.5 获取Nginx源码 / 11
 1.4 编译安装Nginx / 11
 1.5 configure详解 / 11
 1.5.1 configure的命令参数 / 12
 1.5.2 configure执行流程 / 18
 1.5.3 configure生成的文件 / 22
 1.6 Nginx的命令行控制 / 24
 1.7 小结 / 27
 第2章 Nginx的配置 / 28
 2.1 运行中的Nginx进程间的关系 / 28
 2.2 Nginx配置的通用语法 / 31
 2.2.1 块配置项 / 31
 2.2.2 配置项的语法格式 / 32
 2.2.3 配置项的注释 / 33
 2.2.4 配置项的单位 / 33
 2.2.5 在配置中使用变量 / 33
 2.3 Nginx服务的基本配置 / 34
 2.3.1 用于调试进程和定位问题的配置项 / 34
 2.3.2 正常运行的配置项 / 36
 2.3.3 优化性能的配置项 / 38
 2.3.4 事件类配置项 / 39
 2.4 用HTTP核心模块配置一个静态Web服务器 / 41
 2.4.1 虚拟主机与请求的分发 / 42
 2.4.2 文件路径的定义 / 45
 2.4.3 内存及磁盘资源的分配 / 48
 2.4.4 网络连接的设置 / 50
 2.4.5 MIME类型的设置 / 53
 2.4.6 对客户端请求的限制 / 54
 2.4.7 文件操作的优化 / 55
 2.4.8 对客户端请求的特殊处理 / 57
 2.4.9 ngx_http_core_module模块提供的变量 / 59
 2.5 用HTTP proxy module配置一个反向代理服务器 / 60
 2.5.1 负载均衡的基本配置 / 62
 2.5.2 反向代理的基本配置 / 64
 2.6 小结 / 68
 第二部分 如何编写HTTP模块
 第3章 开发一个简单的HTTP模块 / 70
 3.1 如何调用HTTP模块 / 70
 3.2 准备工作 / 72
 3.2.1 整型的封装 / 72
 3.2.2 ngx_str_t数据结构 / 73
 3.2.3 ngx_list_t数据结构 / 73
 3.2.4 ngx_table_elt_t数据结构 / 77
 3.2.5 ngx_buf_t数据结构 / 77
 3.2.6 ngx_chain_t数据结构 / 79
 3.3 如何将自己的HTTP模块编译进Nginx / 79
 3.3.1 config文件的写法 / 80
 3.3.2 利用configure脚本将定制的模块加入到Nginx中 / 80
 3.3.3 直接修改Makefile文件 / 84
 3.4 HTTP模块的数据结构 / 85
 3.5 定义自己的HTTP模块 / 88
 3.6 处理用户请求 / 92
 3.6.1 处理方法的返回值 / 92
 3.6.2 获取URI和参数 / 95
 3.6.3 获取HTTP头部 / 98
 3.6.4 获取HTTP包体 / 101
 3.7 发送响应 / 102
 3.7.1 发送HTTP头部 / 102
 3.7.2 将内存中的字符串作为包体发送 / 104
 3.7.3 经典的“Hello World”示例 / 106
 3.8 将磁盘文件作为包体发送 / 107
 3.8.1 如何发送磁盘中的文件 / 107
 3.8.2 清理文件句柄 / 110
 3.8.3 支持用户多线程下载和断点续传 / 111
 3.9 用C++语言编写HTTP模块 / 112
 3.9.1 编译方式的修改 / 112
 3.9.2 程序中的符号转换 / 114
 3.10 小结 / 114
 第4章 配置、error日志和请求上下文 / 115
 4.1 http配置项的使用场景 / 115
 4.2 怎样使用http配置 / 117
 4.2.1 分配用于保存配置参数的数据结构 / 117
 4.2.2 设定配置项的解析方式 / 119
 4.2.3 使用14种预设方法解析配置项 / 125
 4.2.4 自定义配置项处理方法 / 136
 4.2.5 合并配置项 / 137
 4.3 HTTP配置模型 / 140
 4.3.1 解析HTTP配置的流程 / 141
 4.3.2 HTTP配置模型的内存布局 / 144
 4.3.3 如何合并配置项 / 147
 4.3.4 预设配置项处理方法的工作原理 / 149
 4.4 error日志的用法 / 150
 4.5 请求的上下文 / 155
 4.5.1 上下文与全异步Web服务器的关系 / 155
 4.5.2 如何使用HTTP上下文 / 156
 4.5.3 HTTP框架如何维护上下文结构 / 157
 4.6 小结 / 158
 第5章 访问第三方服务 / 159
 5.1 upstream的使用方式 / 160
 5.1.1 ngx_http_upstream_t结构体 / 163
 5.1.2 设置upstream的限制性参数 / 164
 5.1.3 设置需要访问的第三方服务器地址 / 165
 5.1.4 设置回调方法 / 166
 5.1.5 如何启动upstream机制 / 166
 5.2 回调方法的执行场景 / 167
 5.2.1 create_request回调方法 / 167
 5.2.2 reinit_request回调方法 / 169
 5.2.3 finalize_request回调方法 / 170
 5.2.4 process_header回调方法 / 171
 5.2.5 rewrite_redirect回调方法 / 172
 5.2.6 input_filter_init与input_filter回调方法 / 172
 5.3 使用upstream的示例 / 173
 5.3.1 upstream的各种配置参数 / 174
 5.3.2 请求上下文 / 175
 5.3.3 在create_request方法中构造请求 / 176
 5.3.4 在process_header方法中解析包头 / 177
 5.3.5 在finalize_request方法中释放资源 / 180
 5.3.6 在ngx_http_mytest_handler方法中启动upstream / 181
 5.4 subrequest的使用方式 / 183
 5.4.1 配置子请求的处理方式 / 183
 5.4.2 实现子请求处理完毕时的回调方法 / 184
 5.4.3 处理父请求被重新激活后的回调方法 / 185
 5.4.4 启动subrequest子请求 / 185
 5.5 subrequest执行过程中的主要场景 / 186
 5.5.1 如何启动subrequest / 186
 5.5.2 如何转发多个子请求的响应包体 / 188
 5.5.3 子请求如何激活父请求 / 192
 5.6 subrequest使用的例子 / 193
 5.6.1 配置文件中子请求的设置 / 194
 5.6.2 请求上下文 / 194
 5.6.3 子请求结束时的处理方法 / 195
 5.6.4 父请求的回调方法 / 196
 5.6.5 启动subrequest / 197
 5.7 小结 / 198
 第6章 开发一个简单的HTTP过滤模块 / 199
 6.1 过滤模块的意义 / 199
 6.2 过滤模块的调用顺序 / 200
 6.2.1 过滤链表是如何构成的 / 200
 6.2.2 过滤链表的顺序 / 203
 6.2.3 官方默认HTTP过滤模块的功能简介 / 204
 6.3 HTTP过滤模块的开发步骤 / 206
 6.4 HTTP过滤模块的简单例子 / 207
 6.4.1 如何编写config文件 / 208
 6.4.2 配置项和上下文 / 208
 6.4.3 定义HTTP过滤模块 / 210
 6.4.4 初始化HTTP过滤模块 / 211
 6.4.5 处理请求中的HTTP头部 / 212
 6.4.6 处理请求中的HTTP包体 / 213
 6.5 小结 / 214
 第7章 Nginx提供的高级数据结构 / 215
 7.1 Nginx提供的高级数据结构概述 / 215
 7.2 ngx_queue_t双向链表 / 217
 7.2.1 为什么设计ngx_queue_t双向链表 / 217
 7.2.2 双向链表的使用方法 / 217
 7.2.3 使用双向链表排序的例子 / 219
 7.2.4 双向链表是如何实现的 / 221
 7.3 ngx_array_t动态数组 / 222
 7.3.1 为什么设计ngx_array_t动态数组 / 223
 7.3.2 动态数组的使用方法 / 223
 7.3.3  使用动态数组的例子 / 225
 7.3.4 动态数组的扩容方式 / 226
 7.4 ngx_list_t单向链表 / 226
 7.5 ngx_rbtree_t红黑树 / 227
 7.5.1 为什么设计ngx_rbtree_t红黑树 / 227
 7.5.2 红黑树的特性 / 228
 7.5.3 红黑树的使用方法 / 230
 7.5.4 使用红黑树的简单例子 / 233
 7.5.5 如何自定义添加成员方法 / 234
 7.6 ngx_radix_tree_t基数树 / 236
 7.6.1 ngx_radix_tree_t基数树的原理 / 236
 7.6.2 基数树的使用方法 / 238
 7.6.3 使用基数树的例子 / 239
 7.7 支持通配符的散列表 / 240
 7.7.1 ngx_hash_t基本散列表 / 240
 7.7.2 支持通配符的散列表 / 243
 7.7.3 带通配符散列表的使用例子 / 250
 7.8 小结 / 254
 第三部分 深入Nginx
 第8章 Nginx基础架构 / 256
 8.1 Web服务器设计中的关键约束 / 256
 8.2 Nginx的架构设计 / 259
 8.2.1 优秀的模块化设计 / 259
 8.2.2 事件驱动架构 / 263
 8.2.3 请求的多阶段异步处理 / 264
 8.2.4 管理进程、多工作进程设计 / 267
 8.2.5 平台无关的代码实现 / 268
 8.2.6 内存池的设计 / 268
 8.2.7 使用统一管道过滤器模式的HTTP过滤模块 / 268
 8.2.8 其他一些用户模块 / 269
 8.3 Nginx框架中的核心结构体ngx_cycle_t / 269
 8.3.1 ngx_listening_t结构体 / 269
 8.3.2 ngx_cycle_t结构体 / 271
 8.3.3 ngx_cycle_t支持的方法 / 273
 8.4 Nginx启动时框架的处理流程 / 275
 8.5 worker进程是如何工作的 / 278
 8.6 master进程是如何工作的 / 281
 8.7 小结 / 286
 第9章 事件模块 / 287
 9.1 事件处理框架概述 / 287
 9.2 Nginx事件的定义 / 290
 9.3 Nginx连接的定义 / 293
 9.3.1 被动连接 / 294
 9.3.2 主动连接 / 297
 9.3.3 ngx_connection_t连接池 / 298
 9.4 ngx_events_module核心模块 / 300
 9.4.1 如何管理所有事件模块的配置项 / 301
 9.4.2 管理事件模块 / 303
 9.5 ngx_event_core_module事件模块 / 305
 9.6 epoll事件驱动模块 / 310
 9.6.1 epoll的原理和用法 / 311
 9.6.2 如何使用epoll / 313
 9.6.3 ngx_epoll_module模块的实现 / 315
 9.7 定时器事件 / 323
 9.7.1 缓存时间的管理 / 324
 9.7.2 缓存时间的精度 / 326
 9.7.3 定时器的实现 / 327
 9.8 事件驱动框架的处理流程 / 328
 9.8.1 如何建立新连接 / 329
 9.8.2 如何解决“惊群”问题 / 330
 9.8.3 如何实现负载均衡 / 333
 9.8.4 post事件队列 / 334
 9.8.5 ngx_process_events_and_timers流程 / 335
 9.9 文件的异步I/O / 338
 9.9.1 Linux内核提供的文件异步I/O / 339
 9.9.2 ngx_epoll_module模块中实现的针对文件的异步I/O / 342
 9.10 小结 / 346
 第10章 HTTP框架的初始化 / 347
 10.1 HTTP框架概述 / 348
 10.2 管理HTTP模块的配置项 / 351
 10.2.1 管理main级别下的配置项 / 352
 10.2.2 管理server级别下的配置项 / 354
 10.2.3 管理location级别下的配置项 / 357
 10.2.4 不同级别配置项的合并 / 362
 10.3 监听端口的管理 / 367
 10.4 server的快速检索 / 369
 10.5 location的快速检索 / 371
 10.6 HTTP请求的11个处理阶段 / 372
 10.6.1 HTTP处理阶段的普适规则 / 374
 10.6.2 NGX_HTTP_POST_READ_PHASE阶段 / 376
 10.6.3 NGX_HTTP_SERVER_REWRITE_PHASE阶段 / 378
 10.6.4 NGX_HTTP_FIND_CONFIG_PHASE阶段 / 379
 10.6.5 NGX_HTTP_REWRITE_PHASE阶段 / 379
 10.6.6 NGX_HTTP_POST_REWRITE_PHASE阶段 / 379
 10.6.7 NGX_HTTP_PREACCESS_PHASE阶段 / 379
 10.6.8 NGX_HTTP_ACCESS_PHASE阶段 / 380
 10.6.9 NGX_HTTP_POST_ACCESS_PHASE阶段 / 380
 10.6.10 NGX_HTTP_TRY_FILES_PHASE阶段 / 381
 10.6.11 NGX_HTTP_CONTENT_PHASE阶段 / 381
 10.6.12 NGX_HTTP_LOG_PHASE阶段 / 382
 10.7 HTTP框架的初始化流程 / 383
 10.8 小结 / 385
 第11章 HTTP框架的执行流程 / 386
 11.1 HTTP框架执行流程概述 / 387
 11.2 新连接建立时的行为 / 388
 11.3 第一次可读事件的处理 / 390
 11.4 接收HTTP请求行 / 396
 11.5 接收HTTP头部 / 399
 11.6 处理HTTP请求 / 403
 11.6.1 ngx_http_core_generic_phase / 409
 11.6.2 ngx_http_core_rewrite_phase / 411
 11.6.3 ngx_http_core_access_phase / 412
 11.6.4 ngx_http_core_content_phase / 415
 11.7 subrequest与post请求 / 419
 11.8 处理HTTP包体 / 421
 11.8.1 接收包体 / 422
 11.8.2 放弃接收包体 / 429
 11.9 发送HTTP响应 / 433
 11.9.1 ngx_http_send_header / 434
 11.9.2 ngx_http_output_filter / 436
 11.9.3 ngx_http_writer / 440
 11.10 结束HTTP请求 / 442
 11.10.1 ngx_http_close_connection / 443
 11.10.2 ngx_http_free_request / 444
 11.10.3 ngx_http_close_request / 446
 11.10.4 ngx_http_finalize_connection / 447
 11.10.5 ngx_http_terminate_request / 447
 11.10.6 ngx_http_finalize_request / 448
 11.11 小结 / 452
 第12章 upstream机制的设计与实现 / 453
 12.1 upstream机制概述 / 453
 12.1.1 设计目的 / 454
 12.1.2 ngx_http_upstream_t数据结构的意义 / 456
 12.1.3 ngx_http_upstream_conf_t配置结构体 / 459
 12.2 启动upstream / 462
 12.3 与上游服务器建立连接 / 464
 12.4 发送请求到上游服务器 / 467
 12.5 接收上游服务器的响应头部 / 470
 12.5.1 应用层协议的两段划分方式 / 470
 12.5.2 处理包体的3种方式 / 471
 12.5.3 接收响应头部的流程 / 473
 12.6 不转发响应时的处理流程 / 476
 12.6.1 input_filter方法的设计 / 477
 12.6.2 默认的input_filter方法 / 478
 12.6.3 接收包体的流程 / 479
 12.7 以下游网速优先来转发响应 / 481
 12.7.1 转发响应的包头 / 482
 12.7.2 转发响应的包体 / 484
 12.8 以上游网速优先来转发响应 / 489
 12.8.1 ngx_event_pipe_t结构体的意义 / 489
 12.8.2 转发响应的包头 / 493
 12.8.3 转发响应的包体 / 495
 12.8.4 ngx_event_pipe_read_upstream方法 / 498
 12.8.5 ngx_event_pipe_write_to_downstream方法 / 502
 12.9 结束upstream请求 / 504
 12.10 小结 / 508
 第13章 邮件代理模块 / 509
 13.1 邮件代理服务器的功能 / 509
 13.2 邮件模块的处理框架 / 512
 13.2.1 一个请求的8个独立处理阶段 / 512
 13.2.2 邮件类模块的定义 / 514
 13.2.3 邮件框架的初始化 / 516
 13.3 初始化请求 / 517
 13.3.1 描述邮件请求的ngx_mail_session_t结构体 / 517
 13.3.2 初始化邮件请求的流程 / 519
 13.4 接收并解析客户端请求 / 520
 13.5 邮件认证 / 520
 13.5.1 ngx_mail_auth_http_ctx_t结构体 / 520
 13.5.2 与认证服务器建立连接 / 522
 13.5.3 发送请求到认证服务器 / 522
 13.5.4 接收并解析响应 / 525
 13.6 与上游邮件服务器间的认证交互 / 526
 13.6.1 ngx_mail_proxy_ctx_t结构体 / 526
 13.6.2 向上游邮件服务器发起连接 / 527
 13.6.3 与邮件服务器认证交互的过程 / 528
 13.7 透传上游邮件服务器与客户端间的流 / 530
 13.8 小结 / 535
 第14章 进程间的通信机制 / 536
 14.1 概述 / 536
 14.2 共享内存 / 536
 14.3 原子操作 / 541
 14.3.1 不支持原子库下的原子操作 / 541
 14.3.2 x86架构下的原子操作 / 542
 14.3.3 自旋锁 / 545
 14.4 Nginx频道 / 546
 14.5 信号 / 549
 14.6 信号量 / 551
 14.7 文件锁 / 553
 14.8 互斥锁 / 556
 14.8.1 文件锁实现的ngx_shmtx_t锁 / 558
 14.8.2 原子变量实现的ngx_shmtx_t锁 / 560
 14.9 小结 / 565
 · · · · · · 

下载链接

0条评论
添加一条新回复

最热下载

  • JavaEE开发的颠覆者:Spring Boot实战

    ``` 在当今Java EE 开发中,Spring 框架是当之无愧的王者。而Spring Boot 是Spring 主推的基于“习惯优于配置”的原则,让你能够快速搭建应用的框架,从而使得Java EE 开发变得异常简单。 《JavaEE开发的颠覆者: Spring Boot实战》从Spring 基础、Spring MVC 基础讲起,从而无难度地引入Spring Boot 的学习。涵盖使用Spring Boot 进行Java EE 开发的绝大数应用场景,包含:Web 开发、数据访问、安全控制、批处理、异步消息、系统集成、开发与部署、应用监控、分布式系统开发等。 当你学完《JavaEE开发的颠覆者: Spring Boot实战》后,你将能使用Spring Boot 解决Java EE 开发中所遇到的绝大多数问题。 ```

  • Kafka并不难学

    ``` 《Kafka并不难学!入门、进阶、商业实战》基于Kafka 0.10.2.0以上版本,采用“理论+实践”的形式编写。全书共68个实例。 《Kafka并不难学!入门、进阶、商业实战》共分为4篇:第1篇,介绍了消息队列和Kafka、安装与配置Kafka环境;第2篇,介绍了Kafka的基础操作、生产者和消费者、存储及管理数据;第3篇,介绍了更高级的Kafka知识及应用,包括安全机制、连接器、流处理、监控与测试;第4篇,是对前面知识的综合及实际应用,包括ELK套件整合实战、Spark实时计算引擎整合实战、Kafka Eagle监控系统设计与实现实战。 《Kafka并不难学!入门、进阶、商业实战》的每章都配有同步教学视频(共计155分钟)。视频和图书具有相同的结构,能帮助读者快速而全面地了解每章的内容。本书还免费提供所有案例的源代码。这些代码不仅能方便读者学习... (展开全部) 《Kafka并不难学!入门、进阶、商业实战》基于Kafka 0.10.2.0以上版本,采用“理论+实践”的形式编写。全书共68个实例。 《Kafka并不难学!入门、进阶、商业实战》共分为4篇:第1篇,介绍了消息队列和Kafka、安装与配置Kafka环境;第2篇,介绍了Kafka的基础操作、生产者和消费者、存储及管理数据;第3篇,介绍了更高级的Kafka知识及应用,包括安全机制、连接器、流处理、监控与测试;第4篇,是对前面知识的综合及实际应用,包括ELK套件整合实战、Spark实时计算引擎整合实战、Kafka Eagle监控系统设计与实现实战。 《Kafka并不难学!入门、进阶、商业实战》的每章都配有同步教学视频(共计155分钟)。视频和图书具有相同的结构,能帮助读者快速而全面地了解每章的内容。本书还免费提供所有案例的源代码。这些代码不仅能方便读者学习,也能为以后的工作提供便利。 《Kafka并不难学!入门、进阶、商业实战》结构清晰、案例丰富、通俗易懂、实用性强。特别适合Kafka系统的初学者和进阶读者作为自学教程。另外,本书也适合社会培训学校作为培训教材,还适合大中专院校的相关专业作为教学参考书。 邓杰 资深大数据全栈开发者,极客学院讲师,开源爱好者,博客园博主。 开发了Kafka系统监控管理工具——Kafka Eagle,将其发布在Github上,深受业界开发者赞誉。 作为极客学院特邀讲师期间,制作了多个技术视频,讲授Hadoop技术、Kafka技术等课程,广受学员好评。 ```

  • Spring Boot 2精髓

    ``` Spring Boot是目前Spring技术体系中炙手可热的框架之一,既可用于构建业务复杂的企业应用系统,也可以开发高性能和高吞吐量的互联网应用。Spring Boot框架降低了Spring技术体系的使用门槛,简化了Spring应用的搭建和开发过程,提供了流行的第三方开源技术的自动集成。 本书系统介绍了Spring Boot 2的主要技术,侧重于两个方面,一方面是极速开发一个Web应用系统,详细介绍Spring Boot框架、Spring MVC、视图技术、数据库访问技术,并且介绍多环境部署、自动装配、单元测试等高级特性;另一方面,当系统模块增加,性能和吞吐量要求增加时,如何平滑地用Spring Boot实现分布式架构,也会在本书后半部分介绍,包括使用Spring实现RESTful架构,在Spring Boot框架下使用Redis、MongoDB、Z... (展开全部) Spring Boot是目前Spring技术体系中炙手可热的框架之一,既可用于构建业务复杂的企业应用系统,也可以开发高性能和高吞吐量的互联网应用。Spring Boot框架降低了Spring技术体系的使用门槛,简化了Spring应用的搭建和开发过程,提供了流行的第三方开源技术的自动集成。 本书系统介绍了Spring Boot 2的主要技术,侧重于两个方面,一方面是极速开发一个Web应用系统,详细介绍Spring Boot框架、Spring MVC、视图技术、数据库访问技术,并且介绍多环境部署、自动装配、单元测试等高级特性;另一方面,当系统模块增加,性能和吞吐量要求增加时,如何平滑地用Spring Boot实现分布式架构,也会在本书后半部分介绍,包括使用Spring实现RESTful架构,在Spring Boot框架下使用Redis、MongoDB、ZooKeeper、Elasticsearch等流行技术,使用Spring Session实现系统水平扩展,使用Spring Cache提高系统性能。 ```

  • Spring Boot实战

    ``` 本书以Spring应用程序开发为中心,全面讲解如何运用Spring Boot提高效率,使应用程序的开发和管理更加轻松有趣。作者行文亲切流畅,以大量示例讲解了Spring Boot在各类情境中的应用,内容涵盖起步依赖、Spring Boot CLI、Groovy、Grails、Actuator。对于Spring Boot开发应用中较为繁琐的内容,附录奉上整理完毕的表格,一目了然,方便读者查阅。 Craig Walls Pivotal高级工程师,Spring Social及Spring Sync项目领导者,著名技术博主,畅销书《Spring实战》作者。他致力于推广Spring框架,笔耕不辍,亦时常作为演讲嘉宾出席各类相关会议。 译者简介: 丁雪丰  资深开发及运维工程师,活跃的技术图书译者,致力于推动优秀技术在国内的发展,出版了《Spring攻略》《MongoDB实战》《RESTful Web Service Cookbook中文版》等6部译著。 ```

  • C Primer Plus(第6版)

    ``` 《C Primer Plus(第6版)中文版》详细讲解了C语言的基本概念和编程技巧。 《C Primer Plus(第6版)中文版》共17章。第1、2章介绍了C语言编程的预备知识。第3~15章详细讲解了C语言的相关知识,包括数据类型、格式化输入/输出、运算符、表达式、语句、循环、字符输入和输出、函数、数组和指针、字符和字符串函数、内存管理、文件输入输出、结构、位操作等。第16章、17章介绍C预处理器、C库和高级数据表示。本书以完整的程序为例,讲解C语言的知识要点和注意事项。每章末设计了大量复习题和编程练习,帮助读者巩固所学知识和提高实际编程能力。附录给出了各章复习题的参考答案和丰富的参考资料。 《C Primer Plus(第6版)中文版》可作为C语言的教材,适用于需要系统学习C语言的初学者,也适用于巩固C语言知识或希望进一步提高编程技术的程序员。 Stephen Prata曾在加利福尼亚的马林学院(肯特菲尔德)教授天文学、物理学和程序设计课程,现已退休。他在加州理工学院获得学士学位,在加州大学伯克利分校获得博士学位。他接触程序设计,是为了利用计算机给星团建模。Stephen撰写和与他人合著了十几本书籍,其中包括C++ Primer Plus和Unix Primer Plus。 ```

  • 循序渐进Linux 第2版

    ``` 循序渐进Linux(第2版) 基础知识 服务器搭建 系统管理 性能调优 虚拟化与集群应用》从基础知识入手,系统讲解了Linux系统结构、shell、主流服务器搭建及故障排除、用户权限管理、磁盘存储管理、文件系统管理、内存管理和系统进程管理等关键技术,深入研究了系统性能优化思路、系统性能评估与优化、集群技术、负载均衡等Linux热点主题。 《循序渐进Linux(第2版) 基础知识 服务器搭建 系统管理 性能调优 虚拟化与集群应用》强调学习方法以及技术能力的培养,在每个知识点后都给出了大量操作案例,包括了详细的操作步骤,具有很强的可操作性,并对案例进行分析,提供了解决问题的思路和方法,做到了授人以渔。 《循序渐进Linux(第2版) 基础知识 服务器搭建 系统管理 性能调优 虚拟化与集群应用》适合希望系统、全面学习Linux技术的初学者作为教材,也适合L... (展开全部) 循序渐进Linux(第2版) 基础知识 服务器搭建 系统管理 性能调优 虚拟化与集群应用》从基础知识入手,系统讲解了Linux系统结构、shell、主流服务器搭建及故障排除、用户权限管理、磁盘存储管理、文件系统管理、内存管理和系统进程管理等关键技术,深入研究了系统性能优化思路、系统性能评估与优化、集群技术、负载均衡等Linux热点主题。 《循序渐进Linux(第2版) 基础知识 服务器搭建 系统管理 性能调优 虚拟化与集群应用》强调学习方法以及技术能力的培养,在每个知识点后都给出了大量操作案例,包括了详细的操作步骤,具有很强的可操作性,并对案例进行分析,提供了解决问题的思路和方法,做到了授人以渔。 《循序渐进Linux(第2版) 基础知识 服务器搭建 系统管理 性能调优 虚拟化与集群应用》适合希望系统、全面学习Linux技术的初学者作为教材,也适合Linux系统管理员、数据库管理人员、网络安全管理人员、系统集成人员和系统架构师参考。 高俊峰,网名南非蚂蚁,Linux专家,知名IT作家。毕业于西安电子科技大学通信工程专业。曾就职于新浪网、阿里云(原万网),任职系统架构师。具有多年的自动化运维和管理经验,擅长Linux、集群应用、Mysql、Oracle等方面的系统管理、性能调优,规划设计,实战经验丰富。曾出版《循序渐进Linux》、《高性能Linux服务器构建实战》等畅销Linux书籍。 ```

  • 只是为了好玩:Linux之父林纳斯自传

    ``` 本书是Linux之父Linus Torvalds的自传。 Linux之父Linus Torvalds的自传,也是Linus唯一一本书。Linus以调侃的语气讲述了自己的成长经历,在他看来,一切都是为了好玩儿,兴趣引发革命。书中内容共分为五章,一部分是Linus自己写的,一部分是合著者David Diamond的评论。 林纳斯•托瓦兹 当今世界最著名的程序员、黑客,开源操作系统Linux之父。生于芬兰,毕业于赫尔辛基大学,1997年~2003年任职于美国加州硅谷的全美达公司,现受聘于开放源代码开发实验室,全力开发Linux内核。2004年,他被《时代周刊》评为世界最有影响力的人之一。 大卫•戴蒙 职业撰稿人,曾为《纽约时报》《连线》《美国周末》及许多刊物供稿。 林纳斯•托瓦兹 当今世界最著名的程序员、黑客,开源操作系统Linux之父。生于芬兰,毕业于赫尔辛基大学,1997年~2003年任职于美国加州硅谷的全美达公司,现受聘于开放源代码开发实验室,全力开发Linux内核。2004年,他被《时代周刊》评为世界最有影响力的人之一。 大卫•戴蒙 职业撰稿人,曾为《纽约时报》《连线》《美国周末》及许多刊物供稿。 译者简介: 陈少芸 出生时经医生证实为80后晚期,毕业于广东财经大学。做事情常出于“我不懂所以我想知道”的好奇心,在笔译学界颇负“陈少芸是谁啊没听说过”的盛名。 ```

  • Vue.js实战

    ``` 本书以Vue.js 2为基础,以项目实战的方式来引导读者渐进式学习Vue.js。本书分为基础篇、进阶篇和实战篇三部分。基础篇主要是对 Vue.js 核心功能的介绍;进阶篇主要讲解前端工程化Vue.js的组件化、插件的使用;实战篇着重开发了两个完整的示例,所涉及的内容涵盖Vue.js绝大部分API。通过阅读本书,读者能够掌握Vue.js框架主要API的使用方法、自定义指令、组件开发、单文件组件、Render函数、使用webpack开发可复用的单页面富应用等。 本书示例丰富、侧重实战,适用于刚接触或即将接触Vue.js的开发者,也适用于对Vue.js有过开发经验,但需要进一步提升的开发者。 梁灏,网名 Aresn,基于 Vue.js 的开源 UI 组件库 iView 的作者。目前在大数据公司 TalkingData 负责可视化基础架构。创办了程序员社区 TalkingCoder。 ```

  • 剑指Offer

    ``` 《剑指Offer:名企面试官精讲典型编程题》剖析了50个典型的程序员面试题,从基础知识、代码质量、解题思路、优化效率和综合能力五个方面系统整理了影响面试的5个要点。全书分为7章,主要包括面试的流程,讨论面试流程中每一环节需要注意的问题;面试需要的基础知识,从编程语言、数据结构及算法三方面总结了程序员面试的知识点;高质量的代码,讨论影响代码质量的3个要素(规范性、完整性和鲁棒性),强调高质量的代码除了能够完成基本的功能之外,还能考虑到特殊情况并对非法输入进行合理的处理;解决面试题的思路,总结在编程面试中解决难题的常用思路,如果在面试过程中遇到了复杂的难题,应聘者可以利用画图、举例和分解复杂问题3种方法化繁为简,先形成清晰的思路再动手编程;优化时间和空间效率,介绍如何优化代码的时间效率和空间效率,读完这一章读者将学会常用的优化时间效率及空间换时间的常用算... (展开全部) 《剑指Offer:名企面试官精讲典型编程题》剖析了50个典型的程序员面试题,从基础知识、代码质量、解题思路、优化效率和综合能力五个方面系统整理了影响面试的5个要点。全书分为7章,主要包括面试的流程,讨论面试流程中每一环节需要注意的问题;面试需要的基础知识,从编程语言、数据结构及算法三方面总结了程序员面试的知识点;高质量的代码,讨论影响代码质量的3个要素(规范性、完整性和鲁棒性),强调高质量的代码除了能够完成基本的功能之外,还能考虑到特殊情况并对非法输入进行合理的处理;解决面试题的思路,总结在编程面试中解决难题的常用思路,如果在面试过程中遇到了复杂的难题,应聘者可以利用画图、举例和分解复杂问题3种方法化繁为简,先形成清晰的思路再动手编程;优化时间和空间效率,介绍如何优化代码的时间效率和空间效率,读完这一章读者将学会常用的优化时间效率及空间换时间的常用算法,从而在面试中找到最优的解法;面试中的各种能力,本章总结应聘者在面试过程中如何表现学习能力和沟通能力,并通过具体的面试题讨论如何培养知识迁移能力、抽象建模能力和发散思维能力;两个面试案例,这两个案例总结了应聘者在面试过程中哪些举动是不好的行为,而哪些表现又是面试官所期待的行为。 何海涛,现思科高级软件工程师,曾先后就职于Autodesk和微软。分别于2003年和2006年于浙江大学获得计算机专业学士和硕士学位。主要关注程序员求职应聘领域、以及软件设计、开发和调试技术。著有《剑指Offer——名企面试官精讲典型编程题》一书。 ```

  • Linux设备驱动程序 第3版

    ``` 本书揭示了如何给大多数的设备编写驱动程序的信息,这些信息迄今仅通过口头或者隐晦的源代码注释被共享。你不必是一个内核高手就可以理解并享受本书,所需要的只是C以及Unix系统调用方面的背景知识。在不需要特殊的硬件设备就能编译和运行的详细示例的指引下,你将学会如何给字符设备、块设备和网络接口编写驱动程序。PCI、USB和tty(终端)子系统都单列一章。本书为那些对操作系统的工作机制好奇的人提供了地址空间、异步事件和I/O等方面的阐述。 Jonahan Corbet早在1981年就开始接触BSD Unix的源代码。那时,科罗拉多大学的一名讲师让他“修正”其中的分页算法。从那时起直到现在。他深入研究了他所遇到的每一个系统,其中包括VAX、Sun、Arden以及x86系统的驱动程序。他在1993年第一次接触Linux系统,从此以后一直从事Linux的开发。Corbet先生是《Linux Weekly News》的创始人和执行主编。他和妻子及两个孩子生活在科罗多州的玻尔得市。 ```

  • 企业IT架构转型之道:阿里巴巴中台战略思想与架构实战

    ``` 在当今整个中国社会都处于互联网转型的浪潮中,不管是政府职能单位、业务规模庞大的央企,还是面临最激烈竞争的零售行业都处于一个重要的转折点,这个转折对企业业务模式带来了冲击,当然也给企业的信息中心部门带来了挑战:如何构建IT系统架构更好地满足互联网时代下企业业务发展的需要。阿里巴巴的共享服务理念以及企业级互联网架构建设的思路,给这些企业带来了不少新的思路,这也是我最终决定写这本书的最主要原因。本书从阿里巴巴启动中台战略说起,详细阐述了共享服务理念给企业业务发展带来的业务价值。接着会分享阿里巴巴在建设共享服务体系时如何进行技术框架的选择,哪些重要的技术平台支撑起了共享服务体系,这也是迄今为止对阿里巴巴集团中间件体系对外最全面系统的介绍。除了技术层面之外,本书还分享了阿里巴巴内部的一些经验和实践,如组织的架构和体制如何更好地支持共享服务体系的持续发展。 钟华(花名:古谦)阿里巴巴中间件首席架构师,15年中间件领域行业经验。对传统企业IT建设和互联网架构都有较为深入的理解,有着扎实的理论基础和丰富的实战经验,多次作为总架构师协助大型传统企业打造业务中台项目,为企业实现“互联网+”转型提供了科学的发展方向和强有力的技术支持,项目涉及政府、制造业、金融、交通、媒体等多个领域。 ```

  • Python金融实战

    Python凭借其简单、易读、可扩展性以及拥有巨大而活跃的科学计算社区,在需要数据分析和处理大量数据的金融领域得到了广泛而迅速的应用,并且成为越来越多专业人士最佳的编程语言之一。