标题：程序员求职成功路：技术、求职技巧与软实力培养
图书信息
出版社: 机械工业出版社; 第1版 (2010年9月1日)
丛书名: 信息科学与技术丛书
平装: 390页
正文语种: 简体中文
开本: 16
ISBN: 7111315936, 9787111315933
条形码: 9787111315933
尺寸: 26.4 x 18.4 x 2.4 cm
重量: 780 g
作者简介
周扬荣，男，四川人，生于1980年2月，毕业于中国科学院研究生院软件研究所。曾就职于北京大学计算机研究所信息安全工程中心，从事计算机犯罪取证与Rootkit检测研究与开发：Sun中国工程研究院，从事Solaris内核技术研究与开发；Comodo安全方案公司，从事Windows主机入侵防御系统(HIPS)的研究与开发。现就职于奇虎360安全公司，从事Windows系统中主动防御的研究与开发。业余爱好包括旅游、历史、地理、古生物、宇宙学等。
内容简介
《程序员求职成功路:技术、求职技巧与软实力培养》共分三部分。技术篇讲解了程序设计中最通用的技术问题，包括c/c++、数据结构与算法、程序活动记录、内存分配与管理、程序调试、程序测试、多线程编程、进程通信等；开发篇介绍了程序设计的各个领域，包括网络编程、数据库编程、内核编程、界面编程等；求职篇介绍了如何准备面试，发挥自己的正常水平，并通过实际的面试经验为大家揭开大公司面试过程的神秘面纱，也探讨了程序员的软实力培养与职业发展规划。
目录
出版说明 
前言 
上篇 技术 
第1章 C语言 1 
1.1 指针 2 
1.2 位运算 15 
1.3 运算符 19 
1.4 数据对齐 21 
1.5 实数 24 
1.6 整数 26 
1.6.1 编码 26 
1.6.2 存储 27 
1.7 字符 29 
1.7.1 ASCII与UNICODE 29 
1.7.2 char与wchar_t 30 
1.7.3 ANSI_STRING与UNICODE_STRING 30 
1.8 溢出 32 
1.8.1 数组溢出 32 
1.8.2 数溢出 33 
1.8.3 缓冲区溢出 35 
1.8.4 栈溢出 36 
1.8.5 指针溢出 36 
1.9 杂项 38 
1.9.1 变量 38 
1.9.2 #pragma 39 
1.9.3 位域 40 
1.9.4 static 42 
第2章 C++ 44 
2.1 C++与C的区别 44 
2.2 构造函数、析构函数和赋值函数 45 
2.2.1 默认生成函数 46 
2.2.2 构造函数实现 46 
2.2.3 成员初始化方法 47 
2.2.4 基类析构函数 49 
2.2.5 赋值运算 50 
2.3 继承和多重继承 52 
2.3.1 模板与继承的选择 52 
2.3.2 菱形继承 52 
2.4 多态与虚函数机制 54 
2.4.1 什么是多态 54 
2.4.2 虚函数机制 55 
2.4.3 virtual与inline 57 
2.5 重载（重整）、重写 59 
2.5.1 重载 60 
2.5.2 重写 60 
2.6 STL模板库 63 
2.6.1 vector 64 
2.6.2 list 64 
2.6.3 deque 65 
2.6.4 set/multiset 65 
2.6.5 map/multimap 66 
2.6.6 stack 66 
2.6.7 queue/priority_queue 67 
2.6.8 算法 69 
2.7 栈和队列的C++实现 70 
2.8 String类 72 
2.9 写时拷贝 73 
2.10 智能指针 75 
2.11 i++与++i 77 
2.12 禁止或要求对象产生于堆中 79 
第3章 数据结构与算法 81 
3.1 算法设计步骤 81 
3.2 字符串 86 
3.2.1 实现strstr() 86 
3.2.2 实现strtok() 88 
3.2.3 实现strcpy() 89 
3.2.4 实现strcmp() 90 
3.2.5 实现tolower() 90 
3.2.6 删除特定字符或字符组 91 
3.2.7 识别字符串中的单词 91 
3.2.8 逆置字符串 92 
3.2.9 实现memcpy() 92 
3.2.10 IP字符串与整数的转化 93 
3.2.11 将一组字符串排序 95 
3.2.12 正则式匹配 95 
3.3 链表 97 
3.3.1 逆向链表 97 
3.3.2 链表排序 98 
3.3.3 栈和队列的实现 98 
3.3.4 链表合并与删除 101 
3.3.5 循环链表 103 
3.3.6 找出倒数第m个元素 104 
3.4 树 105 
3.4.1 树的遍历 106 
3.4.2 二叉排序树 109 
3.4.3 平衡二叉排序树 111 
3.4.4 公共祖先 112 
3.4.5 字典树 115 
3.5 数 117 
3.5.1 最大公约数 117 
3.5.2 字符串整数转化 118 
3.5.3 素数 119 
3.5.4 字符串到实数转换 120 
3.5.5 因式分解 121 
3.5.6 不用比较运算符，求两个数中最大值 121 
3.5.7 将一个整数分解为两个数的和 121 
3.6 数组 122 
3.6.1 数组的使用 122 
3.6.2 找出数组中第二小数 123 
3.6.3 找出数组中的最大数和最小数(要求O (3/2n)) 124 
3.6.4 找出数组中重复的数 124 
3.6.5 删除数组中重复的数（数组已经排好序） 125 
3.6.6 用数组实现栈和队列 126 
3.6.7 求中位数 127 
3.7 排序 128 
3.7.1 插入排序 129 
3.7.2 选择排序 130 
3.7.3 交换排序 132 
3.7.4 归并排序 133 
3.7.5 基数排序 135 
3.8 查找 136 
3.8.1 折半查找 136 
3.8.2 二叉排序树查找 137 
3.8.3 Hash表查找 138 
3.9 递归 139 
3.9.1 递归的概念 139 
3.9.2 递归与非递归转化 140 
3.9.3 递归的应用 142 
3.10 算法设计关键 148 
3.10.1 熟练使用循环语句 148 
3.10.2 各种情形的完备考虑 149 
3.10.3 尝试用递归解决问题 150 
第4章 程序活动记录 151 
4.1 内存空间 151 
4.2 堆和栈的区别 152 
4.3 函数调用规约 154 
4.3.1 stdcall调用规约 155 
4.3.2 cdecl调用规约 155 
4.3.3 fastcall调用规约 155 
4.3.4 thiscall调用规约 156 
4.3.5 naked call调用规约 156 
4.4 C语言活动记录（栈帧） 156 
第5章 内存分配与管理 162 
5.1 内存分配 162 
5.1.1 VirtualAlloc() 162 
5.1.2 new/malloc() 162 
5.1.3 文件映射 163 
5.1.4 分配比较 164 
5.1.5 内核内存分配 165 
5.2 内存管理 166 
5.3 内存泄漏 166 
第6章 程序调试 173 
6.1 汇编基础 173 
6.1.1 基本概念 173 
6.1.2 汇编版Hello world程序 176 
6.1.3 C代码与汇编 178 
6.1.4 64位汇编 182 
6.2 调试方法 182 
6.2.1 动态执行调试 183 
6.2.2 事后静态调试 183 
6.2.3 打印调试信息 184 
6.3 调试工具 185 
6.3.1 VC 6.0 185 
6.3.2 OllyIce 188 
6.3.3 WinDbg 191 
6.3.4 GDB 206 
6.4 转储文件分析 212 
6.4.1 Windows转储文件分析 212 
6.4.2 Solaris转储文件分析 215 
6.5 BUG修复 216 
第7章 程序测试 218 
7.1 测试方法 218 
7.1.1 基本方法 219 
7.1.2 数据测试 219 
7.1.3 内存泄漏检测 220 
7.2 测试阶段 221 
7.2.1 单元测试 222 
7.2.2 集成测试 222 
7.2.3 系统测试 222 
7.2.4 验收测试 223 
7.2.5 回归测试 223 
7.2.6 Alpha测试 223 
7.2.7 Beta测试 223 
7.3 测试种类 224 
7.3.1 黑盒测试 224 
7.3.2 白盒测试 224 
第8章 文件读写 225 
8.1 C语言文件访问 225 
8.2 C++语言文件访问 228 
8.3 VC文件访问 229 
8.4 Win32文件访问 229 
8.5 内核文件访问 230 
第9章 多线程编程 233 
9.1 同步机制 234 
9.1.1 临界区 234 
9.1.2 互斥量 235 
9.1.3 信号量 237 
9.1.4 事件 239 
9.2 内核同步 240 
第10章 进程通信 242 
10.1 共享内存 242 
10.2 管道 244 
10.3 信号量 246 
10.4 共享文件 247 
10.5 消息机制 248 
中篇 开发 
第11章 网络编程 251 
11.1 网络协议 251 
11.1.1 协议模型 251 
11.1.2 常用协议 253 
11.1.3 系统堆栈 256 
11.2 TCP编程 258 
11.3 UDP编程 261 
第12章 数据库编程 263 
12.1 SQL语言基础 263 
12.2 数据库连接 265 
12.2.1 Oracle数据库 265 
12.2.2 SQL Server数据库 266 
12.2.3 DB2数据库 266 
12.2.4 Informix数据库 267 
12.2.5 Sybase数据库 267 
12.2.6 MySQL数据库 268 
12.2.7 PostgreSQL数据库 268 
12.3 SQL语句执行 269 
12.4 建立索引 270 
12.5 存储过程 272 
12.5.1 存储过程书写格式 272 
12.5.2 存储过程的优点 273 
12.5.3 存储过程的缺点 273 
第13章 内核编程 274 
13.1 Windows内核编程 274 
13.1.1 IRP（I/O Request Packet）结构 275 
13.1.2 应用程序与内核驱动缓冲交换 276 
13.1.3 IOCTL控制 277 
13.1.4 代码结构 278 
13.1.5 安装测试 282 
13.2 Linux内核编程 283 
13.2.1 代码结构 283 
13.2.2 安装测试 286 
第14章 界面编程 287 
14.1 MFC界面开发 287 
14.2 GTK界面开发 312 
14.3 Qt界面开发 314 
第15章 搜索引擎 318 
15.1 系统架构 318 
15.2 网络蜘蛛 320 
15.2.1 什么是网络蜘蛛 320 
15.2.2 网络蜘蛛如何抓取网页 321 
15.3 网页排序 324 
15.4 中文分词 324 
15.5 开源引擎 325 
下篇 求职 
第16章 求职环节 326 
16.1 请勿错过实习 326 
16.2 简历制作 327 
16.2.1 简历的内容 328 
16.2.2 制作简历的原则 329 
16.2.3 简历实例 330 
16.3 简历投递 333 
16.4 笔试 334 
16.5 面试 335 
16.6 Offer选择 339 
16.7 如何通过试用期 341 
16.8 如何避免被裁员 345 
16.9 如何更换工作 346 
16.10 如何谈薪水 348 
第17章 面试实战 350 
17.1 P研究所 350 
17.2 M公司 351 
17.3 S公司 358 
17.4 B公司 360 
第18章 程序员软实力 363 
18.1 团队协作 363 
18.2 交流沟通 365 
18.3 全局视野 365 
18.4 学习思考 366 
18.5 职业素养 368 
第19章 职业规划 370 
19.1 职业发展路线 370 
19.1.1 发展路线规划 370 
19.1.2 笔者的发展路线 372 
19.2 创业之路 374 
附录 376 
附录A 如何提高编程能力 376 
附录B C代码风格 380 
附录C 推荐读物 389 
附录D 推荐网站 390 
参考文献 391