课程简介
在当今软件开发领域,C++以其高效、灵活的特性成为了许多高性能项目的首选编程语言。然而,要充分发挥C++的性能优势,软件开发人员需要具备扎实的C++功底和出色的代码优化能力。本课程旨在帮助学员提升C++代码性能优化设计的能力,从而更好地应对各种复杂的软件开发挑战。
目标收益
通过本课程的学习,您将能够熟练掌握C++代码性能优化的方法和技巧,为您的项目带来更高的性能和稳定性。课程1/3的时间介绍C++设计思想和原理,1/3时间案例,并且要求学员组合成小组进行现场设计。 最后1/3时间再介绍该案例的设计过程,讲师带领大家一起对设计结果进行分析,指出不”和谐”的地方,通过逐步运用模式,改善设计。 而不是把最完美的答案一下子放到学员的面前,并分析为什么这么设计,而不是过度设计,什么情况下可以不拘泥于现有的原则。
培训对象
课程大纲
第一单元:C++中的错陷阱辨析 |
内容一:C++程序编译、调试及运行中的常见问题处理 1.对象的赋值与对象的复制 2.引起循环依赖的问题 3.析构函数引起的问题 4.如何正确地初始化对象 5.小心内存越界 6.正确地释放内存 7.临时对象的陷阱 8.降低系统间模块的耦合度 内容二:C/C++内存管理 1.C++内存分配方式 2.长度明确 3.预估内存 4.防止栈溢出 5.避免在堆中频繁地申请、释放小块内存 6.多块内存尽量大小相同,互相靠近 7.了解系统数据结构的运作机制 8.考虑分配顺序 9.类的内存分布(初始化顺序等) 10.值对象的注意点(函数传参、临时变量、函数替代参数) 实例对象与指针对象的异同 内容三:C++中函数写法及注意点 1.直接调用个数与调用者的个数 2.好函数的2个原则(长度及其它) 3.函数参数个数 4.丑陋的标识参数,及如何避免的技巧 5.使用描述性名称(阅读“深合己意”的代码) 6.switch语句 内容四:C++的继承与派生编程技术 1.虚函数与虚表的原理 2.派生类及成员定义语法 3.派生类的成员设计 4.继承的方式 5.虚函数与多态性的编程技术 6.虚函数、纯虚函数和抽象类 7.多态的本质 8.泛型与多态 |
第二单元: C++性能优化思路与原则实践 |
内容一:性能优化的关键第一步 1.避免想当然,一切用数据说话! 2.借助工具(Valgrind、gprof、fprofile) 3.性能可视化工具 4.代码级性能分析 5.操作系统与硬件监控(如top、htop、vmstat、iostat、netstat等) 6.案例分析—某复合文档系统,性能优化分析与讨论。 内容二:性能优化的常用思路 1.空间换时间 2.冗余数据及结构 3.并发与并行 4.算法优化 5.编译器优化 6.嵌套循环中的内存管理优化 7.I/O优化 8.代码重构与设计优化 案例分析—某网络数据处理系统等,讨论性能优化处理方案。 内容三:消息发布订阅间接设计 1.消息总线与观察者模式 2.消息发布订阅模式 3.C++设计中间接的使用 4.效率与结构的合理取舍 案例分析—某数据分析系统, 使用生产者-消费者模式重构系统,及不同方案的对比讨论。 内容四:其他性能优化设计原则 1.Sockket设计:使用非阻塞I/O、使用事件驱动模型、使用连接池、使用缓冲区 2.IO设计:使用缓冲区、避免频繁的磁盘读写、使用异步I/O、优化数据结构和算法、减少内存分配和释放、使用高效的文件格式 3.循环:循环展开、循环交换、循环合并、循环依赖分析、循环并行化 4.其他: 案例分析—案例说明上述性能优化原则。 |
第三单元:c++系统设计原则与模式 ——成为优秀的设计师 |
内容一:C++设计原则的具体运用 1.封装: 利用类的特征将数据和函数隐藏。 2.李斯卡替换原则及其运用 3.策略和实现分离的必要性 4.隔离不同的因素 5.对系统中常见的,多种情况组合的处理方法。 6.对复杂行为的处理。 7.用间接增强系统的灵活性 8.设计稳定结构的要点 9.对已存在的模块,如何动态改变其行为 10.C++中进行抽象的技巧 案例分析—略 内容二:C++中的设计模式 1.创建型模式讨论 2.行为型模式 a)Adapter与Bridge b)Composite、Decorator与Proxy c)Façade模式 与 Adapter模式 /Proxy模式 d)Composite 与Iterator模式 3.结构型模式 a)封装变化-Strategy/State/ Iterator模式 b)封装结构---Mediator模式与Facade模式 c)对象作为参数-- Visitor/Command/Mementor d)通信应该被封装还是被分布- Mediator和Observer e)对发送者和接收者解耦-Command模式与职责链模式 将实践中常容易混淆或常常联合使用的几个模式放在一组讨论,对比分析,讲解思想。如何发现、应用更多模式。通过对“相似或相关的设计模式”的对比分析,加深理解,是避免“模式误用”的好方法。 内容三:案例实践– 多功能文件处理系统设计 1.介绍项目背景情况,如何应对将来的各种变化 2.学员分组进行设计 3.应用设计原则及模式来改善设计 4.分析设计模式是否带来软件的可维护性 5.学习(Factory Method/Adapter/Proxy/Observer/Strategy等几种设计模式和设计原则)、 内容四:案例上机实践–薪酬管理系统设计应用分析 1.Robort C Martion 是如何考虑问题的 2.架构思路 3.设计中的博弈点,哪些值得我们学习 4.Martion设计的过程中是怎样应用思考的。 5.学习设计模式(strategy / /Template Method/ Adapter/ Command) 6.通过研读经典学习到什么? |
第四单元:c++系统设计策略 |
内容一:重构已有的系统 1.设计坏味道概述 2.重构思想 3.理解如何结合重构和模式; 4.用模式导向的重构(pattern-directed refactoring)改善既有代码的设计; 5.找出需要进行模式导向重构的代码段; 6.了解为什么使用模式来改善既有的设计要优于在新的设计早期使用模式。 7.一组坏味 (也就是问题),表示需要进行模式导向的重构; 8.实现同一模式的不同方式的示例; 9.什么时候应该通过重构实现模式、趋向模式以及去除模式给出建议。 10.常见设计模式的重构演化的过程 内容二:案例- 某网络数据分析系统的设计 1.介绍项目需求情况,进行设计 2.通过重构逐步实现设计模式 3.Framework 设计思想—好莱坞原则 4.学习设计模式(Factory Method, Template Method, Composite, Chain of Responsibility ) 内容三、C++软件架构中需要考虑的几个维度 1.考虑运维的因素 2.考虑系统运营的因素 3.考虑技术的因素 典型案例分析:结合多个项目实例,分 内容四、架构要素 1.架构要素之:C++分层 2.架构要素之:C++中的间接 3.架构要素之:抽象与统一 4.架构要素之:为模块分配合适的职责 5.架构要素之:选择合适的框架与模式 6.架构要素之:引入领域模型 7.架构要素之:考虑技术和商业趋势 架构要素之:平台化考虑 内容五:案例–电子文件系统 1.项目系统背景和需求 2.Bridge / strategy / class explosion的博弈。 3.系统的设计的本质 – 不是为了模式 4.如何支持第3方接入的运用 - Template Method VS。 IOC 5.系统的设计思考过程 6.展示如何用,进行设计 |
第一单元:C++中的错陷阱辨析 内容一:C++程序编译、调试及运行中的常见问题处理 1.对象的赋值与对象的复制 2.引起循环依赖的问题 3.析构函数引起的问题 4.如何正确地初始化对象 5.小心内存越界 6.正确地释放内存 7.临时对象的陷阱 8.降低系统间模块的耦合度 内容二:C/C++内存管理 1.C++内存分配方式 2.长度明确 3.预估内存 4.防止栈溢出 5.避免在堆中频繁地申请、释放小块内存 6.多块内存尽量大小相同,互相靠近 7.了解系统数据结构的运作机制 8.考虑分配顺序 9.类的内存分布(初始化顺序等) 10.值对象的注意点(函数传参、临时变量、函数替代参数) 实例对象与指针对象的异同 内容三:C++中函数写法及注意点 1.直接调用个数与调用者的个数 2.好函数的2个原则(长度及其它) 3.函数参数个数 4.丑陋的标识参数,及如何避免的技巧 5.使用描述性名称(阅读“深合己意”的代码) 6.switch语句 内容四:C++的继承与派生编程技术 1.虚函数与虚表的原理 2.派生类及成员定义语法 3.派生类的成员设计 4.继承的方式 5.虚函数与多态性的编程技术 6.虚函数、纯虚函数和抽象类 7.多态的本质 8.泛型与多态 |
第二单元: C++性能优化思路与原则实践 内容一:性能优化的关键第一步 1.避免想当然,一切用数据说话! 2.借助工具(Valgrind、gprof、fprofile) 3.性能可视化工具 4.代码级性能分析 5.操作系统与硬件监控(如top、htop、vmstat、iostat、netstat等) 6.案例分析—某复合文档系统,性能优化分析与讨论。 内容二:性能优化的常用思路 1.空间换时间 2.冗余数据及结构 3.并发与并行 4.算法优化 5.编译器优化 6.嵌套循环中的内存管理优化 7.I/O优化 8.代码重构与设计优化 案例分析—某网络数据处理系统等,讨论性能优化处理方案。 内容三:消息发布订阅间接设计 1.消息总线与观察者模式 2.消息发布订阅模式 3.C++设计中间接的使用 4.效率与结构的合理取舍 案例分析—某数据分析系统, 使用生产者-消费者模式重构系统,及不同方案的对比讨论。 内容四:其他性能优化设计原则 1.Sockket设计:使用非阻塞I/O、使用事件驱动模型、使用连接池、使用缓冲区 2.IO设计:使用缓冲区、避免频繁的磁盘读写、使用异步I/O、优化数据结构和算法、减少内存分配和释放、使用高效的文件格式 3.循环:循环展开、循环交换、循环合并、循环依赖分析、循环并行化 4.其他: 案例分析—案例说明上述性能优化原则。 |
第三单元:c++系统设计原则与模式 ——成为优秀的设计师 内容一:C++设计原则的具体运用 1.封装: 利用类的特征将数据和函数隐藏。 2.李斯卡替换原则及其运用 3.策略和实现分离的必要性 4.隔离不同的因素 5.对系统中常见的,多种情况组合的处理方法。 6.对复杂行为的处理。 7.用间接增强系统的灵活性 8.设计稳定结构的要点 9.对已存在的模块,如何动态改变其行为 10.C++中进行抽象的技巧 案例分析—略 内容二:C++中的设计模式 1.创建型模式讨论 2.行为型模式 a)Adapter与Bridge b)Composite、Decorator与Proxy c)Façade模式 与 Adapter模式 /Proxy模式 d)Composite 与Iterator模式 3.结构型模式 a)封装变化-Strategy/State/ Iterator模式 b)封装结构---Mediator模式与Facade模式 c)对象作为参数-- Visitor/Command/Mementor d)通信应该被封装还是被分布- Mediator和Observer e)对发送者和接收者解耦-Command模式与职责链模式 将实践中常容易混淆或常常联合使用的几个模式放在一组讨论,对比分析,讲解思想。如何发现、应用更多模式。通过对“相似或相关的设计模式”的对比分析,加深理解,是避免“模式误用”的好方法。 内容三:案例实践– 多功能文件处理系统设计 1.介绍项目背景情况,如何应对将来的各种变化 2.学员分组进行设计 3.应用设计原则及模式来改善设计 4.分析设计模式是否带来软件的可维护性 5.学习(Factory Method/Adapter/Proxy/Observer/Strategy等几种设计模式和设计原则)、 内容四:案例上机实践–薪酬管理系统设计应用分析 1.Robort C Martion 是如何考虑问题的 2.架构思路 3.设计中的博弈点,哪些值得我们学习 4.Martion设计的过程中是怎样应用思考的。 5.学习设计模式(strategy / /Template Method/ Adapter/ Command) 6.通过研读经典学习到什么? |
第四单元:c++系统设计策略 内容一:重构已有的系统 1.设计坏味道概述 2.重构思想 3.理解如何结合重构和模式; 4.用模式导向的重构(pattern-directed refactoring)改善既有代码的设计; 5.找出需要进行模式导向重构的代码段; 6.了解为什么使用模式来改善既有的设计要优于在新的设计早期使用模式。 7.一组坏味 (也就是问题),表示需要进行模式导向的重构; 8.实现同一模式的不同方式的示例; 9.什么时候应该通过重构实现模式、趋向模式以及去除模式给出建议。 10.常见设计模式的重构演化的过程 内容二:案例- 某网络数据分析系统的设计 1.介绍项目需求情况,进行设计 2.通过重构逐步实现设计模式 3.Framework 设计思想—好莱坞原则 4.学习设计模式(Factory Method, Template Method, Composite, Chain of Responsibility ) 内容三、C++软件架构中需要考虑的几个维度 1.考虑运维的因素 2.考虑系统运营的因素 3.考虑技术的因素 典型案例分析:结合多个项目实例,分 内容四、架构要素 1.架构要素之:C++分层 2.架构要素之:C++中的间接 3.架构要素之:抽象与统一 4.架构要素之:为模块分配合适的职责 5.架构要素之:选择合适的框架与模式 6.架构要素之:引入领域模型 7.架构要素之:考虑技术和商业趋势 架构要素之:平台化考虑 内容五:案例–电子文件系统 1.项目系统背景和需求 2.Bridge / strategy / class explosion的博弈。 3.系统的设计的本质 – 不是为了模式 4.如何支持第3方接入的运用 - Template Method VS。 IOC 5.系统的设计思考过程 6.展示如何用,进行设计 |