魔法属性与魔法方法
强烈建议阅读python魔术方法指南:
https://pyzh.readthedocs.io/en/latest/python-magic-methods-guide.html
魔术属性和魔法方法:
- __dict __ / __doc __ / __module __ / __class __ / __stots __
- 两阶段构造:__new __ / __init __
- 运算符重载:__lt __ / __ge __ / __add __ / __getitem __
- 可调用对象: __call __
- 深拷贝和浅拷贝:__copy __ / __deepcopy __
上下文管理器:__enter __ / __exit __
MRO(方法解析顺序)问题
- 新式类:C3算法 (类似广度优先)
- 旧式类:深度优先搜索
- 类的mro()方法
示例 :在python3中求最后的运行结果
元类:
class SingletonMeta(type):
def __init__(cls, *args, **kwargs):
# args是一个三元组
# 第一个元素是元类创建的类
# 第二个参数是要创建的类的父类(元组)
# 第三个参数是要创建的类的所有属性(字典)
cls._instance = None
super().__init__(*args, **kwargs)
def __call__(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = super().__call__(*args, **kwargs)
return cls._instance
class Boss(object, metaclass=SingletonMeta):
def __init__(self, name, sex):
self.name = name
self.sex = sex
def __str__(self):
return f"老板信息:{self.name},{self.sex}"
b1 = Boss("叔本华", "男")
b2 = Boss("天问一号", "男")
print(b1, b2)
典型互联网公司架构
软件开发过程模型
瀑布模型
敏捷开发
敏捷闭环工具:禅道
代码管理流程
Github-flow流程
git clone xxx.git # 克隆仓库及所有之前的版本提交信息
git clone --depth=1 xxx.git # 只克隆最新一版的仓库
git clone xxx.git aaa # 克隆仓库并在本地改为aaa的名字
git long # 查看git日志(需进入到.git目录下)
git branch aaa # 创建aaa的分支
git branch # 查看分支
git branch -a # 查看所有分支,包括远端
git switch -c bbb # 创建并切换到bbb分支
git switch aaa # 切换到aaa的分支
git status # 工作区、暂存区、本地的版本仓库是否同步
git add xxx.py # 将xxx.py 加入到暂存区
git restore --staged xxx.py # 从暂存区取出
git commit -m "提交信息:完成了某项功能" # 从暂存区加入到本地版本仓库中
git remote # 查看远程仓库
git remote -v # 查看远程仓库信息
git push -u origin aaa:aba # 将本地aaa分支推到服务器中并改名为aba
# 完成到一定程度后,在服务器中请求合并分支,由代码审查人员审定通过
git checkout master # 在本地切回master分支
git branch -d aaa # 删除已在服务器合并的本地aaa分支
git branch -D aaa # 强制删除已在服务器合并的本地aaa分支
git pull # 将服务器代码更新到本地
git pull origin master # 将服务器master分支合并到本地分支
# CONFLICT 冲突
git diff # 查看冲突文件 协商解决
# 协商解决好后,在push到服务器,请求合并
Git-flow流程
可参见:
由于这套流程相对复杂,强烈建议使用SmartGit / SourceTree这些工具进行版本管理开发。
补充:git merge
与 git rebase
的区别
git rebase
相比git merge
在合并代码时结构更清晰
git rebase master # 变基到master
git switch master
git merge dev # 合并dev (--no-ff 不要快速合并,有利于保留历史信息 这里不需要加)
#git pull = git fetch + git merge 拉取再合并
git stash # 将当前未完成的分支工作进行临时存放到栈中 (git status 为空)
git stash list # 查看栈中临时存放的任务
git stash pop # 弹出之前临时存放的分支工作 (git status重新为红色)
最佳git教程电子版在线阅读:pro git
代码优化
代码结构优化
代码中的坏味道:
- 重复代码
- 长方法
- 巨型类
- 长参数
- 继承滥用
代码性能优化
排序算法可参考:排序算法详解
查找算法可参考:常见快速查找算法图解
第三方剖析工具:
- line_profiler:在需要剖析的函数加上装饰器
@profile
,运行kernprof -lv test.py
,可分析出该函数每行的执行时间 - memory_profiler:在需要剖析的函数加上装饰器
@profile
,运行python3 -m memory_profiler test.py
,可分析出该函数每行的内存占用情况
并发编程
内容太多,暂时略过
代码安全
项目架构
业务架构:
项目整体介绍,交代具体模块划分,项目目前的运营状况,用户群体,每日PV、UV、独立IP等。
技术架构:
- 前端核心技术:Vue.js / React / Uni-App / ReactNative / Flutter / Electron
- 后端核心框架:Django / Flask / Tornado / Sanic / FastAPI
- djangorestframework / django-filter / drf-extensions
- django-redis / pillow /reportlab / xlrd / xlwt
- celery / apscheduler / pyjwt
- pycrypto / itsdangerous
- 持久化(关系型数据库):MySQL / PostagreSQL / Oracle / TiDB
- 缓存:Memcached / Redis
- 消息队列:Redis / RabbitMQ / Kafka
- 任务异步化(削峰)
- 上下游解耦合
- 搜索引擎:实现全文检索 - ElasticSearch / Solr / Whoosh+jieba
- 倒排索引
- 中文分词(ik-analysis、smartch) / 拼音分词(pinyin)
- 静态资源:
- 文件服务器 / 分布式文件系统 - FastDFS
- 云存储(资源管理、CDN) AWS / OSS / Qiniu / Bmob
- 三方服务
- 短信邮件:云片、螺丝帽、SendCloud
- 监控:云监控 / Nagios / Zabbix
- 登录:微博 / 微信 / QQ / 推特 / 脸书 / Goodle
- 支付:支付宝 / 微信 / 银联 / ApplePay / 翼支付
- 支付集成:Ping++
物理架构:
- 云服务器:VPC(内网)/ 跳板机(SSH)/ 反向代理(Nginx / 邮件服务器 / 静态资源)
- Nginx / LVS / Squid / Vanish
- 硬件采购:刀片服务器 / 电信机房(数据中心)托管
web应用工作流程: