浅谈一些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。

 

posted @ 2016-09-05 14:37  wangheng1409  阅读(171)  评论(0)    收藏  举报