redis的数据类型及应用场景
string 字符串
list 列表
hash 哈希
set 集合
zset 有序集合
redis的优缺点
优点:
性能快、基于内存实现、是目前最快的key-value数据库
可以持久化
数据类型丰富,可以满足多种需求
支持事务
哨兵机制,可以实现分布式集群
缺点:
断电可能会造成数据丢失
作为缓存的时候,容易出现缓存雪崩、击穿、穿透
什么是装饰器,原理应用场景及项目中哪些地用到
1.装饰器的实现是由闭包支撑的
2.装饰器本质上是⼀个python函数,它可以在让其他函数在不需 要做任何代码的变动的前提下增加额外的功能;
3.装饰器的返回值也是⼀个函数的对象
应用场景:
1.可以在外层函数加上时间计算函数,计算函数运行时间;
2.计算函数运行次数;
3.可以用在框架的路由传参上;
python的是如何做内存管理的
1. 引用计数:赋值+1,删除-1
2. 垃圾回收:当引用计数的值为0的时候,会释放资源。达到了垃圾回收的阈值,触发标记-清除
3. 内存池管理:回收的内存并不会返回给操作系统,而是留在自己内存池中。
什么是元类
由于类也是一种对象,那么就存在一种途径来创建一个类,元类就是创建类的类。
什么是反射
需要执行对象里的某个方法,或需要调用对象中的某个变量,但是由于种种原因我们无法确定这个方法或变量是否存在,这是我们需要用一个特殊的方法或机制要访问和操作这个未知的方法或变量,这中机制就称之为反射
mysql中的事务有什么作用?事务的特性有哪些?
原子性(Atomicity);指事务是一个不可分割的单元,事务中的操作要么全部执行,要么全部不执行。
一致性(Consistency);事务执行前后数据的完整性必须保持一致。这里的完整性包括实体完整性、参照完整性、用户定义的完整性。
隔离性(Isolation);多个用户并发访问数据库时,数据库为每一个用户开启一个事务,多个事务并发执行时,相互之间是隔离开的,互不影响。
持久性(Durability);事务一旦被提交,对数据库中数据的改变是永久性性的。
读未提交
事务A更新了数据,但是还没提交;事务B就读取到A更新的数据,事务A回滚后,B就看不到更新的数据。这种现象就是读未提交,即==脏读==
读已提交
事务A更新数据并完成提交;事务B内部就可以读取到A更新的数据。
可重复读
事务A更新数据并完成提交;在事务B提交之前,其内部无法读取到A更新的数据,只能读取到之前的旧数据。(普通查询,即**快照读**)
缺点:容易出现**幻读**:
串行(xing)化
所有事务串行执行,一个执行完成,再执行另一个。
事务的隔离级别?
事务隔离级别 脏读 不可重复读 幻读
读未提交(read-uncommitted) 是 是 是
不可重复读(read-committed) 否 是 是
可重复读(repeatable-read) 否 否 是
串行化(serializable) 否 否 否
mysql中有哪些锁?
悲观锁:在查询语句上加锁,保证多事务**写入时**串行执行。
乐观锁:查询时不加锁,在变更时对比原数据与当前重新查询的数据是否一致,若不一致则本次变更失败(即乐观的认为当前没有其他事务在同时进行此过程)
在冲突较少时,如订单并发量较少,使用乐观锁(省去加锁、释放锁的开销,提高性能),在冲突较多时,如订单并发量大,使用悲观锁。一般将整个事务的过程都放置于try中。
共享锁:
共享锁又称读锁 read lock,是读取操作创建的锁。其他用户可以并发读取数据,但任何事务都不能对数据进行修改(获取数据上的排他锁),直到已释放所有共享锁。
排它锁:
排他锁 exclusive lock(也叫writer lock)又称写锁。
排它锁是悲观锁的一种实现,在上面悲观锁也介绍过。
什么是sql注入
SQL 注入是一种非常常见的数据库攻击手段,SQL 注入漏洞也是网络世界中最普遍的漏洞 之一。大家也许都听过某某学长通过攻击学校数据库修改自己成绩的事情,这些学长们一 般用的就是 SQL 注入方法。
SQL 注入其实就是恶意用户通过在表单中填写包含 SQL 关键字的数据来使数据库执行非常 规代码的过程