更新了部分文档和说明

pull/478/head
jackfrued 2020-02-24 14:37:24 +08:00
parent 63c17a0829
commit fe5ad865b2
11 changed files with 43 additions and 33 deletions

View File

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -1283,7 +1283,7 @@ build environment:
### 计划任务 ### 计划任务
1. 在指定的时间执行命令 1. 在指定的时间执行命令
- **at** - 将任务排队,在指定的时间执行。 - **at** - 将任务排队,在指定的时间执行。
- **atq** - 查看待执行的任务队列。 - **atq** - 查看待执行的任务队列。

View File

@ -936,15 +936,16 @@ drop index idx_student_name on tb_student;
创建视图。 创建视图。
```SQL ```SQL
create view vw_score create view vw_avg_score
as as
select sid, round(avg(score), 1) as avgscore from tb_record group by sid; select sid, round(avg(score), 1) as avgscore
from tb_record group by sid;
create view vw_student_score create view vw_student_score
as as
select stuname, avgscore select stuname, avgscore
from tb_student, vw_score from tb_student, vw_avg_score
where stuid=sid; where stuid=sid;
``` ```
> **提示**:因为视图不包含数据,所以每次使用视图时,都必须执行查询以获得数据,如果你使用了连接查询、嵌套查询创建了较为复杂的视图,你可能会发现查询性能下降得很厉害。因此,在使用复杂的视图前,应该进行测试以确保其性能能够满足应用的需求。 > **提示**:因为视图不包含数据,所以每次使用视图时,都必须执行查询以获得数据,如果你使用了连接查询、嵌套查询创建了较为复杂的视图,你可能会发现查询性能下降得很厉害。因此,在使用复杂的视图前,应该进行测试以确保其性能能够满足应用的需求。

View File

@ -382,6 +382,12 @@ Git不像SVN那样一定需要中央服务器才能工作上面我们演示
git switch -c <branch-name> git switch -c <branch-name>
``` ```
```Shell
git checkout -b <branch-name>
```
3. 在自己的分支上开发并在本地做版本控制。 3. 在自己的分支上开发并在本地做版本控制。
4. 将自己的分支(工作成果)推到服务器。 4. 将自己的分支(工作成果)推到服务器。
@ -444,7 +450,7 @@ Git不像SVN那样一定需要中央服务器才能工作上面我们演示
创建`release`分支: 创建`release`分支:
```Shell ```Shell
git switch -c release-0.1 develop git checkout -b release-0.1 develop
git push -u origin release-0.1 git push -u origin release-0.1
... ... ... ... ... ...
git pull git pull

View File

@ -361,9 +361,7 @@ systemctl restart sshd
创建需要用于数据卷映射操作的文件夹。 创建需要用于数据卷映射操作的文件夹。
```Shell ```Shell
mkdir -p /root/gitlab/config mkdir -p /root/gitlab/{config,logs,data}
mkdir -p /root/gitlab/logs
mkdir -p /root/gitlab/data
``` ```
基于`gitlab/gitlab-ce`镜像创建容器并暴露80端口HTTP连接和22端口SSH连接 基于`gitlab/gitlab-ce`镜像创建容器并暴露80端口HTTP连接和22端口SSH连接
@ -480,7 +478,6 @@ requirements.txt文件
flask flask
flask-restful flask-restful
flask-cors flask-cors
redis
gunicorn gunicorn
``` ```
@ -850,7 +847,7 @@ docker push jackfrued/webserver
docker-compose down docker-compose down
``` ```
#### Kubernetes #### KubernetesK8S
实际的生产环境中常常需要部署和管理多个协同工作的容器docker compose解决了多容器创建和管理的问题但是实际项目中我们还需要Kubernetes以下都简称为K8S来提供一个跨主机集群的容器调度平台。K8S可以进行自动化容器的部署、扩展和操作从而提供以容器为中心的基础架构。该项目是谷歌在2014年启动的项目建立在谷歌公司十余年运维经验的基础之上而且谷歌自己的应用也是运行在容器上的。 实际的生产环境中常常需要部署和管理多个协同工作的容器docker compose解决了多容器创建和管理的问题但是实际项目中我们还需要Kubernetes以下都简称为K8S来提供一个跨主机集群的容器调度平台。K8S可以进行自动化容器的部署、扩展和操作从而提供以容器为中心的基础架构。该项目是谷歌在2014年启动的项目建立在谷歌公司十余年运维经验的基础之上而且谷歌自己的应用也是运行在容器上的。

View File

@ -1,12 +1,14 @@
## 网络API接口设计 ## 网络API接口设计
目前许多的Web应用和移动应用都使用了前后端分离的开发模式前后端分离简单的说就是前端或移动端通过网络API接口和后台进行交互。API是应用程序的编程接口的缩写网络API通常指的是基于一个URL统一资源定位符可以访问到的资源也就是说通过这个URL我们可以让服务器对某个资源进行操作并返回操作的结果复杂的业务逻辑被隐藏在简单的API接口中。URL的通用格式如下所示 目前许多的Web应用和移动应用都使用了前后端分离的开发模式前后端分离简单的说就是前端或移动端通过网络API接口和后台进行交互获得接口中提供的数据并负责用户界面的渲染。API是应用程序的编程接口的缩写网络API通常指的是基于一个URL统一资源定位符可以访问到的资源也就是说通过这个URL我们就可以请求服务器对某个资源进行操作并返回操作的结果。大家可以想想网络API接口不也是一种封装吗简单的说就是将复杂的业务逻辑隐藏在简单的API接口中。
URL的通用格式如下所示
``` ```
协议://用户名:口令@主机:端口/路径1/.../路径N/资源名 协议://用户名:口令@主机:端口/路径1/.../路径N/资源名
``` ```
> 说明URL中的用户名有可能不需要提供用户名、口令有可能不需要提供口令、端口有可能使用默认端口、路径资源有可能直接位于根路径`/`下)并不是必需的部分,可以根据需要进行设置。 > **说明**URL中的用户名有可能不需要提供用户名、口令有可能不需要提供口令、端口有可能使用默认端口、路径资源有可能直接位于根路径`/`下)并不是必需的部分,可以根据需要进行设置。
网络API通常基于HTTP或HTTPS进行访问基于HTTP/HTTPS最大的好处就在于访问起来非常的简单方便而且可以跨语言、跨应用进行访问和互操作。 网络API通常基于HTTP或HTTPS进行访问基于HTTP/HTTPS最大的好处就在于访问起来非常的简单方便而且可以跨语言、跨应用进行访问和互操作。
@ -14,7 +16,7 @@
#### 关键问题 #### 关键问题
为移动端或者PC端设计网络API接口一个非常重要的原则是根据业务实体而不是用户界面或操作来设计。如果API接口的设计是根据用户的操作或者界面上的功能设置来设计随着需求的变更用户界面也会进行调整需要的数据也在发生变化那么后端开发者就要不停的调整API或者给一个API设计出多个版本这些都会使项目的开发和维护成本增加。 为移动端或者PC端设计网络API接口一个非常重要的原则是**根据业务实体而不是用户界面或操作来设计API接口**。如果API接口的设计是根据用户的操作或者界面上的功能设置来设计随着需求的变更用户界面也会进行调整需要的数据也在发生变化那么后端开发者就要不停的调整API或者给一个API设计出多个版本这些都会使项目的开发和维护成本增加。我们可以将业务实体理解为服务器提供的资源而URL就是资源的定位符标识符这种方式是最为简单自然的。对于相对复杂的用户操作我们可以提供一个“门面”设计模式中的“门面模式”通过该“门面”把多个接口的功能组装起来即可。
下面是某个网站开放API的接口可以看出API的设计是围绕业务实体来进行的而且都做到了“见名知意”。 下面是某个网站开放API的接口可以看出API的设计是围绕业务实体来进行的而且都做到了“见名知意”。
@ -28,9 +30,9 @@
| comments/destroy | 删除一条评论 | | comments/destroy | 删除一条评论 |
| comments/reply | 回复一条评论 | | comments/reply | 回复一条评论 |
需要说明的是上面的API接口并不是REST风格的。REST是一种网络应用架构风格被认为最适合分布式的网络应用。关于REST的知识可以阅读阮一峰老师的[《理解RESTful架构》](http://www.ruanyifeng.com/blog/2011/09/restful.html)以及[《RESTful API设计指南》](http://www.ruanyifeng.com/blog/2014/05/restful_api.html),当然这两篇文章大家也要批判的阅读,因为上面阐述的观点并不完全正确,有些内容甚至是自相矛盾的。 需要说明的是,**上面的API接口并不是REST风格的**。REST是一种网络应用架构风格被认为最适合分布式的网络应用。关于REST的知识可以阅读阮一峰的[《理解RESTful架构》](http://www.ruanyifeng.com/blog/2011/09/restful.html)以及[《RESTful API设计指南》](http://www.ruanyifeng.com/blog/2014/05/restful_api.html),当然这两篇文章大家也要批判的阅读,因为上面阐述的观点并不完全正确,有些内容甚至是自相矛盾的。
API接口返回的数据通常都是**JSON**或**XML**格式,我们这里不会讲述XML的知识因为这种格式几乎已经被淘汰掉了。对于JSON格式的数据我们需要做到不要返回null这的值因为这样的值一旦处置失当会给前端和移动端开发带来不必要的麻烦因为开发者有可能会使用强类型语言。要解决这个问题可以从源头入手在设计数据库的时候尽量给每个字段都加上“not null”约束或者设置合理的默认值约束。 API接口返回的数据通常都是**JSON**或**XML**格式,XML这种数据格式目前基本已经被弃用了。对于JSON格式的数据我们需要做到不要返回null这的值因为这样的值一旦处置失当会给前端和移动端开发带来不必要的麻烦因为开发者有可能会使用强类型语言。要解决这个问题可以从源头入手在设计数据库的时候尽量给每个字段都加上“not null”约束或者设置合理的默认值约束。
#### 其他问题 #### 其他问题
@ -42,9 +44,7 @@ API接口返回的数据通常都是**JSON**或**XML**格式,我们这里不
下面以设计评论接口为例,简单说明接口文档应该如何撰写。 下面以设计评论接口为例,简单说明接口文档应该如何撰写。
#### 评论接口 首先,我们可以定义全局返回状态码。
全局返回状态码
| 返回码 | 返回信息 | 说明 | | 返回码 | 返回信息 | 说明 |
| ------ | ------------ | ---------------------------------- | | ------ | ------------ | ---------------------------------- |
@ -54,7 +54,9 @@ API接口返回的数据通常都是**JSON**或**XML**格式,我们这里不
| 10003 | 评论已被删除 | 查看评论时评论因不和谐因素已被删除 | | 10003 | 评论已被删除 | 查看评论时评论因不和谐因素已被删除 |
| 10004 | …… | …… | | 10004 | …… | …… |
1. **GET** `/articles/{article-id}/comments/` 1. 获取文章评论。
URL**GET** `/articles/{article-id}/comments/`
开发者:王大锤 开发者:王大锤
@ -103,7 +105,9 @@ API接口返回的数据通常都是**JSON**或**XML**格式,我们这里不
} }
``` ```
2. **POST** `/articles/{article-id}/comments` 2. 新增文章评论。
**POST** `/articles/{article-id}/comments`
开发者:王大锤 开发者:王大锤
@ -140,5 +144,5 @@ API接口返回的数据通常都是**JSON**或**XML**格式,我们这里不
> 提示:如果没有接口文档撰写经验,可以使用在线接口文档编辑平台RAP2或YAPI来进行接口文档撰写也可以参考我的[《FTX租房项目接口文档》](../番外篇/FTX租房项目接口文档.md)来了解如何撰写接口文档 > **提示**:如果没有接口文档撰写经验,可以使用在线接口文档编辑平台[RAP2](<http://rap2.taobao.org/>)或[YAPI](<http://yapi.demo.qunar.com/>)来进行接口文档撰写

View File

@ -2,7 +2,7 @@
> 作者:骆昊 > 作者:骆昊
> >
> 最近有很多想学习Python的小伙伴陆陆续续加入我们的交流群目前我们的交流群人数已经超过一万人。我们的目标是打造一个优质的Python交流社区一方面为想学习Python的初学者扫平入门过程中的重重障碍另一方为新入行的开发者提供问道的途径帮助他们迅速成长为优秀的职业人此外有经验的开发者可以利用这个平台把自己的工作经验无偿分享或有偿提供出来让大家都能够得到职业技能以及综合素质的全面提升。之前的公开课和线下技术交流活动因为工作的关系荒废了一段时间了但是各位小伙伴仍然活跃在交流群并一如既往的支持我们在此向大家表示感谢。近期开始持续更新前15天和最后10天的内容前15天是写给初学者的我希望把上手的难度进一步降低例子程序更加简单清晰最后10天是Python项目实战和面试相关的东西我希望内容更详实和完整尤其是第100天的面试题部分创作不易,感谢大家的打赏支持,这些钱不会用于购买咖啡而是通过腾讯公益平台捐赠给需要帮助的人([点击](./更新日志.md)了解捐赠情况)。 > 最近有很多想学习Python的小伙伴陆陆续续加入我们的交流群目前我们的交流群人数已经超过一万人。我们的目标是打造一个优质的Python交流社区一方面为Python初学者扫平入门过程中的重重障碍另一方为新入行的开发者提供问道的门径帮助他们迅速成长。我自己很希望更多有经验的开发者加入到这个平台把自己的工作经验无偿分享或有偿提供出来让大家最终都能够通过这个平台获取对自己有帮助的信息。我的知乎号是[Python-Jack](https://www.zhihu.com/people/jackfrued),之前是我的团队在协助运营,从现在开始我会自己管理这个知乎号,持续为大家提供高质量的文章和新的学习内容,也欢迎大家关注我在知乎的文章和问题回答。创作不易,感谢大家的打赏支持,这些钱不会用于购买咖啡而是通过腾讯公益平台捐赠给需要帮助的人([点击](./更新日志.md)了解捐赠情况)。
![](./res/python-qq-group.png) ![](./res/python-qq-group.png)
@ -43,11 +43,11 @@
给初学者的几个建议: 给初学者的几个建议:
- Make English as your working language. - Make English as your working language. (让英语成为你的工作语言)
- Practice makes perfect. - Practice makes perfect. (熟能生巧)
- All experience comes from mistakes. - All experience comes from mistakes. (所有的经验都源于你犯过的错误)
- Don't be one of the leeches. - Don't be one of the leeches. (不要当伸手党)
- Either stand out or kicked out. - Either outstanding or out. (要么出众,要么出局)
### Day01~15 - [Python语言基础](./Day01-15) ### Day01~15 - [Python语言基础](./Day01-15)
@ -422,7 +422,9 @@
- 爬取房地产行业数据 - 爬取房地产行业数据
- 爬取二手车交易平台数据 - 爬取二手车交易平台数据
### Day76~90 - [数据处理和机器学习](./Day76-90) ### Day76~90 - [数据分析和机器学习](./Day76-90)
> **温馨提示**数据分析和机器学习的内容在code文件夹中是用jupyter notebook书写的代码和笔记需要先启动jupyter notebook再打开对应的文件进行学习。2020年会持续补充相关文档希望大家持续关注。
#### Day76 - [机器学习基础](./Day76-90/76.机器学习基础.md) #### Day76 - [机器学习基础](./Day76-90/76.机器学习基础.md)
@ -452,7 +454,7 @@
#### Day89 - [Tensorflow实战](./Day76-90/89.Tensorflow实战.md) #### Day89 - [Tensorflow实战](./Day76-90/89.Tensorflow实战.md)
#### Day90 - [推荐系统](./Day76-90/90.推荐系统.md) #### Day90 - [推荐系统实战](./Day76-90/90.推荐系统实战.md)
### Day91~100 - [团队项目开发](./Day91-100) ### Day91~100 - [团队项目开发](./Day91-100)
@ -497,7 +499,7 @@
- 团队的构成和角色 - 团队的构成和角色
> 说明:谢谢付祥英女士绘制了下面这张精美的公司组织架构图。 > 说明:谢谢**付祥英**女士帮助我绘制了下面这张精美的公司组织架构图。
![company_architecture](./res/company_architecture.png) ![company_architecture](./res/company_architecture.png)
@ -578,7 +580,7 @@
3. 使用Docker创建容器Nginx、MySQL、Redis、Gitlab、Jenkins 3. 使用Docker创建容器Nginx、MySQL、Redis、Gitlab、Jenkins
4. 构建Docker镜像Dockerfile的编写和相关指令 4. 构建Docker镜像Dockerfile的编写和相关指令
5. 容器编排Docker-compose 5. 容器编排Docker-compose
6. 集群管理 6. 集群管理Kubernetes
#### 第93天[MySQL性能优化](./Day91-100/93.MySQL性能优化.md) #### 第93天[MySQL性能优化](./Day91-100/93.MySQL性能优化.md)