!!! 此资源仅有一小部分内容,不会更新,介意者勿以此资源开会员
Twitter 后端系统 – Python 项目实战 第13期
第一章【视频】先导课程
- 项目的实现目标与涵盖知识体系介绍
a. 项目用到了哪些技术
b. 难度跨度介绍
c. 如何在简历中体现这个项目
1.一个可以放在简历中的该项目模板
2.面试官会针对项目询问什么样的问题,如何应对
- Twitter 后端项目课的重点理论知识点讲解
a. SNS 系统面试必考内容之 Pull & Push 模型分析对比
b. 高性能系统必备消息队列 Message Queue 应用场景
c. 一学就会但十分装逼的技巧:Denormalization 去标准化(冗余存储技术)
- 后续课程安排与介绍
a. 大概需要花多少时间
b. 项目代码量如何
c. 每周的课程安排是怎样的
第二章【互动】必备的 Python 基础知识训练(上)python Basics(Ⅰ)
- 基本语法 Basic Grammar
a.如何 Import
b.字符串 String
c.序列 Sequence
第三章【互动】必备的 Python 基础知识训练(中)python Basics(Ⅱ)
- 基本语法 Basic Grammar
a.列表 List
b.元组 Tuple
c.字典 Dict
d.条件分支 If
e.循环 Loop
第四章【互动】必备的 Python 基础知识训练(下)Python Basics(Ⅲ)
- 函数与类 Function & Class
- 装饰器 Decorator
第五章【互动】必备的数据库基础知识训练 Database
- 表单结构
- SQL 语句增删查改
第六章【互动】Web 基础知识 Web
- HTTP 相关概念,DNS,域名
第七章【互动】Web Framework 介绍及常用 Linux 和 Git 命令
- 前后端与 Web 系统架构总览
- 必备的 Linux 命令行知识
- 必备的代码管理工具 Git 的知识
第八章【视频】视频答疑
视频答疑
第九章【互动】实践课:开发环境搭建与项目初始化 Development environment
- 环境配置和安装
- 实现 Login/Signup API
a.Commit 1: 初始化 Vagrant 开发环境(代码量 141 行)
b.Commit 2: 初始化 Django Project(代码量 219 行)
c.Commit 3: 安装 Django Rest Framework(代码量 56 行)
第十章【互动】实践课:账号系统相关 API 的实现 Account system
- 实现 Login/Signup API
- 实现 Unit Tests
a.Commit 1: 实现 Accounts API – 注册、登录、登出、状态显示(代码量 150 行)
b.Commit 2: 实现 Accounts API 的 Unit Tests(代码量 125行)
第十一章【互动】实践课:Debug 工具安装与 Bug Fix 练习
- 安装 Django Debug Toolbar
- Bug Fix 练习1:异常处理 Exception Traceback
- Bug Fix 练习2:数据库问题 Database Issue
- Bug Fix 练习3:登录问题
第十二章【视频】理论课:初始开发环境搭建、Restful API 与 Unit Tests
- Django Web Backend Framework 的安装与基本概念讲解
- 大厂正规军必备:虚拟开发环境 Vagrant 的安装与使用场景讲解
- MySQL 与 ORM 接入
a. 什么是 ORM
b. 好处和坏处
- 以看到 hello world 为目标跑通开发环境
- 配置 Django Admin,通过 Django Admin 增删查改数据
- 完成 Git 上的第一次提交
- 增加依赖库: Django Rest Framework
a. 什么是 RESTful API,标准是什么
b. Django Rest Framework(DRF) 都做了哪些事情
c. Web Backend API 的代码架构逻辑
- 使用 DRF 实现登陆注册 API
a. session cookie 的原理和机制
- 增加API的单元测试 Unittests
a. 增加 login_status 的 api
b. 为什么 unit tests 如此重要
第十三章【直播】理论课:Django ORM 理论与练习
- Model 的创建与修改
- 什么是 Migrations 如何创建并执行 DB Migrations
- Django ORM 常用类型与配置
a. IntegerField, CharField, DataTimeField
b. choices, auto_now, auto_now_add
c. 专业开发者的编程习惯:常量类 Constant Class
- Django ORM 中表单关系
a. Foreign Key 关系
b. ManyToMany 关系
- Django ORM Queryset
a. 什么是 Queryset
b. Queryset 有些什么样的特点和需要注意的问题
c. Queryset 增删查改练习
- 代码量 100 行
- 答疑串讲
第十四章【互动】实践课:Tweet 模块
- Commit 1: 添加用户后台管理页面 & 实现登录、注册,代码量 200 行
- Commit 2: 为 accounts 添加测试,代码量 200 行
- Commit 3: 添加 Tweet 列表和写 Tweet 功能,代码量 300 行
- Commit 4: 为 tweet 添加测试,代码量 300 行
第十五章【互动】实践课:Friendship 模块
- Commit 1: 添加好友模块的 model, api & test,代码量 600 行
第十六章【互动】实践课:Newsfeed 模块
- Commit 1: 添加新鲜事模块的 model, api & test,代码量 600 行
第十七章【视频】理论课:核心模块 Tweet, Frendship, NewsFeed 的实现
- Tweet Model 的表单设计
- Tweet API 设计
a. DRF 中的 API Response 格式嵌套
b. 什么是联合索引,如何创建,作用是什么
c. 什么是序列化(Serialization)和反序列化(Deserialization)
d. 使用 serializer 返回 list of objects
e. 对不同的 action 使用不同的 permissions check
f. 如何在 serializer 中使用 create 的时候把 request 信息也传进去
- Tweet Api Tests
a. 如何分别测试登录用户和未登录用户
b. 提取公用函数
- 好友关系模块 Friendship Model, API & Tests
a. 存储关注关系
b. 用 related_name 来区分两个同类型的 foreign key,如何做反向查询
c. serializer 中使用 source 来从 model 里取属性
- 信息流模块 Newsfeed Model, API & Tests
a. 代码结构中引入 Service 处理 views 和 models 之间的复杂逻辑
b. N+1 Queries 问题
c. 给自己发newsfeed 是放在 followers 里还是 fanout
第十八章【视频】Tweet 后端核心模块答疑串讲
解答高频问题
第十九章【互动】实践课:评论模块 Comment
- Commit 1: 添加 comment 模块的 model, api & test,代码量 600 行
- Commit 2: comment 模块优化,代码量 300 行
第二十章【互动】实践课:点赞模块 Like
- Commit 1: 添加点赞功能 model, api & test,代码量 500 行
第二十一章【视频】理论课:评论,点赞
- 增加评论的 model, api, tests
a. Comments 的 api 该如何设计?是独立的还是基于 tweet 的?有什么讲究?
b. 使用 DRF 中的 FilterBackends 的实现快速筛选
c. 在获取 tweet 的时候,同时获取 comments 以加速
1. 问:此时是否需要舍弃原本的独立的 comments 获取方法?
d. 实现一个 DRF 中的自定义权限检测
- 进一步优化 Comments
a. 用 decorators 实现丢失参数检测的,优化代码逻辑
b. 在 Tweet 中带上所有的评论信息
c. (配置相关) 如何使用本地配置(local_settings) 文件设置个性化配置而不影响 production 代码库和运行环境
- 增加点赞的 model, api, tests
a. 设计一个通用的点赞类,可以同时记录对 Tweet 的点赞和对 Comment 的点赞
b. 使用 Serializer 的继承关系避免重复代码
c. 在 Model 中定义方法及什么时候可以这么做
第二十二章【互动】实践课:通知模块 Notice
- Commit 1: notifications 配置与通知服务创建,代码量 120 行
- Commit 2: 创建通知 API,代码量 130 行
- Commit 3: 通知更新 API 与单元测试,代码量 100 行
第二十三章【互动】实践课:用户资料模块与 Amazon S3 配置 User Information
- Commit 1: 增加用户资料 Model 与 Admin,代码量 150 行
- Commit 2: Amazon S3 配置
第二十四章【互动】实践课:用户资料模块 API 实现与图像上传模块 Image uploading
- Commit 1: 用户资料 API 支持上传头像与更新昵称,代码量 150 行
- Commit 2: 创建推特图片模型与 Admin,代码量 110 行
- Commit 3: 实现推特上传图片 API,代码量 130行
第二十五章【视频】理论课:通知与图像上传
- 用 django-notification 增加评论点赞关注的消息提醒
a. 如何引入第三方开源代码,在后序维护中需要注意什么问题
b. 基于第三方开源项目自定制 API
c. 使用 Service 类包装复杂逻辑
- 图像上传
a. 增加 UserProfile Model 实现头像,昵称等信息的存储
b. django 的 listener 机制(什么时候用,什么时候不用)
c. OneToOneField
d. Tweet 图像上传
第二十六章【视频】答疑课:通知与图像上传模块答疑串讲
解答高频问题
第二十七章【互动】实践课:好友列表翻页 Friends List
- Commit 1: 好友列表的传统翻页,代码量 200 行
第二十八章【互动】实践课:Timeline 与 NewsFeed 翻页
- Commit 1: 某个用户发的 Tweets 和信息流 Newsfeed 的翻页,代码量 200 行
第二十九章【互动】实践课:接入缓存 Cache
- Commit 1: memcached 的安装与接入,Friendships 缓存,代码量 100 行
- Commit 2: 用户信息 User 表的缓存,代码量 100 行
第三十章【视频】理论课:翻页 Pagination 与缓存 Cache
- 实现 user timeline 和 newsfeed 的翻页 Pagination
a.传统的翻页方法是什么,如何实现
1.DRF 的 pagination 配置
b.如何实现瀑布流的翻页?Endless Pagination
- 通过缓存优化好友关系与用户信息
第三十一章【互动】安装 Redis 和使用介绍 Redis Introduction
- 介绍和安装 Redis
a.关系型数据库的局限性
b.介绍常见的 key value storage 数据库
c.对比 Memcached 和 Redis
d.在项目中配置 Redis 缓存
e.序列化时保留 mirco seccond 精度
第三十二章【互动】使用 Redis 缓存用户推文 Caching Tweets
- 使用 Redis 缓存用户推文
- 获取某个用户的 tweets
- QuerySet 惰性加载
- Redis RPUSH操作
第三十三章【互动】使用 Redis 缓存新鲜事和限制长度 Cache News
- Commit 1: 使用 Redis 缓存新鲜事,代码量 100 行
- Commit 2: 给 list 类型的缓存增加长度限制,代码量 150 行
第三十四章【视频】理论课:使用 Redis 对 Tweets, NewsFeed 进行缓存
- 增加 Cache 来加速 NewsFeed 的访问效率
a.什么是缓存
b.Redis vs Memcached
1.Redis 作为 Cache 的优势和劣势
c.数据库与缓存应该如何配合?
d.什么是 Cache Aside 什么是 Cache Through
第三十五章【视频】视频答疑
视频答疑
第三十六章【互动】Denormalization 优化存储
- Commit 1: 使用冗余存储技术 Denormalization 来优化 likes, comments,代码量 200 行
- Commit 2: 缓存点赞数和评论数,代码量 150 行
第三十七章【互动】Celery 的使用和 fanout 改进
- Commit 1: Celery 的安装与接入,worker 函数的编写,代码量 100 行
- Commit 2: 更加 Robust 的 newsfeed fanout 任务的编写,代码里 100 行
第三十八章【互动】RateLimiter 限流器的使用
- Commit 1: 限流器 RateLimiter 的安装与接入,代码量 100 行
第三十九章【视频】理论课:消息队列 Message Queue 与流器 RateLimiter
- 增加 Message Queue 来实现 fanout
a.什么是消息队列,消息队列有哪些使用场景
b.有哪些知名的消息队列,如何选择,Redis / rabbit MQ
c.Django 接入消息队列的第三方库:Celery
- 增加限流器 Rate Limiter 用于限制恶意访问和减少不必要的数据库操作
a.系统设计高频面试题:Rate Limiter 的原理详解
b.安装 Django RateLimiter 来进行访问频次限制
第四十章【互动】Hbase的介绍与手把手安装 Hbase Introduction
- Commit 1: 在 Django 中实现 Hbase Model 库(上),代码量 300 行
第四十一章【互动】HBase Field 与 Model
- Commit 1: 在 Django 中实现 Hbase Model 库(下),代码量 300 行
第四十二章【互动】扩展知识:分布式数据库 Big Table
- 分布式数据库 Big Table
第四十三章【视频】理论课:NoSQL 数据库的安装与 Hbase的原理简介
理论课:NoSQL 数据库的安装与 Friendship 的 NoSQL 实现
第四十四章【视频】答疑课程
视频答疑
第四十五章【互动】HBase 的单元测试和 HBase ORM
- Commit 1: HBase 单元测试 hbase-testing
- Commit 1: HBase ORM 操作 support-hbase-model-filter
第四十六章【互动】使用 HBase 存储好友关系 Ⅰ Storing Friends(Ⅰ)
- Commit 1: 44-hbase-friendship-serializer-and-gatekeeper
第四十七章【互动】使用 HBase 存储好友关系 Ⅱ Storing Friends(Ⅱ)
- Commit 1: friendship-hbase
第四十八章【视频】理论课:Friendship 的 NoSQL 实现
- 使用 NoSQL 数据库替代核心表单 NewsFeed 实现数据库的分布式
a.如何在不关停服务的情况下完成数据迁移
第四十九章【互动】NewsFeed HBase Model
- NewsFeed HBase Model part1
- NewsFeed HBase Model part2
第五十章【互动】Switch NewsFeed to Hbase
- Switch NewsFeed to Hbase
第五十一章【互动】实践课:云平台部署与 Load Balancer
- 在 AWS / Aliyun 上手动部署代码,通过互联网访问项目
- 了解 WSGI 协议和使用 Gunicorn 多进程模型
- 实战 Nginx ,反向代理和静态代理
第五十二章【视频】理论课:NewsFeeds 的 NoSQL 实现
- 如何将代码部署在 AWS/Aliyun 的服务器上
- 增加 Load Balancer 实现 Web Server 的分布式
a.什么是 Stateless Server 什么是 Stateful Server