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作为数据库引擎的首先。
当内存中有不再使用的部分时,垃圾收集器就会把他们清理掉
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作为数据库引擎的首先。
相关文章推荐
- mysql存储引擎选择的总结
- 滴滴面试总结之MySQL存储引擎以及索引原理
- Mysql优化学习总结(一)--引擎的选择
- mysql 存储引擎 InnoDB 与 MyISAM 的区别和选择
- 【面试】【MySQL常见问题总结】【03】
- MySQL存储引擎的选择
- MySQL InnoDB引擎锁的总结
- Mysql表的七种引擎类型,InnoDB和MyISAM引擎对比区别总结
- 关于mysql存储引擎及如何选择合适的存储引擎
- Mysql各种存储引擎的特性以及如何选择存储引擎
- MySQL 怎么选择合适的存储引擎
- 浅谈选择mysql存储引擎的标准
- InnoDB还是MyISAM 再谈MySQL存储引擎的选择
- Python Mysql学习总结
- InnoDB还是MyISAM 再谈MySQL存储引擎的选择
- MYSQL存储引擎特性及选择
- 游戏引擎Andengine总结(六):滑动关卡选择的实现
- mysql 学习之二 表类型(存储引擎)的选择
- mysql修行练级之字符集,数据类型与存储引擎选择
- PYTHON 一些基础面试题目总结