浅谈一些python问题的个人理解
1.Python 的 GIL
GIL即全局解释器锁,是实现cpython解释器引入的,主要是限制同一时间只能有一个线程被cpu调用,这样的好处是程序员不需要关注并发的情况,缺点是不能够充分利用多核cpu。
2.http协议
用户输入url——dns服务器进行域名解析——进行tcp/ip连接,发送真正的url
http协议是一个协议,一个规定,它是7层协议的最后一层,携带请求头,包含ip,用户电脑物理地址等发送给下一层。
比如用户输入一个带http的url,即告诉我们该url必须用http协议去解释,紧跟着的是用户的电脑域名+可以映射到资源的url,http所支持的get、post、put、delate 、options、had等动词构成了一个通用的协议,可以支持广泛的解决方案。http也定义了一个响应码集合用来协调动词所引起的交互。
3.全文索引
全文索引fulltext,当用户创建全文索引,系统会创建全文索引表,根据分词划分,当用户搜索时,实际上搜索的是关键字(关键字中不包含is 等无意义分词)
4.依赖注入
比如有很多类,一个类作为入口,另外一个类作为出口,当调用第一个类时,需要传入第二个类的对象,最终需要传入最后一个类的对象,就这样环环相扣。
5.restful
一个资源对应一个url,里面可以进行增删改查
6. Python如何进行热加载?热加载的意义在哪里?适用于哪些场景?
场景:启动时间很长的游戏,不需要重启服务器就可以编辑和调试,即热更新是为了运营期的 "fix online"/在线修复。
方法:python的reload模块,
- 把 reload 时生成的新对象替换掉同名旧对象;无法删除旧对象。
- reload(m)后,用 from m import obj 方式导入的 obj 仍然指向旧的 obj。
- reload(m)后,class 及其派生 class 的实例对象,仍然使用旧的 class 定义。
7.动态加载

8.mysql分页:
稍微提高一点的:select name from tb1 order by id limit 100000,10
改进:select name from tb1 where id>=(select id from tb1 order by id limit 100000,1) limit 10
9.支持大并发
物理架构:
集群(多个服务器分担任务,数据库专用服务器,静态文件专用服务器,读写分离服务器)——集群调度器(分担任务,并实时通信,检测有没有调度器down掉,立即接管该调度器任务)——不同区域建机房——每个省建cdn(缓存服务器)(首次取数据慢,直接去总部机房取数据,第二次如果有数据,直接取本地copy的数据)
软件架构:
消息推送:
一条消息推送给2000w用户:
存储:只存储一份,其他传引用
只推送给活跃用户:检测用户最近是否登陆,如果登陆,在缓存中写入,设置超时时间,如果用户有key值,则推送
用户发布消息,自己立即可见:
入库动作推迟,先放入队列,并返回给用户消息发送成功。
设计模式:
1.单例模式:限制全局只有一个实例。
2.观察者模式:当一个类收到通知,他所依赖的其他类也能收到通知
3.备忘录模式:对实例做快照
4.代理模式:一个对象为另外一个对象提供代理
5.策略模式:将逻辑封装到一个类,通过委托的方式解决。
6.模板方法模式:在父类中定义公共方法,可变方法在子类中。
7.组合模式:降低不同类之间的耦合。
8.责任链模式:下一个责任者对象以参数形式传入当前责任者。
9.外观模式:复杂接口通过简单接口组合实现。
10.装饰器模式:方法前加装饰器。
11.享元模式:对重复的东西,内存中只保存一次,不同引用指向同一个id。

浙公网安备 33010602011771号