面试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-Origin
HTTP响应头之后,浏览器将会允许跨域请求(添加响应头)
我们线上不存在跨域,我们都部署到了同一个域名下
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答的主要内容,如果未能解决你的问题,请参考以下文章