兩萬字解析AIoT智能物聯網工程師學習路線,最全路線誰贊成誰反對?


大家好,我是老白。

今天給大家帶來AIoT智能物聯網工程師學習路線規划以及詳細解析。


AIoT介紹
廣泛的定義來看,AIoT 就是人工智能技術與物聯網在實際應用中的落地融合。它並不是新技術,而是一種新的 IoT 應用形態,從而與傳統 IoT 應用區分開來。如果物聯網是將所有可以行使獨立功能的普通物體實現互聯互通,用網絡連接萬物,那 AIoT則是在此基礎上賦予其更智能化的特性,做到真正意義上的萬物互聯。

既掌握 AI 開發技術,又掌握物聯網技術,兩者完美結合,大放異彩

培養目標
學習路線培養目標
熟練掌握 C/C++編程語言,掌握面向對象程序設計方法。
熟練掌握常用數據結構和算法。
熟練掌握 MySQL、sqlite3 基礎語法及 C/C++編程接口。
熟練掌握 Linux 應用軟件編程方法,熟練使用多線程、多進程編程、socket 編程等進行應用軟件開發。
熟練掌握嵌入式 Linux 高級編程技術,如傳感器編程、串口編程、V4L2 編程、音視頻處理、opencv、科大訊飛語音識別等。
熟練掌握 QT 編程方法。
熟練掌握 ARM 體系結構。
掌握 STM32 開發工具及設計流程。
掌握 STM32 的外圍接口使用,如:GPIO、中斷、定時器、ADC、UART、看門狗等。
掌握現場總線設計與應用,如:I2C 總線、SPI 總線、CAN 總線、RS485 總線等。
掌握 ZigBee 應用軟件開發。
掌握藍牙 Mesh 組網及應用軟件開發。
掌握 NB-IoT 應用軟件開發方法,掌握 CoAP、MQTT 協議。
熟悉嵌入式 Linux 內核移植、uboot 移植及 rootfs 制作。
深刻理解嵌入式 Linux 設備驅動開發。
對嵌入式 Linux 系統在視頻監控、網絡通信、多媒體處理及智能控制領域有深入理解。
熟悉嵌入式人工智能項目的部署與移植開發應用
職業規划目標
C/C++軟件開發工程師
Qt 開發工程師
桌面應用軟件開發工程師
Linux 后台開發工程師
網游后端開發工程師
嵌入式 Linux 應用開發工程師
音視頻開發工程師
物聯網應用開發工程師
嵌入式 Linux 驅動開發工程師
嵌入式 Linux 系統移植與裁剪工程師
嵌入式 Linux 多媒體研發工程師
ARM 開發工程師
STM32 應用軟件開發工程師
嵌入式 FreeRTOS 開發工程師
嵌入式 ucOS 開發工程師
現場總線控制、現場總線通信應用開發工程師
Python 開發工程師
人工智能開發工程師


一、Python 基礎與科學計算
階段概述:

本階段講解,Python 基礎語法,NumPy 科學計算模塊,Pandas 數據分析模塊,

Matplotlib 和 Seaborn 數據可視化模塊

達成目標:

通過本階段學習,讓學生快速掌握 Python 語言的特性和語法,並着重對算法這塊所涉及的NumPy 科學計算模塊和 Pandas 數據分析模塊進行講解。

實戰教學項目:

泰坦尼克號數據分析案例
可視化剖析邏輯回歸損失函數案例Python 基礎語法
Python 基礎語法

循環控制
生成器
裝飾器
繼承
類與對象
函數式編程
常用內建函數
集合操作
數據類型
切片操作
科學計算模塊 Numpy

Numpy ndarray 對象
Numpy 數據類型
Numpy 數組屬性
Numpy 創建數組
Numpy 切片和索引
Numpy 高級索引
Numpy 廣 播
Numpy 數組操作
Numpy 數學和統計函數
Numpy 排序、條件過濾函數
Numpy 線性代數
數據處理分析模塊 Pandas

Pandas IO 文件操作
Pandas 索引和數據選擇器
Pandas 合並、連接
Pandas 缺失值數據處理
Pandas 數據離散
Pandas 統計計算
數據可視化模塊

 


二、 算法數學基礎
階段概述:
本階段講解,微積分基礎,線性代數基礎,多元函數微分學,線性代數高級,概率論,最優化。

達成目標:
通過本階段學習,掌握后面機器學習算法、深度學習算法涉及的數學知識,使得后面在理解算法推導的過程中游刃有余。如果學員大學數學知識還未忘記或者研究生畢業,這一部分可以先跳過學習后面的知識。

微積分基礎

導數的定義
一元函數泰勒展開
導數與函數凹凸性
極值定理
導數與函數單調性
高階導數
神經網絡激活函數的導函數求解
復合函數求導法則
四則運算法則
基本函數求導公式
導數幾何意義、物理意義
左導數、右導數、可導函數
線性代數基礎

向量與其運算
特殊向量
向量范數
向量加減、數乘、內積、轉置
行向量和列向量
矩陣與其運算
行列式
逆矩陣
矩陣加減、數乘、矩陣乘法、轉置
方陣、對稱陣、單位陣、對角陣

多元函數微分學

1) 偏導數

2) 高階偏導數

3) 梯度

4) 雅可比矩陣

5) Hessian 矩陣

6) 極值判別法則

線性代數高級

1) 二次型

2) 特征值和特征向量

3) 特征值分解

4) 多元函數的泰勒展開

5) 矩陣和向量的求導公式

6) 奇異值分解

7) 奇異值分解計算方式

8) 奇異值分解性質

9) SVD 用於數據壓縮

10) SVD 用於 PCA 降維

11) SVD 用於協同過濾

12) SVD 用於矩陣求逆

概率論

1) 隨機事件和隨機事件概率

2) 條件概率和貝葉斯公式

3) 隨機事件的獨立性

4) 隨機變量

5) 數學期望和方差

6) 常用隨機變量服從的分布

7) 隨機向量

8) 隨機變量獨立性

9) 協方差與協方差矩陣

10) 隨機向量的常見分布

11) 最大似然估計

最優化

1) 局部最小和全局最小

2) 迭代法求解

3) 梯度下降法推導

4) 牛頓法推導

5) 坐標下降法

6) 數值優化算法的問題

7) 凸集

8) 凸函數

9) 凸優化問題

10) 拉格朗日乘數法

11) 拉格朗日對偶

12) KKT 條件

 

三、線性回歸算法


階段概述 :
本階段講解,多元線性回歸,梯度下降法,歸一化,正則化,Lasso 回歸,Ridge 回
歸,多項式回歸。


達成目標 :
通過本階段學習,從推導出多元線性回歸算法的損失函數,到實現開發和應用算法,再到對算法從數據預處理上,以及損失函數上的優化都將整體徹底掌握。對后面學習更多算法,甚至深度學習都將起到舉一反三的效果。


多元線性回歸

1) 簡單線性回歸

2) 最優解與最小二乘法

3) 多元線性回歸判別式

4) 多元線性回歸的數學假設

5) 利用 MLE 推導出目標函數

6) 對數似然推導出 MSE 損失函數

7) MSE 求偏導得到參數解析解

8) 多元線性回歸的 python 代碼實現

9) 多元線性回歸的 sklearn 代碼實戰

梯度下降法

1) 梯度下降法原理與公式

2) 學習率設置的學問

3) GD 應用於多元線性回歸的流程

4) 全量梯度下降的原理與代碼實現

5) 隨機梯度下降的原理與代碼實現

6) Mini-Batch 梯度下降的原理與代碼實現

7) 代碼實現增加 MBGD 數據的隨機性

8) 代碼實現動態調整學習率

歸一化

1) 歸一化目的與量綱

2) 歸一化提高模型精度

3) 最大值最小值歸一化與缺點

4) 方差歸一化與好處

5) 均值歸一化與好處

6) 標准歸一化的代碼實戰與技巧

正則化

1) 提高泛化能力與防止過擬合

2) 正則化用於損失函數

3) L1 與L2 正則項與范數的關系

4) 結合 GD 講解 L1L2 的幾何意義

5) 透過導函數講解 L1 的稀疏性

6) 透過導函數講解 L2 的平滑性

Lasso 回歸、Ridge 回歸、多項式回歸

1) Lasso 回歸原理與代碼實戰

2) Ridge 回歸原理與代碼實戰

3) ElasticNet 回歸原理與代碼實戰

4) 升維的意義

5) 多項式回歸進行升維原理

6) 多項式升維代碼實戰

 

四、 線性回歸分類算法


階段概述 :
本階段講解,邏輯回歸算法,Softmax 回歸算法,SVM 支持向量機算法,SMO 優化
算法。


達成目標 :
通過本階段學習,推導邏輯回歸算法、SVM 算法的判別式和損失函數,算法的優化、實現算法和應用開發實戰。將會對分類算法有深入認知,對於理解后續神經網絡算法和深度學習至關重要。

邏輯回歸

1) Sigmoid 函數特點

2) 廣義線性回歸與邏輯回歸的數學假設

3) 證明伯努利二項分布屬於指數族分布

4) 推導出邏輯回歸判別式

5) 推導出邏輯回歸損失函數 log loss

6) 推導出損失函數導函數用於最優化

7) 邏輯回歸解決多分類問題 OVR

8) 邏輯回歸代碼實戰--鳶尾花數據集分類

Softmax 回歸

1) Softmax 函數特點

2) 廣義線性回歸與 Softmax 回歸的數學假設

3) 證明多項式分布屬於指數族分布

4) 推導出 Softmax 回歸判別式

5) 推導出 Softmax 回歸損失函數 cross-entropy

6) 證明邏輯回歸是 Softmax 的特例

7) 剖析邏輯回歸多分類和 Softmax 多分類的本質區別

8) Softmax 回歸代碼實戰--音樂曲風分類

SVM 支持向量機

1) SVM 與感知機關系

2) 幾何距離和函數距離

3) SVM 支持向量機算法原理

4) SVM 的損失函數

5) 硬間隔 SVM 的優化步驟

6) 軟間隔 SVM

7) 非線性 SVM 與核函數

8) SVM 在 sklearn 模塊中參數詳解

9) SVM 人臉識別案例

10) SVM 的概率化輸出

11) SVM 的OVO 多分類

12) SVM 的 hinge loss

SMO 優化算法

1) SMO 優化算法的子二次規划問題思路

2) SMO 把目標函數從二元函數變一元函數

3) SMO 推導出新的α和舊的α關系

4) SMO 對α進行剪裁

5) SMO 優化 SVM 算法代碼實現


決策樹算法

1) 決策樹的算法原理與數學表達

2) 分裂指標 Gini 系數、信息增益、信息增益率

3) 前剪枝與后剪枝

4) 決策樹 ID3、C4.5 和 CART

5) 決策樹算法優略比較

6) 決策樹之鳶尾花數據集分類案例

7) 通過 graphvis 繪制決策樹模型

隨機森林算法

1) 集成學習算法思想 Bagging、Boosting、Stacking

2) 用戶畫像集成學習方法案例

3) OOB 數據集驗證隨機森林算法

4) 隨機森林副產品之特征選擇

Adaboost 算法

1) Adaboost 算法原理

2) 數據的權重與權重錯誤率

3) 權重錯誤率調整到 0.5 訓練下一個弱分類器

4) 計算每個樣本的權重 Un

5) 應用 Adaboost 算法做人臉識別

GBDT 算法

1) 函數空間的梯度下降與負梯度

2) 推導 GBDT 回歸是擬合殘差

3) Shrinkage 衰減系數的作用

4) 推導 GBDT 分類亦是擬合殘差

5) GBDT 二分類模型訓練和使用

6) GBDT 多分類模型訓練和使用

7) GBDT 副產品之特征組合用於降維

8) 實現 GBDT+LR 架構代碼實戰

XGBoost 算法

1) XGBoost 算法與決策樹集成學習關系

2) XGBoost 目標函數與正則項

3) XGBoost 目標函數用二階泰勒展開

4) 推導簡化 XGBoost 目標函數引入 g h

5) XGBoost 目標函數加入樹的復雜度

6) 推導出 XGBoost 目標函數最終形式和葉子節點表達式

7) 詳解 XGBoost 算法參數與交叉驗證

8) XGBoost 算法調用 GPU 顯卡資源加速

 

五、無監督學習算法


階段概述 :
本階段講解,K-means 聚類算法,K-means 聚類算法的變形,密度聚類,層次聚類、
譜聚類、PCA 降維算法、EM 期望最大化、GMM 高斯混合模型。


達成目標 :
通過本階段學習,掌握無監督機器學習算法的作用和原理,透徹理解聚類和降維的本質區別,今后可以正確選擇無監督學習算法,並實戰開發。

聚類系列算法

1) 相似度測量方法

2) K-means 算法原理

3) K-means 圖像應用案例

4) K-medoids 算法

5) K-means++算法

6) Mini-batch K-means 算法

7) Canopy 聚類算法

8) Agnes 層次聚類算法

9) Diana 層次聚類算法

10) DBSCAN 密度聚類算法

11) Spectral 譜聚類

12) 微博用戶聚類分析案例

PCA 降維算法

1) 特征選擇與特征映射

2) 最大投影方差原理與推導

3) 最小投影距離原理與推導

4) PCA 過程的中心化

5) Kernelized PCA

6) SVD 奇異值分解用於 PCA

EM 算法

1) Jensen 不等式

2) EM 算法的 E-step

3) EM 算法的M-step

4) EM 在 GMM 公式推導中應用

GMM 算法

1) 單一高斯分布的參數估計

2) 混合高斯分布的似然函數

3) GMM 的計算流程

4) GMM 之圖片前景背景分離代碼實戰

5) GMM 之根據聲音判別性別代碼實戰

6) GMM 之根據聲音判別用戶代碼實戰

六、決策樹系列算法


階段概述 :
本階段講解,決策樹算法、隨機森林算法、Adaboost 算法、GBDT 算法、XGBoost 算
法。


達成目標 :
通過本階段學習,掌握非線性決策樹系列算法,重點掌握 Kaggle 神奇 XGBoost 算法,理解 GBDT 和 XGBoost 涉及的公式推導,本階段的掌握將大大提升學員數據挖掘的能力,對於后續理解 Kaggle 實戰階段內容會起到很大的幫助。實戰教學項目:

 通過 graphvis 繪制決策樹模型

 用戶畫像集成學習方法案例

 Adaboost 算法做人臉識別

 GBDT+LR 架構代碼實現

決策樹算法

1) 決策樹的算法原理與數學表達

2) 分裂指標 Gini 系數、信息增益、信息增益率

3) 前剪枝與后剪枝

4) 決策樹 ID3、C4.5 和 CART

5) 決策樹算法優略比較

6) 決策樹之鳶尾花數據集分類案例

7) 通過 graphvis 繪制決策樹模型

隨機森林算法

1) 集成學習算法思想 Bagging、Boosting、Stacking

2) 用戶畫像集成學習方法案例

3) OOB 數據集驗證隨機森林算法

4) 隨機森林副產品之特征選擇

Adaboost 算法

1) Adaboost 算法原理

2) 數據的權重與權重錯誤率

3) 權重錯誤率調整到 0.5 訓練下一個弱分類器

4) 計算每個樣本的權重 Un

5) 應用 Adaboost 算法做人臉識別

GBDT 算法

1) 函數空間的梯度下降與負梯度

2) 推導 GBDT 回歸是擬合殘差

3) Shrinkage 衰減系數的作用

4) 推導 GBDT 分類亦是擬合殘差

5) GBDT 二分類模型訓練和使用

6) GBDT 多分類模型訓練和使用

7) GBDT 副產品之特征組合用於降維

8) 實現 GBDT+LR 架構代碼實戰

XGBoost 算法

1) XGBoost 算法與決策樹集成學習關系

2) XGBoost 目標函數與正則項

3) XGBoost 目標函數用二階泰勒展開

4) 推導簡化 XGBoost 目標函數引入 g h

5) XGBoost 目標函數加入樹的復雜度

6) 推導出 XGBoost 目標函數最終形式和葉子節點表達式

7) 詳解 XGBoost 算法參數與交叉驗證

8) XGBoost 算法調用 GPU 顯卡資源加速

 

七、Kaggle實戰

階段概述 :
本階段講解,CTR 廣告預估項目、葯店銷量預測案例、活動推薦預測案例、銀行貸款風控案例。


達成目標 :
通過本階段學習,實戰代碼深刻理解前面學過的算法和工具,Kaggle 競賽數據集全部來自於公司,並且需求直接是企業里面的需求,並且此階段講解的代碼均是大牛級開源的代碼。要知道 Kaggle 上的大牛會比一般企業的算法工程師水平高,所有同學學習 Kaggle 實戰將會受益匪淺。

CTR 廣告預估項目

葯店銷量預測案例

活動推薦預測案例

銀行貸款風控案例

八、概率圖模型算法
階段概述 :
本階段講解,貝葉斯分類算法、隱含馬爾可夫模型、最大熵模型、條件隨機場
達成目標 :
通過本階段學習,掌握 NLP 自然語言處理的一些基本算法,本階段的理解對於后
續完成 NLP 大項目很重要。

貝葉斯分類

1) 朴素貝葉斯分類器

2) 拉普拉斯估計

3) 代碼實戰垃圾郵件分類

HMM 算法

1) 馬爾可夫過程

2) 初始概率、轉移概率、發射概率

3) 隱含馬爾可夫模型原理

4) 維特比算法

最大熵模型

1) 熵、條件熵、相對熵、互信息

2) 最大熵模型算法原理

3) 有約束條件的函數最優化問題

4) 最大熵和最大似然估計關系

5) IIS 算法

CRF 算法

1) 條件隨機場的性質

2) 條件隨機場的判別函數

3) 條件隨機場的學習

4) 條件隨機場的推斷

5) CRF 與HMM 關系

 

九、Linux基礎

定位:
Linux是一種免費使用和自由傳播的類UNIX操作系統,Linux憑借其免費開源、模塊化程度高、安全穩定性強及其良好的可移植性備受廣大開發者和企業的青睞。目前絕大部分的嵌入式設備上都搭載了Linux操作系統,隨着互聯網產業的迅猛發展,促使雲計算、大數據產業的形成並快速發展,雲計算、大數據作為一個基於開源軟件的平台,Linux 占據了核心優勢;據Linux基金會的研究,90%的企業已經使用Linux操作系統進行雲計算、大數據平台的構建。

本階段幾乎是零門檻,只要有基本的動手能力即可掌握。學員將通過自己動手跟隨老師從Linux操作系統的安裝到Linux操作系統的使用、Linux操作系統的維護循序漸進的掌握本階段的內容。

通過本階段的學習,學員將重點掌握Linux 的目錄結構、啟動流程、shell 命
令、vim編輯器的使用、用戶和組管理、權限管理、磁盤管理、系統進程管理、
網絡管理等知識點。

內容 :


2)Linux 的介紹,Linux 的安裝
a) VMware Workstation 虛擬軟件安裝過程、Ubuntu虛擬機安裝過程
3)Linux系統啟動過程介紹
a) 內核引導
b) init進程
c) 系統初始化

d) 建立終端
e) 用戶登錄系統
4)Linux系統目錄結構
a) Linux文件系統的層次結構
b) Linux文件系統的作用
c) Linux絕對路徑和相對路徑
d) Linux文件/目錄的命名規則
e) Linux命令如何識別文件類型
5)Linux常用shell命令
a) 文件管理命令
b) 文檔編輯命令
c) 文件傳輸命令
d) 磁盤管理命令
e) 網絡通訊命令
f) 系統管理命令
g) 系統設置命令
h) 備份壓縮命令
i) 設備管理命令
6)Linux系統密碼管理
a) Linux系統密碼配置文件
b) Linux系統修改密碼方式
7)Vim文本編輯器
8)Linux遠程登錄
a) telnet登錄
b) ssh登錄
c) xshell軟件的使用
9)Linux用戶和組管理
a) Linux系統用戶賬號的管理
b) Linux系統用戶組的管理
c) 用戶賬號相關的配置文件
10)Linux權限管理
a) Linux權限管理的重要性
b) Linux權限位
c) Linux umask詳解
11)Linux文件系統管理
a) 磁盤結構
b) Linux常用文件系統介紹
c) 硬盤設備和磁盤分區的識別
d) df命令
e) du命令
f) mount命令
g) fdisk命令
h) mkfs命令
i) mke2fs命令

j) Linux 交換分區的作用
12)Linux常用服務搭建
a) ftp服務搭建
b) samba服務搭建
c) ssh搭建
d) telnet搭建
e) Nginx服務搭建
13)Linux系統服務管理
a) Linux系統服務及其分類
b) Linux端口及查詢方法詳解
c) Linux基於xinetd服務的管理方法詳解
d) 影響Linux系統性能因素分析
e) 系統性能分析:sar命令
f) cpu運行狀態查看
g) 內存使用狀態查看
14)Linux系統日志管理
a) Linux rsyslogd服務及啟動方法 (詳解版)
b) Linux 日志文件 (常見)及其功能
c) Linux 日志文件格式分析
d) rsyslogd配置文件格式及其內容詳解
e) Linux 日志服務器設置過程
f) Linux 日志輪替 (日志轉儲)及logrotate配置文件分析
g) Linux logrotate命令用法詳解:進行日志轉儲 (輪替)
h) Linux 日志分析工具 (logwatch)安裝及使用
15)Linux軟件包管理
16)Linux備份與恢復
a) Linux備份的重要性
b) Linux 中的哪些數據需要備份?
c) Linux數據備份介質的選擇
d) Linux備份策略 (完全備份、增量備份和差異備份)詳解
e) Linux tar命令備份數據
f) Linux dump命令用法詳解:備份分區、文件或目錄
g) Linux restore命令:還原dump操作備份下的文件、目錄或分區
h) Linux dd命令詳解:數據備份,並在備份過程中進行格式轉換
i) Linux rsync命令用法詳解
17)SELinux管理
a) SELinux是什么
b) SELinux 的主要作用
c) SELinux 的工作模式 (Disabled、Permissive和Enforcing)
d) SELinux配置文件 (/etc/selinux/config)
e) SELinux工作模式設置 (getenforce、setenforce和sestatus命令)
f) SELinux安全上下文查看方法 (超詳細)
g) SELinux安全上下文的修改和設置 (chcon和restorecon命令)
h) SELinux默認安全上下文的查詢和修改(semanage命令)

i) SELinux auditd 日志系統的安裝與啟動
j) SELinux auditd 日志使用方法詳解
k) SELinux Targeted、MLS和Minimum策略
l) SELinux策略規則查看方法 (seinfo和sesearch)詳解
m) SELinux策略規則的開啟和關閉 (詳解版)


練習:Linux系統監控實戰:系統一旦上線跑起來,自然希望它一直相安無事,不要宕機,不要無響應,不要慢騰騰的,這就需要我們要監視系統的運行狀況,發現問題及時處理。通過本課程可以學習有關系統監控的命令使用:如vmstat,top,iostat。以及監控腳本的編寫。

十、C語言高級編程
定位:
C語言是當今世界上最流行的計算機語言之一,C語言是所有編程語言之母。通過學習C語言,學生們不僅能夠掌握一種實用的計算機編程語言,鍛煉抽象思維能力,掌握編程的技巧,同時也為今后學習C++打下了良好的基礎。

本階段適用於零基礎的學員,在學習C語言編程時,我們將完全擺脫大學的理論課+實踐課的教學方式,我們將全程跟隨老師一邊學習理論基礎,一邊敲代碼,通過代碼驗證理論,這樣不僅可以快速掌握C語言的基礎語法,同時也能夠快速提高編程能力。

C 語言開篇

1)C語言發展歷史及特點
2)C語言應用及就業場景
3)手把手教你搭建C語言開發環境
4)第一個C語言程序
5)程序的編譯及運行
6)單行注釋和多行注釋
7)文檔注釋

數據類型

10)標識符
11)關鍵字
12)變量的定義、聲明、賦值和使用
13)整型及整型數據的表示 (進制問題)
14)浮點型
15)字符型常量
16)數據在內存中的存儲
17) 由printf(“%d\n”,10/3);所引發的思考

18)那些年我們遇到的變態筆試題
19)局部變量和全局變量
20)揭開sizeof的神秘面紗
21)ASCII表

C 語言輸入輸出

1)printf的高級用法
2)scanf讀取沖鍵盤輸入的數據
3)走進緩沖區的世界 (理解且掌握)
4)輸入輸出疑難雜症

運算符和表達式

1)賦值運算符
2)算術運算符
3)關系運算符
4)邏輯運算符
5)位運算符
6)你會用位運算控制燈光的開和關嗎
7)常見筆試題分析
8)逗號運算符
9)條件運算符
10)其他運算符
11)預算符的優先級關系

流程控制

1)分支結構
a) if分支
b) if分支的嵌套
c) switch分支
d) if分支和switch分支綜合應用
e) 作業:員工獎金計算
2)循環結構
a) while循環
b) do~while循環
c) for循環
d) 練習:求1+2!+3!+4!+5!的和
e) 練習:求斐波那契數列的第30項
f) 練習:籃子中雞蛋個數計算
g) 經典程序講解:求正整數的質因數

h) 作業:求10000 以內的自守數
i) 作業:Sn = a + aa + aaa + .... + n個a 表達式結果計算
j) 作業:百元買白雞
k) 作業:求100 以內的所有質數

數組

1)數組的基本概念
2)一維數組
a) 一維數組的使用
b) 一維數組的內存空間布局
c) 一維數組元素的逆置
d) 如何刪除數組中重復的元素
e) 練習:從鍵盤上輸入年月日,計算這一天是這一年的第幾天
f) 經典程序講解:奇偶數的互換
g) 實際應用舉例:不使用排序算法,求數組中第二大的值
h) 作業:有n個人圍成一圈,順序排號,從第一個人開始報數 (從1到3
報數),凡報到3的人退出圈子,問最后留下的是原來的第幾號
3)二維數組
a) 二維數組的使用
b) 二維數組和一維數組的關系
c) 二維數組的內存空間布局
d) 練習:二維數組的對角線之和
e) 經典程序講解:二維數組操作之行列互換
f) 作業:假設有有序數組a和無序數組b,請編寫程序將數組b合並到數
組a 中,並且最后保持數組a依然是有序的
4)字符串
i. 字符串的概念
ii.字符串和字符數組
iii. 練習:將字符數組中的所有的非字母和數字的字符刪除
iv.實際應用舉例:將字符串轉換為整數
v. 作業:將字符串轉換為浮點數

函數

1)函數的基本使用
a) 函數的定義
b) 函數的形參和實參
c) 函數的調用
d) 函數的返回值
e) 程序運行的秘密
f) 再論全局變量和局部變量
g) 函數的棧空間

h) 練習:封裝函數交換兩個整數的值
i) 練習:封裝函數實現求斐波那契數列中指定項的值
2)遞歸函數
a) 遞歸函數的定義
b) 遞歸函數的運行原理
c) 遞歸求階乘
d) 中間遞歸函數
e) 多層遞歸函數
f) 遞歸時間和內存開銷探索
g) 遞歸的優化
h) 練習:遞歸函數求n 的階乘
i) 練習:遞歸函數求斐波那契數列的第n項
j) 經典程序講解:漢諾塔游戲
k) 作業:遞歸函數實現求斐波那契數列的前n項的和

C 語言預處理

1)什么是預處理命令
2)#include 頭文件的包含
3)#include “” 和#include <>的區別
4)頭文件的搜索規則
5)C語言條件編譯
6)C語言宏定義
7)宏定義的基本使用
8)帶參數的宏定義
9)宏定義和函數的區別
10)宏參數的字符串化和宏參數的連接

指針

1)指針的基本使用
a) 指針的概念
b) 指針變量的定義和使用
c) 指針變量的運算
d) 指針所占用的內存空間
e) 練習:通過指針交換兩個整型變量的值
f) 不同類型的指針之間的區別
g) 空指針NULL和void指針
2)指針和一維數組
a) 數組指針

b) 練習:通過指針刪除數組中重復的元素
c) 字符串指針
d) 思考:為什么將一串字符串賦值給指針,卻不能通過指針修改字符串的
內容
e) 指針變量作為函數形參
f) 指針作為函數返回值
g) malloc和free
h) 再論指針的本質
i) 堆和棧的區別
j) 指針帶來的內存泄漏問題
k) 野指針和懸空指針
3)指針數組
a) 指針數組和字符串數組
b) 指針數組的靈活應用
c) main函數的命令行參數
4)函數指針
a) 函數指針的基本使用
b) 回調函數
c) 練習:通過不同函數指針調用不同類型的函數
d) 經典程序講解:多個函數的隨機調用
5)二級指針和多級指針
a) 二級指針的定義及使用
b) 一級指針、二級指針和函數的恩怨情仇
c) 多級指針的定義及使用
6)指針和二維數組
7)字符串專題
a) 常用字符串處理函數的使用
i. strlen
ii.strcpy strncpy
iii. strcmp strncmp
iv.strcat strncat
v. strstr
vi.strtok strtok_r
b) 實際應用舉例:統計某個班級中姓 “李”的同學的個數
c) 實際應用舉例:將 “流浪地球”演員表按照字母表先后順序顯示
d) 實際應用舉例:http協議解析
e) 字符串處理函數的實現
f) 常見筆試題分析

結構體

1)結構體定義
a) typedef的使用
b) 結構體的初始化

c) 結構體數組
d) 指針和結構體
e) 練習:封裝一個結構體保存學生的相關信息,並且計算多個學生中年齡
最大值、最小值和平均值
2)共用體/聯合體
a) 共用體的定義和使用
b) 共用體的內存空間布局
c) 共用體和結構體的區別
d) 大端模式和小端模式
e) 共用體的妙用:判斷大小端模式
f) 經典習題講解:通過共用體分解一個int類型的數據
g) 經典習題講解:通過共用體將四個字符組合成整型數據
3)枚舉
a) 枚舉的定義和使用
b) 通過枚舉提升代碼可讀性實例代碼
c) 練習:通過枚舉獲取某天是星期幾
d) 實際應用舉例:英雄聯盟 “多殺”音效輸出

C 語言編程高階

1)C程序的組成
a) C程序項目目錄結構
b) static關鍵字的使用
c) const關鍵字的使用
d) Makefile文件的編寫
e) C程序的編譯步驟
f) 動態庫的使用
g) 靜態庫的使用
h) 練習:將實現交換兩個整數的函數編譯成動態庫和靜態庫
2)C語言調試方法及技巧
a) GDB 的下載和安裝
b) gdb run(r)命令:啟動程序
c) GDB break (b):設置斷點
d) GDB watch命令:監控變量值的變化
e) GDB watch命令:監控變量值的變化
f) GDB catch命令:建立捕捉斷點
g) GDB條件斷點 (condition命令)詳解
h) GDB單步調試程序
i) 如何使用GDB進行斷點調試?
j) GDB print和display命令:查看變量的值
k) GDB print命令更高級的用法
3)走進C語言內存管理世界
a) 程序在計算機中到底是如何運行的
b) 我們在程序中看到的地址為什么是假的?

c) 虛擬地址和物理地址
d) 虛擬地址空間及編譯模式
e) 結構體的字節對齊
f) 什么是棧溢出
g) 函數在棧上到底是怎樣的?
h) 函數進棧和出棧的過程
i) 棧溢出攻擊的原理
j) 實際應用舉例:網站密碼破解

 

十一、數據結構及算法

課程定位:
“程序設計=數據結構+算法”,數據結構和算法是程序的靈魂。
在進行應用軟件開發時一個程序能否選擇合適的數據結構和算法將直接導致程序的運行是否高效。通過本階段的學習,學員不僅可以掌握日常應用軟件開發中常用的數據結構和算法,例如鏈表、棧和隊列、二叉樹、平衡二叉樹、二分查找法、冒泡法排序、快排法等,同時也將學習到更多進階的內容,例如B樹、B+樹、紅黑樹、哈希表、哈希查找、堆排序、動態規划等,學習完這部分知識將大大提高學員大廠筆試和面試的通過率。
數據結構基礎

1)線性結構
a) 數組
b) 鏈表
i. 單向鏈表
ii.單向鏈表的逆置
iii. 單向鏈表的環
iv.單向循環鏈表
v. 雙向鏈表
vi.雙向循環鏈表
c) 棧
i. 數組實現的棧
ii.鏈表實現的棧
iii. 實際應用舉例:函數形參的入棧和出棧順序
d) 隊列
i. 實際應用舉例:銀行取號機功能實現
2)非線性結構
a) 二叉樹
b) 完全二叉樹
c) 滿二叉樹
d) 二分查找樹

e) 平衡二叉樹
f) 圖

數據結構進階

1)二叉樹的遍歷
i. 通過棧實現二叉樹的按深度遍歷
ii.通過隊列實現二叉樹的按層次遍歷
iii. 判斷兩棵二叉樹是否相同
2)哈希表
a) 哈希表的實現
b) 哈希沖突及解決方案
c) 實際應用舉例:統計一篇文章中單詞的個數
3)B樹
a) B樹的概念及實現原理
b) B樹的實際應用:磁盤搜索原理
4)B+樹
a) B+樹的概念及實現原理
b) B+樹的實際應用:數據庫索引的實現
c) B樹和B+樹的區別
5)哈弗曼樹
a) 哈弗曼樹的特點
b) 通過C語言實現哈弗曼樹
c) 實際應用舉例:通過哈夫曼編碼實現數據的加密傳輸
6)紅黑樹
a) 紅黑樹的概念及使用
b) 紅黑樹的旋轉
c) 紅黑樹和普通平衡二叉樹的比較

算法基礎

1)排序算法
a) 冒泡排序
b) 插入排序
c) 快速排序
2)查找算法
a) 順序查找
b) 二分查找
c) 插值查找

算法進階

1)時間復雜度計算
2)空間復雜度的計算
3)排序算法
a) 快排法的 “Bug”及解決辦法
b) 堆排序
c) 希爾排序
d) 歸並排序
e) 桶排序
f) 排序算法的穩定性
4)查找算法
a) Top K 問題
b) 大數據中查找前n大數的解決辦法
5)回溯法
a) 八皇后問題
6)動態規划
7)貪心算法
8)背包問題


十二、Linux高級程序設計

課程定位:
當前主流的嵌入式設備中均運行架構復雜的操作系統,操作系統提供了多任務的實現機 制,為了能讓嵌入式設備實現更高效的運作,必須掌握嵌入式操作系統中最核心的系統編程 技巧,包括:文件操作、多進程編程、進程管理、進程間通信機制、多線程編程、線程間同 步互斥機制、線程池機制等。

shell 編程

1)shell變量
2)shell位置參數 (命令行參數)
3)shell特殊變量
a) $#
b) $*
c) $@
d) $?
e) $$

Linux 文件I/O

1)標准IO
a) 什么是標准IO?
b) 為什么需要標准IO?
c) 文件的基本操作
i. fopen函數
ii.fread函數
iii. fwrite函數
iv.fclose函數
v. fseek函數
vi.fstat函數
d) 練習:使用標准IO拷貝文件
e) 標准IO 的緩沖區
i. 行緩沖
ii.全緩沖
iii. 無緩沖
f) sprintf的使用
i. sprintf語法
ii.實際應用舉例:學生信息遠程傳輸數據包封裝
2)系統IO
a) 什么是系統IO?
b) 為什么需要系統IO
c) Linux系統中文件的描述
d) 文件的基本操作
i. open函數
ii.read函數
iii. write函數
iv.close函數
v. lseek函數
vi.stat函數
e) Linux 目錄的操作方法
f) 標准IO和系統IO 比較
i. 從實現原理上理解標准IO 的作用和系統IO 的作用
ii.分析標准IO和系統IO 的使用場景
iii. 標准IO系統IO性能分析
iv.時間和日期編程實例
1. 當前時間年月日時分秒獲取
2. 練習:你知道你活了多少天,活了多少秒了嗎?

3. 實際應用舉例:計算你的 “英雄聯盟”游戲的 “L齡”

Linux 並發編程

1)並發和並行的概念
2)進程
a) 進程的基本概念
b) 進程的狀態
i. 進程在Linux操作系統中的描述
ii.進程在Linux下的相關系統文件
iii. 進程的三態/五態
iv.進程之間的切換
v. 進程的上下文
c) 多進程編程
i. 父進程、子進程
ii.進程控制函數fork、getpid、getppid、wait、waipid、kill
iii. 子進程的 “前世今生”
iv.關於fork函數的經典筆試題講解
v. 僵屍進程
vi.孤兒進程
d) 進程間通信 (IPC)
i. 管道
1. 有名管道
2. 無名管道
ii.信號
iii. System IPC和Posix IPC
1. 消息隊列
2. 共享內存
3. 信號量
e) system 函數
f) exec函數簇
g) system 函數和exec函數簇的區別
h) 練習:程序創建子進程並令其掛起100s,令父進程每秒監測子進程狀態,
若子進程死亡則打印 “子進程死亡”,否則打印 “Hello World!”
i) Linux守護進程的設計
2)多線程
a) 線程的基本概念
b) 線程和進程的關系
c) 多線程編程
i. 線程控制函數 pthread_create
pthread_join
pthread_self
pthread_cancel
pthread_detach

ii.PV操作
iii. 線程的同步
1. 互斥鎖
2. 讀寫鎖
3. 條件變量
4. 信號量
5. 線程安全
i. 生產者消費者模型
ii.銀行家算法
iii. 哲學家就餐問題
iv.線程池
v. 作業:多線程目錄拷貝

 

十三、Linux網絡編程

課程定位:
網絡編程最主要的工作就是在發送端把信息通過規定好的協議進行組裝包,在接收端按照規定好的協議把包進行解析,從而提取出對應的信息,達到通信的目的。中間最主要的就是數據包的組裝,數據包的過濾,數據包的捕獲,數據包的分析。
在本階段中我們將一起學習一些基礎網絡嘗試,掌握OSI、TCP/IP模型,掌握TCP協議實現原理,同時我們還將學習TCP、UDP編程基礎,掌握Linux下的高並發網絡編程。

Linux 網絡編程預備知識

1)OSI網絡模型
2)TCP/IP模型
a) TCP/IP 四層模型介紹
i. 應用層介紹
ii.傳輸層介紹
1. TCP傳輸協議頭部
2. UDP傳輸協議頭部
iii. 端口號
iv.子網掩碼
v. 網絡層介紹
1. IP地址

2. 子網掩碼
3. ICMP協議
4. ARP協議、ARP攻擊
5. 路由器工作原理
vi.數據鏈路層介紹
1. 交換機的工作原理
2. 路由器和交換機的比較
b) TCP三次握手
i. TCP三次握手流程
ii.SYN洪泛攻擊
c) TCP 四次揮手
d) TCP可靠穩定實現原理
e) 流量控制和滑動窗口
f) UDP傳輸協議分析
3)網絡工具wireshark用法
4)上網流程分析
a) DNS服務器
b) HTTP協議和HTTPS協議
c) Nginx
d) 負載均衡
5)NAT 網絡地址轉換協議

socket 編程

1)網絡字節序和主機字節序
2)TCP 編程
a) TCP服務端編程流程
b) TCP客戶端編程流程
3)UDP 編程
a) UDP服務端編程流程
b) UDP客戶端編程流程
c) 廣播和組播
4)IO模型分析
) 復用
5 IO
a) select
b) poll
c) Epoll
練習:網絡日志服務器開發
練習: 語言實現 網絡嗅探器:通過原生套接字的方式,監聽所有本地主機收發的
C Linux
數據鏈路層幀結構,然后解析數據包的類型,並記錄到日志文件。實現一個輕量級的網絡嗅
探器

6)TCP 帶外數據編程
7)TCP粘包處理
8)Unix domain 編程

9)作業:基於TCP 的日志服務器的實現
10)作業:FTP文件服務器實現

 

十四、Linux數據庫編程


MySQL

1)MySQL數據庫的安裝
a) windows下MySQL 的安裝
b) ubuntu下MySQL 的安裝
c) sqlyog的安裝
2)MySQL數據庫的基本操作
a) sql語句書寫規則
b) MySQL查看數據庫
c) MySQL創建數據庫
d) MySQL修改數據庫
e) MySQL刪除數據庫
f) MySQL選擇數據庫
g) MySQL注釋
h) MySQL 中SQL語句的大小寫規則
3)MySQL數據類型和存儲引擎
a) MySQL 數據類型簡介
b) MySQL 整數類型
c) MySQL 小數類型
d) MySQL 日期和時間類型
e) MySQL 字符串類型
f) MySQL 二進制類型
g) MySQL 數據類型的選擇
h) MySQL 轉義字符的使用
i) MySQL 系統變量
j) MySQL 存儲引擎:InnoDB、MyISAM
4) MySQL數據表的基本操作
a) MySQL創建數據表
b) MySQL修改數據表
c) MySQL修改/刪除字段
d) MySQL刪除數據表
e) MySQL刪除被其它表關聯的主表

f) MySQL查看表結構
g) MySQL數據表添加字段
5)MySQL 約束、函數和運算符
a) MySQL 約束概述
b) MySQL 主鍵
c) MySQL 主鍵自增長
d) MySQL 外鍵約束
e) MySQL 唯一約束
f) MySQL 檢查約束
g) MySQL 默認值
h) MySQL 非空約束
i) MySQL 常用運算符
j) MySQL 算術運算符
k) MySQL 邏輯運算符
l) MySQL 比較運算符
m) MySQL 位運算符
n) MySQL 運算符優先級
o) MySQL IN 和NOT IN
p) MySQL 函數
6)MySQL 操作表中數據
a) MySQL插入數據
b) MySQL去重
c) MySQL設置別名
d) MySQL限制查詢結果的條數
e) MySQL對查詢結果排序
f) MySQL條件查詢
g) MySQL使用LIKE模糊查詢
h) MySQL范圍查詢
i) MySQL空值查詢
j) MySQL分組查詢
k) MySQL過濾分組
l) MySQL交叉連接
m) MySQL 內連接
n) MySQL外連接
o) MySQL子查詢
p) MySQL更新數據
q) MySQL刪除數據
練習:學生信息管理系統數據庫設計
7)MySQL視圖、索引
a) MySQL視圖是什么?
b) MySQL創建視圖
c) MySQL查看視圖
d) MySQL修改視圖
e) MySQL刪除視圖

f) MySQL索引
g) MySQL索引可以分為哪些類型?
h) MySQL創建索引
i) MySQL查看索引
j) MySQL修改和刪除索引
k) 索引在什么情況下不會被使用?
l) 怎么提升索引的使用效率,設計出更高效的索引
8)數據庫的設計
a) ER模型
b) 數據庫三范式
c) 作業:校園網數據庫設計
9)MySQL事務
a) 事務的概念和特性
b) MySQL執行事務的語法和流程MySQL設置事務自動提交 (開啟和關閉)
c) 從實例出發,搞懂高並發下的數據庫事務隔離級別
d) MySQL查看和修改事務隔離級別
e) MySQL表鎖、行鎖和頁鎖
f) MySQL InnoDB 的3種行鎖定方式
g) Mysql並發時常見的死鎖及解決方法
10)MySQL性能優化
11)MySQL C語言編程接口

Sqlite3

1)ubuntu sqlite3的安裝
2)sqlitestudio的使用
3)Sqlite3數據庫結構
4)Sqlite3庫的操作
5)Sqlite3 C語言編程接口

①3000多本Python電子書有

②Python開發環境安裝教程有

③Python400集自學視頻有

④軟件開發常用詞匯有

⑤Python學習路線圖有

⑥項目源碼案例分享有

如果你用得到的話可以直接拿走,關注+私❤學習就好啦。

我是白雲,一名喜歡分享知識的程序員,感興趣的就趕緊來點擊關注我把,哪里有不明白或有不同觀點的地方歡迎留言!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM