物联网开发工程师(物联网开发工程师课程)
大家好,我是老白。
今天给大家带来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)关系运算符
互联网小常识:支持500个以上结点的大型应用可以选择企业级交换机;支持300个以下的选择部门级交换机;支持100个以下的选择工作组级交换机。
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学习路线图有
⑥项目源码案例分享有
如果你用得到的话可以直接拿走, 关注+私❤我学习就好。
互联网小常识:IEEE802.11无线局域网协议中,冲突检测存在一定的问题(Near/Far现象),因为不能一边发送一边接收,所以无法使用CSMA/CD,将其改为CSMA/CA或DCF.另一个问题无线MAC层的问题是“hidden node”的问题,这个问题通过RTS/CTS解决。
免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186