1.mysql 左连接 右连接 内连接的区别
内连接,显示两个表中有联系的所有数据
左连接,左表为参照,显示所有数据
右连接,以右表为参照显示数据
2.Django的框架流程,有那些中间件
框架流程:
1)浏览器发送请求
2)Django网站,产生request对象
3)调用中间件类的process_request
4)url的匹配(通过URL找到相应的视图)
5)调用中间件的类的process_view
6) 调用我们自己的视图view
7)调用中间件类的process_response
8)process_response 将响应内容返回给用户
3.linux的常用命令的使用(find和grep命令常问)
cd 、touch、rm –fr 、mv 、touch 、vi 、vim 、
cp 、ls、 ll、pwd 、rmdir(空目录) 、cat 、more 、
tail 、chattr 、lsattr 、file 、zip 、unzip 、tar
find / -name "查询对象"
ps -ef|grep "进程"
4.GIL锁,协程、线程,进程的关系,内存回收
GIL全局解释器锁 : 在Cpython中,由于Global Interpreter Lock,只有一个线程可以同时执行python代码
协程: 又称微线程 ,协程能保留上一次调用的状态,每次过程重入的时候,就相当于进入上一次调用的状态,换种说话,进入上一次离开时所处的逻辑流的位
协程必须在只有一个单线程里实现并发
进程: 操作系统会以进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位
进程就是一个应用程序在处理机上的一次执行过程,它是一个动态的概念,而线程是进程中的一部分,进程包含多个线程在运行。一个程序至少有一个进程,一个进程至少有一个线程.
内存回收: python内有个定时器,定期的会刷新,如果发现内存中数据被引用了,就会被回收,这个就是内存的回收机制
[引用计数法』的原理是:每个对象维护一个ob_ref字段,用来记录该对象当前被引用的次数,每当新的引用指向该对象时,它的引用计数ob_ref加1,
每当该对象的引用失效时计数ob_ref减1,一旦对象的引用计数为0,该对象立即被回收,对象占用的内存空间将被释放
5.python装饰器,args和kwargs函数,单列类,冒泡排序
装饰器:装饰器实际上就是为了给某程序增添功能
*args 用来将参数打包成tuple给函数体调用
**kwargs的使用方法
参数arg、*args、**kwargs三个参数的位置必须是一定的。必须是(arg,*args,**kwargs)这个顺序,否则程序会报错。
单例类:
只有一个实例
6.数据库索引和锁
索引一般有 普通索引 全文索引 组合索引 唯一索引(主键)
锁:悲观锁和乐观锁
7.Django和Django RESTFramework的区别
Django-REST framework相比于django:是现在流行的前后端分离框架,依托于Django,使后端仅仅作为数据的返回,通常以json格式返回
通常说的前后端分离就是这么来的
8.什么是序列化?
序列化:就是把不可传输的对象转换为可存储或可传输的过程
反序列化:就是把在磁盘,等介质中的数据转换为对象
pickle模块和json模块
9.celery怎么处理消息队列丢失的问题?
celery异步消息队列;处理消息队列丢失:写定时任务,例如更新订单状态:去数据库里扫表,拿出处理中的订单,去挨个轮询状态
10.celery有哪些消息队列丢失的情况
队列的消息丢失有几种情况:
1)消费者(宕机、死锁、网络抖动等等)导致,消息队列通过判断consumer连接情况来判断消息是否被重新放入队列
2)消费者业务逻辑异常,但是未手动执行noack导致
3)大并发写入队列导致,消息丢失
11.假如有一个功能是优惠券,怎么做?思路怎么样
我说说我php的做法 :
生成随机字符串放在列表中 ,优惠券存在这个数组中,然后随机发放