Python面试重点(web篇)
注意:只有必答题部分计算分值,补充题不计算分值。
第一部分 必答题
注意:除第四题4分以外,其他题均每题3分。
-
写出常用的bootstrap的样式。
1、靠右对齐: 只需要添加样式类pull-right即可! 回到页面顶部:只需添加href="#top"即可! 2、<pre></pre>和其类.pre-scrollable(整块突出和设置滚动条) <pre>元素一般用于显示大块的代码,并保证原有格式不变。但有时候代码太多,而且不想让其占有太大的页面篇幅,就想控制代码块的大小。Bootstrap也考虑到这一点,你只需要在pre标签上添加类名“.pre-scrollable”,就可以控制代码块区域最大高度为340px,一旦超出这个高度,就会在Y轴出现滚动条。 3、强调文章里的某个字眼:<code>btn</code> 4、有时候我们需要将表单的控件都在一行内显示,在Bootstrap框架中实现这样的表单效果是轻而易举的,你只需要添加类名“form-inline”即可。 5、文本强调样式: .text-muted:提示,使用浅灰色(#999) .text-primary:主要,使用蓝色(#428bca) .text-success:成功,使用浅绿色(#3c763d) .text-info:通知信息,使用浅蓝色(#31708f) .text-warning:警告,使用黄色(#8a6d3b) .text-danger:危险,使用褐色(##a94442)
-
什么是响应式布局?
一个网站能够兼容多个终端
-
请通过jQuery发送ajax请求。
$.ajax({ type: 'POST', url: "http://xxx/yyy/zzz/sendVerifyCode", data:{ phoneNo:$(".tel").val() }, success: function(data){ $.toast("发送成功", "text") }, error: function(){ $.toast("发送失败", "text") } })
-
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()
-
什么是跨域?如何解决?
当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域 跨域解决方法: 【1】设置document.domain解决无法读取非同源网页的 Cookie问题 【2】跨文档通信 API:window.postMessage() 【3】JSONP 【4】CORS
-
简述你对Http协议的理解?
Http协议则是一种应用层协议 http是超文本传输协议,详细的制定了万维网服务器与客户端间的数据传输的通信规则 http是一种超文本传输协议,传输的数据都是未加密的,也就是显示在明面上的,是现在互联网上应用最为广泛的一种网络协议,相对来说不太安全,但是所需成本很小。http一般的端口号为80.
-
简述你对Https协议的理解?
https则是具有安全性的ssl加密传输协议
-
列举常见的http请求头及作用?
Accept Accept 头字段用于指出客户端程序(通常是浏览器)
-
列举常见的http请求方法及作用?
HTTP请求的方法: HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作方式 1、OPTIONS 返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性 2、HEAD 向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。 3、GET 向特定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。 4、POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form 5、PUT 向指定资源位置上传其最新内容 6、DELETE 请求服务器删除Request-URL所标识的资源 7、TRACE 回显服务器收到的请求,主要用于测试或诊断 8、CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 注意: 1)方法名称是区分大小写的,当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Mothod Not Allowed);当服务器不认识或者不支持对应的请求方法时,应返回状态码501(Not Implemented)。 2)HTTP服务器至少应该实现GET和HEAD/POST方法,其他方法都是可选的,此外除上述方法,特定的HTTP服务器支持扩展自定义的方法。
-
列举常见的http响应状态码。
下面常见的http状态码: 100:这个状态码是告诉客户端应该继续发送请求,这个临时响应是用来通知客户端的,部分的请求服务器已经接受,但是客户端应继续发送求请求的剩余部分,如果请求已经完成,就忽略这个响应,而且服务器会在请求完成后向客户发送一个最终的结果 200:这个是最常见的http状态码,表示服务器已经成功接受请求,并将返回客户端所请求的最终结果 202:表示服务器已经接受了请求,但是还没有处理,而且这个请求最终会不会处理还不确定 204:服务器成功处理了请求,但没有返回任何实体内容 ,可能会返回新的头部元信息 301:客户端请求的网页已经永久移动到新的位置,当链接发生变化时,返回301代码告诉客户端链接的变化,客户端保存新的链接,并向新的链接发出请求,已返回请求结果 404:请求失败,客户端请求的资源没有找到或者是不存在 500:服务器遇到未知的错误,导致无法完成客户端当前的请求。 503:服务器由于临时的服务器过载或者是维护,无法解决当前的请求,以上http状态码是服务器经常返回的状态代码,用户只能通过浏览器的状态了解服务器是否正常运行,一般除了错误的状态码,都不会看到服务器的状态码的,新SEOer你们了解到了吗?内容编辑来自51特色购SEO优化人员,想了解更过状态码的知识可以加我好友,一起相互交流学习
-
http中
connections:keep-alive
的请求头的作用?Connection 头(header) 决定当前的事务完成后,是否会关闭网络连接。如果该值是“keep-alive”,网络连接就是持久的,不会关闭,使得对同一个服务器的请求可以继续在该连接上完成
-
django请求生命周期?
1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post,体现在url之中. 2. url经过Django中的wsgi,再经过Django的中间件,最后url到过路由映射表,在路由中一条一条进行匹配, 一旦其中一条匹配成功就执行对应的视图函数,后面的路由就不再继续匹配了. 3. 视图函数根据客户端的请求查询相应的数据.返回给Django,然后Django把客户端想要的数据做为一个字符串返回给客户端. 4. 客户端浏览器接收到返回的数据,经过渲染后显示给用户.
-
什么是wsgi?
WSGI是一个规范,定义了Web服务器如何与Python应用程序进行交互,使得使用Python写的Web应用程序可以和Web服务器对接起来。
-
什么是MVC ?什么是MTV?
所谓MVC就是把Web应用分为模型(M),控制器©和视图(V)三层,他们之间以一种插件式的、松耦合的方式连接在一起: A.模型负责业务对象与数据库的映射(ORM) B.视图负责与用户的交互(页面) C.控制器接受用户的输入调用模型和视图完成用户的请求 MTV模式: Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同 Django的MTV分别是值: M 代表模型(Model):负责业务对象和数据库的关系映射(ORM)。 T 代表模板 (Template):负责如何把页面展示给用户(html)。 V 代表视图(View):负责业务逻辑,并在适当时候调用Model和Template。
-
django中间件作用以及应用场景?
中间件是介于request与response处理之间的一道处理过程,用于在全局范围内改变Django的输入和输出。 简单的来说中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作 例如: 1.Django项目中默认启用了csrf保护,每次请求时通过CSRF中间件检查请求中是否有正确token值 2.当用户在页面上发送请求时,通过自定义的认证中间件,判断用户是否已经登陆,未登陆就去登陆。 3.当有用户请求过来时,判断用户是否在白名单或者在黑名单里
-
django中FBV和CBV有什么区别?
FBV(function base views) 就是在视图里使用函数处理请求。 在之前django的学习中,我们一直使用的是这种方式,所以不再赘述。 CBV(class base views) 就是在视图里使用类处理请求。 Python是一个面向对象的编程语言,如果只用函数来开发,有很多面向对象的优点就错失了(继承、封装、多态)。所以Django在后来加入了Class-Based-View。可以让我们用类写View。这样做的优点主要下面两种: 提高了代码的复用性,可以使用面向对象的技术,比如Mixin(多继承) 可以用不同的函数针对不同的HTTP方法处理,而不是通过很多if判断,提高代码可读性
-
django orm中如何批量创建数据?
批量插入数据的时候,首先要创建一个对象的列表,然后调用bulk_create方法,一次将列表中的数据插入到数据库中。
-
django 如何执行原生SQL?
django执行原生sql 一、ORM row()方法:只能实现查询 复制代码 d_list = models.Article.objects.raw( 'select nid, count(nid) as num,strftime("%Y-%m",create_time) as ctime from blog_article where user_id = ' + str(user.pk) + ' group by strftime("%Y-%m",create_time)' ) for i in d_list: print('i', i, type(i),i.ctime, i.num) #i Python BeautifulSoup抓取表情包并保存 <class 'blog.models.Article'> 2018-07 6 复制代码 注意:1-选择的字段必须包含主键,2-通过'app名_表名'找表,3-where条件中用户id(user.pk)必须是字符串类型 不能像在终端输入sql语句后立即返回数据,只能通过调用对象属性的方法查看。 二、cursor对象: 支持所有操作 复制代码 from django.db import connection question_obj = models.Questions.objects.get(pk=qid) cursor = connection.cursor() cursor.execute(question_obj.answer) res = cursor.fetchall() # 返回元组 for i in res: print(i, i[1]) 复制代码
-
django的orm如何查询id不等于5的数据。
models.UserInfo.objects.filter(id__gt=5) # 获取id大于5的值 models.UserInfo.objects.filter(id__gte=5) # 获取id大于等于5的值 models.UserInfo.objects.filter(id__lt=5) # 获取id小于5的值 models.UserInfo.objects.filter(id__lte=5) # 获取id小于5的值 models.UserInfo.objects.filter(id__lt=5, id__gt=1) # 获取id大于1且 小于5的值
-
cookie和session的区别?
cookie和session有着千丝万缕的联系 1、存储位置不同 cookie的数据信息存放在客户端浏览器上。 session的数据信息存放在服务器上。 2、存储容量不同 单个cookie保存的数据<=4KB,一个站点最多保存20个Cookie。 对于session来说并没有上限,但出于对服务器端的性能考虑,session内不要存放过多的东西,并且设置session删除机制。 3、存储方式不同 cookie中只能保管ASCII字符串,并需要通过编码方式存储为Unicode字符或者二进制数据。 session中能够存储任何类型的数据,包括且不限于string,integer,list,map等。 4、隐私策略不同 cookie对客户端是可见的,别有用心的人可以分析存放在本地的cookie并进行cookie欺骗,所以它是不安全的。 session存储在服务器上,对客户端是透明对,不存在敏感信息泄漏的风险。 5、有效期上不同 开发可以通过设置cookie的属性,达到使cookie长期有效的效果。 session依赖于名为JSESSIONID的cookie,而cookie JSESSIONID的过期时间默认为-1,只需关闭窗口该session就会失效,因而session不能达到长期有效的效果。 6、服务器压力不同 cookie保管在客户端,不占用服务器资源。对于并发用户十分多的网站,cookie是很好的选择。 session是保管在服务器端的,每个用户都会产生一个session。假如并发访问的用户十分多,会产生十分多的session,耗费大量的内存。 7、浏览器支持不同 假如客户端浏览器不支持cookie: cookie是需要客户端浏览器支持的,假如客户端禁用了cookie,或者不支持cookie,则会话跟踪会失效。关于WAP上的应用,常规的cookie就派不上用场了。 运用session需要使用URL地址重写的方式。一切用到session程序的URL都要进行URL地址重写,否则session会话跟踪还会失效。 假如客户端支持cookie: cookie既能够设为本浏览器窗口以及子窗口内有效,也能够设为一切窗口内有效。 session只能在本窗口以及子窗口内有效。 8、跨域支持上不同 cookie支持跨域名访问。 session不支持跨域名访问。
-
django的orm中on_delete的作用?
外键的删除 1、常见的使用方式(设置为null)
-
描述crm有哪些功能?
CRM软件的基本功能包括客户管理、联系人管理、时问管理、潜在客户管理、销售管理、电话销售、营销管理、电话营销、客户服务等,有的软件还包括了呼叫中心、合作伙伴关系管理、商业智能、知识管理、电子商务等。
-
crm中什么是公户?什么是私户?为什么要做这个区分?
公户和私户的展示,公户就是所有用户都可以看到的客户,私户就是用户自己的客户 在CRM系统中, 将没有绑定销售的客户称为公户, 绑定销售的客户称为私户. 销售人员各自维护自己的客户(私户), 不可以查看或者跟进其他人的客户, 避免产生纠纷.
-
请列举出CRM系统中的表。
-
对数据库的数据做展示时,不同字段类型有不同的展示方法,分别是什么?
普通字段 -- 对象.字段名 choice字段 -- 对象.get_字段名_display 外键 -- 对象.外键字段.属性 多对多 -- 对象.自定义方法
-
请详细说说你们公司销售是如何使用CRM的。
销售可以通过个人渠道获取客户信息, 自己录入到系统中, 或者销售主管或网络咨询师将已经录入系统的客户分配给销售. 销售需要在规定时间间隔内对客户进行跟进或回访, 将跟进信息记录到系统中, 根据不同的情况标记客户的报名意向. 当客户确定报名时需要让客户本人或者销售帮忙添加报名表. 当销售收到客户缴纳的费用时, 需要填写缴费记录, 并将费用转交财务进行审批.
-
CRM中有哪些技术点?
技术点 作用 auth模块 认证 modelform 对表进行增删改查 分页 对数据进行分页显示 Q对象 查询条件==或==的关系 QueryDict 保留搜索条件 url的命名和反向解析 ---- 事务 + 行级锁 加入私户 批量创建对象 ---- modelformset ----
-
为什么不用现成的crm而是自己去开发?
内部部署型CRM 基于云的CRM 开源CRM
-
请简述实现权限控制的流程。
在web应用中, 一个URL代表一个权限, 可以访问某一URL则说明有该权限. 该权限系统中URL被分为两种, 一种是可以做二级菜单的父权限, 一种是不能做菜单的子权限. Menu表中的数据称之为一级菜单, 二级菜单被分配给一级菜单. 子权限分配给父权限. 当用户登录成功时, 根据用户所有的角色查询出所具有的权限, 将权限信息和菜单信息存放在session中. 登录成功后跳转至其他URL时, 请求经过中间件时进行权限的校验, 根据当前访问的url和session中存放的权限信息进行正则匹配. 都匹配不成功, 则拒绝访问. 匹配成功则继续走正常的流程得到相应的响应. 页面中的可点击的按钮也是权限, 在模板渲染时使用自定义filter判断该按钮所代表的权限是否在该用户所拥有的权限中, 如果是则显示该按钮, 否则不显示.
-
列举权限有多少张表?表中都有那些字段?
表 字段 菜单表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
-
为什么要把权限信息放到session中?权限信息放到session有什么优缺点?
将权限和菜单的字典存放在session中是为了给不同用户存放不同的权限和菜单, 并且session可以存放在Redis中, 读取速度快.
-
权限控制到按钮级别是如何实现的?
session中存放着一个有关权限信息的字典, 字典的key为权限的URL别名, value为一个权限的具体信息. 自定义了一个filter, 用来判断某一个权限是否在该用户的权限字典中, 在的话返回True, 不在返回False. 模板中使用该filter来对每个要生成按钮的部分做判断, 有权限则会显示按钮, 没有权限则不显示.
-
如何实现把权限粒度控制到数据行?
一、models层给权限增加url的别名 二、在初始化权限中增加别名 三、中间件处理 四、模板处理
第二部分 补充题
-
详细描述是jsonp实现机制?
主要是浏览器的同源同域(协议相同,域名相同及端口相同)策略需要使用跨域获取数据,故需要jsonp跨域获取数据。
-
django的orm如何通过数据自动化生成models类?
一、配置数据库 二、输入命令生成models.py中的模型类
-
django中如何设置缓存?
一.配置文件settings.py中 二.某个应用的视图文件views.py中
-
django中信号的作用?
Django signal
-
django中如何设置读写分离
修改配置文件: 创建数据库操作的路由分法类 在utils中创建db_touter.py文件 在dev.py中配置读写分离路由