数据库: B树就是 B-树 B&B+都用到了磁盘块的概念,每块大概4k,利用了磁盘的预读和同一数据块内颇有可能一块儿用到 Redis端口6379前端
事务四大特性(ACID)原子性(不可再分 要么都发生 要么不发生)、一致性、隔离性、持久性node
数据库隔离级别:读取未提交数据=脏读,能够读取其余事务提交的数据 大多数默认级别,不可重复读-MySQL默认,可重读=幻读 InnoDB默认,串行化 读写阻塞。并行依次下降,安全性提升。mysql
innodb和myisam区别:MyIsam-容许没有主键 表锁 不产生死锁 读快 不支持事务操做,外键以及行级锁 保存表行数count直接返回行数 支持全文索引 存储数据文件 索引/数据文件分离 索引文件保存数据地址; InnoDB-没主键或非空惟一索引它会自动生成一个用户不可见的主键 不保存表的行数,count()会遍历整个表,可是加上where俩引擎都同样 不支持全文索引 写较快 并发高 索引和数据一块儿存在表空间-数据记录自己被存于主索引的叶子节点上 行锁,并发高,可能死锁 表数据文件就是主索引-叶节点包含完整数据记录,数据按照主键汇集,因此InnoDB必须有主键,没有也会 自生成长度6字节的 辅助索引先检索主键再根据主键找到数据 设计主键时长度不能过大由于辅助索引都引用主索引,过大引发辅助索引过大 使用单调的字段,非单调在插入新数据时会为了维持其特性而频 繁分裂调整。
后者查询快-叶子节点不保存数据,占用空间小,分布集中。前者相反,因此占用更多扇区,更多IO。插入也是后者快,前者须要检测主键重复,尽量也要按顺序来。linux
查询语句不一样元素(where、jion、limit、group by、having 等等)执行前后顺序:from-join-where-group by-having-select-order bynginx
使用explain优化sql索引:先开启慢日志查询,找到慢的SQL再执行explain。id type(ALL < index < range ~ index_merge < ref < eq_ref < const < system)至少range key ref extra
SQL优化:减小数据请求量 不要* 减小与数据库交互,最好批量操做 用limit 缓存 避免隐式转化致使索引失效 拆分大SQL为小SQL。
索引失效:% 索引列计算 左原则 查询条件有函数 组合索引有null 查询条件中有!=,<>,is null is not null 查询条件字符串不带引号
字段设计优化:必定要根据需求设计,好比varchar char的选择 前者变长但有额外信息 后者固定适合定长字段如UUID 使用简单数据结构-str变数字 IP变整型 列设置not null-索引列须要额外空间保存 时间用TIMESTAMP,DATETIME可读性高空间小 不建议外键约束,影响性能,用业务逻辑约束。主键自增,不宜过大。
索引优化:多列索引比多个单列索引好 在order by where常常搜索 范围搜索上建立索引 主键建立惟一索引 外键创建索引 常常改的/大量重复/记录少不建 限制单表索引数量通常少于5
数据量大以后分库分表:垂直 水平分表 主从复制分库git
数据库的主从复制:binlog 线程(将主服务器上的数据更改写入二进制日志(Binary log)中)、I/O 线程(从主服务器上读取二进制日志,并写入从服务器的中继日志(Relay log))和 SQL 线程(读取中继日志,解析出主服务器已经执行的数据更改并在从服务器中重放(Replay))读写分离:主从服务器负责各自的读和写,极大程度缓解了锁的争用 从服务器可使用 MyISAM,提高查询性能以及节约系统开销github
B+索引数据结构,和B(B-)树的区别:B树是比平衡二叉树多分枝,每一个索引节点都会有Data域。B+树的俩个特色:数据存在叶子结点,叶子结点由指针链接
为何选择B+:由于B树无论是叶子节点仍是非叶子节点都会保存数据,这样在非叶子节点保存的指针数量就会变少,响应的树高就会增大,I/O数就变多,性能变低。web
汇集和非汇集索引:共同点-内部都是B+,高度都是平衡,叶节点存放全部数据。不一样点:叶节点是否存放一整行数据。汇集是按照数据的物理存在划分的,索引的顺序和数据的物理顺序保持一致。
非汇集强调逻辑分类-先去索引表查位置 再去取记录。
主索引:key是主键的索引ajax
数据库三范式,根据某个场景设计数据表(能够经过手绘ER图)第一:列的原子性 即不可再分-也要看需求,必要再分(如地址 若城市查询率很高 则须要再分地址字段为省、城市、县)
第二:必有主键 没有包含在主键中的列必须彻底依赖于主键 第三:非主键列必须直接依赖于主键,不能存在传递依赖redis
MySQL:单进程多线程,分三层:客户端 服务层 存储引擎
MySQL数据库备份:SELECT INTO OUTFILE 这种方法只能导出或导入数据的内容,而不包括表的结构。若表的结构文件损坏,则必须先设法恢复原来表的结构。LOAD DATA…INFILE 恢复数据
MySQL分区:物理分区,逻辑一个表。分类:hash分区-按活跃来 range-适合时间相关
redis和mysql何时同步:读,先读缓存,没有数据则读数据库,而后取出数据后放入缓存同时返回响应。更新,先删除缓存,而后再更新数据库。为何删缓存?懒加载用到再写入缓存。为何先删再更新?若反着来先更新再删除缓存,若删除失败则出现数据不一致,先删后更新,更新失败则访问数据为空
内链接、外链接、交叉链接、笛卡儿积等
死锁:当两个事务都须要得到对方持有的排他锁才能完成事务,致使循环锁等待。关键:两个 (或以上) 的Session加锁的顺序不一致。那么对应的解决死锁问题的关键就是:让不一样的 session 加锁有次序。
InnoDB提供wait-for graph算法,当检测到有向图是否出现环路,回滚一个事务。或kill线程,设置锁超时时间。预防:约定程序读表顺序同样 大事务拆成小事务 下降隔离级别
乐观锁悲观锁:排它锁:写锁,其余事务不可加锁 用法 select 后面加 FOR UPDATE 乐观锁:更新提交才检测 版本号 时间戳
Redis特色:持久化、丰富的数据类型,支持数据的备份即master-slave模式,性能高,操做原子性-MULTI和EXEC指令包起来
Redis数据类型,以及Redis底层实现:string计算;list消息队列 最近浏览;set共同好友;hash zset排行榜
实现:单线程(避免没必要要的上下文切换和竞争条件 不用考虑锁)-多路复用IO模型。由于单线程因此在使用keys查看时会阻塞,如果在线上则不能用keys,用scan,无阻塞取但有重复,去重便可。
Redis缓存穿透/雪崩 穿透-查数据库没有的数据会一直请求,解决:查不到缓存空值或布隆过滤器
雪崩-许多key设置相同时间过时,即同时出现大面积缓存失效去访问数据库,解决:加随机数设置过时时间 加锁或者队列,不让大量线程去请求数据库
缓存预热:系统上线后,将相关数据加载到缓存系统。思路:写一个刷新缓存页面,去请求次数据 数据量不大能够自动加载 定时刷新缓存
如何使用Redis来实现分布式锁:SET NX 是将key的值设为value,当且仅当 key不存在,返回1说明拿到锁 返回0则没拿到;设置超时时间 万一忽然宕机锁没有被释放
Redis的并发竞争问题如何解决:乐观锁,使用redis的命令watch进行监控key值,若exec执行事务时watch的key变了则事务失败
Redis 持久化的几种方式,优缺点是什么,怎么实现的:有AOF优先加载
RDB: SAVE/BGSAVE:前者是阻塞执行,后者是fork一个子进程不影响用户请求 前面是手动保存,通常配置参数:900-1(900秒内改一次则快照) 300-10 60-10000 在Redis中,这个自动保存RDB 的功能是默认开启的。优缺点:适合灾难恢复 大量数据比AOF快 须要避免过多丢失数据不适合快照 若fork子进程去执行,数据多时很占资源
AOF:默认关闭,设置(每秒默认 每一个命令都写 操做系统决定)优缺点:有重写功能 减小冗余命令 比RDB大 执行时大量写入操做,效率低
选择:通常俩者都开 对数据要求不高,只开RDB 不能只开AOF,官方说有BUG,且载入慢比RDB慢。重启优先加载AOF 没有再去加载RDB。
Redis几种模式:主从复制不能用图状,用单链表式
主从复制:实现:输入slave of host port后,从节点保存主节点信息,主从创建socket链接,发送ping命令,权限校验,数据同步便完成创建,后面主持续写命令至从。 第一次时主作bgsave操做,并将后续的修改操做写入内存buffer,完成后把rdb文件复制到从且写入从内存,再将buffer同步到从节点。通常不会用,至少会是哨兵。
哨兵:解决高可用,独立的进程,在监听全部的Redis服务器是否正常运行,若主机宕机,令从机变为主机并经过发布订阅模式通知别的服务器,修改配置文件,让他们切换主机。
哨兵模式分俩部分,一是哨兵系统-不存数据,二是主从节点。配置:sentinel monitor master ip port n(n为master故障几个哨兵赞成才故障转移) 启动:redis-sentinel conf_path
cluster集群/分区/分片:拓展性,数据量大时用。分片:将数据存在多个服务器 分类:范围分片(1-10 10-20)hash分片。
Redis 的数据淘汰策略 6种:已设置过时时间 最近最少使用/将要过时/任意数据 全部数据 最少使用/任意 禁止驱除数据
Redis过时键删除策略:一、定时删除-过时时建立一个定时器二、惰性删除-过时键无论,当再次访问时若过时则删除三、按期删-隔一段时间删除过时键。
Redis在项目中用:settings中配置 from django_redis import get_redis_connection pool = redis.ConnectionPool(host='localhost', port=6379, db=2)
redis_db = redis.Redis(connection_pool=pool)
URL URI区别:URI-统一资源描述符,用来惟一标识一个资源 URL-统一资源定位器,具体的URI,便可以标识该资源还能够定位该资源。URN-统一资源命名
HTTP协议:特色:一、简单快速-只需传方法路径二、灵活-传输的类型由Content-Type控制三、无链接-应答完毕断开四、无状态-指协议对事务没记忆能力,即俩次打开同一个页面无任何联系1.1开始默认长链接
Http的报文结构:Request请求行 请求头部 空行 请求数据 首部-Cache-Control缓存 accept-charset/encoding/language
Http长链接:本质是TCP长短链接。1.1开始默认长链接,设置实在响应头中加Connection:keep-alive,他会有一个保持时间即一次任务完成后链接不断开。长短取舍在于场景,长用在操做频繁 点对点,web网
站通常为短 由于有成千上万个用户 各自都占链接 资源浪费太大
TCP报文结构:序号Seq,确认号Ack,标志位-共6个Ack SYN-新链接标志 FIN-断开链接标志,窗口,指针,数据
TCP握手与挥手:Seq用来标识A到B数据包的序号,Ack确认号 等于Seq+1,SYN创建新链接,FIN断开链接 TIMEWAIT:断开链接时,最后客户端给服务端发送Ack后进入的状态,不直接断开的缘由是
怕服务端没有接受到Ack就会继续给客户端发送以前的信息,正常状况TIMEWAIT会维持往返俩个传输的时间后进入close状态
HTTPs加密原理:数字证书-CA机构颁发的 里面有证书持有人及其密钥信息。数字签名-制做过程:CA对证书明文先hash(私钥加密很慢 hash后为固定长度 传输快)再用私钥加密获得签名,明文和数字签名 共同组成了数字证书。浏览器验证过程:拿到证书获得明文T,数字签名S,用CA机构的公钥对S解密获得S’,用证书里说明的hash算法对明文T进行hash获得 T’,若S’=T’则证书可信。
常见的hash MD5 除了能够加密,因为算法后获得固定的值,如用md5算法hash后能够获得固定的128位的值,这样加密解密就会快不少。
OSI七层网络模型太复杂,TCP/IP概念层经常使用:分为应用层-HTTP FTP SMTP DNS,传输层-TCP/UDP,网络层-IP,网络接口-。IP协议主要解决网络路由和寻址问题,TCP 协议主要解决如何在 IP 层之上可靠的传递数据包,使在网络上的另外一端收到发端发出的全部包,而且顺序与发出顺序一致。
CDN实现原理:基于UDP。选择就近服务器请求资源是由于下面DNS解析时,访问到权威服务器他会就近原则返回就近的IP。总结:经过权威 dns 服务器来实现优质节点的选择,经过缓存来减小源站的压力。
DNS域名解析:本地缓存(浏览器 主机)-运营商DNS(本地local DNS)-域名一次从左往右域名对于www.taobao.com.,先去问负责。的根域名服务器 .com。。。返回ip-localDNS缓存并回复浏览器
cookie和session和token的关系:cookie自动放在每次的http 因此适合存放必须传的数据如身份信息 大小4k 可设置过时expires;session存在服务器,session_id存在cookie,较安全
token和cookie类似 登陆后服务器返回给浏览器 再次访问放到headers中 能够防止攻击,与cookie区别:不会自动添加至headers且攻击者没法访问到token。保证cookie安全设置HttpOnly,js就访问不到。
session为何更安全:第一先要攻破cookie 登陆后cookie才有sessionID 并且加密 第二次访问第一次的就没用了
session是抽象概念,你们把每次的链接成为会话,而cookie是存在header里的。
常见攻击技术:XSS-注入js脚本获取cookie(过滤用户输入的特殊字符 cookie设置httponly)。DDoS:黑客经过向插件注入恶意代码,把你的机子当作傀儡机去不间断的请求另外一个网页, 解决-引入第三方库时在页面写上hash值,若被劫持则与开发者写的hash值不一致。
tcp为何比udp安全:TCP面向链接 三次握手四次挥手 传输中间有确认号 重传机制等多种机制保证数据正确到达。UDP:无链接,只是简单的把数据丢进网络
TCP粘包问题(数据的无边界性):客户端发送的多个数据包被当作一个数据包接收。也称数据的无边界性,read/recv函数不知道数据包的开始或结束标志,由于也没有任何开始或结束标志,只把它们当作连续的数据流来处理。
ajax(Asynchronous JavaScript And XML异步js和XML 这俩个都是语言)原理:获取数据后经过js操做DOM,DOM至关于人体的骨架。
web框架的底层协议:WSGI协议:定义一种server与application如何通讯的规范,主要是解耦,WSGI server 负责从客户端接收请求,将 request 转发给 application,将 application 返回的 response 返回给客户端,WSGI application 接收由 server 转发的 request,处理请求,并将处理结果返回给 server。uWSGI和Gunicorn都是实现了WSGI server协议的服务器,Django,Flask 是实现了 WSGI application 协议的web框架,能够根据项目实际状况搭配使用。Django flask也实现了简单的 WSGI server用于调试,线上必定要用WSGI server。
uwsgi:与WSGI同样是一种通讯协议,是uWSGI服务器的独占协议,用于定义传输信息的类型。
uWSGI:实现了WSGI协议、uwsgi协议、http协议等。属于应用服务器-处理动态资源,另一种web服务器-只处理静态资源http协议 发送静态页面 如nginx
django:生命周期:用户输入URL,浏览器生成请求头请求体发给服务端,若是有nginx,处理后转给后台,通过django的wsgi,到中间件,映射路由表,匹配一条转给视图函数,逻辑处理后返回结果给前端,渲染呈现。
五个中间件:请求进来前-IP拦截,执行views前-修改请求,用render前,view抛异常前,view执行完准备返回前端前-修改。黑白名单,csrf,缓存,判断登陆
FBV-基于函数,url匹配对应函数。CBV-基于类,请求包含url和method,url匹配后走dispatch反射找到类对应的方法执行。
orm:可执行SQL的:extra、raw、自定义SQL。F:操做数据中的某列,如能够给这列值加值。Q:复杂查询,支持& | ~not
django-csrf:全局中间件配置,亦可用装饰器,表单提交时要加入{%csrf%}。django-缓存:settings配置,可视图缓存,中间件所有缓存。
csrf:跨站请求伪造,先访问正常网站A得到A信任,再访问攻击网站B,B可能会在用户不知情下访问A,因为同域名可带上cookie,认证经过请求伪造。解决:一、检测请求来源-referer二、表单中加入token
懒加载:QuerySet被构造,过滤,切片,作为参数传递,都没查询数据库,后面的会:循环,切片,len,list,序列化
HttpResponse-传字符串。render-request、HTML文件、数据参数(字典 显示在前端的模板语言)。redirect(HttpResponseRedirect 相似)-调到指定的URL。reverse-指定处理函数。
路由中的name至关于给URL起个别名,若是用的是name,修改URL也不要紧。
RESTful API设计:全称 资源表现层状态转化。规范:URI不能有动词用名词且是复数 资源具体操做类型用动词 协议用https 版本放入url,也可放入头信息 请求的无状态 资源描述-MIME 多级缓存:从浏览器(私有共有都有)-代理服务器-缓存服务器-应用服务器。如:https://developer.github.com/v3/pulls/reviews/ https://developer.linkedin.com/zh-cn/docs/rest-api
幂等性:其任意屡次执行对资源自己所产生的影响均与一次执行的影响相同-主要是对系统内部(如System.getCPULoad(),返回值虽不同,但幂等),不考虑网络。用在支付/交易-订单只能是一个,支付只能扣一次钱。注:patch不是幂等,http是。幂等承诺只要调用接口成功,外部屡次调用对系统
Zookeeper:分布式协调服务。由于是在内存中,so每一个节点最大存储1M。持久节点和临时节点
项目中做用:做为服务生产者和服务消费者的注册中心,去config写,执行返回至output。提供了文件系统和通知机制。
zookeeper原理和适用场景:其实只有俩个功能:一、读写二、watch。数据存在内存中,因此高吞吐量和低延迟。主备模式:Leader-发起投票更新系统状态、Follower-参与投票和Observer-拓展系统 提升读取速度,过半写成功策略
zookeeper watch机制
redis/zk节点宕机如何处理
消息中间件是如何实现的,技术难点有哪些:做用-应用解耦,异步消息,流量削锋。
celery:任务生产者,交给任务队列处理 任务调度器-独立进程,自带的任务生产者,读取配置文件 任务代理-做为消息队列,可为Redis 任务消费者-
堆 栈
硬连接和软链接区别:Linux里文件分为用户数据(即文件数据块,记录真实数据)和元数据(文件附加属性 大小 建立者 时间),元数据中的i-node号才是文件的惟一标识而非文件名,因此文件打开顺序是
filename=>i-node=>data block。若一个inode对应多个文件名,则这些文件称为硬连接,换言之硬连接就是同一个文件使用了多个别名,特色:文件有相同的inode data block,只能对已存在的文件建立,不
可对目录建立,删除一个不会影响别的。若文件用户数据块中存放的内容是另外一文件的路径名的指向,则该文件是软链接,软链接是一个数据块特殊的普通文件。特色:它有本身的inode 文件属性 权限等,可
对不存在的文件和目录建立,删除软链接不影响被指向的文件,但删除源文件,则这些连接称为死连接。
发现磁盘空间不够,如何快速找出占用空间最大的文件? du -sh:当前目录大小 du –max-depth=1 -h: find . -type f -size +100M
文件描述符表:内核为每一个进程维护一个,表中记录单个文件描述符的相关信息,包括:控制标志-目前内核仅定义了一个close-on-exec 打开文件描述指针-指向打开文件表的地址。
打开文件表:全称打开文件描述表,表中条目为打开文件描述体,存储与一个文件打开的所有信息。包括:文件偏移量-调用read/write更新 访问模式-只读只写或读写追加覆盖 i-node-对象指针
i-node表:每一个文件系统会为存储于其上的全部文件/目录维护一个i-node表,表中包括:文件类型-常规文件、目录、套接字 时间戳-建立更新时间等 访问权限 文件锁列表 文件大小等等
同步异步:指代码调用IO操做时,必须等待or没必要等待操做完成才返回的调用方式。异步须要多线程、多CPU或非阻塞IO支持。同步IO必然是阻塞IO,异步IO必然是非阻塞IO。
阻塞非阻塞:指调用线程进程会不会被操做系统挂起。
总结:同步异步关注消息通讯机制-同步主动等待调用结果并本身写读写数据,异步是调用发起后就返回,且没结果,有结果后经过回调函数来处理这个调用,由操做系统本身来读写数据。阻塞非阻塞关注程序在等待调用结果时的状态-阻塞是在获得结果前当前线程会被挂起,非阻塞在没获得结果前不会阻塞当前线程(但会时不时的check是否有结果返回)。
阻塞非阻塞是从线程角度看的-请求不能当即回答且要等待就是阻塞,不然是非阻塞。同步异步表示一种协做方式或者是进程之间的合做方式,按甲方请求一次乙方应答一次属于同步(同步IO中对同一个描述符的操做必须是有序的)。而甲方有须要就请求无论上次乙方是否应答,即请求应答不须要一致进行,这种是异步。同步是线性的,异步是并发的。
同步异步&阻塞非阻塞属于俩个范畴,异步不分阻塞非阻塞
响应时间:一个请求从开始到结束的时间。吞吐量:单位时间内系统能处理的请求数量,经常使用性能指标。QPS-每秒查询数,QPS = 并发数 / 平均响应时间。 TPS-每秒事务数 吞吐量经常使用指标 HPS-每秒HTTP数
kill用法,某个进程杀不掉的缘由(进入内核态,忽略kill信号)
linux命令:scp-远程拷贝文件 scp 文件名 帐号@remote_ip:目标路径,完毕须要输入密码。> & >>:覆盖&追加写入。抓包-tcpdump -i echo host and port网卡。Windows findstr=prep。
top看CPU free看内存。find 路径 -name/size/ 。tar xvf解包 cvf打包。history | grep zk-查看关于zk的历史命令。chmod 777 file_name文件主 其余 组成员。netstat -ano | grep port-查看端口占用。
cat xxx|less;ps -ef|grep zk kill-9。make 编译 make install-安装编译好的源码包。sudu apt-get install yum -y install/update。df -h磁盘剩余。tab 补全命令。
if test `find path -size -3k`; then cat path; else echo 'file too big' ; fi:if 要对应 fi,test检测某个条件是否成立。
Linux上查看日志:less:比more强大 能够向前翻页 Shift+G到达文件底部 再经过?+关键字的方式来根据关键来搜索信息 grep的方式查关键字
vim:u撤回 Ctrl+r恢复撤销 删除文本:x dd 5dd 复制粘贴:yy。tail -f。awk:grep出来 +这个选择列数 重定向到一个文本。free -h 。 curl 能够get post。
crontab:能够定时执行一个脚本,若是逻辑简单,可直接写入任务(-e 写入 -l 列出当前任务 -r 终止任务)
git:工做区 暂存区 本地仓库 远程仓库。git pull = fetch(下载远程仓库的变更至本地仓库)+merge(合并制定分支至当前分支)。git branch新建 -b新建并切换至该分支。status log。
git rebase:替代merge的操做,对多个commit合并,减小分支合并的记录。git reset-修改.git里的东西。
IO多路复用:select-在一个进程打开的FD有限,默认2048,去轮询每一个FD是否准备好。epoll-FD没限制,采起事件的通知机制,一旦某个FD好了内核采起callback的机制。
布隆过滤器:一个很长的二进制向量和一系列随机映射函数 用于检索一个元素是否在一个集合中 优势是空间效率和查询时间都比通常的算法要好的多,缺点是有必定的误识别率和删除困难(hash碰撞 能够屡次hash减小碰撞)。
正向代理(客户端代理)和反向代理(服务器端代理)
nginx:一、静态代理二、负载均衡:轮询 加权轮询-服务器性能不一 ip_hash(IP不变 每次都由一个机器处理) 随机 最小链接法(动态选择当前链接最少的处理) ***Sticky:session粘滞(分发和识别cookie 让同一个机器处理请求 默认标识名为route 须要增长nginx-sticky-module模块 设置:upstream字典里设置 sticky [name=route][domain=.foo.bar][path=/][expires=1h][hash=index|md5|sha1][no_fallback][secure] [httponly];)
三、限流:参数设置请求每秒不超过100个四、缓存:浏览器静态资源用expire 代理层缓存 五、黑白名单
原理:接受到一个http请求根据配置映射到响应模块。HTTP Request=>nginx core=>handler负责处理请求 生成相应内容=>filter1处理相应内容=>filter2=>n=>HTTP response
docker:一层一层的被封装,镜像(只可读)是初始,加一层变容器(最上一层可读可写),再加进程隔离空间。docker仓库是存放镜像的 docker run = create+start 至关于git pull = fetch+merge
什么是守护线程?有什么用?
上下文切换是什么含义:上下文管理器-含有__enter__和__exit__方法的对象
负载均衡为何用到redis master和worker属于负载均衡?
gc垃圾处理:一、引用计数 会引发循环引用 so产生下面俩个方法:一、标记清除算法:用图论理解不可达理论二、分代收集
多线程、多进程、协程
threading.Thread(target=):方法:在线程开始(thread.start())以前,调用setDeamon(True)函数,设定线程的daemon标志,代表该线程不重要,主线程退出它就退出。start()开始线程活动 run()调用target join()等待,直到线程终结。
经常使用魔法方法:call-对象可call, init-对象实例化先new再init new-对象的建立,必须有返回值,返回实例化出的实例,通常调用object.new
Python dict:hash算法实现,会留三分之一空的,多了则扩容。若hash碰撞,Python采起开放寻址法(用不一样的hash从新计算)即空间换时间 或者是一个链表,直到找到的key是须要的
hash算法:俩条件:对于输入的值会有固定长度输出 不一样的输入可能输出同样
Python sort是在原位置排序 sorted是返回一个新列表,对原列表无影响
计算机英文单词准备,django https://blog.csdn.net/hairetz/article/details/4141043
PostgreSQL:相比较MySQL,没那么多坑,后者对text有限制,前者text都能存,后者可重复读隔离级别不能阻止并发还须要加锁,前者有隐藏的乐观锁version。前者数据类型丰富,可用字典、数组。scrapy numpy pandas