? 前言
本文是《C/C++实战专栏》专栏的说明贴(点击链接,跳转到专栏主页,欢迎订阅,持续更新…)。
专栏介绍:以多年的开发实战为基础,总结并讲解一些的C/C++基础与项目实战进阶内容,以图文并茂的方式对相关知识点进行详细地展开与阐述!专栏覆盖了C/C++领域多个方面的内容,包括C++基础及编程要点(模板泛型编程、STL容器及算法函数的使用等)、C++11及以上新特性(开源代码中可能会用到很多新特性(比如WebRTC开源库),日常编码中也会用到部分新特性,面试时也会频繁地涉及到,学习新特性很有必要)、数据结构与算法、常用C++开源库的介绍与使用(比如SQLite、libcurl、libwebsockets、libevent、jsoncpp/RapidJson、Redis、RabbitMQ、MongoDB、MQTT、ZooKeeper、FFmpeg、SDL、GStreamer、Live555、ReactOS等)、代码分享(调用系统API、使用开源库代码与经验分享)、常用编程技术(静态库与动态库、多线程、多进程、数据库及网络编程等)、软件UI编程(Win32/duilib/QT/MFC)、C++软件调试技术(引发C++软件异常的常见原因分析与总结、排查C++软件异常的手段与方法、分析C++软件异常的基础知识、使用常用软件分析工具分析C++软件问题、多个项目实战问题分析案例等)、设计模式(单例模式、工厂模式、观察者模式、状态模式等)、网络基础知识与网络问题分析进阶内容(实战问题分析实例分享)等。
本专栏的内容都是建立在项目实践的基础上,来源于项目实战,服务于项目实战,很有实战参考价值!在这里,你将学到大量通过实践总结出来的C/C++相关要点与技能!
专栏适用人群:适合基础进阶和想做技术提升的C/C++开发人员!
本专栏是接下来要重点打造的技术专栏,目前专栏文章已经更新到400多篇,还在持续的更新中,欢迎订阅!
专栏文章还在持续更新 ing…
如果文章有用,可以点赞、收藏、关注,也可以订阅专栏!
? 专栏内容
本专栏主要包含以下多个方面的内容:(本专栏涵盖了C++开发多方面的内容,订阅本专栏,你将获取如下这些全面的内容!本专栏融合了本人多个专栏的内容,订阅了本专栏,相当于订阅了多个专栏!)
? 1、C++
专栏开篇就系统地介绍了C/C++的学习路线,并给出了学习C/C++经典书籍推荐!本部分结合项目实践和经验,讲解一些日常工作中常用的C++要点知识(比如常用关键字、预编译指令、编程技巧等)以及一些需要重点关注的内容。比如会讲到模板函数与模板类等泛型编程、日常编码中常用的STL标准模板库的内容(比如如何使用STL算法函数提高STL容器列表的遍历效率、使用STL容器时哪些场景下容易产生异常)、C语言SEH结构化异常中的异常捕获__try…__except、C++中的异常捕获try…catch等。
? 2、C++11及以上新特性
C++11是C++发展史上一次里程碑的更新,引入了大量的新特性(引入一些新的关键字、左值右值、左值引用、右值引用、移动语义、完美转发、匿名函数、智能指针、并发编程等),极大地扩展了C++的应用范围和表达能力,开启了现代C++时代。此后,C++标准化组织又陆续推出了C++14、C++17和C++20新特性,这些新特性相对C++11要少很多,都是在C++11基础上的锦上添花。
我们需要重点掌握C++11的新特性。很多C++开源代码积极拥抱C++11及以上的新特性,比如大型开源库WebRTC,大量地使用了C++11及以上的新特性。所以,我们在阅读这类开源代码时要熟悉C++11等新特性。在日常项目开发过程中也会或多或少地使用C++11新特性(比如使用一些常用关键字、匿名函数、智能指针等)。此外,通过近几年的观察,C++11新特性已成为很多公司面试时必问的内容。所以,学习C++11新特性很有必要,不仅学习阅读开源代码时会用到,日常工作中也会或多或少地用到,而且面试时也会大量的涉及到。
C++新标准引入的诸多新特性,解决了语言上的部分缺陷,使得C++更得加高效灵活!但也使得C++变得更加臃肿复杂,更加难以驾驭!
此外,强烈推荐大家去看看Google的C++代码风格指南(Google C++ Style Guide),其中讲到了大量的C++老特性与新特性。有国内程序员翻译而来的中文版本,可以去https://github.com/zh-google-styleguide/zh-google-styleguide下载中文版本pdf文档(不仅仅有C++风格指南,还有Objective-C、Shell、JavaScript、Python、TypeScript这些语言的风格指南)。也可以去网址https://google.github.io/styleguide查看原汁原味的英文版本(英文原版还有更多语言的风格指南)。
本指南的目的是通过详细阐述 C++ 注意事项来驾驭其复杂性。这些规则在保证代码易于管理的同时,也能高效使用 C++ 的语言特性(讲到了大量的C++新特性)。
本指南不仅仅是编码规范,它列出了你要怎么做,还告诉你为什么要这么做,哪些情况下可以不这么做,以及如何权衡其利弊。
? 3、C++开源库介绍与使用
会介绍一些常用的开源库,介绍如何去使用常用的开源库(比如如何去调用接口、使用开源库的要点及注意点、使用开源库的问题排查与经验总结)、如何去编译一些开源库、如何使用开源库去搭建一些简单可用的应用系统,并给出项目中使用的部分实例。
常见的开源库有SQLite、libcurl、libwebsockets、libevent、boost、jsoncpp/RapidJson、Redis、RabbitMQ、MongoDB、MQTT、ZooKeeper、OpenCV、FFmpeg、SDL、GStreamer、Live555、Nginx、ReactOS等:
1)处理json的jsoncpp、RapidJson库(json串的构建与解析)。
2)处理xml的TinyXML库(XML串的构建与解析)。
3)支持SMTP/HTTP/HTTPS等多协议网络传输开源库libcurl库(使用SMTP协议发送邮件、使用HTTP/HTTPS发起HTTP请求)。
4)处理文件压缩与解压缩的zip.cpp和unzip.cpp(支持文件的压缩与解压)。
5)二维码生成库libqr(生成二维码图片)。
6)png图片处理库libpng(读写png图片)。
7)图片读取解析库stb_image(图片读取与解析)。
8)实现websocket通信的libwebsockets库(客户端与服务器之间进行websoket通信)。
9)轻量级开源数据库SQLite(存放本地数据)。
10)多媒体处理开源库FFmpeg(包含音视频采集与编码、音视频解码、视频格式转换、视频抓图、给视频加水印等功能)。
11)实时音视频处理开源库WebRTC(包含音视频采集、编码、网络传输,解码显示等)。
12)Chromium嵌入式框架开源库CEF(嵌入浏览器控件)。
13)跨平台多媒体开发库SDL库(音视频采集、编码、解码显示等)。
14)数据实时压缩解压库zlib(对字节流数据进行实时的压缩与解压缩)。
15)异常捕获库CrashRpt/CrashPad(捕获软件运行过程中的异常)。
16)开源操作系统ReactOS(查看系统源码,可作为Windows系统代码实现的参考,有时能可以通过查看系统函数的实现去辅助解决问题)。
17)网络通信库boost、muduo和libevent等。
18)计算机视觉和机器学习库OpenCV(用于实时的图像处理和计算机视觉任务,包括图像和视频捕捉、面部识别、物体检测、运动分析、3D重建、机器学习以及图像分类等)。
19)目标检测Yolo(实时目标检测算法,可以检测物体的类别和位置,用于智能监控、自动驾驶、机器人视觉等领域)。
20)高性能消息队列中间件 RabbitMQ(提供统一消息服务的应用层标准高级消息队列协议,用于组件或模块之间传递消息)。
21)开源数据结构存储系统Redis(一个开源的、使用C语言编写的、支持网络、可基于内存亦可持久化的日志型、Key-Value数据)。
22)分布式的,开放源码的分布式应用程序协调服务ZooKeeper(它用来帮助分布式系统中的各个节点进行信息共享和同步,确保数据一致性;也用来用来存储和管理分布式系统的配置信息,如集群中的机器配置、服务地址配置等)。
23)非关系型文档数据库Mongodb(它是一种开源的、面向文档的数据库,它使用 BSON(Binary JSON)格式存储数据,提供了灵活的文档模型,能够存储复杂的数据类型,并支持丰富的查询语言,用于多个领域中)
24)轻量级的、基于发布/订阅模式的物联网通信协议MQTT(MQTT是一种轻量级的消息传输协议,它采用发布/订阅模式,允许设备之间通过Topic主题进行通信。MQTT有支持多种开发语言的多种实现库,主要使用这些协议实现库)。
25)多媒体框架GStreamer(用于创建流媒体应用程序,以及处理各种媒体类型的数据流,包括音频、视频等)
26)流媒体来源库Live555(主要用于实现基于RTP实时传输协议和RTSP实时流协议媒体流的发送和接收,广泛应用于网络摄像头、IPTV、视频会议等需要实时传输音视频数据的领域)。
一般我们只需要会使用这些开源库即可,至于开源库内部源码的实现与内部实现机制,可以根据项目需要或者个人兴趣去查看学习。
学习开源库的代码,可以了解开源库内部的业务逻辑,也可以学习开源库的编程思想,后面在使用开源库时也会更加得心应手。
? 4、常用代码分享
会分享一些日常工作中常用功能以及使用开源库的实现代码,代码经过项目验证,可以直接拿去使用。比如如何调用系统API去实现一些功能、如何使用libcurl、zlib、zip.cpp/unzip.cpp、libqr、md5、libpng、sqlite、duilib、cef、tinyxml、jsoncpp/rapidjson、libsockets、libevent、redis、rabbitmq等开源库去实现若干功能。
? 5、编程技能
会讲到一些常用的编程技能,比如动态库编程、多线程编程(多线程通信与多线程同步)、多进程编程(进程间通信)、数据库编程(连接数据库、SQL语句的编写及SQL语句查询效率优化等)、线程间通信及进程间通信、socket网络编程(包含TCP/IP协议栈相关内容)等。会介绍一些开发实践中的要点与编程细节,以及相关问题的排查案例。
? 6、C++软件调试技术
考察一个开发人员的水平,一方面要看其软件开发与设计能力,另一方面要看其软件调试能力。所以,软件调试能力很重要。
大部分C++开发人员在软件调试这一块都比较欠缺,分析和排查软件异常问题的手段和方法比较单一,处理问题的效率不高,有时甚至会影响到项目推进的进度。
为了解决广大开发人员普遍缺乏调试能力的痛点问题,我们会介绍很多软件调试方面的内容:
1)系统地介绍引发C++软件异常的常见原因以及排查C++软件异常的常用手段与方法。
2)详细介绍常用IDE的调试方式以及使用IDE开发调试的常用经验与技巧。
3)讲解排查C++软件异常所需要掌握的基础汇编知识。了解汇编,可以从汇编的角度去理解很多高级语言无法理解的代码执行细节(比如多线程代码的执行细节),还可以查看汇编上下文去辅助分析和排查软件异常问题。
4)介绍一些常用的分析软件内存问题的专用内存分析工具,比如VLD、Windbg、Valgrind和AddressSanitizer等。
5)介绍一些分析软件异常问题所需要掌握的基础知识,比如程序的内存分区、函数调用的栈分布、栈回溯原理、虚函数调用的汇编代码实现、函数调用约定等。
6)系统地介绍日常工作中一些常用的软件分析工具,比如SPY++、Dependency Walker、Process Explorer、Process Hacker、Process Monitor、API Monitor、Windbg、IDA、Clumsy等,详细地介绍如何使用这些工具,并给出使用这些工具分析问题的项目问题分析实例。
7)介绍与分析软件异常息息相关的pdb文件(pdb文件的时间戳和名称、如何加载pdb文件、哪些工具需要使用到pdb文件)、dump文件(如何生成dump文件、生成dump文件的方式有哪些、如何使用Windbg分析dump文件等)。
8)给出多个项目中遇到的软件异常分析实例(比如程序启动失败或启动报错、各类软件崩溃实例),详细讲解了整个问题排查的过程,有很强的实战参考价值。同时也方便大家跟着案例进行学习和实操。后续新的问题排查案例,也会更新到本C/C++实战进阶专栏中!
关于C++软件调试与异常排查更详细的内容,可以去查看我的核心精品技术专栏:(目前专栏订阅量已达560多个,专栏质量很高,有很强的实战参考价值,广受好评!)
C++软件调试与异常排查从入门到精通系列文章汇总
https://blog.csdn.net/chenlycly/article/details/125529931
? 7、软件UI编程
所谓软件UI编程,就是使用UI界面库进行客户端软件界面的开发,一方面会涉及到产品的业务,另一方面会涉及到UI界面编程,其中UI界面编程占了较大的比重。本专栏也会讲到常用的Win32编程、UI界面库MFC、开源duilib库、跨平台QT库相关的内容,主要是使用这些UI库的要点及问题排查经验总结。
? 8、设计模式
设计模式在日常工作中也会时常用到,比如常见的单例模式、简单工厂模式、观察者模式(订阅)、状态模式(状态机)、适配器模式等。在面试时也会问到设计模式相关的问题,比如使用过哪些设计模式、说说某个设计模式的设计思想以及可以解决什么样的问题。
一般不要求掌握所有的设计模式,知道并使用过若干个设计模式即可,需要了解更多时再去学习也可以的。
? 9、网络基础知识与进阶内容
大部分软件系统都是构建在网络上,客户端与服务器(可能是C/S架构的,也可能是B/S架构的)通过网络进行数据通信与业务交互,这样就可能会遇到这样那样的网络问题。作为IT从业人员,无论是开发人员,还是测试人员,亦或是运维人员和技术支持人员,都要了解基础的网络知识,以便去排查各式各样的网络问题。
专栏中先是大概地介绍了一些基础网络知识,不仅工作中会用到,笔试面试也会涉及到。然后结合项目中遇到的多个网络问题实例,讲解问题的大概排查方法与过程。在这里,不仅可以了解到很多宏观上的网络知识和网络排查技能,也会涉及到很多TCP/IP协议栈的内容。
? 10、核心专栏介绍与推荐
1)C++软件调试与异常排查从入门到精通系列文章汇总(精品核心技术专栏)
https://blog.csdn.net/chenlycly/article/details/125529931
本专栏根据多年C++软件异常排查的项目实践,系统地总结了引发C++软件异常的常见原因以及排查C++软件异常的常用思路与方法,详细讲述了C++软件的调试方法与手段,以图文并茂的方式给出具体的项目问题实战分析实例(很有实战参考价值),带领大家逐步掌握C++软件调试与异常排查的相关技术,适合基础进阶和想做技术提升的相关C++开发人员!
考察一个开发人员的水平,一是看其编码及设计能力,二是要看其软件调试能力!所以软件调试能力(排查软件异常的能力)很重要,必须重视起来!能解决一般人解决不了的问题,既能提升个人能力及价值,也能体现对团队及公司的贡献!
专栏中的文章都是通过项目实战总结出来的,包含大量项目问题实战分析案例,详细讲述问题的分析过程,有很强的实战参考价值,广受好评!专栏文章还在持续更新中,预计文章篇数能更新到200篇以上!
该精品技术专栏的订阅量已达到560多个,专栏文章持续更新中,预计更新到200篇以上!欢迎订阅!
2)C/C++实战专栏(精品核心技术专栏)
https://blog.csdn.net/chenlycly/category_11931267.html
以多年的开发实战为基础,总结并讲解一些的C/C++基础与项目实战进阶内容,以图文并茂的方式对相关知识点进行详细地展开与阐述!专栏涉及了C/C++领域多个方面的内容,包括C++基础及编程要点(模版泛型编程、STL容器及算法函数的使用等)、数据结构与算法、C++11及以上新特性(不仅看开源代码会用到,日常编码中也会用到部分新特性,面试时也会涉及到)、常用C++开源库的介绍与使用、代码分享(调用系统API、使用开源库)、常用编程技术(动态库、多线程、多进程、数据库及网络编程等)、软件UI编程(Win32/duilib/QT/MFC)、C++软件调试技术(排查软件异常的手段与方法、分析C++软件异常的基础知识、常用软件分析工具使用、实战问题分析案例等)、设计模式、网络基础知识与网络问题分析进阶内容等。
本专栏涵盖了C++开发多方面的内容,是当前重点打造的专栏,专栏文章已经更新到460多篇,还在持续更新中!欢迎订阅!
3)C++常用软件分析工具从入门到精通案例集锦汇总(重要技术专栏)
https://blog.csdn.net/chenlycly/article/details/131405795
常用的C++软件辅助分析工具有PE工具、SPY++、Dependency Walker、Clipbrd、GDIView、Process Explorer、Process Monitor、API Monitor、Clumsy、Windbg、IDA Pro等,本专栏详细介绍如何使用这些工具去巧妙地分析和解决日常工作中遇到的问题,并给出了大量项目问题实战分析实例,很有实战参考价值!
4)VC++常用功能开发汇总(重要技术专栏)
https://blog.csdn.net/chenlycly/article/details/124272585
将10多年C++开发实践中常用的功能,以高质量的代码展现出来。这些常用的高质量规范代码,可以直接拿到项目中使用,能有效地解决软件开发过程中遇到的问题。
5)C++ 软件开发从入门到精通(重要技术专栏)
https://blog.csdn.net/chenlycly/category_12695902.html
根据多年C++软件开发实践,详细地总结了C/C++软件开发相关技术实现细节,分享了大量的实战案例,很有实战参考价值。
? 最后
《C/C++实战专栏》专栏的文章都在这里啦(点击该链接,跳转到专栏主页,欢迎订阅,持续更新…)。
文章会持续更新,大家有想要了解的功能点或者话题,可以在评论区告诉我!
喜欢本专栏的文章,可以点赞、订阅支持一下,你的肯定是对我最大的支持!
也可以收藏本文章,收藏后可以快速查看本专栏后续更新的一系列文章!