目录
Python面试题第一章
深浅拷贝是什么
浅拷贝和深拷贝:
浅拷贝是在内存创建一块新的内存地址,创建一个新的对象,但是里面的元素是原对象中各个子对象的引用
深拷贝是在内存创建一块新的内存地址,创建一个新的对象,并将原对象中的元素,以递归的方式,通过创建新的子对象拷贝到新对象中。 因此,新对象和老对象没有任何关联
深浅拷贝是对数据进行复制,
对于不可变类型来说深浅拷贝都是一样的重新拷贝一份数据,
对于可变类型来说如果内部嵌套的还有不可变类型,
浅拷贝只拷贝第一层,嵌套的拷贝是内存地址,
深拷贝是完全在复制一份出来
魔法方法new和init有什么区别
init是类() 自动触发类中的魔法方法,实例化一个对象
但是在init更早之前其实有个new方法
new方法才是第一个对象实例化的时候所调用的方法,是真正意义上的构造方法
new方法有一个return的返回值 如果new方法没有返回实例对象,init方法不会触发
new是类初始化自动触发,产生一个空对象 第一个参数是传给init的
Init也类初始化自动触发,给new产生的对象设置初始值
python的可变和不可变数据类型是什么
不可变类型: 数字 字符串str 元组,布尔
值改变 内存地址不变
可变类型:list列表 dict字典 集合 文件对象
值改变 内存地址改变
什么是生成器,有什么应用场景
生成器也是迭代器 不过多了一个yield关键字
形成生成器
携程
上下文管理器
进行文件操作时,如果文件过大,一次性打开,会占用过多内存空间可能会造成内存溢出,使用生成器用多少拿多少,减少内存消耗
数据库的三大范式是什么
范式:关系型数据库中,数据表设计的基本原则、规则称之为范式,是我们在设计数据库中需要遵守的规则和方法。
ChatGpt回答:
1.第一范式(1NF):
数据表中的每一列都应该是原子性的,不可再分。也就是说,每个数据表必须有一个主键,并且每一列都应该与主键相关
2. 第二范式(2NF):
在满足第一范式的基础上,非主键列必须完全依赖于非主键列必须完全依赖于主键,而不能只依赖于部分主键。也就是说,每个非主键列都应该与主键有关系,而不能只与某个部分主键相关。
3. 第三范式(3NF):在满足第二范式的基础上,非主键列之间不能相互依赖,而应该互相独立。也就是说,每个非主键列都应该只与主键相关,而不应该与其他非主键列相关。
通过满足这些范式,可以避免数据冗余、数据更新异常等问题,提高数据库的数据完整性和查询效率。
# 自我回答总结:
1.第一范式(1NF): 最基本的原则,属性不可再分割
必须确保数据表中灭个字段的值具有原子性,就是数据表中某个字段的值是不可拆分的最小数据单元
2.第二范式(2NF):满足第一范式,且不存在部份依赖
在满足第一范式的基础上,还要满足表里的每条数据,都是可唯一标识的,而且非主键字段必须完全依赖主键,不能只依赖于主键的部分
3.第三范式(3NF):满足第二范式,且不存在传递依赖
在满足第二范式的基础上,数据表中的所有非主键字段不能依赖其他非主键字段(意思就是所有的非主键之间不能有依赖关系,它们是相互独立的)
mysql有哪些索引类型,分别有什么作用
索引:对于数据库中的一行或者多行值进行排序的一种结构---->可以加快检索表中的数据
1.B-Tree索引:
最常见的索引类型。B-Tree索引按照一定的算法,将索引值存储在一棵树中,可以加速单值查询、范围查询和排序等操作。
2.哈希索引:
哈希索引是将索引值通过哈希函数计算后,存储在哈希表中。哈希索引适合等值查询,但不适合范围查询和排序等操作。
3.全文索引:
全文索引适用于文本字段的查询,可以提高匹配度和搜索效率。MySQL使用InnoDb存储引擎时支持全文索引,可以使用MATCH AGAINST语法进行查询。
4.空间索引:
空间索引时针对地理位置信息的索引,可以支持空间距离计算和范围查询。Mysql5.7版本以上支持空间索引
5.R-Tree索引:R-Tree索引是一种基于多维空间的索引结构,适用于范围查询和空间查询等操作。
6.其他特殊索引:如前缀索引、压缩索引等,根据数据类型和数据存储情况,可以选择使用不同的索引类型。
索引的选择应该根据具体的业务需求和数据特点来进行,需要根据实际情况选择合适的索引类型以提高查询效率。
事务的特性和隔离级别
事务的特性和隔离级别
事务的四大特性:
原子性:数据库中的事物执行是作为原子粒度,即不可再分,整个语句要么执行,要么不执行
一致性:事物开始之前和事物结束以后,数据库的完整性约束没有被破坏
隔离性:事物的执行是互不干扰的
永久性:该事物对于数据库所作的更改是永久保存到数据库中的,不会回滚
事务的并发问题:
1.脏读:事物A读取了事物B更新的数据,然后B进行了回滚,A读取到的数据是脏数据
2.不可重复读:事物A多次读取同一数据,事物B 在A读取的过程中对数据进行了更新并提交,导致A多次读取同一数据时,结果不一致
3.幻读:指的是一个事物在前后两次查询同一个范围的时候,后一个查询看到了前一次没有看到的行
(系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。)
不可重复读和幻读很容易混淆的,不可重复读侧重于修改,幻读侧重于新增或者删除
不可重复读------》》解决需要锁满足条件就好了
幻读--------》》解决幻读需要表锁
!!!Innodb存储引擎已解决幻读
MySQL事务隔离级别:
读取未提交:最低的隔离级别,允许读取尚未提交的数据变更,可能造成脏读,不可重复读,幻读
读取已提交:允许读取并发事物已经提交的数据,可以避免脏读,但是可能造成不可重复读,幻读
可重复读:对于同一字段多次读取的结果都是一致的,除非本身事物修改,可避免脏读和不可重复读,但是可能会造成幻读
可串行化:最高的隔离级别,完全服从隔离级别,所有的事物依次执行,可以避免脏读、不可重复读、幻读
标签:面试题,01,范式,Python,查询,索引,幻读,拷贝,主键
From: https://www.cnblogs.com/wei0919/p/17281761.html