具体描述
因为后台开发所需要的技术广泛而坚深,要成为一名后台开发工程师门槛很高,所以相关人才比较紧缺。作者是在腾讯工作多年的后台开发工程师,不仅技术精湛,而且在处理大量实际业务的过程中积累了丰富的开发经验。在这本书中,她不仅首次为后台开发工程师勾勒出了完整的知识能力体系结构图,而且还对后台开发工程师所需要掌握的大量复杂的技术知识进行了提炼、剥离和整合,专注于成为一名后台开发工程师所需掌握的核心技术、开发工具和实践方法,大幅度降低后台开发工程师的学习曲线。本书的内容获得了来自腾讯、Facebook、微软、阿里、百度的多位资深技术专家的高度认可。
全书一共13章,在逻辑上分为六大部分:
第一部分(第1~3章)介绍了编程语言方面的知识,包括常用语法、类与常用STL的使用。
第二部分(第4~5章)介绍了编译原理和调试方法相关的知识,编译原理包括编译与链接的具体过程、Makefile的编写、目标文件的内容与处理目标文件相关工具的使用,调试方法主要介绍了strace、gdb、top、ps与valgrind工具的使用等。
第三部分(第6~8章)介绍了网络相关的知识,包括TCP协议的关键知识点和TCP server的实现,网络IO模型和select、poll与epoll三个重要函数的使用,还有ping、tcpdump、netstat和lsof这四个网络分析工具的使用。
第四部分(第9~11章)主要是多线程、进程和进程间通信相关的知识,包括多线程的使用、多线程的同步和重入问题,进程方面有父子进程、僵死进程、守护进程和进程间通讯的方式。
第五部分(第12章)主要是HTTP协议的介绍与使用、CGI的设计原理、实现和FASTCGI的简单介绍。
第六部分(第13章)通过常用类库JsonCPP和Protobuf的使用,演示如何使用第三方库。
作者简介
徐晓鑫
腾讯资深软件研发工程师,先后在腾讯游戏之洛克王国、QQ会员、QQ秀等项目工作,精通后台开发各种技术,实战经验丰富。
目录信息
1.1 第一个C++程序 1
1.2 函数 3
1.3 数组 6
1.4 指针 8
1.5 引用 12
1.6 结构体、公用体、枚举 14
1.6.1 结构体、共用体、枚举的概念 14
1.6.2 结构体、共用体在内存单元占用字节数的计算 18
1.7 预处理 20
1.8 本章小结 25
第2章 面向对象的C++ 26
2.1 类与对象 26
2.2 继承与派生 49
2.3 类的多态 57
2.4 本章小结 64
第3章 常用STL的使用 65
3.1 STL是什么 65
3.2 string 66
3.3 vector 77
3.3.1 vector是什么 77
3.3.2 vector的查增删 78
3.3.3 vector的内存管理与效率 86
3.3.4 Vector类的简单实现 90
3.4 map 96
3.4.1 map是什么 96
3.4.2 map的查增删 96
3.4.3 map的原理 109
3.5 set 111
3.5.1 set是什么 111
3.5.2 set的查增删 112
3.6 本章小结 116
第4章 编译 117
4.1 编译与链接 117
4.2 makefile的撰写 131
4.3 目标文件 135
4.3.1 ELF的文件类型 135
4.3.2 链接视图下的ELF内容 136
4.3.3 执行视图下的ELF内容 142
4.3.4 阅读ELF文件的工具——readelf 144
4.3.5 获得二进制文件里符号的工具——nm 144
4.3.6 减少目标文件大小的工具——strip 146
4.4 本章小结 147
第5章 调试 148
5.1 strace 148
5.2 gdb 156
5.3 top 164
5.4 ps 165
5.5 Valgrind 168
5.5.1 Valgrind概述 168
5.5.2 Linux程序内存空间布局 170
5.5.3 内存检查原理 175
5.5.4 Valgrind安装 176
5.5.5 Valgrind使用 177
5.6 本章小结 187
第6章 TCP协议 188
6.1 TCP协议 188
6.1.1 网络模型 188
6.1.2 TCP头部 191
6.1.3 TCP状态流转 193
6.1.4 TCP超时重传 196
6.1.5 TCP滑动窗口 200
6.1.6 TCP拥塞控制 202
6.2 TCP网络编程API 205
6.3 实现一个TCP server 211
6.4 TCP协议选项 215
6.5 网络字节序与主机序 233
6.6 封包和解包 233
6.7 本章小结 247
第7章 网络IO模型 248
7.1 4种网络IO模型 248
7.2 select 256
7.3 poll 267
7.4 epoll 277
7.5 本章小结 289
第8章 网络分析工具 290
8.1 ping 290
8.2 tcpdump 292
8.3 netstat 294
8.4 lsof 296
8.5 本章小结 298
第9章 多线程 299
9.1 多线程是什么 300
9.2 多线程的创建与结束 301
9.3 线程的属性 307
9.4 多线程同步 312
9.5 多线程重入 332
9.6 本章小结 333
第10章 进程 334
10.1 程序与进程 334
10.2 进程的创建与结束 335
10.3 僵尸进程 342
10.4 守护进程 347
10.5 本章小结 351
第11章 进程间通信 352
11.1 管道 352
11.2 消息队列 358
11.3 共享内存 362
11.4 信号量 368
11.5 ipcs命令 373
11.6 本章小结 374
第12章 HTTP协议 375
12.1 HTTP协议工作流程 375
12.2 HTTP协议结构 376
12.3 HTTPS 383
12.4 CGI 386
12.5 FastCGI 397
12.6 本章小结 398
第13章 常用类库 399
13.1 JSON 400
13.2 Protobuf 405
13.3 本章小结 409
· · · · · · (收起)
读后感
每次和人聊起“后台开发”,发现不同人对它的理解都不一样,不同的公司对这个岗位的理解也不一样。这导致离开一个公司的后台开发岗位,去另外一个公司的后台开发岗位不能胜任,甚至不能面试通过。有的公司认为写C++,JAVA,PYTHON这些语言的岗位就是后台开发,有些公司认为只要...
博客地址:http://www.cnblogs.com/Anker/archive/2013/08/17/3263780.html 从上面博客来看,这本书像是抄袭别人博客拼凑的。望有识之人能解释下。 作者是腾讯的? ?????????????????????? 希望风气能越来越好,多点责任,多点用心。
从基础讲起,层层深入和递进,腾讯工程师写的书,里面主要还是腾讯后台开发涉及到的常用技术,想去腾讯的同学值得购买!
从基础讲起,层层深入和递进,腾讯工程师写的书,里面主要还是腾讯后台开发涉及到的常用技术,想去腾讯的同学值得购买!
花了近俩周的时间终于看完了腾讯资深后台工程师徐晓鑫写的《后台开发:核心技术与应用实践》这本书,整体感觉这本书偏基础,比较简单,但是比较全面。清晰的描述了几乎所有后台开发岗所需要的基础知识,是给初学后台开发的同学入门必备。从编程语言,常用类库,编译调试,网...
用户评价
拿到这本《后台开发:核心技术与应用实践》的时候,我真是抱着一种既期待又有些忐忑的心情。期待是因为市面上关于后台开发的深入书籍不多,而我正好处于一个需要系统性梳理后台知识的阶段,希望能在这本书里找到金手指。忐忑则是因为“核心技术与应用实践”这几个词,总让人觉得内容会比较硬核,我怕自己消化不了。然而,翻开第一页,我就被作者的笔触所吸引。他没有上来就堆砌晦涩的概念,而是从一个开发者在实际工作中可能遇到的痛点出发,用非常生活化的比喻来引入各个技术点。比如,在讲到数据库的性能优化时,作者并没有直接抛出索引、缓存这些词汇,而是用了一个“城市交通拥堵”的类比,生动地说明了信息检索的效率问题,以及为何需要“捷径”(索引)和“信息中转站”(缓存)来解决。这种循序渐进、贴近实际的讲解方式,让我这个之前对某些概念有些畏惧的读者,瞬间感到亲切和容易理解。书中的案例也非常贴合当前的互联网开发场景,从用户登录、数据存储到API设计,几乎囊括了我们日常工作中最常遇到的问题。而且,作者在讲解某个技术点时,往往会先介绍其原理,然后深入分析其在不同场景下的应用,最后还会探讨一些进阶的优化技巧,比如在讲到消息队列时,不仅讲解了其异步通信、削峰填谷的特性,还详细对比了RabbitMQ、Kafka、ActiveMQ等几种主流消息队列的优劣,以及如何在实际项目中根据业务场景选择合适的消息队列,并给出了具体的部署和调优建议。这让我觉得这本书不仅仅是知识的罗列,更是作者多年经验的提炼和总结,能够直接指导我的实操。
我对书中关于性能调优的部分印象尤其深刻,因为这直接关系到我们日常开发中的效率和用户体验。作者并没有提供一蹴而就的“银弹”,而是从多个角度、多个层面上分析了性能瓶颈的来源,并提供了相应的解决方案。在代码层面,他不仅讲解了算法和数据结构的优化,还提到了如何避免不必要的资源占用,例如及时释放内存、关闭连接等。在JVM层面,他深入讲解了垃圾回收(GC)的原理、各种GC算法的特点,以及如何通过JVM参数调优来提升应用程序的性能。这部分内容对于Java开发者来说,简直是福音。在数据库层面,如前所述,本书提供了丰富的SQL优化技巧和索引策略。此外,在网络通信方面,他也探讨了如何减少网络请求的次数、优化数据传输的效率。书中还详细介绍了使用火焰图、JProfiler等性能分析工具来定位性能瓶颈的方法。他通过一个具体的电商平台的案例,一步步展示了如何从用户反馈的问题入手,结合各种工具和技术,最终找到性能瓶颈并进行有效的调优。这让我明白,性能优化是一个持续迭代的过程,需要细致的分析和专业的工具支撑。
最让我惊喜的是,这本书在“业务场景驱动的系统设计”这一块的内容。它不像很多技术书籍那样,只是罗列技术点,而是非常注重将技术与实际的业务场景相结合。作者通过分析一些典型的业务场景,例如社交平台的实时消息推送、电商平台的秒杀系统、金融平台的交易系统等,来引导读者思考如何根据业务需求来选择和设计合适的后台技术方案。他会深入分析这些业务场景的特点,例如高并发、低延迟、强一致性等,然后讲解如何利用前面提到的各种技术,如消息队列、缓存、分布式事务、负载均衡等,来满足这些业务需求。书中还鼓励开发者跳出技术的舒适区,去理解业务的逻辑和用户的需求,从而设计出更符合实际应用、更具可扩展性和维护性的系统。作者还提到了一些关于技术选型和架构演进的决策过程,以及如何平衡技术先进性和项目稳定性之间的关系。这种以业务为导向的讲解方式,让我觉得这本书的内容非常有价值,能够直接指导我在实际工作中做出更明智的技术决策,并且能够更好地与业务团队沟通协作。
不得不提的是,这本书在并发与高可用性方面的讲解,着实让我眼前一亮。作者并没有简单地介绍线程池、锁这些基础概念,而是深入探讨了如何构建能够应对海量请求、保证7x24小时不间断运行的后台系统。他从多个维度剖析了高可用性的实现方式,包括但不限于:负载均衡策略(如Nginx的多种算法、LVS)、服务器冗余(主备、主从、多活)、数据复制(主从复制、多主多从)、故障转移机制(心跳检测、自动切换)等等。在讲解并发控制时,作者并没有止步于synchronized和ReentrantLock,而是详细介绍了Atomic系列原子类、CAS(Compare-and-Swap)操作的原理,以及如何利用这些工具来避免锁的粒度过大导致性能下降。此外,书中还对限流、降级、熔断这些保障系统在高并发场景下不宕机的关键技术进行了详尽的阐述。作者通过生动的案例,说明了如何合理设置限流阈值,以及在流量突增时如何通过服务降级(例如关闭非核心功能)来保证核心业务的正常运行。书中的案例分析也非常到位,例如在处理高并发秒杀场景时,如何结合数据库锁、Redis缓存、消息队列等技术,构建一套能够支撑高并发冲击的系统。这让我深刻理解到,真正的后台开发,不仅仅是实现功能,更是如何让系统变得健壮、高效、稳定。
我必须得说,《后台开发:核心技术与应用实践》这本书在架构设计这个章节的处理上,简直是教科书级别的。它没有拘泥于某一种特定的架构模式,而是从宏观的视角出发,先分析了单体架构、微服务架构、SOA等不同架构风格的演进历程,以及它们各自的优缺点和适用场景。作者并没有武断地宣扬哪种架构是“最好”的,而是强调“适合的才是最好的”,引导读者去思考业务需求、团队规模、技术栈等因素对架构选择的影响。在讲解微服务架构时,作者更是花费了大量篇幅来探讨服务拆分、服务治理、API网关、分布式事务等核心问题。他用图文并茂的方式,清晰地展示了服务之间的依赖关系,以及如何通过服务注册与发现、负载均衡、熔断降权等机制来保证系统的可用性和稳定性。更让我印象深刻的是,书中还详细介绍了如何进行灰度发布、蓝绿部署等 DevOps 实践,这对于保证新版本上线过程中的平稳过渡至关重要。作者在提到分布式事务时,并没有仅仅停留在理论层面,而是详细讲解了TCC、Saga、两阶段提交等几种常见的分布式事务解决方案,并分析了它们各自的优缺点和在实际项目中的落地挑战。这种深入浅出的讲解,让我对复杂的分布式系统有了更清晰的认识,也为我未来设计更健壮的后台系统提供了坚实的基础。书中的每一个图表都经过精心设计,逻辑清晰,帮助我快速理解抽象的概念。
这本书在数据存储与管理这一块的内容,让我对数据库有了全新的认识。我一直认为数据库只是一个存放数据的工具,但读完这本书,我才明白其背后蕴含的学问有多深。作者从关系型数据库(MySQL、PostgreSQL)的基本原理讲起,到索引的设计与优化、SQL语句的性能调优,再到事务的ACID特性、隔离级别,他都进行了非常详尽的讲解。尤其是在讲到索引时,书中不仅仅介绍了B+树索引的原理,还分析了不同类型索引(主键索引、唯一索引、普通索引、全文索引)的适用场景,以及如何通过explain命令来分析SQL的执行计划,找出性能瓶颈。对于我们开发者来说,这部分内容简直是必备的技能。更令我惊喜的是,书中还花了相当大的篇幅介绍了NoSQL数据库,包括键值数据库(Redis)、文档数据库(MongoDB)、列式数据库(HBase)以及图数据库等,并且详细对比了它们在数据模型、查询方式、一致性模型等方面的差异。作者在讲解Redis时,不仅介绍了其作为缓存的使用,还详细讲解了其作为消息队列、分布式锁等场景下的应用,以及Redis集群的搭建和维护。这些内容对于需要处理大规模数据、追求高性能的开发者来说,无疑是宝贵的财富。我甚至觉得,这本书的内容,比我之前上过的几门数据库课程都要来得实用和深入。
这本书在安全方面的内容,让我重新审视了后台开发的安全观。我之前对安全的理解可能还停留在“防火墙”和“杀毒软件”的层面,但这本书让我看到了一个更广阔、更深入的安全体系。作者从 Web 安全的基础讲起,详细讲解了HTTPS的工作原理,以及如何防止SQL注入、XSS(跨站脚本攻击)、CSRF(跨站请求伪造)等常见的Web安全漏洞。他给出了非常具体的防范措施,例如对用户输入进行过滤和转义,使用预编译SQL语句,设置合理的Cookie属性等。在身份认证与授权方面,书中详细介绍了Session-Cookie机制、JWT(JSON Web Token)的工作原理,以及OAuth 2.0等授权协议。他还探讨了如何设计安全的密码存储机制,例如使用 bcrypt 等加盐哈希算法。此外,书中还触及了API安全、数据加密、访问控制等重要议题。作者强调了“安全左移”的理念,即在开发的早期阶段就应该考虑安全性,而不是等到系统上线后才去修补漏洞。书中还分享了一些安全审计的经验,以及如何应对潜在的安全事件。这让我明白,安全不仅仅是运维人员的责任,更是每一个后台开发者的义务。
这本书在 DevOps 与持续集成/持续部署(CI/CD)方面的讲解,为我打开了新的视野。我之前对 CI/CD 的理解可能还比较模糊,觉得那是运维团队的事情。但读完这本书,我才意识到,作为后台开发者,理解并实践 CI/CD 流程是多么重要。作者从版本控制(Git)的最佳实践讲起,详细介绍了分支策略、代码合并的技巧,以及如何进行代码审查(Code Review)。然后,他深入讲解了持续集成(CI)的流程,包括自动化构建、自动化测试(单元测试、集成测试、端到端测试),以及如何利用Jenkins、GitLab CI等工具来实现自动化构建和测试。在持续部署(CD)方面,书中详细介绍了如何实现自动化部署,包括部署策略(如蓝绿部署、灰度发布),以及如何利用Docker、Kubernetes等容器化技术来简化部署和管理。作者还探讨了配置管理(如Ansible、Chef)在自动化部署中的作用。他强调了“基础设施即代码”(Infrastructure as Code)的理念,即通过代码来管理基础设施,从而提高部署的效率和一致性。书中还分享了如何通过监控和日志来及时发现和解决部署过程中出现的问题,形成一个完整的闭环。
这本书在日志与监控方面的内容,完全颠覆了我之前对日志的认知。我之前觉得日志只是用来记录错误信息的,但这本书让我看到了日志作为系统“眼睛”的重要性。作者详细讲解了如何设计规范的日志格式,如何进行日志的收集、存储、分析和可视化。他介绍了ELK(Elasticsearch, Logstash, Kibana)这一经典的日志处理技术栈,并详细讲解了Logstash如何进行日志的解析、过滤和格式转换,Elasticsearch如何进行高效的日志存储和检索,以及Kibana如何进行日志的可视化展示和告警设置。书中还深入探讨了分布式日志的挑战,例如日志的全局唯一ID、日志的聚合与关联,以及如何处理海量日志的存储和查询性能问题。在监控方面,作者介绍了Prometheus、Grafana等流行的监控工具,讲解了如何定义各种关键指标(Metrics),如何进行系统性能的实时监控,以及如何设置告警规则。他强调了“可观测性”(Observability)的重要性,将日志、指标(Metrics)和追踪(Tracing)这三者结合起来,形成一个完整的系统状态视图。这种对日志和监控的系统性讲解,让我明白了一个稳定、可维护的后台系统,离不开强大的日志和监控体系的支持。
在网络通信与协议方面,《后台开发:核心技术与应用实践》这本书展现了作者扎实的功底。从TCP/IP协议栈的层次模型开始,作者逐层剖析了HTTP、TCP、UDP等核心协议的原理和特点。他清晰地解释了HTTP的请求-响应模式,GET、POST等方法的区别,以及RESTful API的设计原则。在讲到TCP时,作者深入探讨了三次握手的过程、四次挥手的过程,以及TCP的流量控制、拥塞控制等机制,这对于理解网络通信的稳定性和效率至关重要。更难得的是,书中还介绍了WebSocket协议,并分析了其与HTTP的区别以及在实时通信场景下的应用。作者还针对RPC(远程过程调用)技术进行了详细的讲解,对比了gRPC、Dubbo等主流RPC框架的优劣,并给出了如何在实际项目中选择和使用RPC框架的建议。这对于构建分布式系统,实现服务间的无缝通信非常有帮助。书中还提到了网络安全方面的一些内容,例如SSL/TLS的加密过程,以及如何防止常见的网络攻击,如SQL注入、XSS攻击等。这种对底层网络原理的深入讲解,配合对上层应用协议的剖析,构建了一个完整的网络通信知识体系,让我对我们每天都在使用的网络世界有了更深的敬畏和理解。
面试后端,恶补一波。全是抄的博客,2星以示尊重。
明天我也写一本书,名字叫运维技术和应用实战,内容就是把常见的开源软件安装一遍,再讲一下常见命令的用法。
这种东西也能拿出来写书吗?穷疯了吗
说epoll实现是mmap。。在网上抄的吧。
面试后端,恶补一波。全是抄的博客,2星以示尊重。