python面试总结复习(一)

复习题链接:https://www.cnblogs.com/yzxing/p/10637270.html

1.说说项目都用到了什么技术?

熟悉自己简历写的项目涉及的知识点,做到能拓展

2.mysql索引的种类

从数据结构方面来说:
hash索引,B+树索引

从功能逻辑来说:
主键索引(非空且唯一),
唯一索引(数据唯一),
普通索引(只是为了加快查询速度),
全文索引(现在很少用,默认只支持英文检索,一般都是使用ES)

从物理存储方面来说:
聚集索引   (聚集索引的叶子节点存放的是索引和真实数据)
非聚集索引   (非聚集索引的叶子节点存放的不是真实的数据,而是指向实际数据的指针)

3.索引建多有什么不好?

1.在更新表数据的时候会降低更新速度,因为在更新数据的同时,还需要去操作索引文件。
2.创建索引的时候也会创建索引文件,占用过多磁盘空间

4.mysql的引擎有什么(可以说一下存储引擎的索引实现)

1.MySQL5.5版本之后默认的存储引擎是InnoDB
2.MySQL5.5版本之前默认的存储引擎是MyISAM
3.MEMORY存储引擎  数据是保存在内存中

5.redis是单线程还是多线程的?

是单线程
原因:因为redis核心就是数据都是在内存中操作,使用单线程去操作效率就高。多线程是通过CPU去模拟出多个线程的情况,这样就存在上下文切换,效率会降低。

https://www.cnblogs.com/blogtech/p/11742057.html 什么时候使用多线程呢? 处理一些慢速设备:磁盘等 处理方法:使用异步,将请求和处理的线程不绑定在一起,请求的线程将所有请求都放在一个地方,等请求快满了,处理请求的线程再去处理这些请求。统一的写入磁盘,或者读磁盘。

https://blog.csdn.net/lch_2016/article/details/81078243
为什么Redis执行速度快?
1.因为绝大多数请求都是内存操作
2.采用单线程,避免了不必要的上下文切换
3.非阻塞IO-IO多路复用

6.redis的持久化机制

1.RDB
2.AOF

7.mongdb的数据存储结构是什么

8.python 中的类是由什么创建的   (元类)

9.怎么做并发编程

10. python 的常量池是什么(小整数池)

为了避免因创建相同的值而重复申请内存空间所带来的效率问题,python解释器会在启动时创建出小整数池,范围是[-5,256],该范围内的小整数对象会被重复使用。

11.Python 中的内存地址怎么不一样

https://www.cnblogs.com/zhaoganggang/p/11309200.html

12.django知识点

13.python垃圾回收机制

引用计数:当内存中的数据没有任何的变量名与其有绑定关系,那么就会被自动回收
标记清除:当内存快要被某个应用程序占满的时候,会自动触发
分代回收:根据值的存活时间的不同,化为不同的等级,等级越高的垃圾回收机制扫描的频率越低

14.django的请求生命周期

当用户在浏览器中输入url时,url先经过wsgi,再经过中间件,最后url到路由映射表进行匹配,匹配成功就执行对应的view视图函数。
视图函数中利用ORM去操作数据库取出需要的数据,然后返回给视图函数,并且把取出的数据传递给Template模板,模板就是html文件,最后渲染给用户展示。

15.GIL全局解释器锁

在Cpython解释器才有GIL的概念,不是python的特点。
python在设计的时候,还没有多核的概念。因此,为了设计方便与线程安全,直接设计了一个锁:GIL锁 在一个进程下,一次只能有一个线程执行,以此来保证数据的安全性。
从这也可以看出,为多线程分配多个CPU,多个CPU也不会起作用,因为每次只能执行一个线程。所以python中的线程只能实现并发,不能实现真正的并行。

互斥锁、死锁

互斥锁:是一种简单的加锁方式来控制对共享资源的访问,用来保证每次只有一个线程访问资源,互斥锁只有两种状态,即上锁和解锁。
死锁:指两个或两个以上进程或线程在执行过程中,因争夺资源而造成一种互相等待的现象,若无外力作用,他们都无法进行下去
解决死锁方法使用递归锁:RLock,RLock可以被第一个抢到锁的人连续的加锁和释放锁,每加一次锁,锁计数加1,每释放一次锁,锁计数减1,只要锁的计数不为0,其他线程都只能等待

16.docker和虚拟机的区别

虚拟机是在硬件级别上进行虚拟化,而Docker是在操作系统的层面虚拟化;虚拟机通过开辟一块硬盘来搭建操作系统,而Docker则是复用操作系统;
虚拟机实现了操作系统之间的隔离,Docker只是进程之间的隔离,所以虚拟机隔离级别更高、安全性方面也更强,但是Docker的运行速度很快。

19.数据库的主从复制基于什么  (主从复制原理)

1.主库将数据变动记录在日志文件中
2.主库通过I/O线程将日志文件发送到从库中
3.从库通过I/O线程把主库发送过来的日志拷贝到自己的日志文件中
4.从库通过SQL线程,按照日志文件处理从库的数据
原文地址:https://www.cnblogs.com/wangcuican/p/12671508.html