Python面试Web篇(附答案)

*爱你&永不变心* 提交于 2020-03-02 11:56:58

必答题

注意:除第四题4分以外,其他题均每题3分。

1,写出常用的bootstrap的样式。

引入jquery.js文件
栅格系统:<div class="col-md-1>1</div>
表格样式:table
表单样式:.form-control来修饰
支持多行文本的文本域:<textarea class="form-control" rows="3"></textarea>
单选框和多选框
按钮:button
图片:img

2,什么是响应式布局?

跟随设备界面大小自动更改内容大小

3,请通过jQuery发送ajax请求。

$.ajax({
type:请求方式,
url: 请求地址,
data:请求参数,
dataType: 服务器返回值类型,
success:回调函数
});

4,JavaScript与this相关的面试题(4分)

name = '老男孩';
​
info = {
    name:'alex',
    age:123,
    func:function(){
        console.log(this.name);
    }
}
​
info.func() 

 

name = '老男孩';

info = {
    name:'alex',
    age:123,
    func:function(){
        console.log(this.name);
        function f1(){
            console.log(this.name);
        }
        f1()
    }
}

info.func() 

 

name = '老男孩';

info = {
    name:'alex',
    age:123,
    func:function(){
        console.log(this.name);
        (function(){
            console.log(this.name);
        })()
    }
}

info.func() 

 

name = '老男孩';

info = {
    name:'alex',
    age:123,
    func:function(){
        console.log(this.name); 
        var xxx = this;
        (function(){
            console.log(xxx.name); 
        })()
    }
}

info.func() 

5,什么是跨域?如何解决?

指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。
使用nginx实现跨域原理

6,简述你对Http协议的理解?

htp协议是应用层的一种协议
HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)
Http在进行tcp传输前需要进行三次握手进行客户端和服务端的验证
http请求由三部分组成,分别是:请求行、消息报头、请求正文

7,简述你对Https协议的理解?

HTTPS 的目的是将这些内容加密,确保信息传输安全。最后一个字母 S 指的是 SSL/TLS 协议,它位于 HTTP 协议与 TCP/IP 协议中间

8,列举常见的http请求头及作用?

HTTP/1.1协议中共定义了八种方法(也叫“动作”)来以不同方式操作指定的资源: 

GET:向指定的资源发出显示请求(常用)

HEAD:与get方法想同,只不过服务器不传回资源的文本部分

POST:向指定资源提交数据,请求服务器进行处理(常用)

PUT:向指定资源上传其最新内容

DELETE:请求服务器删除Request-URI所标识的资源

TRACE: 回收服务器收到的请求,主要用于测试或诊断。 

OPTIONS:这个方法可使服务器传回该资源所支持的所有HTTP请
求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。

CONECT: HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。

9,列举常见的http请求方法及作用?

POST 用于向服务器提交数据,请求的参数要在http请求的消息主体中发送,可用于表单的提交和异步提交(如ajax),理论上,POST传递的数据量没有限制

GET 发送一个请求来获取服务器上的资源

PUT 一般POST方法代表新增,PUT方法代表整体更新,选择什么方法主要看接口的要求,put请求请求的参数一样要在http请求的消息主体中发送,默认情况下put请求是无法提交表单数据的。

DELETE 删除某一个资源,默认情况下DELETE方法在 URL 中附带查询参数,也无法提交表单数据的

PATCH 与PUT方法类似,但PATCH方法通常应用于局部更新。

10,列举常见的http响应状态码。

状态代码的第一个数字代表当前响应的类型:

- 1xx消息——请求已被服务器接收,继续处理
- 2xx成功——请求已成功被服务器接收、理解、并接受
- 3xx重定向——需要后续操作才能完成这一请求
- 4xx请求错误——请求含有词法错误或者无法被执行
- 5xx服务器错误——服务器在处理某个正确请求时发生错误

11,http中connections:keep-alive的请求头的作用?

当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。

12,django请求生命周期?

Django的请求生命周期是指:当用户在浏览器上输入url到用户看到网页的这个时间段内,Django后台所发生的事情。
第一步:浏览器发起请求
第二步:WSGI创建socket服务端,接收请求(Httprequest)
第三步:中间件处理请求
第四步:url路由,根据当前请求的URL找到视图函数
第五步:view视图,进行业务处理(ORM处理数据,从数据库取到数据返回给view视图;view视图将数据渲染到template模板;将数据返回)
第六步:中间件处理响应
第七步:WSGI返回响应(HttpResponse)
第八步:浏览器渲染

13,什么是wsgi?

WSGI的全称是Web Server Gateway Interface,翻译过来就是Web服务器网关接口。具体的来说,WSGI是一个规范,定义了Web服务器如何与Python应用程序进行交互,使得使用Python写的Web应用程序可以和Web服务器对接起来

14,什么是MVC ?什么是MTV?

MVC就是把web应用分为三层

  1. 模型层:model 负责业务对象和数据库的对象(ORM)的映射

  2. 视图层:views 负责与用户的交互(书写逻辑)

  3. 控制器:Controller完成用户对模型层和视图层调用,来完成用户的请求

MTV模式本质上和MVC没有什么大的差别,也是为了实现解藕性,只是定义上有些不同
模型层:model负责业务对象与数据库的对象(ORM)的映射
  2. 模板层:Template负责如何把页面展示给用户(html)

  3. 视图层:View负责业务逻辑,并在适当的时候调用Model和Template

15,django中间件作用以及应用场景?

简单的来说中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作

例如:

Django项目中默认启用了csrf保护,每次请求时通过CSRF中间件检查请求中是否有正确token值

当用户在页面上发送请求时,通过自定义的认证中间件,判断用户是否已经登陆,未登陆就去登陆。

当有用户请求过来时,判断用户是否在白名单或者在黑名单里

16,django中FBV和CBV有什么区别?

FBV就是在url中一个路径对应一个函数
CBV就是在url中一个路径对应一个类

17,django orm中如何批量创建数据?

批量插入数据的时候,首先要创建一个对象的列表,然后调用bulk_create方法,一次将列表中的数据插入到数据库中。

18,django 如何执行原生SQL?

19,django的orm如何查询id不等于5的数据。

表名.objects.exclude(id='5')

20,cookie和session的区别?

cookie保存在浏览器本地上的一组组键值对: HTTP协议是无状态的,每次请求之间都是相互独立的,之间没有关系,没有办法保存状态。 Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息。 

session保存在服务器上的一组组键值对,必须依赖Cookie, Cookie弥补了HTTP无状态的不足,让服务器知道来的人是“谁”;但是Cookie以文本的形式保存在本地,自身安全性较差;所以我们就通过Cookie识别不同的用户,对应的在Session里保存私密的信息以及超过4096字节的文本。
    Cookie虽然在一定程度上解决了“保持状态”的需求,但是由于Cookie本身最大支持4096字节,以及Cookie本身保存在客户端,可能被拦截或窃取,因此就需要有一种新的东西,它能支持更多的字节,并且他保存在服务器,有较高的安全性。这就是Session。

21,django的orm中on_delete的作用?

django2.0之前创建外键foreignKey的参数on_delete是有默认值的,所以这个参数可以不用填,但在2.0之后on_delete没有默认值了,所以这个参数一定要传
作用是删除关联数据是需要做什么

22,描述crm有哪些功能?

23,crm中什么是公户?什么是私户?为什么要做这个区分?

公户:指当前用户登陆系统之后看到的所有客户的信息,当前客户并没有被某一销售转化
私户:指当前销售存放属于自己的客户的账户
保证数据安全,为了防止销售之间存在“恶意”竞争,避免因为有人进行抢单导致出现冲突

24,请列举出CRM系统中的表。

部门表:Department
用户表:UserProfile
客户表:Customer
校区表:Campuses
班级表:ClassList
跟进记录表: ConsultRecord
报名表:Enrollment
缴费记录表:PaymentRecord
课程记录表:CourseRecord
学习记录表:StudyRecord

25,对数据库的数据做展示时,不同字段类型有不同的展示方法,分别是什么?

普通字段 -- 对象.字段名
choice字段 -- 对象.get_字段名_display
外键 -- 对象.外键字段.属性
多对多 -- 对象.自定义方法

26,请详细说说你们公司销售是如何使用CRM的。

销售可以通过个人渠道获取客户信息, 自己录入到系统中, 或者销售主管或网络咨询师将已经录入系统的客户分配给销售.

销售需要在规定时间间隔内对客户进行跟进或回访, 将跟进信息记录到系统中, 根据不同的情况标记客户的报名意向.

当客户确定报名时需要让客户本人或者销售帮忙添加报名表.

当销售收到客户缴纳的费用时, 需要填写缴费记录, 并将费用转交财务进行审批

27,CRM中有哪些技术点?

28,为什么不用现成的crm而是自己去开发?

为了适应公司内部的业务需求而定制功能进行开

29,请简述实现权限控制的流程。

在web应用中, 一个URL代表一个权限, 可以访问某一URL则说明有该权限. 该权限系统中URL被分为两种, 一种是可以做二级菜单的父权限, 一种是不能做菜单的子权限. Menu表中的数据称之为一级菜单, 二级菜单被分配给一级菜单. 子权限分配给父权限.

当用户登录成功时, 根据用户所有的角色查询出所具有的权限, 将权限信息和菜单信息存放在session中. 登录成功后跳转至其他URL时, 请求经过中间件时进行权限的校验, 根据当前访问的url和session中存放的权限信息进行正则匹配. 都匹配不成功, 则拒绝访问. 匹配成功则继续走正常的流程得到相应的响应.

页面中的可点击的按钮也是权限, 在模板渲染时使用自定义filter判断该按钮所代表的权限是否在该用户所拥有的权限中, 如果是则显示该按钮, 否则不显示.

30,列举权限有多少张表?表中都有那些字段?

6张
菜单表:menu  id、 name

权限表:Permission    id、 title、 url、 name、 parent_id、 menu_id

角色表:Role    id、 name

用户表:User    id、 username、 password

角色和权限关系表    id、 role_id、 permission_id

用户和角色关系表    id、 user_id、 role_id

31,为什么要把权限信息放到session中?权限信息放到session有什么优缺点?

将权限和菜单的字典存放在session中是为了给不同用户存放不同的权限和菜单, 并且session可以存放在Redis中, 读取速度快.

32,权限控制到按钮级别是如何实现的?

session中存放着一个有关权限信息的字典, 字典的key为权限的URL别名, value为一个权限的具体信息.自定义了一个filter, 用来判断某一个权限是否在该用户的权限字典中, 在的话返回True, 不在返回False.模板中使用该filter来对每个要生成按钮的部分做判断, 有权限则会显示按钮, 没有权限则不显示.

33,如何实现把权限粒度控制到数据行?

补充题

1,详细描述是jsonp实现机制?

2,django的orm如何通过数据自动化生成models类?

3,django中如何设置缓存?

4,django中信号的作用?

5,django中如何设置读写分离

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!