python面试题 -- WEB

Python面试重点(web篇)

注意:只有必答题部分计算分值,补充题不计算分值。

第一部分 必答题

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

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

    # table表格 form-control表单  button按钮  dropdown下拉菜单  pagination分页
  2. 什么是响应式布局?

    # 个网站能够兼容多个终端——而不是为每个终端做一个特定的版本
  3. 请通过jQuery发送ajax请求。

    $.ajax({
               url: '/test/',   # 提交的地址
               type: 'post', # 请求方式
               data: { # 提交的数据
                   name: 'alex',
                   age: 73,
                   hobby: JSON.stringify(['装逼', '画饼'])
              },
               success: function (ret) {# 响应成功的回调函数
              },
               error:function (ret) { # 响应失败的回调函数
                   console.log(ret)
              }
          })
  4. JavaScript与this相关的面试题(4分)

    name = '老男孩';

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

    info.func()
    # alex
    name = '老男孩';

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

    info.func()
    # alex
    # 老男孩
    name = '老男孩';

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

    info.func()
    # alex
    # 老男孩
    name = '老男孩';

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

    info.func()
    # alex
    # alex
  5. 什么是跨域?如何解决?

    # 当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域
    # 设置document.domain解决无法读取非同源网页的 Cookie问题
    # 跨文档通信 API:window.postMessage():调用postMessage方法实现父窗口http://test1.com向子窗口http://test2.com发消息(子窗口同样可以通过该方法发送消息给父窗口
    # JSONP 是服务器与客户端跨源通信的常用方法。最大特点就是简单适用,兼容性好(兼容低版本IE),缺点是只支持get请求,不支持post请求。
    # CORS 是跨域资源分享(Cross-Origin Resource Sharing)的缩写。它是 W3C 标准,属于跨源 AJAX 请求的根本解决方法。
  6. 简述你对Http协议的理解?

    # 超文本传输协议(英文:Hyper Text Transfer Protocol,HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议
    # HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。
    # HTTP的八种请求方法:GET POST HEAD PUT TRACE DELETE OPTIONS CONNECT
  7. 简述你对Https协议的理解?

    # https则是具有安全性的ssl加密传输协议。简单来说,https是一种安全版的http,传输的数据是通过SSL加密的,比起http来说很安全,https协议的主要作用就是:建立一个信息安全通道,来确保数组的传输,确保网站的真实性。但是相对来说,成本所需较高,尤其是所需ca证书等级越高,费用越高(ca证书功能越强大,所需费用越高)。https一般的端口号为443。
  8. 列举常见的http请求头及作用?

    # Accept,浏览器端能够处理的内容类型
    # Accept-Encoding, 浏览器能够处理的的压缩编码。通常指定压缩方法
    # Accept-Language, 浏览器当前设置的语言
    # Accept_Charset::浏览器能够显示的字符集
    # Connection:浏览器与服务器的连接类型
    # Host,发送请求的页面的域名。(发送请求时,该报头域是必需的),请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的。
    # Referer,发送请求的页面的URI。当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器借此可以获得一些信息用于处理
    # User-Agent,浏览器的用户代理字符串。告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本
    # Cookie,用来存储一些用户信息以便让服务器辨别用户身份的(大多数需要登录的网站上面会比较常见)
  9. 列举常见的http请求方法及作用?

    # GET
    向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中
    # POST
    向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。
    # HEAD
    与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。
    # PUT
    向指定资源位置上传其最新内容
    # DELETE
    请求服务器删除Request-URI所标识的资源。
    # TRACE
    回显服务器收到的请求,主要用于测试或诊断。
    # OPTIONS
    这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
    # CONNECT
    HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。
  10. 列举常见的http响应状态码。

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

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

    # 浏览器-->wsgi-->Middlewares process_request-->URL Conf-->Middlewares process_view-->View-->(model-->db)-->Template-->Middlewares process_exception-->Middlewares process_response-->wsgi
  13. 什么是wsgi?

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

    # MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),具有耦合性低、重用性高、生命周期成本低等优点
    # MTV:Django框架的设计模式借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间的耦合性。Django框架的不同之处在于它拆分的三部分为:Model(模型)、Template(模板)和View(视图),也就是MTV框架。
  15. django中间件作用以及应用场景?

    # 中间件是介于request与response处理之间的一道处理过程,用于在全局范围内改变Django的输入和输出,简单的来说中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作
    # 1.Django项目中默认启用了csrf保护,每次请求时通过CSRF中间件检查请求中是否有正确token值
    # 2.当用户在页面上发送请求时,通过自定义的认证中间件,判断用户是否已经登陆,未登陆就去登陆。
    # 3.当有用户请求过来时,判断用户是否在白名单或者在黑名单里
  16. django中FBV和CBV有什么区别?

    # FBV(function base views) 就是在视图里使用函数处理请求
    # CBV(class base views) 就是在视图里使用类处理请求
    # CBV与FBV相比:提高了代码的复用性,可以使用面向对象的技术,比如Mixin(多继承);可以用不同的函数针对不同的HTTP方法处理,而不是通过很多if判断,提高代码可读性
  17. django orm中如何批量创建数据?

    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)
  18. django 如何执行原生SQL?

    # 1.使用extra方法
      解释:结果集修改器,一种提供额外查询参数的机制
      说明:依赖model模型
      用在where后:
        Book.objects.filter(publisher_id="1").extra(where=["title='python学习1'"])    
      用在select后  
        Book.objects.filter(publisher_id="1").extra(select={"count":"select count(*) from hello_book"})
    # 2.使用raw方法
      解释:执行原始sql并返回模型
      说明:依赖model多用于查询
      用法:
        book = Book.objects.raw("select * from hello_book")
        for item in book:
          print(item.title)
    # 3.执行自定义SQL
      解释:利用游标执行
      导入:from django.db import connection
      说明:不依赖model
      用法:  
        from django.db import connection

        cursor = connection.cursor()
        #插入
        cursor.execute("insert into hello_author(name) values('xiaol')")
        #更新
        cursor.execute("update hello_author set name='xiaol' where id=1")
        #删除
        cursor.execute("delete from hello_author where name='xiaol'")
        #查询
        cursor.execute("select * from hello_author")
        #返回一行
        raw = cursor.fetchone()
        print(raw)
        # #返回所有
        # cursor.fetchall()
  19. django的orm如何查询id不等于5的数据。

    # models.表名.objects.filter(id!=5).all()
  20. cookie和session的区别?

    # cookie以文本格式存储在浏览器上,存储量有限;而session存储在服务端,可以无限量存储多个变量并且比cookie更安全
  21. django的orm中on_delete的作用?

    # on_delete用于创建模型时的外键中,作用是:当两张关联的表中的一张表的数据被删除时另外一张表的行为
  22. 描述crm有哪些功能?

    # 查询公户里的客户,查询自己的客户,把公户里的客户加入到私户里,对客户进行增删改查,查看客户的跟进记录,报名记录,班级
    # 销售功能: 录入客户相关信息, 记录跟进客户情况, 添加报名表, 添加缴费记录及相关内容的展示.
    # 班主任功能: 创建或编辑班级信息, 创建课程记录, 批量生成学生学习记录及相关内容的展示
  23. crm中什么是公户?什么是私户?为什么要做这个区分?

    # 在CRM系统中, 将没有绑定销售的客户称为公户, 绑定销售的客户称为私户.
    # 销售人员各自维护自己的客户(私户), 不可以查看或者跟进其他人的客户, 避免产生纠纷.
  24. 请列举出CRM系统中的表。

    # 部门表,用户表,客户表,校区表,班级表,跟进记录表,报名表,缴费记录表,课程记录表,学习记录表
  25. 对数据库的数据做展示时,不同字段类型有不同的展示方法,分别是什么?

    # 普通字段 -- 对象.字段名
    # choice字段 -- 对象.get_字段名_display
    # 外键 -- 对象.外键字段.属性
    # 多对多 -- 对象.自定义方法
  26. 请详细说说你们公司销售是如何使用CRM的。

    # 销售可以通过个人渠道获取客户信息, 自己录入到系统中, 或者销售主管或网络咨询师将已经录入系统的客户分配给销售.
    # 销售需要在规定时间间隔内对客户进行跟进或回访, 将跟进信息记录到系统中, 根据不同的情况标记客户的报名意向.
    # 当客户确定报名时需要让客户本人或者销售帮忙添加报名表.
    # 当销售收到客户缴纳的费用时, 需要填写缴费记录, 并将费用转交财务进行审批.
  27. CRM中有哪些技术点?

    # auth模块,modelform,分页,Q对象,url的命名和反向解析,事务 + 行级锁,批量创建对象,modelformset
  28. 为什么不用现成的crm而是自己去开发?

    # crm是客户关系管理系统,每个公司业务不同,所使用的功能也不相同,所以需要针对不同的业务开发不同的crm
  29. 请简述实现权限控制的流程。

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

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

    # 页面中的可点击的按钮也是权限, 在模板渲染时使用自定义filter判断该按钮所代表的权限是否在该用户所拥有的权限中, 如果是则显示该按钮, 否则不显示.
  30. 列举权限有多少张表?表中都有那些字段?

    # Menu(菜单表):title,icon,weight
    # Perssion(权限表):url,title,name,menu,parent
    # Role(角色表):name,perssions
    # User(用户表):username,password,role
  31. 为什么要把权限信息放到session中?权限信息放到session有什么优缺点?

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

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

posted @ 2020-03-02 11:12  terms  Views(169)  Comments(0)    收藏  举报