Python面试重点(web篇)
注意:只有必答题部分计算分值,补充题不计算分值。
第一部分 必答题
注意:除第四题4分以外,其他题均每题3分。
-
写出常用的bootstrap的样式。
栅格系统 <body> <div class="container"> <div class="row"> <div class="col-md-1>1</div> <div class="col-md-2>2</div> <div class="col-md-3>3</div> <div class="col-md-4>4</div> <div class="col-md-2>2</div> </div> </div> </body> 表单 <table class="table table-bordered table-striped"> <tr> <th>h1</th> <th>h2</th> <th>h3</th> </tr> </table>
-
什么是响应式布局?
响应式布局就是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本。这个概念是为解决移动互联网浏览而诞生的。 响应式布局可以为不同终端的用户提供更加舒适的界面和更好的用户体验
-
请通过jQuery发送ajax请求。
$.ajax({ type:请求方式, url: 请求地址, data:请求参数, dataType: 服务器返回值类型, success:回调函数 });
-
JavaScript与this相关的面试题(4分)
name = '老男孩'; info = { name:'alex', age:123, func:function(){ console.log(this.name); } } alex info.func()
name = '老男孩'; info = { name:'alex', age:123, func:function(){ console.log(this.name); alex 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()
-
什么是跨域?如何解决?
跨域,指的是从一个域名去请求另外一个域名的资源。即跨域名请求!跨域时,浏览器不能执行其他域名网站的脚本,是由浏览器的同源策略造成的,是浏览器施加的安全限制。 跨域的严格一点来说就是只要协议,域名,端口有任何一个的不同,就被当作是跨域 解决方式 在本地的hosts文件中添加相应的解析地址
-
简述你对Http协议的理解?
http请求由三部分组成,分别是:请求行、消息报头、请求正文 http是一种超文本传输协议,传输的数据都是未加密的,也就是显示在明面上的,是现在互联网上应用最为广泛的一种网络协议,相对来说不太安全,但是所需成本很小。http一般的端口号为80. HTTP1.0是短连接、HTTP1.1是长连接。 在HTTP1.1中,通讯流程可以概括为以下几步: 1. 客户端与服务器建立TCP连接,一般使用80端口。 2. 客户端向服务器发送请求。 3. 服务器向客户端发送响应。 4. 重复上述步骤。 5. 通讯完毕,TCP连接断开。 http协议的无状态性质 http协议是无状态的,同一个客户端的这次请求和上次请求是没有对应关系,对http服务器来说,它并不知道这两个请求来自同一个客户端。 为了解决这个问题, Web程序引入了Cookie机制来维护状态. Http消息结构 请求行:GET www.baidu.com/ HTTP/1.1 请求头: 请求体:
-
简述你对Https协议的理解?
https则是具有安全性的ssl加密传输协议。简单来说,https是一种安全版的http,传输的数据是通过SSL加密的,比起http来说很安全,https协议的主要作用就是:建立一个信息安全通道,来确保数组的传输,确保网站的真实性。但是相对来说,成本所需较高,尤其是所需ca证书等级越高,费用越高(ca证书功能越强大,所需费用越高)。https一般的端口号为443
-
列举常见的http请求头及作用?
1、Accept,浏览器端能够处理的内容类型。 例如: Accept: text/html 代表浏览器可以接受服务器回发的类型为 text/html 也就是我们常说的html文档。如果服务器无法返回text/html类型的数据,服务器应该返回一个406错误(non acceptable)。通配符 * 代表任意类型,例如 Accept: */* 代表浏览器可以处理所有类型,(一般浏览器发给服务器都是发这个)。 2、Accept-Encoding, 浏览器能够处理的的压缩编码。通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate),(注意:这不是指字符编码)。 例如: Accept-Encoding: zh-CN,zh;q=0.8 3、Accept-Language, 浏览器当前设置的语言。 语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等;例如: Accept-Language: en-us 4、Accept_Charset::浏览器能够显示的字符集 5、Connection:浏览器与服务器的连接类型 例如:Connection: keep-alive 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据 的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。 例如: Connection: close 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接会关闭。 当客户端再次发送Request,需要重新建立TCP连接。 6、Host,发送请求的页面的域名。(发送请求时,该报头域是必需的),请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的。 例如: 我们在浏览器中输入:http://www.hzau.edu.cn,浏览器发送的请求消息中,就会包含Host请求报头域,如下: Host:www.hzau.edu.cn,此处使用缺省端口号80,若指定了端口号,则变成:Host:指定端口号。 7、Referer,发送请求的页面的URI。当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器借此可以获得一些信息用于处理。 比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。 8、User-Agent,浏览器的用户代理字符串。告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本。 我们上网登陆论坛的时候,往往会看到一些欢迎信息,其中列出了你的操作系统的名称和版本,你所使用的浏览器的名称和版本,这往往让很多人感到很神奇,实际上,服务器应用程序就是从User-Agent这个请求报头域中获取到这些信息User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。 例如: User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; CIBA; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; InfoPath.2; .NET4.0E) 9、Cookie,用来存储一些用户信息以便让服务器辨别用户身份的(大多数需要登录的网站上面会比较常见)。 比如cookie会存储一些用户的用户名和密码,当用户登录后就会在客户端产生一个cookie来存储相关信息,这样浏览器通过读取cookie的信息去服务器上验证并通过后会判定你是合法用户,从而允许查看相应网页。当然cookie里面的数据不仅仅是上述范围,还有很多信息可以存储是cookie里面,比如sessionid等。 8、Cache-Control,指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据,还是重新发请求到服务器获取数据。 我们网页的缓存控制是由HTTP头中的“Cache-control”来实现的,常见值有private、no-cache、max-age、must-revalidate等,默认为private。这几种值的作用是根据重新查看某一页面时不同的方式来区分的: (1)、打开新窗口 值为private、no-cache、must-revalidate,那么打开新窗口访问时都会重新访问服务器。而如果指定了max-age值(单位为秒),那么在此值内的时间里就不会重新访问服务器,例如: Cache-control: max-age=5(表示当访问此网页后的5秒内再次访问不会去服务器) (2)、在地址栏回车 值为private或must-revalidate则只有第一次访问时会访问服务器,以后就不再访问。 值为no-cache,那么每次都会访问。 值为max-age,则在过期之前不会重复访问。 (3)、按后退按扭 值为private、must-revalidate、max-age,则不会重访问, 值为no-cache,则每次都重复访问 (4)、按刷新按扭 无论为何值,都会重复访问 10、If-Modified-Since, 把浏览器端缓存页面的最后修改时间发送到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行对比。 如果时间一致,那么返回304,客户端就直接使用本地缓存文件。如果时间不一致,就会返回200和新的文件内容。客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示在浏览器中。 例如:Mon, 17 Aug 2015 12:03:33 GMT 11、If-None-Match, If-None-Match和ETag一起工作,工作原理是在HTTP Response中添加ETag信息。 当用户再次请求该资源时,将在HTTP Request 中加入If-None-Match信息(ETag的值)。如果服务器验证资源的ETag没有改变(该资源没有更新),将返回一个304状态告诉客户端使用本地缓存文件。否则将返回200状态和新的资源和Etag. 使用这样的机制将提高网站的性能。
-
列举常见的http请求方法及作用?
accept:浏览器通过这个头告诉服务器,它所支持的数据类型 Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集 Accept-Encoding:浏览器通过这个头告诉服务器,支持的压缩格式 Accept-Language:浏览器通过这个头告诉服务器,它的语言环境 Host:浏览器通过这个头告诉服务器,想访问哪台主机 If-Modified-Since: 浏览器通过这个头告诉服务器,缓存数据的时间 Referer:浏览器通过这个头告诉服务器,客户机是哪个页面来的 防盗链 Connection:浏览器通过这个头告诉服务器,请求完后是断开链接还是保持链接
-
列举常见的http响应状态码。
100 Continue 继续。客户端应继续其请求 101 Switching Protocols 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议 200 OK 请求成功。一般用于GET与POST请求 201 Created 已创建。成功请求并创建了新的资源 202 Accepted 已接受。已经接受请求,但未处理完成 203 Non-Authoritative Information 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本 204 No Content 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档 205 Reset Content 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域 206 Partial Content 部分内容。服务器成功处理了部分GET请求 300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择 301 Moved Permanently 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 302 Found 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI 303 See Other 查看其它地址。与301类似。使用GET和POST请求查看 304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 305 Use Proxy 使用代理。所请求的资源必须通过代理访问 306 Unused 已经被废弃的HTTP状态码 307 Temporary Redirect 临时重定向。与302类似。使用GET请求重定向 400 Bad Request 客户端请求的语法错误,服务器无法理解 401 Unauthorized 请求要求用户的身份认证 402 Payment Required 保留,将来使用 403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求 404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 405 Method Not Allowed 客户端请求中的方法被禁止 406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求 407 Proxy Authentication Required 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权 408 Request Time-out 服务器等待客户端发送的请求时间过长,超时 409 Conflict 服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突 410 Gone 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置 411 Length Required 服务器无法处理客户端发送的不带Content-Length的请求信息 412 Precondition Failed 客户端请求信息的先决条件错误 413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息 414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理 415 Unsupported Media Type 服务器无法处理请求附带的媒体格式 416 Requested range not satisfiable 客户端请求的范围无效 417 Expectation Failed 服务器无法满足Expect的请求头信息 500 Internal Server Error 服务器内部错误,无法完成请求 501 Not Implemented 服务器不支持请求的功能,无法完成请求 502 Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应 503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 504 Gateway Time-out 充当网关或代理的服务器,未及时从远端服务器获取请求 505 HTTP Version not supported
-
http中
connections:keep-alive
的请求头的作用?在HTTP/1.0里,为了实现client到web-server能支持长连接,必须在HTTP请求头里显示指定 Connection:keep-alive 在HTTP/1.1里,就默认是开启了keep-alive,要关闭keep-alive需要在HTTP请求头里显示指定 Connection:close
-
django请求生命周期?
用户通过浏览器请求一个页面 请求到达Request Middlewares中间件,中间件对request做一些预处理或者直接response请求 URLConf通过urls.py文件和请求的URL找到相应的View View Middlewares被访问,它同样可以对request做一些处理或者直接返回response 调用View中的函数 View中的方法可以选择性的通过Models访问底层的数据 所有的Model-to-DB的交互都是通过manager完成的 如果需要,Views可以使用一个特殊的Context Context被传给Template用来生成页面 a. Template使用Filters和Tags去渲染输出 b. 输出被返回到View c. HTTPResponse被发送到Response Middlewares d. 任何Response Middlewares都可以丰富response或者返回一个完全不同的response e. Response返回到浏览器,呈现给用户
-
什么是wsgi?
web服务器网关接口 WSGI是一个规范,定义了Web服务器如何与Python应用程序进行交互,使得使用Python写的Web应用程序可以和Web服务器对接起来
-
什么是MVC ?什么是MTV?
- MVC: M: model 模型 和数据库交互 V: view 视图 展示数据 HTML C: controller 控制器 业务流程 传递指令 - MTV: M: model 模型 ORM T:template 模板 HTML V : view 视图 业务逻辑
-
django中间件作用以及应用场景?
在http请求 到达视图函数之前 和视图函数return之后,django会根据自己的规则在合适的时机执行中间件中相应的方法。 1、做IP限制 放在 中间件类的列表中,阻止某些IP访问了; 2、URL访问过滤 如果用户访问的是login视图(放过) 如果访问其他视图(需要检测是不是有session已经有了放行,没有返回login),这样就省得在 多个视图函数上写装饰器了! 3、缓存(还记得CDN吗?) 客户端请求来了,中间件去缓存看看有没有数据,有直接返回给用户,没有再去逻辑层 执行视图函数 4.做权限认证 角色关系管理的权限认证系统
-
django中FBV和CBV有什么区别?
FBV基于函数的视图 CBV基于类的视图,需要导入from django.views import View在内部使用反射执行类中的方法
-
django orm中如何批量创建数据?
定义一个数据模型 from django.db import models class Product(models.Model): name = models.CharField(max_length=200) price = models.DecimalField(max_digits=10, decimal_places=2) 批量插入数据的时候,首先要创建一个对象的列表,然后调用bulk_create方法,一次将列表中的数据插入到数据库中 product_list_to_insert = list() for x in range(10): product_list_to_insert.append(Product(name='product name ' + str(x), price=x)) Product.objects.bulk_create(product_list_to_insert) 更新数据 Product.objects.filter(name__contains='name').update(name='new name') 批量删除 Product.objects.filter(name__contains='name query').delete()
-
django 如何执行原生SQL?
官方文档https://docs.djangoproject.com/en/2.0/topics/db/sql/ rom django.db import connection def my_custom_sql(self): with connection.cursor() as cursor: cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz]) cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz]) row = cursor.fetchone() return row
-
django的orm如何查询id不等于5的数据。
# exclude() 获取不满足条件的所有对象 QuerySet 对象列表 ret = models.Person.objects.exclude(id=5)
-
cookie和session的区别?
cookie是存储在浏览器上的,用户可以进行修改 session是基于cookie的,值存储在服务器上的,比较安全
-
django的orm中on_delete的作用?
起到级联的作用
-
描述crm有哪些功能?
日程管理 潜在客户管理 产品管理 报价单 订单管理 发票管理 知识库管理 故障单管理 系统管理员权限管理
-
crm中什么是公户?什么是私户?为什么要做这个区分?
公户是全部销售人员都可以看到的名单,可以发展为自己的客户,是没有绑定销售的 私户是绑定销售人员的,销售人员各自维护自己的客户其他的销售没有权限对私户上的人员拓展和维护 方便记录和维护客户,避免产生纠纷
-
请列举出CRM系统中的表。
-
对数据库的数据做展示时,不同字段类型有不同的展示方法,分别是什么?
普通字段 -- 对象.字段名 choice字段 --对象,get_字段名_dispaly 外键 -- 对象.外键字段.属性 多对多 -- 对象.自定义方法
-
请详细说说你们公司销售是如何使用CRM的。
销售可以通过个人渠道获取客户信息, 自己录入到系统中, 或者销售主管或网络咨询师将已经录入系统的客户分配给销售. 销售需要在规定时间间隔内对客户进行跟进或回访, 将跟进信息记录到系统中, 根据不同的情况标记客户的报名意向. 当客户确定报名时需要让客户本人或者销售帮忙添加报名表. 当销售收到客户缴纳的费用时, 需要填写缴费记录, 并将费用转交财务进行审批
-
CRM中有哪些技术点?
中间件 进行权限访问 session 保存权限和菜单的数据结构 分页功能 模糊查询 加锁,事务,公户私户的转化
-
为什么不用现成的crm而是自己去开发?
-
请简述实现权限控制的流程。
给不同的用户分配不同的功能,这里主要阐述的是基于角色的权限控制rbac(role based access control) 在web开发中,一个url就可以看做是一个权限 控制流程: 1.要实现权限控制需要有表[一个简单的权限控制,需要6张表] 2.登录成功后查询当前用户的权限信息,保存在session中 3.利用中间件进行权限校验 根据当前访问的url和session中存放的权限进行正则匹配,匹配成功,则按照正常流程走,匹配不成功则 告知未有访问的权限 页面中可见的按钮代表也有权限,在模板设置中,根据filter进行判断,若返回true则代表有权限,若返回False 则代表无权限 4.动态生成一级菜单 5.动态生成二级菜单,对一级菜单进行排序 6.二级菜单默认选中并展示 7.非菜单权限的归属(二级菜单和子权限,都有选中的效果) 8.路径导航 9.权限控制到按钮级别
-
列举权限有多少张表?表中都有那些字段?
-
为什么要把权限信息放到session中?权限信息放到session有什么优缺点?
seession是保存在服务器上的,保证了数据的安全 缺点:访问量较大时给服务器造成较大的压力
-
权限控制到按钮级别是如何实现的?
由于每个按钮都能认为是一个权限,所以每个按钮都会有一个自己的路径,这些路径都在用户登录时保存在了session中,django在渲染页面之前先进行权限的匹配,如果用户没有某个按钮的权限,那么这个按钮就不会被渲染,从而实现权限的控制. 重点在于能快速的在session中搜索所有的用户权限,之前在session中保存的数据是以一级菜单的id作为key,所以在遍历时候会占用过多资源,而从数据库中去找也比较浪费时间.所以可以在session中保存权限数据时就以定义的url别名来做key,这样就可以快速匹配权限.
-
如何实现把权限力度控制到数据行?
第二部分 补充题
-
详细描述是jsonp实现机制?
参考博客 https://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html
-
django的orm如何通过数据自动化生成models类?
Python manage.py inspectdb python manage.py inspectdb > appname/models.py
-
django中如何设置缓存?
参考博客:https://www.cnblogs.com/wupeiqi/articles/5246483.html
-
django中信号的作用?
同上
-
django中如何设置读写分离
参考博客:https://www.cnblogs.com/fat39/p/10044712.html
-
django操作ORM