python99🔪免死题
python99🔪免死题
-
python 和 其他语言的区别
python: 语法简洁,开发效率高,第三方库多(机器学习,数据分析), 弱类型语言 Goland: 强类型语言,高并发
-
python2和python3的区别
# 默认解释器编码:py2使用ASCIL ,py3使用 unicode # 字符串字节 # 经典类 和 新式类 # yield from 实现协程 # 字典的 items/values/keys,python2中是列表 # 编写代码格式修改
-
运算符
v = 1 and 8 or 9 and 0 or True # and > or , and :都真取前, or:都假去后 : v = 8 or 0 or True : v = 8 or True : v = 8
-
pass 作用
代码占位
-
*args 和 **kwargs的作用
-
权限是如何实现的?
-
权限组件中有哪些表?表中都有哪些字段?
-
权限中如何实现粒度控制到按钮级别?
当用户登录成功之后,会将该用户所有权限信息放入会话中,会话中保存所有权限信息 ,格式如下: 会话权限= 用户列表:/用户/xx/xxxx/ulist User list: “/user/xx/xxxx/ulist/ User list:/user/xx/xxxx/ulist User list:/user/xx/xxxx/ulist User list:/user/xx/xxxx/ulist 用户列表:/用户/xx/xxxx/ulist 在每个页面中按钮部分会做判断。 如果user add在session.permission中 <a>编辑</a> else:
-
权限是否可以粒度控制到数据行?
可以,增加权限粒度表。限制字段,限制数据读行,跟用户/用户组挂钩
-
权限为什么要放到会话中?
权限信息是保存在数据库中,用户登录成功后会将权限信息放入会话,目的是提高效率,不需要每次请求时在去数据库做各种查询。放入会话有没有什么不好之处?无法进行权限的实时更新,需要重新登录之后才能获取最新权限。
-
CRM 主要实现了哪些功能?
- 项目解决公司销售人员日常客户维护的事宜,对于推广人员录入到公户的客户属于所有销售的共同资源,每个销售都有自己的私户,对于自己私户人员可以一直由自己维护(其他人如果成单提成依然归当前用户) ,每个私户最多有150个客户信息。 - 对于所有客户信息需要销售进行定期的客户跟进. - 对于成单客户端需要维护客户信息,购买订单记录等 - 根据区域和等于对用户信息处理和划分。 - 对销售的年度、季度、月度、周进行销售排名的同级 - 对于用户角色的划分以及权限管理 (为公司开发了一个通用的权限组件)。
-
crm: 为什么要开发?而不是去用现成的?
用2年开发了crm项目,其中一只在进行项目的维护和新功能的迭代 (由于直接对业务方可能存在功能变动) 买了一套学邦boss系统 (内置只有通用的功能)切换回去用crm。
-
有没有看过什么官方文档?
rabbmitMQ 文档 (最好) http://rabbitmq.mr-ping.com/description.html django rest framwork框架文档 (最次)
-
DRF 认证组建的实现过程
# 配置认证类:在Django项目的配置文件(settings.py)中添加DRF的认证类。DRF提供了多种认证类可供选择,例如Token认证、Session认证、基于JSON Web Token(JWT)的认证等。以下是一些常用的认证类配置示例: REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework.authentication.TokenAuthentication', 'rest_framework.authentication.SessionAuthentication', ], } # 创建用户模型和视图:创建用户模型(通常是Django的内置User模型或自定义的扩展模型),并创建相应的视图类来处理用户认证相关的逻辑 from django.contrib.auth.models import User from rest_framework import viewsets, permissions class UserViewSet(viewsets.ModelViewSet): queryset = User.objects.all() serializer_class = UserSerializer permission_classes = [permissions.IsAuthenticated] ``` 在上述示例中,`UserViewSet`是一个基于DRF的视图集(ViewSet),它使用了`User`模型和自定义的`UserSerializer`序列化器,并设置了`permissions.IsAuthenticated`权限类,要求用户必须经过身份验证才能访问相关API。 # 应用认证类:在需要进行认证的API视图中,应用适当的认证类。可以使用DRF提供的装饰器或直接在视图类中定义authentication_classes属性。 from rest_framework.authentication import TokenAuthentication from rest_framework.decorators import authentication_classes from rest_framework.views import APIView @authentication_classes([TokenAuthentication]) class MyAuthenticatedView(APIView): # 视图逻辑 ``` 在上述示例中,`MyAuthenticatedView`视图使用了Token认证类,因此在访问该视图时,需要提供有效的Token进行身份验证。 # 其他功能: 例如权限(Permissions)和限流(Throttling),来进一步保护和控制API的访问。
-
GenericAPIView 视图类的作用是什么?
- GenericAPIView结合了许多Mixin类 - ListAPIView - CreateAPIView - RetrieveAPIView - 提供了通用的HTTP方法处理 - 序列化器和查询集 serializer_class 属性 和 queryset 属性 - 认证(Authentication)、权限(Permissions)和限流(Throttling) - GenericAPIView常用的钩子方法和属性 - 钩子函数: - get - post - put - patch - delete - perform_create(self, serializer) 在创建对象之前执行自定义逻辑。 - perform_update(self, serializer) 在更新对象之前执行自定义逻辑。 - perform_destroy(self, instance) 在删除对象之前执行自定义逻辑。 - 可扩展属性 - serializer_class 指定用于序列化和反序列化的序列化器类 - queryset 指定用于数据库查询的查询集 - authentication_classes 指定用于身份验证的认证类列表 - permission_classes 指定用于权限检查的权限类列表 - throttle_classes 指定用于限流的限流类列表 - pagination_class 指定用于分页的分页类
-
DRF 继承过哪些视图类?
# API # ModelViewSet
-
django rest framework 框架的作用
# 1. 遵循restful接口规范 # 2. 提供内置功能: - 版本管理 - 认证 - 权限 - 节流 - 序列化 - 渲染 - 分页。。。
-
如何理解restful规范
- https 代替 http - 接口有 api 标识 ,版本建议 - https://www.xxx.com/api/v1 - https://api.xxx.com/v1 - 面向资源开发,任何东西都是资源,用英文名词来表示资源 - method 做不同操作 - get - post - delete - put - patch - 条件 https://www.xxx.com/api/v1/order/?page=11&date=2023 - 使用状态码 - 200 - 201 - 301 - 403 - 404 - 500 - 错误信息返回 {"code":200,"msg":"获取xxx成功!"} - 返回数据不同 根据不同的method,返回不同形式的数据 - get,返回列表形式数据 - post,返回单个添加成功的数据 {code:200,data:{id:1,title:"xx"}} - put , 同 post - 返回url {code:200,data:{id:1,depart_url:"https://www.xxx.com/api/v1/order/1"}}
-
什么 是 RPC ?
# 高效传输数据格式
# Server # -*-coding:utf-8-*- import Pyro4 from Pyro4 import expose class Calculator(object): @expose def add(self, a, b): return a + b @expose def subtract(self, a, b): return a - b if __name__ == '__main__': daemon = Pyro4.Daemon() uri = daemon.register(Calculator) print("URI服务器:", uri) daemon.requestLoop()
# client # -*-coding:utf-8-*- import Pyro4 import Pyro4 uri = input("输入服务器URI:") calculator = Pyro4.Proxy(uri) if __name__ == '__main__': a = 10 b = 5 result = calculator.add(a, b) print("加法结果:", result) result = calculator.subtract(a, b) print("减法结果:", result)
-
什么是wevservice
开发手册
-
session 和 cookie的区别
session 保存在服务端,不受长度限制 cookie 保存在浏览器,受长度限制
-
使用Django的ORM实现id不等5的数据查询
models.表类.objects.exclude(id=5)
-
Django ORM 执行原生SQL
# extra: Entry.objects.extra(where=["foo='a'OR bar = 'a'","id>%s"], params=[9]) # raw : UserInfo.objects.raw('select * from userinfo')connections # eg: from django.db import connection,connections cursor = connection.cursor() # cursor =connections['default'].cursor() cursor.execute(""SELECT * from auth_user where id = %s",[1]) row = cursor.fetchone() # fetcha11()/fetchmany(..)
-
django 的 ORM 的
F
有什么作用?# F:对某个数据列 自由操作 # 例如: 用户表中包含用户信息和薪水,请通过ORM将所有用户的薪水在自己原来薪水基础上+1000 models.UserInfo.objects.a11( .update(salary=F('salary')+1000)
-
django 的 ORM 的
Q
有什么作用?# 构造复杂的查询条件
-
django ORM 批量创建数据
# buld_create 函数 .bulk_create([obj1,obj2,obj3])
-
django 中的 cbv 和 fbv的区别
# CBV 是类视图, # FBV 是函数视图 class View.as_view() == function view
-
Django 中的name什么作用
# 基于 name 命名,反向创建 URL 路由
-
django的中间件作用?
# 可以对django中所有 ` 请求处理之前 ` 和 `处理之后` 进行功能的扩展。应用场景: 1。自定义权限组件中使用它做权限控制。 2. django内置实现的csrf认证。 3。 django内置实现的session功能 4。用户认证。 5还可以做:用户访问频率限制 (已登录用户) 6,黑名单和白名单。 注意:执行流程和5个方法
-
Django 生命周期
START: 请求到来之后,先到达wsgi (本质实现了socket服务端,用于接收用户请求,wsgi是web服务网关接口,实现此协议有wsgiref、uwsgi),然后将请求转交给django - 1. 接下来到达diango的中间件,执行中间件的process request方法 - 2. 接下来进行路由匹配,路由匹配成功找到指定函数之后。 - 3. 接下来执行process_view方法(旦出错会执行process_exception方法) - 4. 视图函数,视图函数可以调用ORM操作数据,也可以调用模板进行模板渲染。 - 5. 接下来按照倒叙的形式执行中间件的 process_response方法。 - 6. 用数据返回给用户。
-
flask 上下文
基于 : LocalStack,衍生出 - request_ctx - app_ctx_stack
-
https 加密理解
https是安全的http,它等同于http+ss1 - 第一步: 服务端需要向专门颁发证书的机构申请ca证书,证书中本质包含公钥和企业信息 (阿里云免 费) - 第二步:客户端向服务端发送请求,服务端会将包含公钥的证书发给客户端,自己保留私钥。 - 第三步:客户端浏览器要验证证书的合法性。 - 第四步:客户端在内存中生成一个对称秘钥,通过公钥对对称秘钥进行加密,然后发给服务端。 - 第五步:服务端接收到密文,然后使用私钥进行解密,解密之后得到 对称密码。 之后两端通信时,就使用对称密码进行加密和解密。 观点: a。 http协议是明文的不安全的。 b, https是安全的,那么他是如何实现安全的呢? - 对称加密,两端用同一个密码进行加密和解密 - 非对称加密,公钥,专门用于加密。私钥,专门用于解密c。 https的实现过程? # 问题: http和https有什么区别? - 端口不同: http默认用80端口、https用443端口。 - 数据内容: http是明文、https是密文(使用对称密码加密),对称秘钥是客户端生成并通过非对称密码加密发送给服务端。非对称密码是客户端在第一次访问时集成在证书中返回给客户端(客户端会对证书进行验证)
-
浏览器同源策略
# 产生原因: 域名,端口,二级域名不一致引发 # 解决 - jsonp - 后段做跨域 cors 设置响应头
-
redis过期策略
redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。redis 提供 6种数据淘汰策略: voltile-1ru: 从已设置过期时间的数据集 (server.db[i].expires)中挑选最近最少使用的数据淘汰 volatile-ttl: 从已设置过期时间的数据集 (server.db[i].expires) 中挑选将要过期的数据淘汰 volatile-random: 从已设置过期时间的数据集 (server.db[i].expires)中任意选择数据海汰 a11keys-1ru: 从数据集 (server.db[i].dict) 中挑选最近最少使用的数据淘汰a11keys-random:从数据集 (server.db[i].dict) 中任意选择数据淘汰 no-enviction (驱逐) : 禁止驱逐数据
-
Redis AOF 和 RDB的区别
AOF:基于日志做的持久化,保证数据的完整性。即:记录所有执行的命令,恢复时将所有命令执行一遍。 RBD:基于快照做的持久化,速度快。即: 定期对redis中的数据进行备份。
-
Redis 和 memcache的区别
数据类型: redis有5种、memcached有一种数据类型 持久化: redis支持持久化、memcached不支持。 高可用: redis支持、memcached不支持。 分布式集群: redis支持cluster、memcached不支持,
-
redis的数据类型
str # 字符串 list # 列表 hash # hash set # 集合 sorted set # 有序集合
-
SQL 注入
# 拼接SQL语句时,条件存在 为真条件 如: xxx=xxx or 1==1 # 如何防止SQL注入 使用 pymysql 模块的 execute函数拼接参数
-
慢日志的作用
执行慢日志 - 执行 较慢的SQL - 未命中索引的SQL - 优化SQL语句
-
创建索引,有哪些情况无法命中
- like - or - != - 数据类型不一致 ,查询索引字段时类型不一致 str 和 float - order by 索引字段 - 组合作引最左前缀原则 # 最左前缀 原则
-
数据库优化方案
- 数据库读写分离 - 做数据缓存,redis,memcached - 分库分表 - 设计表时,定长的放前面,变长的放后面 - 数据方内存
-
mysqldump
mysqldump -h localhost -u用户名 -p密码 database > dump.sql
-
varchar 和 char 的区别
varchar 变长 char 定长
-
Left join 和 right join的区别
left join , 以左为主 right join , 以右为主
-
事物的特性
原子性 一致性 隔离性 持久性
-
mysql 引擎
myisam : 不支持事物,支持表锁,速度快,支持全文索引 innodb : 支持事物,支持表锁和行锁
-
io多路复用
# 坚挺多个IO对象是否发生变化 select:最多监听1024,轮循的方式变化。 poll:不再限制 IO对象的个数,轮循的方法检查 epoll:不再限制IO对象的个数,回调的方式检查 # 没用过!!!
-
GIL 新版不清楚,旧版下列参考 todo
GIL 全局解释器锁 - 同一时刻,只允许一个进程的一个线程被CPU调度 - 目的:保护解释器的数据安全
-
进程,协程,线程
进程: 计算机资源分配的最小单元 线程: CPU调度的最小单元 协程: 微线程,本质上还是通过线程实现并发
-
断点续传
- 保存断开时,数据传输的数据量大小 - 保存断开时,数据传输的字节数 - 保存断开时,数据传输的前后文件流的seek,seek()函数用于设置文件指针的位置
-
socket 代码
- server - 套接字 - bind 绑定端口和ip - listen - accept 接受数据 - client - 套接字 - connect 链接绑定端口和ip - send 发送数据
-
粘包现象
```
两个数据发送时,经过缓存区,数据包产生粘连现象
# struct 模块解决 数据粘包问题
```
-
TCP 和 UDP 的区别
TCP :安全,可靠,数据流,一致性,慢 UDP :不可靠,不安全,报文,容易丢包,快
-
osi七层模型
物理层:0,1电信号 物理链路层:网线,双绞线 网络层:IP解析 arp协议 传输层:端对端链接 会话层:建立会话 表示层:数据格式转化 应用层: 程序
-
TCP 的三次握手,四次挥手
-
cs架构 , bs架构
-
Python 元类
# 常见 class Foo(object): pass # 底层都是通过type创建类 type('Foo',(object,),{}) # metaclass 指定类是由谁来创建 class Foo(object,metaclass=xxx): pass
-
类的下划线函数
__new__ 创建对象,单例模式 __call__ 回调函数 __enter__ 和 __exit__ 上下文管理 __getitem__ __setitem__ __delitem__ __add__
-
python 类继承 MRO
super 通过MRO算法继承类
-
什么是生成器
yield 是程序保存某一个时刻的状态
-
迭代器,从前到后,无法回退
内部存在 __next__()方法 __next__一次后数据就消失了