# 1.深浅拷贝是什么
>-1. 深浅拷贝是对数据进行复制
不可变类型:
深浅拷贝都是一样的重新拷贝一份数据
可变类型:
如果内部嵌套的还有不可变类型,
- 浅拷贝只拷贝第一层,嵌套拷贝的是内存地址,
- 深拷贝是完全在复制一份出来
# 2.魔法方法new和init有什么区别
>-1.new是类初始化自动时触,
发生成一个空对象init是也是类初始化自动触发,
给new产生的对象设置初始值
# 3.python的可变和不可变数据类型是什么?
>-1.可变数据类是数据值发生改变,其内存地址不变
- 可变数据类型有字典,列表,集合,文件对象
>-2.不可变数据是,数据值发生改变,其内存地址一定发生改变
- 不可变数据类型有,整型,小数型,字符串,元组,布尔
# 4.什么是生成器,有什么应用场景
>-1.生成器是程序员在函数内部写的有yield关键字的函数
>-2.应用场景:
- 比如说在进行文件操作时,如果文件过大,一次性打开,
会占用过多内存空间可能会造成内存溢出,
使用生成器用多少拿多少,减少内存消耗
# 1.数据库三大范式是什么?
- 第⼀范式:
每个列都不可以再拆分。
- 第⼆范式:
在第⼀范式的基础上,⾮主键列完全依赖于主键,⽽不能是依赖于主键的⼀部分。
- 第三范式:
在第⼆范式的基础上,⾮主键列只依赖于主键,不依赖于其他⾮主键。
- 在设计数据库结构的时候,要尽量遵守三范式,如果不遵守,必须有⾜够的理由。⽐如性能。事实上我们经常会为了性能⽽妥协数据库的设计。
# 2.mysql有哪些索引类型,分别有什么作用?
-1. 主键索引: 数据列不允许重复,不允许为NULL,⼀个表只能有⼀个主键。
作用:主键唯一性,加快查询速度,不能为空
-2. 唯⼀索引: 数据列不允许重复,允许为NULL值,⼀个表允许多个列创建唯⼀索引。
作用:加快查询速度,并且可以限制列值的唯一性,允许为空
- 可以通过 ALTER TABLE table_name ADD UNIQUE (column); 创建唯⼀索引
- 可以通过 ALTER TABLE table_name ADD UNIQUE (column1,column2); 创建唯⼀组合索引
-3.普通索引: 基本的索引类型,没有唯⼀性的限制,允许为NULL值。
作用:加快查询速度
- 可以通过 ALTER TABLE table_name ADD INDEX index_name (column); 创建普通索引
- 可以通过 ALTER TABLE table_name ADD INDEX index_name(column1, column2, column3); 创建组合索引
-4.全⽂索引:是⽬前搜索引擎使⽤的⼀种关键技术。
作用:主要针对文本的内容进行分词,加快查询速度
- 可以通过 ALTER TABLE table_name ADD FULLTEXT (column); 创建全⽂索引
# 3.事务的特性和隔离级别?
- 事务的四大特性
1. 原⼦性: 事务是最⼩的执⾏单位,不允许分割。事务的原⼦性确保动作要么全部完成,要么完全不起作⽤;
2. ⼀致性: 执⾏事务前后,数据保持⼀致,多个事务对同⼀个数据读取的结果是相同的;
3. 隔离性: 并发访问数据库时,⼀个⽤户的事务不被其他事务所⼲扰,各并发事务之间数据库是独⽴的;
4. 持久性: ⼀个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发⽣故障也不应该对其有任何
影响
- 事务的隔离级别
1. READ-UNCOMMITTED(读取未提交): 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、
幻读或不可重复读。
2. READ-COMMITTED(读取已提交): 允许读取并发事务已经提交的数据,可以阻⽌脏读,但是幻读或不可重复
读仍有可能发⽣。
3. REPEATABLE-READ(可重复读): 对同⼀字段的多次读取结果都是⼀致的,除⾮数据是被本身事务⾃⼰所修
改,可以阻⽌脏读和不可重复读,但幻读仍有可能发⽣。
4. SERIALIZABLE(可串⾏化): 最⾼的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执⾏,这样事
务之间就完全不可能产⽣⼲扰,也就是说,该级别可以防⽌脏读、不可重复读以及幻读。