🚀 前言
本文是《C++基础入门与实战进阶》专栏的说明贴(点击链接,跳转到专栏主页,欢迎订阅,持续更新…)。
专栏介绍:以多年的开发实战为基础,总结并讲解一些的C/C++基础与项目实战进阶内容,以图文并茂的方式对相关知识点进行详细地展开与阐述!专栏涉及了C/C++领域多个方面的内容,包括C++基础及编程要点、C++11及以上新特性、C++开源库介绍与使用、代码分享(调用系统API、使用开源库)、编程技术(动态库、多线程、多进程、数据库及网络编程等)、软件UI编程(Win32/duilib/QT)、C++软件调试技术(排查软件异常的手段与方法、分析C++软件异常的基础知识、常用软件分析工具使用、实战问题分析案例等)、设计模式、网络基础知识与进阶内容等。
本专栏的内容都是建立在项目实践的基础上,很有实战参考价值!在这里,你将学到大量通过实践总结出来的C++相关知识与技能!
专栏适用人群:适合基础进阶和想做技术提升的C++开发人员!
本专栏是接下来要重点打造的技术专栏,目前专栏文章已经更新到290多篇,还在持续的更新中,欢迎订阅!
专栏文章还在持续更新 ing…
如果文章有用,可以点赞、收藏、关注,也可以订阅专栏!
🔰 专栏内容
本专栏主要包含以下多个方面的内容:(本专栏涵盖了多方面的内容,订阅本专栏,你将获取如下这些全面的内容)
📢 1、C++
专栏开篇就系统地介绍了C/C++的学习路线,并给出了学习C/C++经典书籍推荐!本部分结合项目实践和经验,讲解一些日常工作中常用的C++要点知识(比如常用关键字、预编译指令、编程技巧等)以及一些需要重点关注的内容。
📢 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、rabbitmq、mqtt、zookeeper、opencv、ffmpeg、sdl、gstreamer、live555、nginx、reactos等。
学习开源库的代码,可以了解开源库内部的业务逻辑,也可以学习开源库的编程思想,后面在使用开源库时会更加得心应手。
📢 4、常用代码分享
会分享一些日常工作中常用功能的实现代码,代码经过项目验证,可以直接拿去使用。比如如何调用系统API去实现一些功能、如何使用libcurl、zlib、zip.cpp/unzip.cpp、libqr、md5、libpng、sqlite、cef、tinyxml、jsoncpp/rapidjson等开源库去实现若干功能。
📢 5、编程技能
会讲到一些常用的编程技能,比如动态库编程、多线程编程(多线程通信与多线程同步)、多进程编程、数据库编程(连接数据库以及SQL语句的编写及SQL语句查询效率优化)、线程间通信及进程间通信、socket网络编程(包含TCP/IP协议栈相关内容)等。会介绍一些开发实践中的要点与编程细节,以及相关问题的排查案例。
📢 6、C++软件调试技术
考察一个开发人员的水平,一方面要看其软件开发与设计能力,另一方面要看其软件调试能力。所以,软件调试能力很重要。
大部分C++开发人员在软件调试这一块都比较欠缺,分析和排查软件异常问题的手段和方法比较单一,处理问题的效率不高,有时甚至会影响到项目推进的进度。
为了解决广大开发人员普遍缺乏调试能力的痛点问题,我们会介绍很多软件调试方面的内容:
1)系统地介绍引发C++软件异常的常见原因以及排查C++软件异常的常用方法。
2)详细介绍常用IDE的调试方式以及使用IDE开发调试的常用经验和技巧。
3)讲解排查C++软件异常所需要掌握的基础汇编知识。了解汇编,可以从汇编的角度去理解很多高级语言无法理解的代码执行细节(比如多线程代码的执行细节),还可以查看汇编上下文去辅助分析和排查软件异常问题。
4)介绍一些常用的分析软件内存问题的专用内存分析工具,比如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++软件调试与异常排查更详细的内容,可以去查看我的精品技术专栏:(目前专栏订阅量已达500多个,专栏质量很高,有很强的实战参考价值,广受好评!)
C++软件调试与异常排查从入门到精通系列文章汇总
https://blog.csdn.net/chenlycly/article/details/125529931
📢 7、软件UI编程
所谓软件UI编程,就是使用UI界面库进行客户端软件界面的开发,一方面会涉及到产品的业务,另一方面会涉及到UI界面编程,其中UI界面编程占了较大的比重。本专栏也会讲到常用的UI界面库MFC、开源duilib库、跨平台QT库相关的内容,主要是使用这些UI库的要点及问题排查经验总结。
📢 8、设计模式
设计模式在日常工作中也会时常用到,比如常见的单例模式、简单工厂模式、观察者模式(订阅)、状态模式(状态机)、适配器模式等。在面试时也会问到设计模式相关的问题,比如使用过哪些设计模式、说说某个设计模式的设计思想以及可以解决什么样的问题。一般不要求掌握所有的设计模式,知道并使用过若干个设计模式即可,需要了解更多时再去学习也可以的。
📢 9、基础网络知识与进阶内容
大部分软件系统都是构建在网络上,客户端与服务器(可能是C/S架构的,也可能是B/S架构的)通过网络进行数据通信与业务交互,这样就可能会遇到这样那样的网络问题。作为IT从业人员,无论是开发人员,还是测试人员,亦或是运维人员和技术支持人员,都要了解基础的网络知识,以便去排查各式各样的网络问题。
专栏中先是大概地介绍了一些基础网络知识,不仅工作中会用到,笔试面试也会涉及到。然后结合项目中遇到的多个网络问题实例,讲解问题的大概排查方法与过程。在这里,不仅可以了解到很多宏观上的网络知识和网络排查技能,也会涉及到很多TCP/IP协议栈的内容。
📝 最后
《C++基础入门与实战进阶》专栏的文章都在这里啦(点击该链接,跳转到专栏主页,欢迎订阅,持续更新…)。
文章会持续更新,大家有想要了解的功能点或者话题,可以在评论区告诉我!
喜欢本专栏的文章,可以点赞、订阅支持一下,你的肯定是对我最大的支持!
也可以收藏本文章,收藏后可以快速查看本专栏后续更新的一系列文章!