1. Python 里 match 与 search 的区别?
match()函数只检测 RE 是不是在 string 的开始位置匹配,
search()会扫描整个 string 查找匹配;
也就是说 match()只有在 0 位置匹配成功的话才有返回,
如果不是开始位置匹配成功的话,match()就返回 none。
2.什么是死锁呢?
若干子线程在系统资源竞争时,都在等待对方对某部分资源解除占用状态,结果是谁也不愿先解锁,
互相干等着,程序无法执行下去,这就是死锁。
GIL 锁(有时候,面试官不问,你自己要主动说,增加 b 格,尽量别一问一答的尬聊,不然最后等
到的一句话就是:你还有什么想问的么?)
GIL 锁 全局解释器锁(只在 cpython 里才有)
作用:限制多线程同时执行,保证同一时间只有一个线程执行,所以 cpython 里的多线程其实是伪
多线程!
3.Flask 项目中如何实现 session 信息的写入?
Flask 中有三个 session:
第一个:数据库中的 session,例如:db.session.add()
第二个:在 flask_session 扩展中的 session,使用:from flask_session importSession,使用
第三方扩展的 session 可以把信息存储在服务器中,客户端浏览器中只存储 sessionid。
第三个:flask 自带的 session,是一个请求上下文, 使用:from flask import session。自带的
session 把信息加密后都存储在客户端的浏览器 cookie 中。
4.Python 函数调用的时候参数的传递方式是值传递还是引用传递?
Python 的参数传递有:位置参数、默认参数、可变参数、关键字参数。
函数的传值到底是值传递还是引用传递,要分情况:
不可变参数用值传递:
像整数和字符串这样的不可变对象,是通过拷贝进行传递的,因为你无论如何都不可能在原处改变
不可变对象
可变参数是引用传递的:
比如像列表,字典这样的对象是通过引用传递、和 C 语言里面的用指针传递数组很相似,可变对象
能在函数内部改变。
5.什么是 lambda 函数?它有什么好处?
lambda 函数是匿名函数;使用 lambda 函数能创建小型匿名函数。这种函数得名于省略了用 def
声明函数的标准步骤;是得程序扁平化,已于结合其他代码
4G 内存怎么读取一个 5G 的数据?
方法一:
可以通过生成器,分多次读取,每次读取数量相对少的数据(比如 500MB)进行处理,处理结束后
在读取后面的 500MB 的数据。
方法二:
可以通过 linux 命令 split 切割成小文件,然后再对数据进行处理,此方法效率比较高。可以按照行
数切割,可以按照文件大小切割。
6.说明一下 os.path 和 sys.path 分别代表什么?平时的操作有哪些?
os.path 主要是用于对系统路径文件的操作。
sys.path 主要是对 Python 解释器的系统环境参数的操作(动态的改变 Python 解释器搜索路径)。
os.path.join()将分离的各部分组合成一个路径名
os.mkdir/makedirs 创建目录/多层目录
os.rmdir/removedirs 删除目录/多层目录
sys.version 获取 Python 解释程序的版本信息
sys.modules 返回系统导入的模块字段,key 是模块名,value 是模块
7.请简述什么是并行,什么是并发。python中,有几种多任务模式?分别是并行还是并发?
并行:同一时刻多个任务同时运行
并发:在同一时间间隔内多个任务都在运行,但是并不会在同一时刻同时运行,存在交替执行的情况。
python中多任务有多进程(并行),多线程(并发),多协程(并发)
实现并行的库是什么(multiprocessing),实现并发的库是什么(threading)