Django理论30道

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.什么是线程

  1. 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位

  2. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务

  3. 无论你启多少个线程,你有多少个cpu, Python在执行的时候会淡定的在同一时刻只允许一个线程运行

  4. 进程本身是无法自己执行的,要操作cpu,必须创建一个线程,线程是一系列指令的集合

  5. 所有在同一个进程里的线程是共享同一块内存空间的,不同进程间内存空间不同

  6. 同一个进程中的各线程可以相互访问资源,线程可以操作同进程中的其他线程,但进程仅能操作子进程

  7. 两个进程想通信,必须要通过一个中间代理

  8. 对主线程的修改可能回影响其他子线程,对主进程修改不会影响其他进程因为进程间内存相互独立,但是同一进程下的线程共享内存

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.热数据和冷数据分别是啥?
热数据就是经常访问的数据,比如购物车,首页分类等数据
冷数据就是经常不被使用的数据,比如外卖的历史订单

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值