1 高级解包操作 a,b,*rr = range(10)
2 KeyWord only arguments 限定关键字参数
3 Chained expections 抛出异常不丢失栈信息
4 一切返回迭代器 range map zip dict.values
5 yield from 链接子生成器
6 aysncio内置库 async/await 原生协程支持异步编程
7 新的内置库enum mock asyncio ipaddress concurrent.futures等
8 可变对象(bool/int/float/tuple/str/frozenset)不可变对象(list/set/dict)
9 位置参数和关键字参数
10 Cpython GIL(Global Interpreter Lock)
Cpython解释器的内存管理并不是线程安全;
保护多线程情况下对Python对象的访问;
使用简单的锁机制避免多个线程同时执行字节码;
11 区分CPU和IO密集程序
CPU密集可用多进程+线程池
IO密集使用多线程/协程
cython扩展器(不是cpython)
12 服务的优化措施
数据结构与算法优化
数据库层:索引优化/慢查询消除/批量操作减少IO/NoSQL
网络IO:批量操作/pipline操作减少IO
缓存:内存数据库 redis/memcached
异步:asyncio/celery
并发:gevent/多线程
13 生成器Generator
生成值的函数;
函数有yield即成生成器函数;
生成器可挂起执行并保持当前执行状态
基于生成器的协程:
通过yield暂停执行和产出数据;
同时支持send()向生成器发送数据和throw()向生成器抛出异常
协程装饰器(避免每次用send(None)启动)
python3.5引入async/await支持原生协程(native coroutine )
14 网络IO中的pipeline 例子
15 collection模块的数据结构和底层原理:
deque实现queue和stack结构;
counter-计数器;
OrderedDict-有序的字典;
defaultdict-带有默认值的字典;
16 哈希冲突和扩容;
dict支持快速查找使用哈希表作为底层结构;
平均查找时间复杂度O(1);
CPython解释器使用二次探查解决哈希冲突问题;
17 LRUCache的实现原理(4.1)
18 算法常考:
冒泡/快速/归并/堆排序(heapq);
线性查找/二分查找;
19 数据结构常考:
链表/队列/栈/二叉树/堆(用代码实现);
用内置结构实现高级数据结构,内置的list/deque实现栈;
Leetcode或剑指offer的常见题;
20 链表:删除/增加结点、合并两个有序链表
21 二叉树:镜像/层序遍历
22 栈与队列:用栈实现队列/用python的list或deque实现栈和队列
23 堆(完全二叉树):合并多个有序数组或链表;TopK问题;
24 字符串:翻转字符串/判断数字是否是回文数
25 反转单链表(循环/递归)
26 OOP
组合&继承;类变量&实例变量;classmethod & staticmethod
元类(meta class)创造类,类创造实例;
27 装饰器
28 创建型设计模式
工厂模式(Factory):解决对象创建问题
构造模式(Builder):控制复杂对象的创建
原型模式(Prototype):通过原型的克隆创建新的实例
单例模式(Borg/Singleton):一个类只能创建一个对象
对象池模式(Pool):预先分配同一类型的一组实例
惰性计算模式(Lazy Evaluation):延迟计算(property)
29 结构型设计模式
装饰器模式(Decorator):无需子类化扩展对象功能
代理模式(Proxy):把一个对象的操作代理到另一个对象----组合
适配器模式(Adapter):通过间接层适配统一的接口---待练习
外观模式(Facade):简化复杂对象的访问问题
享元模式(Flyweight):通过对象复用池改善资源利用,如连接池
Model-View-Controller(MVC):解耦展示逻辑和业务逻辑
30 学习行为型设计模式
迭代器模式(Iterator):通过统一的接口迭代对象(next和iter)
观察者模式(Observer):对象发生改变时,观察者执行相应动作(回调)
策略模式(Strategy):针对不同规模输入使用不同的策略
31 函数式编程
map/reduce/filter;
闭包:绑定外部作用域的变量的函数,每次运行外部函数会重新创建闭包,即使程序离开外部作用域,如果闭包仍可见,绑定变量不会销毁;
32 文件/目录操作命令
chown/chmod/chgrp;
ls/rm/cd/cp/mv/touch/rename/ln(软链接和硬链接)等;
locate/find/grep定位查找和搜索;
编辑器vi/nano;
查看文件cat/head/tail;
交互式查看文件more/less;
33 网络操作命令
ifconfig查看网卡信息
lsof/netstat查看端口信息
ssh/scp远程登录/复制
tcpdump抓包
注意:
kill执行原理
free内存泄漏
34 线程同步&线程安全
互斥量(锁):互斥机制防止多个线程同时访问公共变量;
信号量(Semphare):控制同一时刻多个线程访问同一个资源的线程数;
事件(信号):通过通知的方式保持多个线程同步;
35 进程通信IPC(Inter-Process Communication)
管道/匿名管道/有名管道(pipe);
信号(signal);
消息队列(Message);
共享内存(share memory);
信号量(Semaphore);
套接字(Socket):最常用,web应用;
36 python使用多进程
GIL,CPU密集程序;
multiprocessing多进程模块;
37 操作系统内存管理机制
分页机制:逻辑地址划分为固定大小的页(Page),物理地址划分为同样大小的帧(Frame),通过页表对应逻辑地址和物理地址;
分段机制:数据共享与保护/动态链接;段内部连续分配,段和段之间是离散分配;
38 垃圾回收机制原理
引用计数为主(缺点:循环引用无法解决);
引入标记清除和分代回收解决引用计数的问题;
引用计数为主+标记清除和分代回收为辅;
40 浏览器输入url中间经历的过程
DNS查询;TCP握手;HTTP请求;反向代理nginx;uwsgi/gunicom;web app响应(flask/tornado);TCP挥手;
41 HTTP/TCP/网络编程
42 并发编程IO多路复用
操作系统提供的同时监听多个socket的机制;
python3的selectors模块;
43 python并发网络库
Tornado框架:
底层基于Linux多路复用;
通过协程或回调实现异步编程;
Gevent:
基于轻量级绿色线程(greenlet)实现并发;
monkey patch 修改socket为非阻塞;
配合gunicorn和gevent部署作为wsgi server;
《gevent程序员指南》
Asyncio:
基于协程实现的内置并发网络库;
协程+事件循环;
44 练习题:异步爬虫
45 WSGI和常见web框架
什么是WSGI,经常用uwsgi/gunicorn部署Django/flask应用;
Django/Flask/Tornado对比;
web框架的组成:
中间件,用于请求前和请求后的处理(如,日志记录);
路由,表单验证,权限认证,ORM,视图函数,模板渲染,序列化;
第三方插件:Redis连接,RESTful支持等;
46 什么是Gunicorn
Python WSGI HTTP Server;
纯python编写的高性能的WSGI Server;
pre-fork预先分配多个worker进程处理请求(master-slave);
多种worker支持:Sync/Async(Gevent)/Tornado/AsyncIO;
47 系统设计:
定义系统架构、模块、接口和数据满足特定需求的过程;
如短网址服务、评论服务、Feed流服务、抢红包服务;
微服务架构按照业务拆分,需要单独设计一个系统服务;
48 后端技术组件:
消息队列、缓存、数据库、框架;
49 系统设计三大要素:
使用场景和限制条件:使用场景、用户量、并发qps(峰值qps和平均qps);
数据存储设计:设计数据表/字段/类型/数据增长速度,数据库选型(关系型或NoSQL),优化/索引/缓存;
算法模块设计:接口设计、使用算法/模型,不同实现方式的优劣对比;
延伸考点:扩展、容错;
网友评论