更新了项目和面试相关的文档

pull/381/head
jackfrued 2019-11-24 22:05:13 +08:00
parent 9022d51174
commit 302575f558
4 changed files with 1784 additions and 17 deletions

View File

@ -225,4 +225,4 @@
40. 一个保存整数int的数组除了一个元素出现过1次外其他元素都出现过两次请找出这个元素。
41. 有12个外观相同的篮球其中1个的重要和其他11个的重量不同有可能轻有可能重现在有一个天平可以使用怎样才能通过最少的称重次数找出这颗与众不同的球。
41. 有12个外观相同的篮球其中1个的重要和其他11个的重量不同有可能轻有可能重现在有一个天平可以使用怎样才能通过最少的称重次数找出这颗与众不同的球。

View File

@ -16,22 +16,20 @@
- 用户(登录(第三方登录)、注册、注销、自服务(个人信息、浏览历史、收货地址、……))
- 商品(分类、列表、详情、搜索、热门搜索、搜索历史、添加到购物车、收藏、关注、……)
- 商品(分类、列表、详情、搜索、热门搜索、搜索历史、添加到购物车、收藏、关注、评论、……)
- 购物车(查看、编辑(修改数量、删除商品、清空))
- 订单(提交订单(支付)、历史订单、订单详情、订单评价、……)
2. 管理端
- 核心业务实体的CRUD
- 定时任务(周期性和触发式)
- 报表功能Excel、PDF、ECharts
- 权限控制RBAC
- 业务流转Activity、Airflow、Spiff、自定义
- 三方服务(地图、短信、物流、支付、实名认证、天气、监控、……)
> **提示**:可以通过思维导图来进行需求的整理,思维导图上的每个叶子节点都是不可再拆分的功能,而且都是动词。
- 定时任务(周期性和非周期性,如处理未支付订单、采集数据对异常事件报警、……)
- 报表功能导入导出Excel、PDF等以及前端ECharts统计图表展示
- 权限控制RBAC、白名单、黑名单、……
- 业务流转如发起退款流程常用流程引擎有Activity、Airflow、Spiff等
- 三方服务(接入地图、短信、物流、支付、实名认证、天气、监控、云存储、……)
### 物理模型设计
两个概念SPUStandard Product Unit和SKUStock Keeping Unit
首先要搞清楚两个概念SPUStandard Product Unit和SKUStock Keeping Unit
- SPUiPhone 6s
- SKUiPhone 6s 64G 土豪金
@ -40,7 +38,13 @@
### 第三方登录
第三方登录是指利用第三方网站(通常是知名社交网站)的账号进行登录验证,比如国内的 QQ、微博国外的Google、Facebook等第三方登录大部分都是使用[OAuth]()它是一个关于授权的开放网络标准得到了广泛的应用目前通常使用的是2.0版本。关于OAuth的基础知识可以阅读阮一峰老师的[《理解OAuth 2.0》](http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html)。
第三方登录是指利用第三方网站(通常是知名社交网站)的账号进行登录验证(主要是通过知名第三方网站获取到用户相关信息),比如国内的 QQ、微博国外的Google、Facebook等。第三方登录大部分都是使用[OAuth](<https://en.wikipedia.org/wiki/OAuth>)协议,它是一个关于授权的开放网络标准(**数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌,用来代替密码,供第三方应用使用**得到了广泛的应用目前通常使用的是2.0版本。关于OAuth的基础知识可以阅读阮一峰老师的[《理解OAuth 2.0》](http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html)。关于**令牌**和**密码**的区别,我们可以简单总结出以下三点差异:
1. 令牌是短期的,到期会自动失效,用户自己无法修改。密码一般长期有效,用户不修改,就不会发生变化。
2. 令牌可以被数据所有者撤销,会立即失效。以上例而言,屋主可以随时取消快递员的令牌。密码一般不允许被他人撤销。
3. 令牌有权限范围scope比如只能进小区的二号门。对于网络服务来说只读令牌就比读写令牌更安全。密码一般是完整权限。
所以通过令牌既可以让第三方应用获得权限同时又随时可控不会危及系统安全。这就是OAuth协议的优势。
#### OAuth 2.0授权流程
@ -112,8 +116,7 @@ INSTALLED_APPS = [
自定义装饰器实现查询结果的缓存。
```Python
from pickle import dumps
from pickle import loads
from pickle import dumps, loads
from django.core.cache import caches
@ -302,14 +305,14 @@ if alipay.verify(params, params.pop('sign')):
1. 秒杀秒杀是通常意味着要在很短的时间处理极高的并发系统在短时间需要承受平时百倍以上的流量因此秒杀架构是一个比较复杂的问题其核心思路是流量控制和性能优化需要从前端通过JavaScript实现倒计时、避免重复提交和限制频繁刷新到后台各个环节的配合。流量控制主要是限制只有少部分流量进入服务后端毕竟最终只有少部分用户能够秒杀成功同时在物理架构上使用缓存一方面是因为读操作多写操作少另外可以将库存放在Redis中利用DECR原语实现减库存同时也可以利用Redis来进行限流道理跟限制频繁发送手机验证码是一样的和消息队列消息队列最为重要的作用就是“削峰”和“上下游节点解耦合”来进行优化此外还要采用无状态服务设计这样才便于进行水平扩展通过增加设备来为系统扩容
2. 超卖现象比如某商品的库存为1此时用户1和用户2并发购买该商品用户1提交订单后该商品的库存被修改为0而此时用户2并不知道的情况下提交订单该商品的库存再次被修改为-1这就是超卖现象。解决超卖现象有三种常见的思路
- 悲观锁控制:查询商品数量的时候就用`select ... for update`对数据加锁这样的话用户1查询库存时用户2因无法读取库存数量被阻塞直到用户1提交或者回滚了更新库存的操作后才能继续从而解决了超卖问题。但是这种做法对并发访问量很高的商品来说性能太过糟糕实际开发中可以在库存小于某个值时才考虑加锁但是总的来说这种做法不太可取。
- 乐观锁控制:查询商品数量不用加锁,更新库存的时候设定商品数量必须与之前查询数量相同才能更新,否则说明其他事务已经更新了库存,必须重新发出请求。这种做法要求事务隔离级别为可重复读,否则仍然会产生问题。
- 尝试减库存:将上面的查询(`select`)和更新(`update`操作合并为一条SQL操作更新库存的时候在`where`筛选条件中加上`库存>=购买数量`或`库存-购买数量>=0`的条件。
- 乐观锁控制:查询商品数量不用加锁,更新库存的时候设定商品数量必须与之前查询数量相同才能更新,否则说明其他事务已经更新了库存,必须重新发出请求。这种做法要求事务隔离级别为可重复读repeatable read,否则仍然会产生问题。
- 尝试减库存:将上面的查询(`select`)和更新(`update`操作合并为一条SQL操作更新库存的时候在`where`筛选条件中加上`库存>=购买数量`或`库存-购买数量>=0`的条件这种做法要求事务隔离级别为读提交read committed
> 提示:有兴趣的可以自己在知乎上看看关于这类问题的讨论。
### 静态资源管理
静态资源的管理可以自己架设文件服务器或者分布式文件服务器FastDFS但是一般的项目中没有必要这样做而且效果未必是最好的我们建议使用云存储服务来管理网站的静态资源国内外的云服务提供商如亚马逊、阿里云、腾讯云、七牛、LeanCloud、Bmob等都提供了非常优质的云存储服务而且价格也是一般公司可以接受的。可以参考《在阿里云OSS上托管静态网站》一文来完成对网站静态资源的管理代码相关的内容可以参考阿里云的[对象存储 OSS开发人员指南](https://www.alibabacloud.com/zh/support/developer-resources)。
静态资源的管理可以自己架设文件服务器或者分布式文件服务器FastDFS但是一般的项目中没有必要这样做而且效果未必是最好的我们建议使用云存储服务来管理网站的静态资源国内外的云服务提供商如[亚马逊](<https://amazonaws-china.com/cn/>)、[阿里云](<https://www.aliyun.com/product/oss>)、[七牛](<https://www.qiniu.com/products/kodo>)、[LeanCloud](<https://leancloud.cn/storage/>)、[Bmob](<https://www.bmob.cn/cloud>)等都提供了非常优质的云存储服务,而且价格也是一般公司可以接受的,具体的操作可以参考官方文档,例如:阿里云的[对象存储 OSS开发人员指南](https://www.alibabacloud.com/zh/support/developer-resources)。
### 全文检索

View File

@ -1,4 +1,4 @@
## 方天下项目(租房网站)接口文档
## FTX项目(租房网站)接口文档
0. 用户登录 - **POST** `/api/login/`

File diff suppressed because it is too large Load Diff