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作为数据库引擎的首先。