課程簡介
在當今軟件開發(fā)領(lǐng)域,C++以其高效、靈活的特性成為了許多高性能項目的首選編程語言。然而,要充分發(fā)揮C++的性能優(yōu)勢,軟件開發(fā)人員需要具備扎實的C++功底和出色的代碼優(yōu)化能力。本課程旨在幫助學員提升C++代碼性能優(yōu)化設(shè)計的能力,從而更好地應(yīng)對各種復雜的軟件開發(fā)挑戰(zhàn)。
目標收益
通過本課程的學習,您將能夠熟練掌握C++代碼性能優(yōu)化的方法和技巧,為您的項目帶來更高的性能和穩(wěn)定性。課程1/3的時間介紹C++設(shè)計思想和原理,1/3時間案例,并且要求學員組合成小組進行現(xiàn)場設(shè)計。 最后1/3時間再介紹該案例的設(shè)計過程,講師帶領(lǐng)大家一起對設(shè)計結(jié)果進行分析,指出不”和諧”的地方,通過逐步運用模式,改善設(shè)計。 而不是把最完美的答案一下子放到學員的面前,并分析為什么這么設(shè)計,而不是過度設(shè)計,什么情況下可以不拘泥于現(xiàn)有的原則。
培訓對象
課程大綱
第一單元:C++中的錯陷阱辨析 |
內(nèi)容一:C++程序編譯、調(diào)試及運行中的常見問題處理 1.對象的賦值與對象的復制 2.引起循環(huán)依賴的問題 3.析構(gòu)函數(shù)引起的問題 4.如何正確地初始化對象 5.小心內(nèi)存越界 6.正確地釋放內(nèi)存 7.臨時對象的陷阱 8.降低系統(tǒng)間模塊的耦合度 內(nèi)容二:C/C++內(nèi)存管理 1.C++內(nèi)存分配方式 2.長度明確 3.預估內(nèi)存 4.防止棧溢出 5.避免在堆中頻繁地申請、釋放小塊內(nèi)存 6.多塊內(nèi)存盡量大小相同,互相靠近 7.了解系統(tǒng)數(shù)據(jù)結(jié)構(gòu)的運作機制 8.考慮分配順序 9.類的內(nèi)存分布(初始化順序等) 10.值對象的注意點(函數(shù)傳參、臨時變量、函數(shù)替代參數(shù)) 實例對象與指針對象的異同 內(nèi)容三:C++中函數(shù)寫法及注意點 1.直接調(diào)用個數(shù)與調(diào)用者的個數(shù) 2.好函數(shù)的2個原則(長度及其它) 3.函數(shù)參數(shù)個數(shù) 4.丑陋的標識參數(shù),及如何避免的技巧 5.使用描述性名稱(閱讀“深合己意”的代碼) 6.switch語句 內(nèi)容四:C++的繼承與派生編程技術(shù) 1.虛函數(shù)與虛表的原理 2.派生類及成員定義語法 3.派生類的成員設(shè)計 4.繼承的方式 5.虛函數(shù)與多態(tài)性的編程技術(shù) 6.虛函數(shù)、純虛函數(shù)和抽象類 7.多態(tài)的本質(zhì) 8.泛型與多態(tài) |
第二單元: C++性能優(yōu)化思路與原則實踐 |
內(nèi)容一:性能優(yōu)化的關(guān)鍵第一步 1.避免想當然,一切用數(shù)據(jù)說話! 2.借助工具(Valgrind、gprof、fprofile) 3.性能可視化工具 4.代碼級性能分析 5.操作系統(tǒng)與硬件監(jiān)控(如top、htop、vmstat、iostat、netstat等) 6.案例分析—某復合文檔系統(tǒng),性能優(yōu)化分析與討論。 內(nèi)容二:性能優(yōu)化的常用思路 1.空間換時間 2.冗余數(shù)據(jù)及結(jié)構(gòu) 3.并發(fā)與并行 4.算法優(yōu)化 5.編譯器優(yōu)化 6.嵌套循環(huán)中的內(nèi)存管理優(yōu)化 7.I/O優(yōu)化 8.代碼重構(gòu)與設(shè)計優(yōu)化 案例分析—某網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)等,討論性能優(yōu)化處理方案。 內(nèi)容三:消息發(fā)布訂閱間接設(shè)計 1.消息總線與觀察者模式 2.消息發(fā)布訂閱模式 3.C++設(shè)計中間接的使用 4.效率與結(jié)構(gòu)的合理取舍 案例分析—某數(shù)據(jù)分析系統(tǒng), 使用生產(chǎn)者-消費者模式重構(gòu)系統(tǒng),及不同方案的對比討論。 內(nèi)容四:其他性能優(yōu)化設(shè)計原則 1.Sockket設(shè)計:使用非阻塞I/O、使用事件驅(qū)動模型、使用連接池、使用緩沖區(qū) 2.IO設(shè)計:使用緩沖區(qū)、避免頻繁的磁盤讀寫、使用異步I/O、優(yōu)化數(shù)據(jù)結(jié)構(gòu)和算法、減少內(nèi)存分配和釋放、使用高效的文件格式 3.循環(huán):循環(huán)展開、循環(huán)交換、循環(huán)合并、循環(huán)依賴分析、循環(huán)并行化 4.其他: 案例分析—案例說明上述性能優(yōu)化原則。 |
第三單元:c++系統(tǒng)設(shè)計原則與模式 ——成為優(yōu)秀的設(shè)計師 |
內(nèi)容一:C++設(shè)計原則的具體運用 1.封裝: 利用類的特征將數(shù)據(jù)和函數(shù)隱藏。 2.李斯卡替換原則及其運用 3.策略和實現(xiàn)分離的必要性 4.隔離不同的因素 5.對系統(tǒng)中常見的,多種情況組合的處理方法。 6.對復雜行為的處理。 7.用間接增強系統(tǒng)的靈活性 8.設(shè)計穩(wěn)定結(jié)構(gòu)的要點 9.對已存在的模塊,如何動態(tài)改變其行為 10.C++中進行抽象的技巧 案例分析—略 內(nèi)容二:C++中的設(shè)計模式 1.創(chuàng)建型模式討論 2.行為型模式 a)Adapter與Bridge b)Composite、Decorator與Proxy c)Fa?ade模式 與 Adapter模式 /Proxy模式 d)Composite 與Iterator模式 3.結(jié)構(gòu)型模式 a)封裝變化-Strategy/State/ Iterator模式 b)封裝結(jié)構(gòu)---Mediator模式與Facade模式 c)對象作為參數(shù)-- Visitor/Command/Mementor d)通信應(yīng)該被封裝還是被分布- Mediator和Observer e)對發(fā)送者和接收者解耦-Command模式與職責鏈模式 將實踐中常容易混淆或常常聯(lián)合使用的幾個模式放在一組討論,對比分析,講解思想。如何發(fā)現(xiàn)、應(yīng)用更多模式。通過對“相似或相關(guān)的設(shè)計模式”的對比分析,加深理解,是避免“模式誤用”的好方法。 內(nèi)容三:案例實踐– 多功能文件處理系統(tǒng)設(shè)計 1.介紹項目背景情況,如何應(yīng)對將來的各種變化 2.學員分組進行設(shè)計 3.應(yīng)用設(shè)計原則及模式來改善設(shè)計 4.分析設(shè)計模式是否帶來軟件的可維護性 5.學習(Factory Method/Adapter/Proxy/Observer/Strategy等幾種設(shè)計模式和設(shè)計原則)、 內(nèi)容四:案例上機實踐–薪酬管理系統(tǒng)設(shè)計應(yīng)用分析 1.Robort C Martion 是如何考慮問題的 2.架構(gòu)思路 3.設(shè)計中的博弈點,哪些值得我們學習 4.Martion設(shè)計的過程中是怎樣應(yīng)用思考的。 5.學習設(shè)計模式(strategy / /Template Method/ Adapter/ Command) 6.通過研讀經(jīng)典學習到什么? |
第四單元:c++系統(tǒng)設(shè)計策略 |
內(nèi)容一:重構(gòu)已有的系統(tǒng) 1.設(shè)計壞味道概述 2.重構(gòu)思想 3.理解如何結(jié)合重構(gòu)和模式; 4.用模式導向的重構(gòu)(pattern-directed refactoring)改善既有代碼的設(shè)計; 5.找出需要進行模式導向重構(gòu)的代碼段; 6.了解為什么使用模式來改善既有的設(shè)計要優(yōu)于在新的設(shè)計早期使用模式。 7.一組壞味 (也就是問題),表示需要進行模式導向的重構(gòu); 8.實現(xiàn)同一模式的不同方式的示例; 9.什么時候應(yīng)該通過重構(gòu)實現(xiàn)模式、趨向模式以及去除模式給出建議。 10.常見設(shè)計模式的重構(gòu)演化的過程 內(nèi)容二:案例- 某網(wǎng)絡(luò)數(shù)據(jù)分析系統(tǒng)的設(shè)計 1.介紹項目需求情況,進行設(shè)計 2.通過重構(gòu)逐步實現(xiàn)設(shè)計模式 3.Framework 設(shè)計思想—好萊塢原則 4.學習設(shè)計模式(Factory Method, Template Method, Composite, Chain of Responsibility ) 內(nèi)容三、C++軟件架構(gòu)中需要考慮的幾個維度 1.考慮運維的因素 2.考慮系統(tǒng)運營的因素 3.考慮技術(shù)的因素 典型案例分析:結(jié)合多個項目實例,分 內(nèi)容四、架構(gòu)要素 1.架構(gòu)要素之:C++分層 2.架構(gòu)要素之:C++中的間接 3.架構(gòu)要素之:抽象與統(tǒng)一 4.架構(gòu)要素之:為模塊分配合適的職責 5.架構(gòu)要素之:選擇合適的框架與模式 6.架構(gòu)要素之:引入領(lǐng)域模型 7.架構(gòu)要素之:考慮技術(shù)和商業(yè)趨勢 架構(gòu)要素之:平臺化考慮 內(nèi)容五:案例–電子文件系統(tǒng) 1.項目系統(tǒng)背景和需求 2.Bridge / strategy / class explosion的博弈。 3.系統(tǒng)的設(shè)計的本質(zhì) – 不是為了模式 4.如何支持第3方接入的運用 - Template Method VS。 IOC 5.系統(tǒng)的設(shè)計思考過程 6.展示如何用,進行設(shè)計 |
第一單元:C++中的錯陷阱辨析 內(nèi)容一:C++程序編譯、調(diào)試及運行中的常見問題處理 1.對象的賦值與對象的復制 2.引起循環(huán)依賴的問題 3.析構(gòu)函數(shù)引起的問題 4.如何正確地初始化對象 5.小心內(nèi)存越界 6.正確地釋放內(nèi)存 7.臨時對象的陷阱 8.降低系統(tǒng)間模塊的耦合度 內(nèi)容二:C/C++內(nèi)存管理 1.C++內(nèi)存分配方式 2.長度明確 3.預估內(nèi)存 4.防止棧溢出 5.避免在堆中頻繁地申請、釋放小塊內(nèi)存 6.多塊內(nèi)存盡量大小相同,互相靠近 7.了解系統(tǒng)數(shù)據(jù)結(jié)構(gòu)的運作機制 8.考慮分配順序 9.類的內(nèi)存分布(初始化順序等) 10.值對象的注意點(函數(shù)傳參、臨時變量、函數(shù)替代參數(shù)) 實例對象與指針對象的異同 內(nèi)容三:C++中函數(shù)寫法及注意點 1.直接調(diào)用個數(shù)與調(diào)用者的個數(shù) 2.好函數(shù)的2個原則(長度及其它) 3.函數(shù)參數(shù)個數(shù) 4.丑陋的標識參數(shù),及如何避免的技巧 5.使用描述性名稱(閱讀“深合己意”的代碼) 6.switch語句 內(nèi)容四:C++的繼承與派生編程技術(shù) 1.虛函數(shù)與虛表的原理 2.派生類及成員定義語法 3.派生類的成員設(shè)計 4.繼承的方式 5.虛函數(shù)與多態(tài)性的編程技術(shù) 6.虛函數(shù)、純虛函數(shù)和抽象類 7.多態(tài)的本質(zhì) 8.泛型與多態(tài) |
第二單元: C++性能優(yōu)化思路與原則實踐 內(nèi)容一:性能優(yōu)化的關(guān)鍵第一步 1.避免想當然,一切用數(shù)據(jù)說話! 2.借助工具(Valgrind、gprof、fprofile) 3.性能可視化工具 4.代碼級性能分析 5.操作系統(tǒng)與硬件監(jiān)控(如top、htop、vmstat、iostat、netstat等) 6.案例分析—某復合文檔系統(tǒng),性能優(yōu)化分析與討論。 內(nèi)容二:性能優(yōu)化的常用思路 1.空間換時間 2.冗余數(shù)據(jù)及結(jié)構(gòu) 3.并發(fā)與并行 4.算法優(yōu)化 5.編譯器優(yōu)化 6.嵌套循環(huán)中的內(nèi)存管理優(yōu)化 7.I/O優(yōu)化 8.代碼重構(gòu)與設(shè)計優(yōu)化 案例分析—某網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)等,討論性能優(yōu)化處理方案。 內(nèi)容三:消息發(fā)布訂閱間接設(shè)計 1.消息總線與觀察者模式 2.消息發(fā)布訂閱模式 3.C++設(shè)計中間接的使用 4.效率與結(jié)構(gòu)的合理取舍 案例分析—某數(shù)據(jù)分析系統(tǒng), 使用生產(chǎn)者-消費者模式重構(gòu)系統(tǒng),及不同方案的對比討論。 內(nèi)容四:其他性能優(yōu)化設(shè)計原則 1.Sockket設(shè)計:使用非阻塞I/O、使用事件驅(qū)動模型、使用連接池、使用緩沖區(qū) 2.IO設(shè)計:使用緩沖區(qū)、避免頻繁的磁盤讀寫、使用異步I/O、優(yōu)化數(shù)據(jù)結(jié)構(gòu)和算法、減少內(nèi)存分配和釋放、使用高效的文件格式 3.循環(huán):循環(huán)展開、循環(huán)交換、循環(huán)合并、循環(huán)依賴分析、循環(huán)并行化 4.其他: 案例分析—案例說明上述性能優(yōu)化原則。 |
第三單元:c++系統(tǒng)設(shè)計原則與模式 ——成為優(yōu)秀的設(shè)計師 內(nèi)容一:C++設(shè)計原則的具體運用 1.封裝: 利用類的特征將數(shù)據(jù)和函數(shù)隱藏。 2.李斯卡替換原則及其運用 3.策略和實現(xiàn)分離的必要性 4.隔離不同的因素 5.對系統(tǒng)中常見的,多種情況組合的處理方法。 6.對復雜行為的處理。 7.用間接增強系統(tǒng)的靈活性 8.設(shè)計穩(wěn)定結(jié)構(gòu)的要點 9.對已存在的模塊,如何動態(tài)改變其行為 10.C++中進行抽象的技巧 案例分析—略 內(nèi)容二:C++中的設(shè)計模式 1.創(chuàng)建型模式討論 2.行為型模式 a)Adapter與Bridge b)Composite、Decorator與Proxy c)Fa?ade模式 與 Adapter模式 /Proxy模式 d)Composite 與Iterator模式 3.結(jié)構(gòu)型模式 a)封裝變化-Strategy/State/ Iterator模式 b)封裝結(jié)構(gòu)---Mediator模式與Facade模式 c)對象作為參數(shù)-- Visitor/Command/Mementor d)通信應(yīng)該被封裝還是被分布- Mediator和Observer e)對發(fā)送者和接收者解耦-Command模式與職責鏈模式 將實踐中常容易混淆或常常聯(lián)合使用的幾個模式放在一組討論,對比分析,講解思想。如何發(fā)現(xiàn)、應(yīng)用更多模式。通過對“相似或相關(guān)的設(shè)計模式”的對比分析,加深理解,是避免“模式誤用”的好方法。 內(nèi)容三:案例實踐– 多功能文件處理系統(tǒng)設(shè)計 1.介紹項目背景情況,如何應(yīng)對將來的各種變化 2.學員分組進行設(shè)計 3.應(yīng)用設(shè)計原則及模式來改善設(shè)計 4.分析設(shè)計模式是否帶來軟件的可維護性 5.學習(Factory Method/Adapter/Proxy/Observer/Strategy等幾種設(shè)計模式和設(shè)計原則)、 內(nèi)容四:案例上機實踐–薪酬管理系統(tǒng)設(shè)計應(yīng)用分析 1.Robort C Martion 是如何考慮問題的 2.架構(gòu)思路 3.設(shè)計中的博弈點,哪些值得我們學習 4.Martion設(shè)計的過程中是怎樣應(yīng)用思考的。 5.學習設(shè)計模式(strategy / /Template Method/ Adapter/ Command) 6.通過研讀經(jīng)典學習到什么? |
第四單元:c++系統(tǒng)設(shè)計策略 內(nèi)容一:重構(gòu)已有的系統(tǒng) 1.設(shè)計壞味道概述 2.重構(gòu)思想 3.理解如何結(jié)合重構(gòu)和模式; 4.用模式導向的重構(gòu)(pattern-directed refactoring)改善既有代碼的設(shè)計; 5.找出需要進行模式導向重構(gòu)的代碼段; 6.了解為什么使用模式來改善既有的設(shè)計要優(yōu)于在新的設(shè)計早期使用模式。 7.一組壞味 (也就是問題),表示需要進行模式導向的重構(gòu); 8.實現(xiàn)同一模式的不同方式的示例; 9.什么時候應(yīng)該通過重構(gòu)實現(xiàn)模式、趨向模式以及去除模式給出建議。 10.常見設(shè)計模式的重構(gòu)演化的過程 內(nèi)容二:案例- 某網(wǎng)絡(luò)數(shù)據(jù)分析系統(tǒng)的設(shè)計 1.介紹項目需求情況,進行設(shè)計 2.通過重構(gòu)逐步實現(xiàn)設(shè)計模式 3.Framework 設(shè)計思想—好萊塢原則 4.學習設(shè)計模式(Factory Method, Template Method, Composite, Chain of Responsibility ) 內(nèi)容三、C++軟件架構(gòu)中需要考慮的幾個維度 1.考慮運維的因素 2.考慮系統(tǒng)運營的因素 3.考慮技術(shù)的因素 典型案例分析:結(jié)合多個項目實例,分 內(nèi)容四、架構(gòu)要素 1.架構(gòu)要素之:C++分層 2.架構(gòu)要素之:C++中的間接 3.架構(gòu)要素之:抽象與統(tǒng)一 4.架構(gòu)要素之:為模塊分配合適的職責 5.架構(gòu)要素之:選擇合適的框架與模式 6.架構(gòu)要素之:引入領(lǐng)域模型 7.架構(gòu)要素之:考慮技術(shù)和商業(yè)趨勢 架構(gòu)要素之:平臺化考慮 內(nèi)容五:案例–電子文件系統(tǒng) 1.項目系統(tǒng)背景和需求 2.Bridge / strategy / class explosion的博弈。 3.系統(tǒng)的設(shè)計的本質(zhì) – 不是為了模式 4.如何支持第3方接入的運用 - Template Method VS。 IOC 5.系統(tǒng)的設(shè)計思考過程 6.展示如何用,進行設(shè)計 |