README.md 18.3 KB
Newer Older
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
1
## Python - 100天从新手到大师
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
2

3
> 作者:骆昊
4

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
5 6
### Python应用领域和就业形势分析

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
7
简单的说,Python是一个“优雅”、“明确”、“简单”的编程语言。
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
8

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
9
 - 学习曲线低,非专业人士也能上手
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
10
 - 开源系统,拥有强大的生态圈
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
11
 - 解释型语言,完美的平台可移植性
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
12 13
 - 支持面向对象和函数式编程,动态语言
 - 能够通过调用C/C++代码扩展功能
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
14 15 16 17 18 19 20 21 22 23
 - 代码规范程度高,可读性强

目前几个比较流行的领域,Python都有用武之地。

 - 云基础设施 - Python / Java / Go
 - DevOps - Python / Shell / Ruby / Go
 - 网络爬虫 - Python / PHP / C++
 - 数据分析挖掘 - Python / R / Scala / Matlab
 - 机器学习 - Python / R / Java / Lisp

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
24
作为一名Python开发者,主要的就业领域包括:
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
25

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
26 27
- Python服务器后台开发 / 游戏服务器开发 / 数据接口开发工程师
- Python自动化运维工程师
28
- Python数据分析 / 数据可视化 / 大数据工程师
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
29 30
- Python爬虫工程师
- Python聊天机器人开发 / 图像识别和视觉算法 / 深度学习工程师
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
31

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
32 33
下图显示了主要城市Python招聘需求量及薪资待遇排行榜(截止到2018年5月)。

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
34
![Python招聘需求及薪资待遇Top 10](./res/python-top-10.png)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
35

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
36
![](./res/python-bj-salary.png)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
37

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
38
![](./res/python-cd-salary.png)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
39

40
给初学者的几个建议:
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
41 42 43 44 45 46 47

- Make English as your working language.
- Practice makes perfect.
- All experience comes from mistakes.
- Don't be one of the leeches.
- Either stand out or kicked out.

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
48
### Day01~15 - [Python语言基础](./Day01-15)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
49

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
50
#### Day01 - [初识Python](./Day01-15/Day01/初识Python.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
51 52 53 54 55 56 57

- Python简介 - Python的历史 / Python的优缺点 / Python的应用领域
- 搭建编程环境 - Windows环境 / Linux环境 / MacOS环境
- 从终端运行Python程序 - DOS命令 / Hello, world / print函数 / 运行程序
- 使用IDLE - 交互式环境(REPL) / 编写多行代码 / 运行程序 / 退出IDLE
- 注释 - 注释的作用 / 单行注释 / 多行注释

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
58
#### Day02 - [语言元素](./Day01-15/Day02/语言元素.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
59 60 61 62 63 64 65

- 程序和进制 - 指令和程序 / 冯诺依曼机 / 二进制和十进制 / 八进制和十六进制
- 变量和类型 - 变量的命名 / 变量的使用 / input函数 / 检查变量类型 / 类型转换
- 数字和字符串 - 整数 / 浮点数 / 复数 / 字符串 / 字符串基本操作 / 字符编码
- 运算符 - 数学运算符 / 赋值运算符 / 比较运算符 / 逻辑运算符 / 身份运算符 / 运算符的优先级
- 应用案例 - 华氏温度转换成摄氏温度 / 输入圆的半径计算周长和面积 / 输入年份判断是否是闰年

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
66
#### Day03 - [分支结构](./Day01-15/Day03/分支结构.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
67 68 69 70 71

- 分支结构的应用场景 - 条件 / 缩进 / 代码块 / 流程图
- if语句 - 简单的if / if-else结构 / if-elif-else结构 / 嵌套的if
- 应用案例 - 用户身份验证 / 英制单位与公制单位互换 / 掷骰子决定做什么 / 百分制成绩转等级制 / 分段函数求值 / 输入三条边的长度如果能构成三角形就计算周长和面积

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
72
#### Day04 - [循环结构](./Day01-15/Day04/循环结构.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
73 74 75

- 循环结构的应用场景 - 条件 / 缩进 / 代码块 / 流程图
- while循环 - 基本结构 / break语句 / continue语句
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
76 77
- for循环 - 基本结构 / range类型 / 循环中的分支结构 / 嵌套的循环 / 提前结束程序 
- 应用案例 - 1~100求和 / 判断素数 / 猜数字游戏 / 打印九九表 / 打印三角形图案 / 猴子吃桃 / 百钱百鸡
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
78

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
79
#### Day05 - [总结和练习](./Day01-15/Day05/总结和练习.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
80

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
81 82
- 基础练习 - 水仙花数 / 完美数 / 五人分鱼 / Fibonacci数列 / 回文素数 
- 综合练习 - Craps赌博游戏
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
83

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
84
#### Day06 - [函数和模块的使用](./Day01-15/Day06/函数和模块的使用.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
85

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
86 87 88
- 函数的作用 - 代码的坏味道 / 用函数封装功能模块
- 定义函数 - def语句 / 函数名 / 参数列表 / return语句 / 调用自定义函数
- 调用函数 - Python内置函数 /  导入模块和函数
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
89 90
- 函数的参数 - 默认参数 / 可变参数 / 关键字参数 / 命名关键字参数
- 函数的返回值 - 没有返回值  / 返回单个值 / 返回多个值
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
91 92 93
- 作用域问题 - 局部作用域 / 嵌套作用域 / 全局作用域 / 内置作用域 / 和作用域相关的关键字
- 用模块管理函数 - 模块的概念 / 用自定义模块管理函数 / 命名冲突的时候会怎样(同一个模块和不同的模块)

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
94
#### Day07 - [字符串和常用数据结构](./Day01-15/Day07/字符串和常用数据结构.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
95 96

- 字符串的使用 - 计算长度 / 下标运算 / 切片 / 常用方法
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
97 98 99 100 101 102 103 104
- 列表基本用法 - 定义列表 / 用下表访问元素 / 下标越界 / 添加元素 / 删除元素 / 修改元素 / 切片 / 循环遍历
- 列表常用操作 - 连接 / 复制(复制元素和复制数组) / 长度 / 排序 / 倒转 / 查找
- 生成列表 - 使用range创建数字列表 / 生成表达式 / 生成器
- 元组的使用 - 定义元组 / 使用元组中的值 / 修改元组变量 / 元组和列表转换
- 集合基本用法 - 集合和列表的区别 /  创建集合 / 添加元素 / 删除元素 /  清空
- 集合常用操作 - 交集 / 并集 / 差集 / 对称差 / 子集 / 超集
- 字典的基本用法 - 字典的特点 / 创建字典 / 添加元素 / 删除元素 / 取值 / 清空
- 字典常用操作 - keys()方法 / values()方法 / items()方法 / setdefault()方法
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
105 106
- 基础练习 - 跑马灯效果 / 列表找最大元素 / 统计考试成绩的平均分 / Fibonacci数列 / 杨辉三角
- 综合案例 - 双色球选号 / 井字棋
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
107

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
108
#### Day08 - [面向对象编程基础](./Day01-15/Day08/面向对象编程基础.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
109 110 111 112 113

- 类和对象 - 什么是类 / 什么是对象 / 面向对象其他相关概念
- 定义类 - 基本结构 / 属性和方法 / 构造器 / 析构器 / \_\_str\_\_方法
- 使用对象 - 创建对象 / 给对象发消息
- 面向对象的四大支柱 - 抽象 / 封装 / 继承 / 多态
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
114 115
- 基础练习 - 定义学生类 / 定义时钟类 / 定义图形类 / 定义汽车类

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
116
#### Day09 - [面向对象进阶](./Day01-15/Day09/面向对象进阶.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
117 118 119 120 121

- 属性 - 类属性 / 实例属性 / 属性访问器 / 属性修改器 / 属性删除器 / 使用\_\_slots\_\_
- 类中的方法 - 实例方法 / 类方法 / 静态方法
- 运算符重载 - \_\_add\_\_ / \_\_sub\_\_ / \_\_or\_\_ /\_\_getitem\_\_ / \_\_setitem\_\_ / \_\_len\_\_ / \_\_repr\_\_ / \_\_gt\_\_ / \_\_lt\_\_ / \_\_le\_\_ / \_\_ge\_\_ / \_\_eq\_\_ / \_\_ne\_\_ / \_\_contains\_\_ 
- 类(的对象)之间的关系 - 关联 / 继承 / 依赖
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
122
- 继承和多态 - 什么是继承 / 继承的语法 / 调用父类方法 / 方法重写 / 类型判定 / 多重继承 / 菱形继承(钻石继承)和C3算法
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
123 124
- 综合案例 - 工资结算系统 / 图书自动折扣系统 / 自定义分数类

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
125
#### Day10 - [图形用户界面和游戏开发](./Day01-15/Day10/图形用户界面和游戏开发.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
126

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
127
#### Day11 - [文件和异常](./Day01-15/Day11/文件和异常.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
128 129 130 131 132 133 134

- 读文件 - 读取整个文件 / 逐行读取 / 文件路径
- 写文件 - 覆盖写入 / 追加写入 / 文本文件 / 二进制文件
- 异常处理 - 异常机制的重要性 / try-except代码块 / else代码块 / finally代码块 / 内置异常类型 / 异常栈 / raise语句
- 数据持久化 - CSV文件概述 / csv模块的应用 / JSON数据格式 / json模块的应用
- 综合案例 - 歌词解析

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
135
#### Day12 - [字符串和正则表达式](./Day01-15/Day12/字符串和正则表达式.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
136 137 138 139 140 141

- 字符串高级操作 - 转义字符 \ 原始字符串 \ 多行字符串 \ in和 not in运算符 \ is开头的方法 \ join和split方法 \ strip相关方法 \ pyperclip模块 \ 不变字符串和可变字符串 \ StringIO的使用
- 正则表达式入门 - 正则表达式的作用 \ 元字符 \ 转义 \ 量词 \ 分组 \ 零宽断言 \贪婪匹配与惰性匹配懒惰 \ 使用re模块实现正则表达式操作(匹配、搜索、替换、捕获)
- 使用正则表达式 - re模块 \ compile函数 \ group和groups方法 \ match方法 \ search方法 \ findall和finditer方法 \ sub和subn方法 \ split方法
- 应用案例 - 使用正则表达式验证输入的字符串

142
#### Day13 - [进程和线程](./Day01-15/Day13/进程和线程.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
143 144 145 146 147

- 进程和线程的概念 - 什么是进程 / 什么是线程 / 多线程的应用场景
- 使用进程 - fork函数 / multiprocessing模块 / 进程池 / 进程间通信
- 使用线程 - thread模块 / threading模块 / Thread类 / Lock类

148
#### Day14-A - [网络编程入门](./Day01-15/Day14/网络编程入门.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
149 150 151 152 153

- 计算机网络基础 - 计算机网络发展史 / “TCP-IP”模型 / IP地址 / 端口 / 协议 / 其他相关概念
- 网络应用架构 - “客户端-服务器”架构 / “浏览器-服务器”架构
- Python网络编程 - 套接字的概念 / socket模块 /  socket函数 / 创建TCP服务器 / 创建TCP客户端 / 创建UDP服务器 / 创建UDP客户端 / SocketServer模块

154
#### Day14-B - [网络应用开发](./Day01-15/Day15/网络应用开发.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
155 156 157 158 159 160

- 访问网络API - 网络API概述 / 访问URL / requests模块 / 解析JSON格式数据
- 文件传输 - FTP协议 / ftplib模块 / 交互式FTP应用
- 电子邮件 - SMTP协议 / POP3协议 / IMAP协议 / smtplib模块 / poplib模块 / imaplib模块
- 短信服务 - twilio模块 / 国内的短信服务

161 162 163 164 165 166 167
#### Day15 - 图像和文档处理

- 用Pillow处理图片
- 读写Word文档
- 读写Excel文件
- 生成PDF文件

168
### Day16~Day20 - [Python语言进阶 ](./Day16-20/Python语言进阶.md)
169

170 171 172 173 174 175 176
- 常用数据结构
- 函数的高级用法
- 面向对象高级知识
- 迭代器和生成器
- 并发和异步编程

### Day21~30 - [Web前端入门](./Day21-30/Web前端概述.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
177 178 179 180 181 182 183

- 用HTML标签承载页面内容
- 用CSS渲染页面
- 用JavaScript处理交互式行为
- jQuery入门和提高
- Bootstrap在Web项目中的应用

184
### Day31~35 - [玩转Linux操作系统](./Day31-35/玩转Linux操作系统.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
185 186 187 188 189 190 191 192 193 194 195

- 操作系统发展史和Linux概述
- Linux基础命令
- Linux中的实用程序
- Linux的文件系统
- Vim编辑器的应用
- 环境变量和Shell编程
- 软件的安装和服务的配置
- 网络访问和管理
- 其他相关内容

196
### Day36~40 - [数据库基础和进阶](./Day36-40)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
197

198
- [关系型数据库MySQL](./Day36-40/关系型数据库MySQL.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
199 200 201 202 203 204 205 206 207
  - 关系型数据库概述
  - MySQL的安装和使用
  - SQL的使用
    - DDL
    - DML
    - DQL
    - DCL
  - 在Python中操作MySQL
  - MySQL高级知识
208 209 210 211 212
- [NoSQL入门](./Day36-40/NoSQL入门.md)
  - NoSQL概述
  - 主流NoSQL数据库
  - Redis概述
  - Mongo概述
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
213

214
### Day41~55 - [Django实战](./Day41-55)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
215

216
#### Day41 - [快速上手](./Day41-55/01.快速上手.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
217

218
#### Day42 - [深入模型](./Day41-55/02.深入模型.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
219

220
#### Day43 - [静态资源和Ajax请求](./Day41-55/03.静态资源和Ajax请求.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
221

222
#### Day44 - [表单的应用](./Day41-55/04.表单的应用.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
223

224
#### Day45 - [Cookie和会话](./Day41-55/05.Cookie和会话.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
225

226
#### Day46 - [中间件的应用](./Day41-55/06.中间件的应用.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
227

228
#### Day47 - [日志和缓存](./Day41-55/07.日志和缓存.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
229

230
#### Day48 - [文件上传](./Day41-55/08.文件上传.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
231

232
#### Day49-50 - [RESTful架构和应用](./Day41-55/09-10.RESTful架构和应用.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
233

234
#### Day51-55 - [项目实战](./Day41-55/11-15.项目实战.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
235 236 237 238

- 项目开发流程和相关工具
- 生成非HTML内容
- 项目部署和测试
239
- 项目性能初步调优
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
240 241 242
- Web应用安全保护


243
### Day56~65 - [Flask实战](./Day56-65)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
244

245
#### Day56 - [安装和入门](./Day56-65/01.安装和入门.md) 
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
246

247
#### Day57 - [模板的使用](./Day56-65/02.模板的使用.md) 
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
248

249
#### Day58 - [表单的处理](./Day56-65/03.表单的处理.md) 
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
250

251
#### Day59 - [数据库操作](./Day56-65/04.数据库操作.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
252

253
#### Day60 - [项目结构](./Day56-65/05.项目结构.md)  
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
254

255
#### Day61-65 - [项目实战](./Day56-65/06-10.项目实战.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
256

257
### Day66~75 - [爬虫开发](./Day66-75)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
258

259
#### Day66 - [网络爬虫和相关工具](./Day66-75/01.网络爬虫和相关工具.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
260

261
#### Day67 - [数据采集和解析](./Day66-75/02.数据采集和解析.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
262

263
#### Day68 - [存储数据](./Day66-75/03.存储数据.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
264

265
#### Day69 - [并发下载](./Day66-75/04.并发下载.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
266

267
#### Day70 - [解析动态内容](./Day66-75/05.解析动态内容.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
268

269
#### Day71 - [表单交互和验证码处理](./Day66-75/06.表单交互和验证码处理.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
270

271
#### Day72 - [Scrapy入门](./Day66-75/07.Scrapy入门.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
272

273
#### Day73 - [Scrapy高级应用](./Day66-75/08.Scrapy高级应用.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
274

275 276 277
#### Day74 - [Scrapy分布式实现](./Day66-75/09.Scrapy分布式实现.md)

#### Day75 - [爬虫项目实战](./Day66-75/10.爬虫项目实战.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
278

279
### Day76~90 - [数据处理和机器学习](./Day76-90)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
280

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
281
#### Day76 - [机器学习基础](./Day76-90/01.机器学习基础.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
282

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
283
#### Day77 - [Pandas的应用](./Day76-90/02.Pandas的应用.md)
284

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
285
#### Day78 - [NumPy和SciPy的应用](./Day76-90/03.NumPy和SciPy的应用)
286

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
287
#### Day79 - [Matplotlib和数据可视化](./Day76-90/04.Matplotlib和数据可视化)
288

289
#### Day80 - [k最近邻(KNN)分类](./Day76-90/05.k最近邻分类.md)
290

291
#### Day81 - [决策树](./Day76-90/06.决策树.md)
292

293
#### Day82 - [贝叶斯分类](./Day76-90/07.贝叶斯分类.md)
294

295
#### Day83 - [支持向量机(SVM)](./Day76-90/08.支持向量机.md)
296

297
#### Day84 - [K-均值聚类](./Day76-90/09.K-均值聚类.md)
298

299
#### Day85 - [回归分析](./Day76-90/10.回归分析.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
300

301
#### Day86~Day87 - [大数据分析](./Day76-90/11-12.大数据分析.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
302

303 304 305 306 307
#### Day88~Day89 - [Tensorflow实战](./Day76-90/13-14.Tensorflow实战.md)

#### Day90 - [推荐系统](./Day76-90/15.推荐系统.md)

### Day91~100 - [团队项目开发](./Day91-100)
308

309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394
#### 过程模型

1. 软件过程模型
   - 经典过程模型(瀑布模型)
     - 可行性分析(研究做还是不做),输出《可行性分析报告》。
     - 需求分析(研究做什么),输出《需求规格说明书》和产品界面原型图。
     - 概要设计和详细设计,输出概念模型图、物理模型图、类图、时序图等。
     - 编码 / 测试。
     - 上线 / 维护。
   - 敏捷开发(Scrum)- 产品所有者、Scrum Master、研发人员 - Sprint
     - 产品的Backlog(用户故事、产品原型)。
     - 计划会议(评估和预算)。
     - 日常开发(站立会议、番茄工作法、结对编程、测试先行、代码重构……)。
     - 修复bug(问题描述、重现步骤、测试人员、被指派人)。
     - 评审会议(Showcase)。
     - 回顾会议(当前周期做得好和不好的地方)。
2. 项目团队组建
   - 团队的构成和角色

     ![company_architecture](./res/company_architecture.png)

   - 编程规范和代码审查(flake8、pylint)

     ![](./res/pylint.png)

   - Python中的一些“惯例”(请参考[《Python惯例-如何编写Pythonic的代码》](Python惯例-如何编写Pythonic的代码.md)
3. 团队开发工具介绍
   - 版本控制:Git、Mercury
   - 缺陷管理:Github/Gitee、Redmine、禅道
   - 持续集成:Jenkins、Travis-CI

   请参考[《团队项目开发》](团队项目开发.md)

#### 项目选题和理解业务

1. 选题范围设定

   - CMS(用户端):新闻聚合网站、问答/分享社区、影评/书评网站等。
   - MIS(用户端+管理端):KMS、KPI考核系统、HRS、仓储管理系统等。

   - App后台(管理端+数据接口):二手交易类App、报刊杂志类App、健康健美类App、旅游类App、社交类App、阅读类App等。
   - 其他类型:自身行业背景和工作经验、业务容易理解和把控。

2. 需求理解、模块划分和任务分配

   - 需求理解:头脑风暴和竞品分析。
   - 模块划分:画思维导图(XMind),每个模块是一个枝节点,每个具体的功能是一个叶节点(用动词表述),需要确保每个叶节点无法再生出新节点,确定每个叶子节点的重要性、优先级和工作量。
   - 任务分配:由项目负责人根据上面的指标为每个团队成员分配任务。

   ![](./res/requirements_by_xmind.png)

3. 制定项目进度表(每日更新)

   | 模块 | 功能     | 人员   | 状态     | 完成 | 工时 | 计划开始 | 实际开始 | 计划结束 | 实际结束 | 备注             |
   | ---- | -------- | ------ | -------- | ---- | ---- | -------- | -------- | -------- | -------- | ---------------- |
   | 评论 | 添加评论 | 王大锤 | 正在进行 | 50%  | 4    | 2018/8/7 |          | 2018/8/7 |          |                  |
   |      | 删除评论 | 王大锤 | 等待     | 0%   | 2    | 2018/8/7 |          | 2018/8/7 |          |                  |
   |      | 查看评论 | 白元芳 | 正在进行 | 20%  | 4    | 2018/8/7 |          | 2018/8/7 |          | 需要进行代码审查 |
   |      | 评论投票 | 白元芳 | 等待     | 0%   | 4    | 2018/8/8 |          | 2018/8/8 |          |                  |

#### 概念模型和正向工程

1. UML和E-R图

   ![uml](./res/uml-graph.png)

2. 通过模型创建表(正向工程)

   ```Shell
   python manage.py makemigrations app
   python manage.py migrate
   ```

#### 物理模型和反向工程

1. PowerDesigner

   ![](./res/power-designer-pdm.png)

2. 通过数据表创建模型

   ```Shell
   python manage.py inspectdb > app/models.py
   ```

#### 项目开发中的公共问题
395

396 397 398 399 400
1. 数据的配置
2. 缓存的配置
3. 日志的配置
4. Django的使用技巧
5. 好用的Python模块(图像处理、数据加密、三方API)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
401

402
### REST API设计
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
403

404 405 406
1. RESTful架构
2. API接口文档的撰写([《网络API接口设计》](网络API接口设计.md)
3. Django-REST-Framework的应用
407

408
#### 项目中的重点难点剖析
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
409

410 411
1. 使用缓存缓解数据库压力(Redis)
2. 使用消息队列缓解服务器压力(Celery + RabbitMQ)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
412

413
#### 单元测试
414

415 416 417
1. 测试的种类
2. 编写单元测试(unitest、TestCase)
3. 测试覆盖率(Coverage)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
418

419
#### 项目部署
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
420

421 422 423 424 425 426 427 428
1. 部署前的准备工作
   - 关键设置(SECRET_KEY / DEBUG / ALLOWED_HOSTS / 缓存 / 数据库)
   - HTTPS / CSRF_COOKIE_SECUR  / SESSION_COOKIE_SECURE  
   - 日志相关配置
2. Linux常用命令回顾
3. Linux常用服务的安装和配置
4. uWSGI和Nginx的使用
5. 虚拟化容器(Docker)
429

430
#### 性能测试
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
431

432 433 434
1. AB的使用
2. SQLslap的使用
3. sysbench的使用
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
435

436
#### 自动化测试
437

438 439 440
1. 使用Shell和Python进行自动化测试
2. 使用Selenium实现自动化测试
3. 测试工具Robot Framework介绍
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
441

442
#### 项目性能调优
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
443

444 445 446
1. 数据库性能调优
2. 代码性能调优
3. 静态文件服务器和CDN加速
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
447 448