您的位置:首页 > 编程语言 > Python开发

python面试总结(五)内存管理与MYSQL引擎选择

2017-10-21 20:30 525 查看
1.python是如何进行内存管理的?

当内存中有不再使用的部分时,垃圾收集器就会把他们清理掉

Python引入了机制:引用计数与分代回收。

Python提供了对内存的垃圾收集机制,

但是它将不用的内存放到内存池而不是返回给操作系统。

2.谈谈你对线程安全的理解?

线程安全就是多线程访问时,采用了加锁机制,

当一个线程访问该类的某个数据时,进行保护,

其他线程不能进行访问直到该线程读取完,其他线程才可使用。

不会出现数据不一致或者数据污染。

3.事务的特性 ?
1.原子性
2.一致性
3.隔离性

4.持久性

4.什么是阻塞,什么是非阻塞?

阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。

非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

5.父子进程间有哪些异同,是否共享数据?(共享哪些数据?)

父子进程共享“文件表项”(file对象),同dup一样,这会增加“文件达开计数”

(file对象的引用计数),只不过fork增加的引用计数来自不同进程(父进程和子进程)

中的描述符,dup增加的引用来自同一文件描述符。

但父子进程独立运行后再打开的文件就不在共享file对象,

这个两个独立进程打开文件情况一样。

父子进程传递文件描述符和两独立进程传递描述符性质一样。

共享数据是线程  

创建一个线程后他们的数据是共享的   

他们是同一个数据

6.Mysql的常用引擎及选择?

1.Innodb引擎,Innodb引擎提供了对数据库ACID事务的支持。

并且还提供了行级锁和外键的约束。

它的设计的目标就是处理大数据容量的数据库系统。

它本身实际上是基于Mysql后台的完整的系统。

Mysql运行的时候,Innodb会在内存中建立缓冲池,用于缓冲数据和索引。

但是,该引擎是不支持全文搜索的。同时,启动也比较的慢,它是不会保存表的行数的。

当进行Select count(*) from table指令的时候,需要进行扫描全表。

所以当需要使用数据库的事务时,该引擎就是首选。

由于锁的粒度小,写操作是不会锁定全表的。

所以在并发度较高的场景下使用会提升效率的。

2.MyIASM引擎,它是MySql的默认引擎,但不提供事务的支持,也不支持行级锁和外键。

因此当执行Insert插入和Update更新语句时,即执行写操作的时候需要锁定这个表。

所以会导致效率会降低。不过和Innodb不同的是,MyIASM引擎是保存了表的行数,

于是当进行Select count(*) from table语句时,可以直接的读取已经保存的值而不需要进行扫描全表。

所以,如果表的读操作远远多于写操作时,并且不需要事务的支持的。

可以将MyIASM作为数据库引擎的首先。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: