Django理论30道
1.字符串常用方法:
find查找 index查找 join拼接
upper小写转大写 lower大写转小写
count元素个数 split分割
2.列表的常用方法:
index查找 pop默认尾部删除
append单个添加元素 remove移除元素
in 元素是否存在 sort从小到大排序
count元素个数 extend批量末尾添加
3.集合常用方法:
union并集 difference差集 intersection交集
add增 len元素个数 set去重
4.字典常用方法:
for 循环遍历 get 根据key获取元素
del删除某key clear清除所有 keys键
values获取所有值 update修改key的值
5.什么是进程
进程是资源分配最小单位,当一个可执行程序被系统执行(分配内存等资源)就变成了一个进程。
在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行。
进程的出现让每个用户感觉到自己独享CPU,因此,进程就是为了在CPU上实现多道编程而提出的。
进程之间有自己独立的内存,各进程之间不能相互访问。
6.什么是线程
-
线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位
-
一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务
-
无论你启多少个线程,你有多少个cpu, Python在执行的时候会淡定的在同一时刻只允许一个线程运行
-
进程本身是无法自己执行的,要操作cpu,必须创建一个线程,线程是一系列指令的集合
-
所有在同一个进程里的线程是共享同一块内存空间的,不同进程间内存空间不同
-
同一个进程中的各线程可以相互访问资源,线程可以操作同进程中的其他线程,但进程仅能操作子进程
-
两个进程想通信,必须要通过一个中间代理
-
对主线程的修改可能回影响其他子线程,对主进程修改不会影响其他进程因为进程间内存相互独立,但是同一进程下的线程共享内存
7.进程和线程的区别是什么:
进程包含线程
线程共享内存
进程的内存是独立的
线程可以帮助应用程序同时做几件事
一个线程可以控制或者操作同一个进程里面的其他线程,进程只能操作子进程
8.什么是协程:
协程是一个用户态的轻量级线程,拥有自己的寄存器上下文和栈。能保留上一次调用时的状态(即所有局部状态的一个特定组合P),每次过程重入时,就相当于进入上一次调用时的状态。最重要的作用是再单线程的条件下实现并发的效果,但实际上还是串行的
9.面向对象的三大特征:
封装:防止数据被随意修改,使外部程序不需要关注对象内部构造,只需要通过对外提供接口进行访问
继承:一个类可以派生出子类,父类定义的属性和方法自动被子类继承
多态:是面向对象的重要特性,简单说:一个接口,多种实现
10.列举四个常见的魔法方法,并写出他们的执行顺序:
new:先于__init__,每生成一个实例对象执行一次,创建实例对象
init:每生成一个实例对象,执行一次,初始化数据
call:后于__init__方法,类名()使用类再加一个括号调用
del:删除无用的内存对象
11.python中四大高阶函数举例说明
lamdba:匿名函数
filter:过滤函数
map:地图函数
sorted:排序
reduce:求和计算
12.装饰器的定义及使用场景:
不能修改被装饰的函数的源代码,不能修改被装饰函数的调用方式,为其他函数添加功能
场景:
授权:装饰器能有助于检查某个人是否被授权去使用一个web应用的端点(endpoint)。
日志:在记录日志的地方添加装饰器
缓存:通过装饰器获取缓存中的值
13.生成器定义和作用:
定义:
生成器可以理解为一种数据类型,这种数据类型自动实现了迭代器协议,在Python中,一边循环,一边计算的机制,称为生成器。
不必创建完整的list,从而节省大量的空间
14.深浅拷贝的区别:
深拷贝:会独立开辟一个新空间,将拷贝的数据放进去,原始数据改变,深拷贝的数据不会改变
浅拷贝:只会复制一层,原始数据改变,浅拷贝的数据也会改变
15.MySQL事务,四大特性和四个隔离界别分别是什么:
原子性 一致性 隔离性 持久性
未提交读:脏读
提交读:不可重复读
可重复读:幻读
可串行读
16.MySQL慢查询:
MySQL的慢查询,全名是慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL,中响应时间超过阀值的语句。具体环境中,运行时间超过long_query_time值的SQL语句,则会被记录到慢查询日志中。
long_query_time的默认值为10,意思是记录运行10秒以上的语句。默认情况下,MySQL数据库并不启动慢查询日志,需要手动来设置这个参数
当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响
此外,慢查询日志支持将日志记录写入文件和数据库表
17.redis五大数据类型:
哈希hash 字符串(string) 集合set 有序集合sortedset 列表list
18.redis事务:
redis可以一次执行多个命令,本质是一组命令的集合
一个事务中的所有命令都会序列化,按顺序串行化的执行而不会被其他命令插入
作用:一个队列中,一次性,顺序性,排他性的执行一系列命令
19.MySQL主从同步原理:
从数据库(Slave)是主数据库的备份,当主数据库(Master)变化时从数据库要更新,这些数据库软件可以设计更新周期。这是提高信息安全的手段。主从数据库服务器不在一个地理位置上,当发生意外时数据库可以保存。
20.python的垃圾回收机制,并简述其原理
当一个对象的引用被创建或复制时,对象的引用计数加1,当一个对象的引用被销毁时,对象的引用计数减1
当对象的引用计数减为0时,就意味对象已再没被使用,可以将其内存释放掉
21.简述redis主从同步的原理
和MySQL主从复制的原因一样,redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况
为了分担读压力,redis支持主从复制,redis的主从结构可以采用一主多从或者级联结构
redis主从复制可以根据是否全量,分为全量同步和增量同步
22.Linux常见命令:
cd 切换目录
ls 显示目录的内容
mkdir 创建目录
touch 创建文件
pwd 查看目录所在的路径
rm 删除
ln 创建硬链接
ln -s 创建软链接
cp 复制文件和目录
23.简述常见数据结构,并说明其特点:
栈:是一种数据结构,可以理解为只能在一端进行插入或删除操作 后进先出
队列:是一种数据结构,仅允许在列表的一端插入另一端删除 先进先出
链表:每个元素都是一个对象,每个对象称为一个节点,通过各个节点间的相互链接,最终串联成一个链表
数组:相同数据类型的元素按一定顺序排列的集合,特点就是:寻址读取数据比较容易,插入和删除比较容易
字典对象:哈希表(也叫散列表),根据键值对(key-value)而直接进行访问的数据结构
24.redis布隆过滤器:
一种数据结构,是由一串很长的二进制向量组成,可以将其看成一个二进制数组。既然是二进制,那么里面存放的不是0,就是1,都是初始默认值都是0
可以判断某个数据一定不存在,但是无法判断一定存在
相比于传统的List/Set/Map等数据结构,更高效,占用空间更少,但是缺点是其返回的结果是概率性的,而不是确切的
25.面向对象的静态方法,类方法和属性方法:
静态方法:
1.作用:静态方法可以更好的组织代码,防止代码变大后变得比较混乱
2.特性:静态方法只是名义上归类管理,实际上静态方法里访问不了类或者实例中的任何属性
类方法:
1.作用:无需实例化,直接被类调用
2.特性:类方法只能访问类变量,不能访问实例变量
属性方法:
作用:属性方法把一个方法变成一个属性,隐藏了实现细节,调用时不必加括号直接d.eat即可调用self.eat()方法
26.MySQL中锁的分类:
1.按操作划分:DML锁,DDL锁
2.按锁的粒度划分:表级锁,行级锁,页级锁
3.按锁级别划分:共享锁,排他锁
4.按加锁方式划分:自动锁,显示锁
5.按使用方式划分:乐观锁,悲观锁
27.redis分布式锁:
分布式锁本质是占一个坑,当别的进程也要来占坑时发现已经被占,就会放弃或者稍后重试
占坑一般使用setnx(sex if not exists)指令,只允许一个客户端占坑
先来先占,用完了在调用del指令释放坑
但是这样有一个问题,如果逻辑执行到中间出现异常,可能导致del指令没有被调用,这样就会陷入死锁,锁永远无法释放
为了解决死锁的问题,我们拿到锁时,可以加上一个expire过期时间,这样即使出现异常,当达到过期时间也会自动释放锁
28.如何解决redis并发竞争key的问题?
分布式锁
这种情况, 主要是准备一个分布式锁大家去抢锁,抢到锁就做set操作
加锁的目的实际上就是把并行读写改成串行读写的方式,从而避免资源竞争
消息队列
在并发量过大的情况下,可以通过消息中间件进行处理,把并行读写进行串行化
把操作放在队列中使其串行化,必须一个一个执行
29.为什么使用集群及解决方案
在大数据高并发场景下,单个redis实例往往会无法应对
首先redis内存不易过大,内存太大会导致rdb文件过大,导致主从同步时间过长
其次在CPU利用率中上,单个redis实例只能利用单核,数据量太大,压力就会特别大
解决方案:
.codis是redis集群解决方案之一,codis是GO语言开发的代理中间件
当客户端向codis发送指令时,codis负责将指令转发给后面的redis实例来执行,并将返回结果转发给客户端
30.热数据和冷数据分别是啥?
热数据就是经常访问的数据,比如购物车,首页分类等数据
冷数据就是经常不被使用的数据,比如外卖的历史订单