图书介绍
0 bug C/C++商用工程之道PDF|Epub|txt|kindle电子书版本网盘下载
- 肖舸编著 著
- 出版社: 北京:电子工业出版社
- ISBN:9787121098482
- 出版时间:2010
- 标注页数:562页
- 文件大小:263MB
- 文件页数:584页
- 主题词:C语言-程序设计
PDF下载
下载说明
0 bug C/C++商用工程之道PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第1章 商用工程开发思路1
1.1 系统分析初步2
1.1.1 需求理解和沟通2
1.1.2 “上家”和“下家”3
1.1.3 角色“定名”3
1.1.4 初步的拓扑图4
1.1.5 后续的模块级设计4
1.1.6 商用设计思维5
1.2 商用程序员对开发的理解5
1.2.1 资源和成本5
1.2.2 盈利导向6
1.2.3 客观7
1.2.4 平衡9
1.2.5 服务11
1.3 基本开发思路15
1.3.1 边界15
1.3.2 “细分”的分析方法16
1.3.3 灵活,逆向思维17
1.3.4 小内核,大外延,工程库思维18
1.3.5 单笔交易失败不算失败19
1.4 数据传输各个角色的开发思路20
1.4.1 服务器的设计原则20
1.4.2 PC客户端的开发思路21
1.4.3 嵌入式设备的开发思路22
1.4.4 跨平台软件模块的开发思路23
第2章 基础知识25
2.1 内存的理解26
2.1.1 32位操作系统的内存分配26
2.1.2 C/C++语言对内存的使用27
2.1.3 内存——bug之源30
2.2 并行运算31
2.2.1 时间片31
2.2.2 进程和线程32
2.2.3 同步和异步33
2.2.4 礼貌地释放时间片资源35
2.2.5 跨线程通信36
2.2.6 跨进程通信39
2.2.7 网络,并行运算的世界40
2.3 “锁”的使用41
2.3.1 为什么要使用锁41
2.3.2 使用锁容易犯什么错误42
2.3.3 “行为锁”和“资源锁”46
2.3.4 单写多读锁48
2.3.5 不可重入锁49
2.3.6 用锁的最高境界——不用50
2.4 “池”的深刻含义51
2.4.1 “池”的由来51
2.4.2 “池”的使用53
2.5 跨平台、跨语言开发基础54
2.5.1 C/C++跨平台开发基础54
2.5.2 dll和so55
2.5.3 API和NPI55
2.5.4 服务无处不在56
2.6 debug的重要性57
2.6.1 在数据传输领域,你亲眼看到的都不是真的57
2.6.2 如何看到——万事从debug开始60
2.6.3 debug的原则60
2.6.4 如何分析数据61
2.7 性能统计的重要性62
2.7.1 需要统计哪些信息62
2.7.2 基本的统计方法63
2.7.3 随机数的产生65
2.8 队列无处不在65
2.8.1 数据结构在数据传输中的应用分析65
2.8.2 需要哪几种队列形式66
2.9 不要求全责备66
第3章 C/C++无错化程序设计69
3.1 “无错化程序设计”简介71
3.1.1 无错化程序设计思路71
3.1.2 C/C++无错化设计的解决方案72
3.1.3 使用后的效果73
3.2 计算机程序的真谛74
3.2.1 程序就是“搬数”74
3.2.2 程序就是“写文章”75
3.2.3 程序就是“复制”77
3.2.4 笔者看程序设计78
3.3 定名79
3.3.1 匈牙利命名法79
3.3.2 函数命名原则80
3.3.3 变量命名原则81
3.3.4 其他命名规则83
3.3.5 定名的折中86
3.4 无错化程序的基本书写原则87
3.4.1 写简单易懂的程序88
3.4.2 严禁变量转义90
3.4.3 严禁一语多义91
3.4.4 函数只能有一个出口92
3.4.5 变量如不使用,保持初值95
3.4.6 常量必须定名97
3.4.7 太大数组不要用静态方式98
3.4.8 尽量避免使用递归99
3.4.9 解决方案一套就够99
3.5 基本程序设计原则100
3.5.1 函数的设计100
3.5.2 类的设计102
3.5.3 其他要点116
3.6 基本语句的约定122
3.6.1 判断语句,常量永远在左边122
3.6.2 for(i=o;i<n;i++)124
3.6.3 while(1)125
3.6.4 不要使用do...while()125
3.6.5 i++和++i问题126
3.6.6 请不要使用“?(...):(...)”结构127
3.6.7 善用大括号{}缩小作用域127
3.7 请使用goto语句130
3.7.1 函数只有一个出口的原则需要goto131
3.7.2 谁分配、谁释放的原则需要goto131
3.7.3 商用工程要求goto133
3.7.4 程序的易读性要求goto135
3.7.5 break为什么不能乱用136
3.7.6 goto的常规使用手法138
3.8 指针的使用原则139
3.8.1 商用数据传输常见的指针类型139
3.8.2 不要使用两个以上的*号141
3.8.3 指针不能参与四则运算141
3.9 使用结构体的技巧143
3.9.1 结构体传参的必要性143
3.9.2 预防多重指针的隐忠145
3.9.3 32位到64位移植145
3.9.4 弹性内存使用需要结构体传参146
3.9.5 网络传输协议,需要结构体传参148
3.10 使用宏的建议150
3.10.1 宏的几大作用150
3.10.2 C++的建议151
3.10.3 编译宏——跨平台开发152
3.11 回调函数设计方法152
3.11.1 回调模型设计者153
3.11.2 回调模型使用者155
3.11.3 参数传递的常规手法158
3.11.4 事件模型和回调模型160
3.12 C语言字符串的深入研究161
3.12.1 字符串拷贝161
3.12.2 字符串构造164
3.12.3 关于字符串处理的结论166
3.13 C/C++语言无错化程序设计小结166
第4章 设计自己的工程库168
4.1 数据传输库中到底需要哪些模块170
4.1.1 跨平台定义170
4.1.2 锁与安全模块170
4.1.3 内存池171
4.1.4 资源管理池171
4.1.5 线程池与任务池171
4.1.6 队列管理172
4.1.7 其他工具172
4.2 工程库基础——跨平台定义172
4.2.1 锁定义172
4.2.2 线程控制相关定义174
4.2.3 Socket传输相关定义175
4.2.4 include系统头文件178
第5章 debug工具180
5.1 变参函数的设计182
5.2 文本输出183
5.2.1 获得时间戳184
5.2.2 同时输出到文件和屏幕184
5.2.3 文本输出的原则187
5.3 二进制输出的debug函数188
5.4 核心debug和日志系统的区别190
5.5 统计模块191
5.5.1 累加器192
5.5.2 △计算模块192
5.5.3 平均值计算194
5.5.4 统计平均值计算196
5.5.5 辅助功能函数198
5.6 CLowDebug工具类200
5.6.1 需求分析201
5.6.2 数据边界声明201
5.6.3 类声明202
5.6.4 类工具函数204
5.6.5 业务函数207
5.7 基本debug工具小结210
第6章 锁211
6.1 二元动作理论213
6.1.1 二元动作在C语言中的书写特性213
6.1.2 面向对象和面向过程的本质差异216
6.1.3 二元动作在C++语言中的特殊要求218
6.1.4 二元动作开发关注要点219
6.2 锁对象225
6.3 多线程安全的变量226
6.3.1 CMint和CMbool试验226
6.3.2 多线程安全的变量模板230
6.4 单写多读锁241
6.4.1 单写多读锁的来源241
6.4.2 单写多读锁C语言实现243
6.4.3 单写多读锁的C++实现251
6.4.4 TonyXiaoMinSleep252
6.4.5 单写多读锁安全变量253
6.4.6 单写多读锁的真实意义256
6.5 不可重入锁258
6.5.1 需求分析258
6.5.2 类实现259
6.5.3 使用样例260
6.6 线程控制锁261
6.6.1 线程控制锁的实现263
6.6.2 线程控制锁的使用264
6.7 尽量不用锁265
第7章 内存与资源管理267
7.1 内存管理的基本要求268
7.1.1 不泄露268
7.1.2 不产生碎片268
7.1.3 可以自动报警269
7.2 内存池的核心逻辑——内存栈270
7.2.1 内存管理的数学模型270
7.2.2 管理模型的优化272
7.2.3 关于链表管理的思考273
7.2.4 内存块元素276
7.2.5 内存栈286
7.3 内存指针注册管理模块292
7.3.1 内存注册模块原理介绍293
7.3.2 模块设计及类声明293
7.3.3 构造函数和析构函数296
7.3.4 Add函数298
7.3.5 Del函数299
7.3.6 Modeify函数300
7.3.7 PrintInfo函数301
7.3.8 内存注册模块的深入使用301
7.4 Socket注册管理模块302
7.4.1 类声明303
7.4.2 构造函数和析构函数304
7.4.3 Add函数306
7.4.4 Del函数307
7.4.5 PrintInfo函数308
7.5 内存池类308
7.5.1 类声明309
7.5.2 构造函数和析构函数310
7.5.3 内存栈公有方法312
7.5.4 指针管理方法313
7.5.5 Socket管理方法314
7.5.6 PrintfInfo方法315
7.6 内存管理的深层次含义315
7.6.1 资源重用的理念316
7.6.2 注册和反注册机制316
7.6.3 静态资源的管理思路316
7.7 被动池的常见组织形式317
7.7.1 被动池的数据特性及需求分析317
7.7.2 动态与静态被动池的差异性318
7.7.3 静态被动池实施原理318
7.7.4 被动池的常见组织形式320
第8章 队列322
8.1 为什么单说队列323
8.1.1 网络同步的需求323
8.1.2 协议信令排序的需求323
8.1.3 存储转发的需求324
8.1.4 异步转同步需要队列325
8.1.5 负载均衡需要队列325
8.1.6 等停需要队列326
8.1.7 特例:实时转发不需要队列326
8.2 几种常见的队列介绍326
8.2.1 不是队列的队列CBuffer327
8.2.2 静态队列PopBuffer327
8.2.3 动态队列MenQueue328
8.3 动态Buffer类328
8.3.1 编程思想的转变328
8.3.2 Buffer类的需求分析332
8.3.3 Buffer类声明333
8.3.4 构造和析构函数335
8.3.5 缓冲区大小设置函数335
8.3.6 二进制拷贝函数341
8.3.7 数值转换函数342
8.3.8 二进制数据处理函数344
8.3.9 文本字符串处理函数345
8.3.10 数据比较函数346
8.3.11 小结347
8.4 静态Buffer类348
8.4.1 类声明348
8.4.2 构造函数和析构函数350
8.4.3 缓冲区设置函数351
8.4.4 二进制拷贝函数354
8.4.5 数值转换函数356
8.4.6 二进制数据处理函数357
8.4.7 文本字符串处理函数358
8.4.8 数据比较函数359
8.4.9 小结359
8.5 PopBuffer360
8.5.1 PopBuffer基本需求分析360
8.5.2 基本数据结构介绍361
8.5.3 基本类模型363
8.5.4 构造函数和析构函数365
8.5.5 工具服务函数366
8.5.6 业务查询函数368
8.5.7 添加AddLast370
8.5.8 提取GetAndDeleteFirst372
8.5.9 MoveAllData376
8.5.10 PopBuffer小结378
8.5.11 PopBuffer的不足380
8.6 MemQueue381
8.6.1 动态队列的管理原则381
8.6.2 基本数据结构介绍以及优化考虑382
8.6.3 基本功能类声明384
8.6.4 构造函数和析构函数386
8.6.5 辅助工具函数388
8.6.6 追加AddLast391
8.6.7 提取GetAndDeleteFirst395
8.6.8 PopBuffer相关操作398
8.6.9 文件保存相关操作403
8.6.10 线程安全锁封装类407
8.7 小结413
第9章 时间片管理415
9.1 多线程与单线程开发的差异416
9.1.1 单任务操作系统运行程序的特点416
9.1.2 任天堂游戏机中断机制417
9.1.3 利用中断实现多任务419
9.1.4 多任务操作系统运行程序的特点422
9.1.5 多任务操作系统运行程序的机制424
9.1.6 多任务运行环境的世界观426
9.2 多任务操作系统常见线程操作429
9.2.1 线程相关变量429
9.2.2 线程函数声明431
9.2.3 线程函数启动433
9.2.4 MIN SLEEP433
9.2.5 线程操作总结434
9.3 线程池436
9.3.1 线程池的来源和需求分析437
9.3.2 线程池的设计原理440
9.3.3 线程池的基本数据结构445
9.3.4 线程池的类设计说明448
9.3.5 构造函数和析构函数451
9.3.6 管理者线程453
9.3.7 服务者线程457
9.3.8 注册函数460
9.3.9 线程池小结463
9.4 任务池466
9.4.1 任务池的原理分析467
9.4.2 任务池的需求和设计475
9.4.3 任务池的基本定义说明478
9.4.4 任务池的类声明480
9.4.5 构造函数和析构函数482
9.4.6 管理者线程484
9.4.7 服务者线程485
9.4.8 任务注册接口488
9.4.9 任务池的小结及实现示例488
9.5 任务池的运行体489
9.5.1 简化运行态490
9.5.2 任务描述工具类490
9.5.3 任务池运行体的设计原理497
9.5.4 任务池运行体的类声明499
9.5.5 StartTask501
9.5.6 StopAll和PrintInfo503
9.5.7 任务执行线程回调503
9.5.8 任务池运行体小结及调用示例505
9.6 时间片小结507
第10章 Log日志管理系统509
10.1 日志管理系统需求分析511
10.2 设计原理和边界定义511
10.3 类声明512
10.4 构造函数和析构函数514
10.4.1 构造函数514
10.4.2 析构函数517
10.5 文件名控制逻辑517
10.6 业务输出方法函数521
10.7 Log日志系统小结525
第11章 聚合工具类527
11.1 聚合工具类的类声明529
11.2 聚合工具类函数说明532
11.3 额外的话题:Linux服务程序怎么写538
11.3.1 服务器的开发习惯538
11.3.2 Linux的开发习惯542
113.3 Linux下开发服务程序的基本需求543
11.3.4 基本设计原理543
11.3.5 程序实战演示546
11.3.6 程序使用说明555
第12章 细节决定成败(代结束语)556
12.1 工程实践注重细节557
12.2 究竟怎样才能学好C和C++语言开发558
12.3 如何做一名成功的软件工程师559
12.4 关于网络数据传输560
12.5 结束语560