面试100问100答

Posted wjs521

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试100问100答相关的知识,希望对你有一定的参考价值。

1、说说你知道的第三方组件?

  Numpy     提供了很多高级的数学方法

  Requests      http库

  Scrapy     一个快速、高层次的屏幕抓取和web抓取框架

  Scapy     数据包探测和分析库

  redis     速度快、支持丰富的数据类型、支持事务、支持持久化的数据库

  pymysql      python自带的数据库

  pandas     基于Numpy的一种工具,提供了大量快速便捷处理数据的函数和方法。

  bs4       作用:能够快速方便简单的提取网页中指定的内容,给我一个网页字符串,然后使用它的接口将网页字符串生成一个对象,然后通过这个对象的方法来提取数据

  selenium    是web应用程序的测试工具

2、你所知道的web框架有哪些?

  Django、Flask、Tornado(天生异步)

3、Django、Flask常用的组件

  Django:

    forms:主要功能是检验字段的功能,校验表单中的键值对的功能(form.Form)

    auth:用户认证组件  from django.contrib import auth 

    中间件:做一些处理

    modelForm:多个form表单

    orm:

    缓存:将常用的数据保存到内存中

    信号:会触发回调函数

    序列化:Ajax会返回json数据,需要序列化

    cookie:浏览器每次发送请求带着cookie,服务器进行认证    response.set_cookie()设置cookie,response为HttPResponse实例化的对象

    session:是基于cookie实现的会话跟踪技术

  Flask:

    script:通过命令行的形式来操作flask

    SQLalchemy: 是一个操作关系型数据库的ORM工具。

    Migrate:基于alembic进行的一个封装,并集成到flask中,而所有的迁移操作其实都是alembic做的,它能跟踪模块的变化,并将变化映射到数据库中。

    jinjia2:模板语言

4、Django提供了哪几种缓存方式?

  开发调试缓存

  内存缓存

  文件缓存

  数据库缓存

  Memcache缓存(使用python-memcache模块)

  Memcache缓存(使用pylibmc模块)

  经常使用文件缓存和Memcache缓存

5、Django、Flask的相同和不同点?

  相同:    wsgi、路由、视图、模板(后三个web框架都有)

  不同: Flask小而精,

      Django大而全,主要慢在 Django ORM 与数据库的交互上

6、跨域解决的方案?

  跨域造成的原因:由于浏览器的同源策略,会阻止不同协议,不同端口,不同域名、二级域名造成的

  解决方法

    JSONP:同源策略不会阻止脚本标签的src(script标签),利用这一特点来解决。注意:JSONP只能是GET请求。(回调函数返回JSON字符串)

    CORS:服务器设置Access-Control-Allow-OriginHTTP响应头之后,浏览器将会允许跨域请求(添加响应头)

  我们线上不存在跨域,我们都部署到了同一个域名下

7、什么情况会产生跨域?

  协议、端口、域名、二级域名不同

8、什么是反射?应用场景?

  反射:通过字符串的形式,去模块中寻找指定函数,并执行。是一种基于字符串的事件驱动。

    四个内置函数:getattr、hasattr、setattr、delattr

  应用场景:CBV,Django中间件引入,Flask上下文

9、什么是粘包?

  粘包:因为有缓存的存在,当客户端发送的数据短小,时间间隔短时,会合在一起发送给服务端,服务端不知道如何拆分造成的数据混乱。

    当发送的数据过大时也会被拆开发送。

  其实是客户端有Nagle算法,有合包、拆包机制。只有TCP才会发生。

  使用struct来解决粘包问题

10、Django rest framework框架中都有哪些组件?

  • 1.序列化组件:serializers  对queryset序列化以及对请求数据格式校验
  • 2.路由组件routers 进行路由分发
  • 3.视图组件ModelViewSet  帮助开发者提供了一些类,并在类中提供了多个方法
  • 4.认证组件 写一个类并注册到认证类(authentication_classes),在类的的authticate方法中编写认证逻
  • 5.权限组件 写一个类并注册到权限类(permission_classes),在类的的has_permission方法中编写认证逻辑。 
  • 6.频率限制 写一个类并注册到频率类(throttle_classes),在类的的allow_request/wait 方法中编写认证逻辑
  • 7.解析器  选择对数据解析的类,在解析器类中注册(parser_classes)
  • 8.渲染器 定义数据如何渲染到到页面上,在渲染器类中注册(renderer_classes)
  • 9.分页  对获取到的数据进行分页处理, pagination_class
  • 10.版本  版本控制用来在不同的客户端使用不同的行为
  • 在url中设置version参数,用户请求时候传入参数。在request.version中获取版本,根据版本不同 做不同处理

11、TCP和UDP的区别?

  TCP:是全双工,面向连接的,面向字节流的,速度慢,三次握手,四次挥手,可靠的,点到点连接

  UDP:是无连接的,面向数据报的,速度快,不可靠,UDP支持一对一,一对多,多对一和多对多的交互通信     

12、三次握手和四次挥手?

  三次握手:必须是客户端先发起连接请求,然后服务端返回确认连接请求,最后客户端给服务端发确认请求,握手成功。

  四次挥手:客户端和服务端都可以先发断开请求,假如客户端先发断开请求,服务端发送确认断开请求,再把没法完的数据发送完,客户端发出确认断开连接。

13、OSI7层模型

  应用层:http、https、ftp

  表示层

  会话层

  传输层:TCP/UDP

  网络层:ip

  数据链路层:arp

  物理层

14、http协议

  超文本传输协议,基于TCP协议的,明文传输,无状态、无连接,

  数据传输遵循的规范:数据传输格式(请求头,响应体)

            无状态短连接

  端口:80

  HTTP协议永远都是客户端发起请求,服务器回送响应。

15、http协议常见的请求头及作用?

  Accept:浏览器可以接受的MIME类型。

  Accept-Encoding:浏览器申明自己可接收的编码方法。

  User-Agent:告诉HTTP服务器,客户端使用的操作系统和浏览器的名称和版本。

  Content-Type:例如:Content-Type: application/x-www-form-urlencoded。

  Cookie:最重要的请求头之一,将cookie的值发送给HTTP服务器。

16、响应状态码

  200:成功

  301:永久重定向

  302:重定向

  303:redirect到其他页面

  304:资源自上次取得后,无更改,可直接从本地的缓存获得。

  400:客户端请求有语法错误

  401:请求未经授权

  403:服务器收到请求,但是拒绝提供服务

  404:请求资源不存在

  500:服务器发生错误

  503:服务器目前不能处理客户端的请求

  504:网关超时,服务器作为网关或代理,但是没有及时从上游服务器收到请求。

  505:服务器不支持请求中所用的HTTP协议版本

  

 

 

        

  

以上是关于面试100问100答的主要内容,如果未能解决你的问题,请参考以下文章

面试问题100问(一)

#yyds干货盘点#Java面试经典100问

SQL面试 100 问

100页6W字的Java面试题,去过大厂面试的程序员都说被问到过

C#经典面试题100道

OSPF网络面试100问