Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
郑师傅炒板栗
Python-100-Days
提交
302575f5
P
Python-100-Days
项目概览
郑师傅炒板栗
/
Python-100-Days
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Python-100-Days
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
302575f5
编写于
11月 24, 2019
作者:
J
jackfrued
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
更新了项目和面试相关的文档
上级
9022d511
变更
4
展开全部
隐藏空白更改
内联
并排
Showing
4 changed file
with
21 addition
and
18 deletion
+21
-18
Day91-100/100.Python面试题集.md
Day91-100/100.Python面试题集.md
+2
-2
Day91-100/97.电商网站技术要点剖析.md
Day91-100/97.电商网站技术要点剖析.md
+18
-15
番外篇/FTX(租房项目)接口文档.md
番外篇/FTX(租房项目)接口文档.md
+1
-1
番外篇/Python面试题汇总.md
番外篇/Python面试题汇总.md
+0
-0
未找到文件。
Day91-100/100.Python面试题集.md
浏览文件 @
302575f5
...
...
@@ -225,4 +225,4 @@
40.
一个保存整数(int)的数组,除了一个元素出现过1次外,其他元素都出现过两次,请找出这个元素。
41.
有12个外观相同的篮球,其中1个的重要和其他11个的重量不同(有可能轻有可能重),现在有一个天平可以使用,怎样才能通过最少的称重次数找出这颗与众不同的球。
\ No newline at end of file
41.
有12个外观相同的篮球,其中1个的重要和其他11个的重量不同(有可能轻有可能重),现在有一个天平可以使用,怎样才能通过最少的称重次数找出这颗与众不同的球。
\ No newline at end of file
Day91-100/97.电商网站技术要点剖析.md
浏览文件 @
302575f5
...
...
@@ -16,22 +16,20 @@
-
用户(登录(第三方登录)、注册、注销、自服务(个人信息、浏览历史、收货地址、……))
-
商品(分类、列表、详情、搜索、热门搜索、搜索历史、添加到购物车、收藏、关注、……)
-
商品(分类、列表、详情、搜索、热门搜索、搜索历史、添加到购物车、收藏、关注、
评论、
……)
-
购物车(查看、编辑(修改数量、删除商品、清空))
-
订单(提交订单(支付)、历史订单、订单详情、订单评价、……)
2.
管理端
-
核心业务实体的CRUD
-
定时任务(周期性和触发式)
-
报表功能(Excel、PDF、ECharts)
-
权限控制(RBAC)
-
业务流转(Activity、Airflow、Spiff、自定义)
-
三方服务(地图、短信、物流、支付、实名认证、天气、监控、……)
> **提示**:可以通过思维导图来进行需求的整理,思维导图上的每个叶子节点都是不可再拆分的功能,而且都是动词。
-
定时任务(周期性和非周期性,如处理未支付订单、采集数据对异常事件报警、……)
-
报表功能(导入导出Excel、PDF等以及前端ECharts统计图表展示)
-
权限控制(RBAC、白名单、黑名单、……)
-
业务流转(如发起退款流程,常用流程引擎有:Activity、Airflow、Spiff等)
-
三方服务(接入地图、短信、物流、支付、实名认证、天气、监控、云存储、……)
### 物理模型设计
两个概念:SPU(Standard Product Unit)和SKU(Stock Keeping Unit)。
首先要搞清楚
两个概念:SPU(Standard Product Unit)和SKU(Stock Keeping Unit)。
-
SPU:iPhone 6s
-
SKU:iPhone 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
)
。
### 全文检索
...
...
番外篇/
方天下
(租房项目)接口文档.md
→
番外篇/
FTX
(租房项目)接口文档.md
浏览文件 @
302575f5
##
方天下
项目(租房网站)接口文档
##
FTX
项目(租房网站)接口文档
0.
用户登录 -
**POST**
`/api/login/`
...
...
番外篇/Python面试题汇总.md
0 → 100644
浏览文件 @
302575f5
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录