目录
- 双写一致性
- 数据库如何处理的?
- 用过什么云产品
- 看看数据库
- celery
- 多线程
- mysql
- 1千万w,性别字段(男女),查询时候,这个字段要不要加索引
- 实现踢下线
- 实现黑名单功能
- 深浅拷贝是什么
- 魔法方法new和init有什么区别
- python的可变和不可变数据类型是什么?
- 什么是生成器,有什么应用场景
可变类型与不可变类型
可变类型:列表,字典,集合
不可变类型:字符串,元组,整型,浮点型
常用的魔法方法
python中的魔法方法,定义在类中的一些__开头的方法,在某种情况下会自动触发
__init__:类加括号产生对象,对对象进行初始化的时候触发
__new__:类加括号产生对象,调用元类中的__new__产生一个空对象,这个方法有返回值,再触发__init__对对象进行初始化
__call__:对象加括号的时候自动触发
__getattr__:对象点一个不存在的属性的时候自动触发
__setattr__:对象点属性等于一个值的时候自动触发
__getitem__:对象['属性'],属性不存在的时候自动触发
__setitem__:对象['属性']=值的时候自动触发
上下文管理器:只要重写了__enter__和__exit__方法,就具备这个能力
with 对象 as xx:
1.写了一行行代码,这个时候就自动触发__enter__
2.上下文结束,这里写了一行代码,触发__exit__,做一些资源清理工作
类中的装饰器
-classmethod:绑定给类的方法,类调用的时候会直接将类作为第一个参数传入,对象也可以调用,对象在调用的时候会将产生对象的类,作为第一个参数传入
-staticmethod:类中定义的静态方法,类或者对象调用的时候有几个参数传几个参数
-没有写装饰器的方法,是绑定给对象的方法,对象在调用的时候会把对象作为第一个参数传入
-propty:把方法伪装成属性,这样调用这个方法的时候直接调名字就可以,不用加括号
-类中隐藏方法或者属性:__属性,__方法,但是大家统一默认隐藏写一个_就可以了
双写一致性
出现原因:因为有些接口访问的次数比较频繁,如果每次方法接口都要查询数据库,那么对资源来说是一种浪费也比较占用数据库资源,特别是当并发比较高的时候会造成数据库的崩溃,所以这些接口访问的资源我们可以放到redis缓存数据库中,每次访问这个接口资源直接去redis缓存数据库中拿就可以啦,但是这样如果我们对mysql数据库进行数据的新增或者删除,而接口访问的是redis数据库,这样就会有一个数据的误差
解决办法:
1.定时更新redis缓存数据库
2.修改数据后,删除缓存数据
3.修改数据,更新缓存
我们使用的是使用celery开启一个定时任务来进行数据的更新,虽然会有一定的延迟性,但是对于图片的接口影响不会太大
断点续传
上传途中如果中断会在本地生成一个保存中断位置的文件,下次上传的时候直接读取中断位置文件基于该位置继续上传
内网穿透
内网穿透,即内网映射,内网ip端口映射到公网,让外网访问内网的实现
可以采取的办法:
开源的:frp,ngrok
收费的:花生壳,神卓互联
缓存击穿
http与https
-ssl认证
-http和https的区别
-https=http+ssl
-http版本区别:
-0.9:底层基于tcp,每次http请求,都是建立一个tcp连接,三次卧室,请求结束需要4次挥手
-1.1:请求头中有个参数Keep-alive,可以保证多个http请求共用一个TCP连接
-2.x:多路复用,多个请求使用同一个数据包
-http请求头:x-forword-for,user-agent,cookie,referer,contenType
-http:
-请求协议
-请求首行:请求头地址,请求方式,http的版本
-请求头:key-value,x-forword-for,user-agent,cookie,referer,contenType
-请求体
-响应协议:
-响应首行:响应状态码,响应字符串描述
-响应头:key-value,响应状态码,cookie
-响应体
数据库如何处理的?
-云数据库:阿里云数据库,花钱买服务---获取账号密码---》公司不需要自己配置
-mysql
-redis
-mongodb
-自己的数据库,部署在云服务器上的数据库,是自己的
用过什么云产品
-阿里云的ecs,也就是阿里云的服务器
-阿里云的oss,对象存储
-阿里云的云短信
-七牛云,文件存储
看看数据库
-配置文件dev.py 连接的是本地的127.0.0.1
-上线只是给一个地址,端口,用户名和密码
-上线的数据库服务和项目服务,是在同一台机器
celery
-异步任务
-定时任务
-延迟任务
多线程
-怎么用的,两种方式?
-在爬虫的时候使用,类实例化得到对象Thread类,传入target任务函数,对象.start
-写一个类,继承Thread,重新run方法,写任务,类实例化得到对象
-io密集型用多线程,计算密集型使用多进程---》只针对cpython
mysql
唯一索引和联系索引:
1千万w,性别字段(男女),查询时候,这个字段要不要加索引
因为他就两种状态,联机索引是没有用的,即便建立索引,也不会走
实现踢下线
session机制---》表中把它那条记录删除
-token机制
-下线人id---》放个位置
-进入到认证类中---》
实现黑名单功能
-建立个黑名单表
-id,用户id,ip,时间
深浅拷贝是什么
深浅拷贝是对数据进行复制
对于不可变类型来说深浅拷贝都是一样的重新拷贝一份数据
对于可变类型来说如果内部嵌套的还有可变类型
浅拷贝只拷贝第一层,嵌套的拷贝的是内存地址
深拷贝是完全再复制一份出来
魔法方法new和init有什么区别
__new__产生一个空对象,有返回值,返回值是空对象
__init__给new产生的对象设置初始值,独有的属性
python的可变和不可变数据类型是什么?
值改变内存地址不变是可变类型:列表,集合,字典,文件对象
值改变内存地址改变是不可变类型:整型,浮点型,字符串,元组,布尔
什么是生成器,有什么应用场景
当函数体代码有yeild关键字的时候,函数名加括号不会执行函数体代码,而会变成一个生成器,生成器对象点__next__执行
应用场景:比如说在进行文件操作时,如果文件过大,一次性打开会占用过多的内存空间可能会造成内存溢出,使用生成器用多少拿多少,减少内存消耗
标签:__,面试题,http,请求,对象,数据库,拷贝
From: https://www.cnblogs.com/clever-cat/p/17278905.html