填空题
- python 的面向对象特性 ________, ________, ________。
- 在循环语句中,________ 语句的作用是提前结束本层循环。
- 表达式 list(str([1, 2, 3])) == [1, 2, 3] 的值为 ________。
- python 标准库 os.path 中用来判断指定路径是否为文件的方法是 ________。
- 请写出数据库索引类型 ________, ________, ________, ________, ________。
判断题
-
__init__
是初始化方法,创建对象后,就立刻被默认调用了,可接收参数。 ( ) - 假设列表对象 aList 的值为 [3, 4, 5, 6, 7, 9, 11, 13, 15, 17] 那么切片 aList[3:7] 得到的值是 [5, 6, 7, 9, 11]。 ( )
- 例如一个对象 json: {“data”: [{“python”: {“php”:“PHP”}}]}, 通过 json.get(‘data’).get(‘python’).get(‘php’) 能得到 “PHP”。 ( )
- MySQL 属于关系型数据库,而 Redis 和 MongoDB 属于 NoSQL 数据库。 ( )
- 得知项目下有 a, b, c 三个模块,a 模块中有 str 类型的数据,通过导入模块 b,模块 a 将数据放到模块 b 的 init 方法的列表中,最后从模块 c 中成功获取模块 b 列表中的数据。 ( )
简答题
- python 是如何进行内存管理的?
- 如何在 python 中拷贝一个对象,并说出他们的区别。
- cookie 和 session 的区别?
答案
填空题
- 封装、继承、多态
- break
- False
- isfile()
- 普通索引、主键索引、唯一索引、全文索引、多列索引
判断题
- √
- ×
- ×
- √
简答题
- (1) Python引入了一个机制:引用计数。
python 内部使用引用计数,来保持追踪内存中的对象,Python内部记录了对象有多少个引用,即引用计数,当对象被创建时就创建了一个引用计数,当对象不再需要时,这个对象的引用计数为0时,它被垃圾回收。
(2) 垃圾回收
1、当内存中有不再使用的部分时,垃圾收集器就会把他们清理掉。它会去检查那些引用计数为0的对象,然后清除其在内存的空间。当然除了引用计数为0的会被清除,还有一种情况也会被垃圾收集器清掉:当两个对象相互引用时,他们本身其他的引用已经为0了。
2、垃圾回收机制还有一个循环垃圾回收器, 确保释放循环引用对象(a引用b, b引用a, 导致其引用计数永远不为0)。
在Python中,许多时候申请的内存都是小块的内存,这些小块内存在申请后,很快又会被释放,由于这些内存的申请并不是为了创建对象,所以并没有对象一级的内存池机制。这就意味着Python在运行期间会大量地执行malloc和free的操作,频繁地在用户态和核心态之间进行切换,这将严重影响Python的执行效率。为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。
(3) 内存池机制
Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。
Python中所有小于256个字节的对象都使用 pymalloc 实现的分配器,而大的对象则使用系统的 malloc。另外 Python 对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。
import copy
a = [123, [1, 2, 3]]
b = copy.deepcopy(a) # 深拷贝
c = copy.copy(a) # 浅拷贝
深拷贝:
将原对象的“ 值/元素 ”赋给新对象,新对象中元素的地址与原对象的 地址不同;
是对原对象 所有层次 的拷贝(递归);
与原对象没有任何关系,如果原对象发生变化,深拷贝后的新对象 不会发生改变。
浅拷贝:
将原对象的 引用 赋给新对象,新对象中元素的地址与原对象的 地址相同;
是对原对象 顶层 的拷贝(表面一层);
由于只拷贝了表面一层,当原对象中的嵌套对象发生改变时,新对象也 会发生改变。
- http 协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态;
客户端与服务器端的一次通信,就是一次会话;
实现状态保持的方式:在客户端或服务器端存储与会话有关的数据;
存储方式包括 cookie、session;
使用 cookie,所有数据存储在客户端,注意不要存储敏感信息;
推荐使用 sesison 方式,所有数据存储在服务器端,在客户端 cookie 中存储session_ id;
状态保持的目的是在一-段时间内跟踪请求者的状态, 可以实现跨页面访问当前请求者的数据;
注意:不同的请求者之间不会共享这个数据,与请求者一一对应。