更加了解自己的性格评价,沉稳,犹豫,行动胜于语言,大局观。
面试的遇到主要问题:
1、已有的管理经验回答不好
2、原来项目的经历特点没有整理好,主要准备和总结的都是python和django方面的
比如:协议是同时建立64ktcp或者udp之上的协议,协议用到的保活定时器状态机,tcp拆包循环发包反复建联,和服务器处理并发性能,都没有提到。
3、学习能力没有完全展现出来
自学django,英文文档,不断总结,并尽量深入背后的原理
4、缺乏数据库大量数据操作方面的知识和高并发场景的解决方案
1、各种缓存,页面缓存,数据库缓存(http头部添加一个失效期,内容压缩,gzip)(***)
2、反向代理缓存,nginx是多线程,因为tornado单线程异步网络程序 和django同步的
3、优化数据库请求时间,实在费时的要改成异步的(***)
4、html静态化,信息发布系统cms,将频繁使用的数据库查询但是内容更新很小的应用,可以考虑使用html静态化来实现。(***)
5、图片服务器分离
6、数据库集群-mysql的主从服务器和库表散列(不同模块使用不同的数据库或者表,按照一定策略对某个页面或者功能更小的数据库散列)***
2.0极少概率bug解决办法:
1、实时debug模式调试和debug log,异步和多线程下可能没有效果,因为它无法显示全部流程的栈信息。
2、如何重现bug
3、构造高并发压力测试系统,分析架构本身可能存在的缺陷
4、构造稳定的异常请求
4.3数据库操作补充:
use database
show tables;
inner join,left jion(左表不匹配的也显示),right join
自关联
关系存储 --自关联和外键语法一样
1、创建时候指定外键 foreign key(stuid) references students(id);
2、alter table x add constrai consname
子查询
自关联查询
create view v_classify as
select cla2.* from classify as cla1
inner join classify as cla2
on cla2.claid=cla1.id
where cla1.name = '家电'
使用视图
select * from v_classify
视图:封装查询命令,方便重复使用
级联操作:一个表删除,另一个表对应引用会删除或者置为空
建立索引:
分析哪些where查询字段慢,对这些字段建立索引
单列索引,多列索引
越小的数据,整形的数据,避免用NULL(所有NULL列都难以查询优化)
where逻辑中,等值优于范围(范围没法索引),or运算符也会阻断索引
建立方法:create index indexname on table(username(length),age)
缺点:其他操作会额外维护索引速度,占用更多硬盘
4.4
1,可以将页面做成静态,动态的部分用ajax异步来获取资源
2、
from django.template import loader
import codecs
outcontent = loader.render_to_string(htmlfilename,{})
outname=htmlfilename+'.static'
outputfile = codes.open(outname,'w','utf-8')
outputfile.write(outcontent)
outputfile.close()
#如果不存在静态文件则生成静态文件,存在则直接返回
这种方式和页面缓存好相似
4.6
水平分割(库表散列)
将数据按照key散列(mod)到不同数据库节点上面,(缺点扩容困难,因为新的散列方法会对原来方式有冲突),像月份这种不需要扩容的好使
垂直分割
将数据列分为常用列和不常用列,分开时候放相同主键。(优点io快,利用cache效率更高,缺点增加jion操作)