Donald E.Knuth(DK)撰写的序
前言
致谢
作者简介
第1章 手头的代码
1.1 资源管理
1.2 大内存
1.3 代码排列
1.4 代码滥用
1.5 嵌套倾向
1.6 令人窒息的变化
1.7 被诅咒的代码
1.8 强制异常
1.9 一段不错的代码
1.10 一些恶臭的东西
1.11 日志记录
1.12 丢失
1.13 复制
1.14 五大编程问题
1.15 语言上的迷失
1.16 签入注释
第2章 编程难题
2.1 方法的颂歌
2.2 C++里的“+”有多少
2.3 时尚而现代的事物
2.4 缓存缺失
2.5 代码探索
2.6 输入验证
2.7 与文档打交道
2.8 文档都记录什么
2.9 暴躁的测试人员
2.10 如何测试
2.11 开启测试模式
2.12 维护模式
2.13 尽早合并
2.14 多核怪兽
2.15 这不是一个产品
2.16 海森堡bug
2.17 我不想要你肮脏的PDF文件
2.18 渴望PIN码
2.19 重新启动
2.20 代码扫描器
2.21 调试硬件
2.22 健全性与可见性
第3章 系统设计
3.1 抽象
3.2 驱动
3.3 重新审视驱动
3.4 变化的变化
3.5 穿针引线
3.6 线程是否依然不安全
3.7 身份验证与加密
3.8 身份验证回顾
3.9 身份验证的例子
3.10 编写跨站脚本
3.11 网络钓鱼和感染
3.12 用户界面设计
3.13 安全日志
3.14 Java
3.15 安全P2P
第4章 机器对机器
4.1 踩到脚趾
4.2 匮乏的端口
4.3 协议设计
4.4 第一个来的
4.5 网络调试
4.6 延迟
4.7 长跑
4.8 网络即计算机
4.9 扩展失败
4.10 端口占用
4.11 原始网络
4.12 毫无意义的PKI
4.13 标准的标准
第5章 人类对人类
5.1 关于骄傲和其他
5.2 你的是什么颜色
5.3 被破坏的构建
5.4 什么是智能
5.5 设计审查
5.6 主机的命名
5.7 主持面试
5.8 神话
5.9 过时的程序员
5.10 拥有强大的力量
5.11 信
5.12 标签
5.13 螺丝刀和锤子
5.14 安全审查
5.15 勿忘初心
5.16 开源许可证
5.17 如此多的标准
5.18 书籍
5.19 更多有关书籍的信息
5.20 保持与时俱进
5.21 我的最后一招
展开