django面试五
Posted duanlinxiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django面试五相关的知识,希望对你有一定的参考价值。
http和https的区别
https协议需要到ca申请证书,一般免费证书很少,需要交费。
注:CA - certificate authority,身份认证,权威机构认证,CA认证:
http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议
http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
http的连接很简单,是无状态的
HTTPS协议是由SSL(安全套接层)+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全
注:SSL(安全套接层协议):是为网络通信提供安全及数据完整性的一种安全协议。
SSL协议提供的服务主要有:
1.认证用户和服务器,确保数据发送到正确的客户机和服务器;
2.加密数据以防止数据中途被窃取;
3.维护数据的完整性,确保数据在传输过程中不被改变
数据库的调优
1.选择合适的存储引擎:
查询多—> myisam
写操作多—> innodb
2.SQL语句的调优(尽量避免全表扫描,加快数据的检索速度)
1.在select、where、order by 常涉及到的字段上建立索引
2.where子句中不适用!=,否则导致全表扫描
3.尽量避免空值(NULL)判断,否则导致全表扫描
示例:
优化前:select id from t1 where number is null;
优化后:可以在number设置默认值为0,确保number无NULL,查询如下
selecrt id from t1 where number = 0;
4.尽量避免用 or 来连接条件,否则全表扫描
优化前:select id from t1 where id=10 or id=20;
优化后:select id from t1 where id=10
union all
select id from t1 where id=20;
[union all]
…..;
5.模糊查询尽量避免前置%,否则全表扫描
select id from t1 where name like “c%”;
6.尽量避免in 和 not in的使用,否则导致全表扫描
select id from t1 where number in(1,2,3);
对于连续的值,尽量用between and
7.尽量避免使用select * from t1;要用具体的字段名代替*,不用返回用不到的任何字段
cookie和sseion的联系与区别
session原理:
1、session是保存在服务器端,理论上是没有是没有限制,只要你的内存够大
2、浏览器第一次访问服务器时会创建一个session对象并返回一个JSESSIONID=ID的值,
创建一个Cookie对象key为JSSIONID,value为ID的值,将这个Cookie写回浏览器
3、浏览器在第二次访问服务器的时候携带Cookie信息JSESSIONID=ID的值,如果该JSESSIONID的session已经销毁,
那么会重新创建一个新的session再返回一个新的JSESSIONID通过Cookie返回到浏览器
4、针对一个web项目,一个浏览器是共享一个session,就算有两个web项目部署在同一个服务器上,针对两个项目的session是不同的
如:你在tomcat上同时部署了两个web项目,分别是web1、web2。当你在一个浏览器上同时访问web1时创建的session是A1,访问web2时创建的session是A2。
后面你再多次访问web1使用的session还是A1,多次访问web2时使用session就是A2
5、session是基于Cookie技术实现,重启浏览器后再次访问原有的连接依然会创建一个新的session,
因为Cookie在关闭浏览器后就会消失,但是原来服务器的Session还在,只有等到了销毁的时间会自动销毁
6、如果浏览器端禁用了Cookie,那么每次访问都会创建一个新的Session,但是我们可以通过服务器端程序重写URL即可,如果页面多连接多,会增加不必要的工作量,
那可以强制让你用户开启接收Cookie后再让其访问即可。
大白话:当你一次访问服务器的时候,服务器会在内存中开辟一块空间,返回唯一一把打开该空间的钥匙,再把这把钥匙返回到浏览器。
当你第二次访问的时候浏览器会携带这把钥匙到服务器端打开对应的空间,如果该空间已经销毁又重新返回开辟一块新的空间返回新的钥匙到浏览器。
面试:
说说Cookie和Session的区别?
1、Cookie和Session都是会话技术,Cookie是运行在客户端,Session是运行在服务器端。
2、Cookie有大小限制以及浏览器在存cookie的个数也有限制,Session是没有大小限制和服务器的内存大小有关。
3、Cookie有安全隐患,通过拦截或本地文件找得到你的cookie后可以进行攻击。
4、Session是保存在服务器端上会存在一段时间才会消失,如果session过多会增加服务器的压力。
相关状态码
200: OK
301/302/304都表示重定向:
301:表示永久重定向(301 moved permanently),
表示请求的资源分配了新url,以后应使用新url。
302:表示临时性重定向(302 found),
请求的资源临时分配了新url,本次请求暂且使用新url。
304:当前服务器页面与上一次向服务器发起请求的数据一致,
没有变化;
4XX:
客户端的问题;
5XX:
服务器的问题;
tornado与django的区别
Django 与 Tornado 各自的优缺点
Django
优点:
大和全(重量级框架)
自带orm,template,view
需要的功能也可以去找第三方的app
注重高效开发
全自动化的管理后台(只需要使用起ORM,做简单的定义,就能自动生成数据库结构,全功能的管理后台)
session功能
缺点:
template不怎么好用(来自自身的缺点)
数据库用nosql不方便(来自自身的缺点)
如果功能不多,容易臃肿
Tornado
优点:
少而精(轻量级框架)
注重性能优越,速度快
解决高并发(请求处理是基于回调的非阻塞调用)
异步非阻塞
websockets 长连接
内嵌了HTTP服务器
单线程的异步网络程序,默认启动时根据CPU数量运行多个实例;利用CPU多核的优势
自定义模块
缺点:
模板和数据库部分有很多第三方的模块可供选择,这样不利于封装为一个功能模块
总结:
要性能, Tornado 首选;要开发速度,Django 和 Flask 都行,区别是 Flask 把许多功能交给第三方库去完成了,因此 Flask 更为灵活。
tornado由于是单线程异步回调的模式,所以比django的并发要高
django是多线程但是没有做异步,所以要比tornado的并发低
综上所述:
Django适合初学者或者小团队的快速开发,适合做管理类、博客类网站、或者功能十分复杂需求十分多的网站
Tornado适合高度定制,适合访问量大,异步情况多的网站
同步与异步
同步:某一时刻程序执行的序列是确定;pool.apply
异步:某一时刻程序执行的序列是不确定;pool.apply_async
异步: 多任务, 多个任务之间执行没有先后顺序,可以同时运行,执行的先后顺序不会有什么影响,存在的多条运行主线
同步: 多任务,多个任务之间执行的时候要求有先后顺序,必须一个先执行完成之后,另一个才能继续执行, 只有一个主线
同步交互:指发送一个请求,需要等待返回,才能发送下一个请求,有个等待的过程
异步交互:指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待
区别:
一个需要等待,一个不需要等待,在部分情况下,我们的项目开发过程中都会优先选择不需要等待的异步交互方式
哪些情况下建议使用同步交互呢?比如银行的转账系统,对数据库保存操作等等,都会使用同步交互,其他情况都会优先使用异步交互
查看文件的大小
os.path.getsize(file_path)
进程和线程的区别和联系
1.两者都是多任务编程的方式,都能够使用计算机多核
2.进程的创建和删除要比线程消耗更多的计算机资源
3.进程空间独立,数据安全性好,有专门的进程间通信方法
4.线程使用全局变量通信,更加简单,但是往往要与同步互斥机制公用
5.一个进程可以包含多个线程,线程共享进程的资源空间
6.进程线程都有自己特有的资源,如命令,属性,id等
协程的优缺点:
优点:
上下文切换消耗小
方便切换控制流,简化编程模型
高并发,高扩展性,低成本
缺点:
无法利用多核
进行阻塞操作时会阻塞掉整个程序
单纯的协程是没有意义的,只是人为的控制执行一下这个,执行一下那个,如果想监测是否有IO操作,需要结合IO多路复用
Django请求的生命周期
-> URL对应关系(匹配) -> 视图函数 -> 返回用户字符串
-> URL对应关系(匹配) -> 视图函数 -> 打开一个html文件,读取内容
以上是关于django面试五的主要内容,如果未能解决你的问题,请参考以下文章