1

时光毁灭记忆、已成空白 提交于 2020-03-02 13:00:08

Python面试重点(web篇)

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

第一部分 必答题

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

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

    container,row,col-md-1,table table-striped,active,success,form-inline,form-group
  2. 什么是响应式布局?

    利用媒体查询,让同一个网站兼容不同的终端(PC端、移动端)呈现不同的页面布局。
  3. 请通过jQuery发送ajax请求。

       <script>
    
            $("#sub").click(function(){
                var uname = $("#username").val();
                var pwd = $("#password").val();
                var csrf = $("[name=csrfmiddlewaretoken]").val();  #第二步
    
                $.ajax({
                    url:"{% url 'login' %}",
                    type:"post",
     第三步添加键值对 data:{username:uname,password:pwd,csrfmiddlewaretoken:csrf},
                    {#headers:{"X-CSRFToken":$.cookie('csrftoken')},#}
                    success:function (res) {
                        console.log(res);
                        if (res === "1"){
                            location.href = "/home/";
                        }else{
                            $(".error").text("用户名或密码错误")
                        }
                    }
                })
            })
        </script>
  4. JavaScript与this相关的面试题(4分)

    name = '老男孩';
    
    info = {
     name:'alex',
     age:123,
     func:function(){
         console.log(this.name);
     }
    }
    
    info.func()   //  alex  info对象调用function
    name = '老男孩';
    
    info = {
     name:'alex',
     age:123,
     func:function(){
         console.log(this.name);   // alex
            function f1(){
                console.log(this.name);
            }
            f1()  // 自调用函数,window.f1()==>window.name
     }
    }
    
    info.func()   // alex  老男孩
    name = '老男孩';
    
    info = {
     name:'alex',
     age:123,
     func:function(){
         console.log(this.name);    // alex
            (function(){
                console.log(this.name);   // 自执行函数  老男孩
            })()
     }
    }
    
    info.func()   // alex   老男孩
    name = '老男孩';
    
    info = {
     name:'alex',
     age:123,
     func:function(){
         console.log(this.name); 
            var xxx = this;       // 指向func
            (function(){
                console.log(xxx.name); 
            })()
     }
    }
    
    info.func()    // alex  alex
  5. 什么是跨域?如何解决?

    同源是指,域名,协议,端口相同  例如 http:/127.0.0.1:8000
    跨域就是两个项目中前面这三项内容有一个不同,就是非同源,那么他们之间互相访问就是跨域
    
       简单请求:一次请求
       非简单请求:两次请求,在发送数据之前会先发一次请求用于做“预检”,只有“预检”通过后才再发送一次请求用于数据传输。
    * 关于“预检”
    
    - 请求方式:OPTIONS
    - “预检”其实做检查,检查如果通过则允许传输数据,检查不通过则不再发送真正想要发送的消息
    - 如何“预检”
         => 如果复杂请求是PUT等请求,则服务端需要设置允许某请求,否则“预检”不通过
            Access-Control-Request-Method
         => 如果复杂请求设置了请求头,则服务端需要设置允许某请求头,否则“预检”不通过
            Access-Control-Request-Headers
  6. 简述你对Http协议的理解?

    HTTP(超文本传输协议)被用于在Web浏览器和网站服务器之间,以明文方式传递信息,不提供任何方式的数据加密,因此使用HTTP协议传输隐私信息(如:银行卡号、密码等支付信息)非常不安全。
    
    为了解决这一安全缺陷,网景公司设计了SSL(Secure Sockets Layer)协议,在HTTP的基础上加入了SSL(Secure Sockets Layer)协议,SSL依靠SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。从而诞生了HTTPS(安全套接字层超文本传输协议)。
    
    简单来说,HTTPS协议="SSL+HTTP协议"构建的可进行加密传输、身份认证的网络协议,是HTTP的安全版。
  7. 简述你对Https协议的理解?

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

    **Accept**:浏览器可接受的MIME类型;
    **Accept-Charset**:浏览器可接受的字符集;
    **Accept-Encoding**:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间;
    **Accept-Language**:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到;
    **Authorization**:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中;
    **Connection**:表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小;
    **Content-Length**:表示请求消息正文的长度;
    **Cookie**:这是最重要的请求头信息之一;
    **From**:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它;
    **Host**:初始URL中的主机和端口;
    **If-Modified-Since**:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答;
    **Pragma**:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝;
    **Referer**:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。
    **User-Agent**:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用;
    **UA-Pixels**,UA-Color,UA-OS,UA-CPU**:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。
  9. 列举常见的http请求方法及作用?

    1. GET
    GET提交的数据会放在URL之后,也就是请求行里面,以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test1&id=123456
    GET提交的数据大小有限制(因为浏览器对URL的长度有限制)
    1. HEAD
    与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)
    1. POST
    POST方法是把提交的数据放在HTTP包的请求体中.而POST方法提交的数据没有限制.
    1. PUT
    向指定资源位置上传其最新内容。
    1. DELETE
    请求服务器删除Request-URI所标识的资源。
    1. TRACE
    回显服务器收到的请求,主要用于测试或诊断。
    1. OPTIONS
    这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
    1. CONNET
    HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。
  10. 列举常见的http响应状态码。

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

    表示需要持久连接
  12. django请求生命周期?

    具体解释
    1. 浏览器请求,wsgi.py,它封装这socket,request对象,request对象给中间键,中间件根据middleware封装的中间件一层一层向下执行,自动执行每个中间件中的请求函数
    2. 执行顺序从上到下,例如,我们把自定义的中间件放在session中间件的上边,那么session就不起作用了,所以自定义的中间件是放在最下边位置
    3. 中间件加工完之后,给了url控制器,然后执行视图函数views,视图函数再通过orm与数据库进行交互,并且渲染页面
       **注意如果此处没有return值,默认返回的是None,表示正常,向下执行,如果return值是别的值,那么就不会向下执行了,直接执行响应中间件的response方法给浏览器了**
    4. 执行完成后,页面需要间数据返还给浏览器,不需要经过url,但是还会经过中间件
    5. 中间件中执行process_response方法
  13. 什么是wsgi?

  14. 什么是MVC ?什么是MTV?

    MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),具有耦合性低、重用性高、生命周期成本低等优点。
    ​      M: model 模型 操作数据库
    ​      V: view 视图 展示页面 HTML
    ​      C: controller 控制器 调度 业务逻辑
    MTV
    Model(模型):负责业务对象与数据库的对象(ORM)
    Template(模版):负责如何把页面展示给用户
    View(视图):负责业务逻辑,并在适当的时候调用Model和Template
    此外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template 
  15. django中间件作用以及应用场景?

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

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

  18. django 如何执行原生SQL?

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

  20. cookie和session的区别?

  21. django的orm中on_delete的作用?

  22. 描述crm有哪些功能?

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

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

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

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

  27. CRM中有哪些技术点?

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

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

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

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

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

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

第二部分 补充题

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

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

  3. django中如何设置缓存?

  4. django中信号的作用?

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

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