python技术面试题(其三)

二十一, 谈谈正则的贪婪模式和非贪婪模式

在数量级匹配符中使用

默认为贪婪模式,用最多量的方式完成匹配

数量级匹配符后加?即为非贪婪 用最少的方式完成匹配

二十二, a=1 a=a+1 的堆栈内存过程

不可变类型,在调用栈里分配地址,地址直接对应值,如果修改会开辟一块新空间,存储新值,相互不影响

可变类型,在调用栈里分配地址,地址对应堆里分配的地址,堆的地址存储真正的值,如果修改会相互影响。

二十三, python的内存管理

从三个方面来说

一,对象的引用计数机制

二, 垃圾回收机制

三, 内存池机制

一, 对象的引用计数机制python内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数。

引用计数增加的情况

1,一个对象分配一个名称

2, 将其放入一个容器中(如列表,元组或字典)

引用计数减少的情况:

1, 使用del语句对对象别名显示的销毁

2, 引用超出作用域被重新赋值 sys,getrefcount()函数可以获得对象的当前引用计数

多数情况下,引用计数比我们猜测的要大的多。对于不可变类型(如数字和字符串), 解释器会在程序的不同部分共享内存,以便节约内存

二、垃圾回收

1,当一个对象的引用计数归零时,它将被垃圾收集机制处理掉

2,当两个对象a和b相互引用时,del语句可以减少a和b的引用计数,并销毁用于引用底层对象的名称。然而由于每个对象都包含一个对其他对象的应用,因此引用计数不会归零,对象也不会销毁。(从而导致内存泄漏)。为解决这一问题,解释器会定期执行一个循环检测器,搜索不可访问对象的循环并删除它们。

三、内存池机制

python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统

1,pymalloc机制,为了加速python的执行效率,python引入一个内存池机制,用于管理对小块内存的申请和释放

2,python中所有小于256字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的malloc.

3,对于python对象,如整数,浮点数和list,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数

二十四, *arg和**kwarg作用

*arg代表位置的参数,它会接收任意多个参数并把这些参数作为元组传递给函数。

**kwargs代表的关键字参数,允许你使用没有事先定义的参数名。

位置参数一定要放在关键字参数的前面

作用:使用*args和**kwargs可以方便的定义函数,同时可以加强扩展性,以便日后的代码维护

二十五, is和==的区别

==是python标准操作符中的比较操作符,用来判断两个对象的value是否相等

is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同

二十六, filter, map, reduce的作用

filter()将符合条件的值过滤出来

map(lambda x:x*x, 12345) # 根据提供的函数做指定序列的映射

reduce(function, iterable,initializer) # 对参数序列中的元素进行累计

二十七, 至少列举8个常用模板有哪些

1,sys 用于提供对解释器相关的访问以及维护,并有很强的交互功能

2,time:时间模块

3, os: 用于提供操作系统模块

4, ashlib: 用于加密相关的操作

5, random:生成随机变量

6,pickle:用于python特有类和python的数据类型间进行转换

7, datetime: data和time的结合体

8,re:正则表达式模块

二十八, json序列化时,可以处理的数据类型有哪些?如何定制支持datatime类型

json只能支持int\str\list\tuple\dict\

python 复制代码
import json, datetime
from json import JSONEncoder
 
class ComplexEncoder(JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime.datetime):
            return obj.strftime('%Y-%m-%d %H:%M:%S')
        else:
            return super(ComplexEncoder, self).default(obj)
 
d = {'name': 'alex', 'data': datetime.datetime.now()}
print(json.dumps(d, cls=ComplexEncoder))  
# {"name": "alex", "data": "2018-09-28 14:49:42"}

自定义对datatime类型的序列化类, 继承JSONEncoder 使用里面的default方法,将编码失败的数据传入到这里,判断传入的对象是否是datatime类型,如果是则使用strtime方法进行还原成字符串。

三十, json序列化时,默认遇到中文会转换成unicode,如果想要保留中文怎么办

python 复制代码
import json
 
a = json.dumps({"ddf": "你好"}, ensure_ascii=False)
print(a)
# {"ddf": "你好"}
相关推荐
2601_962078196 小时前
Python中calendar.weekday用法
python·编程技巧·calendar·日期处理·weekday
2601_962218616 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
2601_966949656 小时前
为什么量化策略需要大量历史股票数据?从回测可信度理解数据规模
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
niucloud-admin6 小时前
JAVA V6 多商户商城 开发文档——插件目录结构
java·开发语言
2601_962885726 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
滕州市燕猫虎计算机科技工作室个体工商户6 小时前
Java锁
java·开发语言
李高钢7 小时前
Python FastAPI 框架入门:从零搭建你的第一个高性能 API 服务
数据库·python·fastapi
多加点辣也没关系7 小时前
JavaScript|第31章:表单与控件
开发语言·javascript·ecmascript
菜鸟~noob2337 小时前
【电子战】 第09篇:阵列信号处理——波束形成、MVDR、MUSIC【含matlab代码】
开发语言·matlab·信号处理
ocean21037 小时前
2025-2026年Python面试高频知识点洞察
开发语言·python·面试·python八股文