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文件,读取内容

原文地址:https://www.cnblogs.com/duanlinxiao/p/10540277.html

时间: 2024-10-09 17:27:14

django面试五的相关文章

小白学习django第五站-简易案例

首先在setting.py文件中编写数据库配置内容 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'site', 'USER': 'user', 'PASSWORD': '123456', 'HOST': '127.0.0.1', 'PORT': '3306', } } 之后在app中models.py文件编写模型映射表 from django.db import models # Create

Django基础五之django模型层(一)单表操作

目录 一 ORM简介 二 单表操作 一.创建表 创建模型 2 更多字段和参数 3 settings配置 4.自定义字段(了解) 二.添加表纪录 方式1 方式2(用的多) 方式3:批量插入 三.查询表纪录 查询API(都是重点) 基于双下划线的模糊查询 四.删除表纪录 五.修改表纪录 三 章节作业 1 图书管理系统 2 查询操作练习 四 xxx 本节目录 一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,

Django基础五之django模型层(二)多表操作

目录 一 创建模型 关于db_column和verbose_name 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询(基于join实现的) 进阶练习(连续跨表) 五 聚合查询.分组查询.F查询和Q查询 查询练习 F查询与Q查询 F查询 Q查询 六 ORM执行原生sql语句(了解) 执行原生查询 直接执行自定义SQL 七 Python脚本中调用Django环境(django外部脚本使用models) 八 补充多个app配置models 本节目录 一 创建模型 表和表之间的关系

Web前端面试(五):面向对象

类与实例 类与继承:如何实现继承,继承的几种方式 第一种:借助构造函数实现继承 function Parent1(){   this.name = 'parent1'; } function child1(){    Parent1.call(this); //这句话是执行父级的构造函数,也可以用apply,改变函数运行的上下文   this.type = 'child1'; } new Child1();  缺点:Parent1的prototype上面的属性或者方法是不能被Chlid1继承的,

frist Django app — 五、Test

Test——很重要但是没有被重视起来的一个环节,至少是我自己,其实自己之前在做java web的时候就去尝试过怎么做REST接口的测试,一直没有找到一种合适方式,而且因为时间紧没有进一步深究,但是造成的后果每次做了修改之后都测试不充分,引起新的问题,所以这次对于python正好看看Django的单元测试. 用的是单独的数据库,数据库是干净的(暂未有数据库,test所有操作都是从零开始),不会对正式的数据库造成影响 Test Model 到现在我们主要的业务逻辑代码在model和view里面,所以

django notes 五:Writing models

models 其实也没什么好说的,就是普通的 python 类 settings 中配置数据库连接 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mydb', 'USER': 'root', 'PASSWORD': '', 'HOST': '127.0.0.1', 'PORT': '3306', } } 定义自己的 models class User(models.Model): class M

[Java面试五]Spring总结以及在面试中的一些问题.

1.谈谈你对spring IOC和DI的理解,它们有什么区别? IoC Inverse of Control 反转控制的概念,就是将原本在程序中手动创建UserService对象的控制权,交由Spring框架管理,简单说,就是创建UserService对象控制权被反转到了Spring框架 DI:Dependency Injection 依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件 面试题: IoC 和 DI的区别? IoC 控制反转,指将对象的创建权,反

python 3.5 django 笔记(五)编辑文章

上一会已经使用了超链接功能 这回我们要给博客添加内容了 这是今天的效果图 1. 创建修改页面 在templates/blog下建立edit_page.html <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>Edit Page</title> </head> <body&

Django入门(五) &nbsp; 多级URL和默认URL

django中我们发布app01应用的使用的index.html,首先需要在myjango子目录的urls文件中去编辑url的路由     这种情况适用于应用较少的时候.加入我们不只有app01,后面还有很多很多app的时候.如果将这些路由都写入到子目录mudjango目录下的url就显得非常混乱了.这时使用多级url就是一个比较好的解决方案. 首先再创建一个名字叫app02的应用 在命令行下输入 python manager.py startapp app02 第二步.在template目录下