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