python面试实战经验分享
2025/3/28第一面 杭州实在智能 见习python开发工程师
1、Python方法中参数默认值可以是列表或者字典吗?
在Python中,函数参数的默认值可以是列表或字典,列表或者字典在初始化应在函数体内,如果不正确处理,可能会导致所有调用都共享同一个列表。
2、协程、线性和进程
进程是系统资源分配的最小单位,线程是 CPU 调度的最小单位。
协程是属于线程的。协程程序是在线程里面跑的,因此协程又称微线程和纤程等。协程的调度切换是用户(程序员)手动切换的,因此更加灵活,因此又叫用户空间线程。协程原子操作性。由于协程是用户调度的,所以不会出现执行一半的代码片段被强制中断了,因此无需原子操作锁。
3、说说你对redis的了解
4、Python中如何处理并发
1.多线程(Threading)2. 多进程(Multiprocessing)3. 异步编程(Asyncio)4. 使用并发队列(Concurrency with Queues)
5、有没有了解过flask框架
6、jwt每个部分是干什么的,jwt与普通token的区别
一个JWT是由三个部分来组成的,头部(header),载荷(payload),签名(signature)
头部数据包含加密类型,使用的加密算法。
载荷是 JSON Web Token 的主体内容部分,包含jwt过期时间、jwt的签发者,接收jwt的一方。
签名需要使用编码后的 header 和 payload 以及我们提供的一个密钥
区别:Token需要在服务器端查询数据库。服务器会对比存储在数据库中的Token信息,如果匹配成功,则验证通过。
JWT不需要查询数据库,直接在服务端进行校验。JWT包含了用户信息和签名,服务器只需使用保存的密钥验证JWT的正确性即可。
2025/3/28第二面 深圳智谱华章 大模型研发
1、存123,元组、字典、哈希、列表哪个占用内存少,原理是什么,集合为什么比列表大
元组不可变,创建时分配固定内存,无需预留空间,列表可变,支持动态扩容,通常会预分配额外空间(即使元素数量固定),集合基于哈希表实现,需维护空槽位以减少哈希冲突。字典同样基于哈希表,但每个条目需存储键、值和哈希,结构更复杂。从小到大依次为:元组 < 列表 < 集合 < 字典。
2、装饰器原理
3、元组可不可以改变。不可变
4、大模型的关键词
2025/4/1 第三面 上海岩山科技,python开发
1、为什么用Withopen()
使用with open()打开文件的主要原因包括自动关闭文件、简洁的代码和异常安全。
自动关闭文件:使用with open()时,文件在退出with语句块时自动关闭,避免了因忘记调用file.close()而造成的文件句柄泄漏问题。
简洁的代码:with open()语法比传统的open()和close()更简洁,减少了代码量,且更易于维护
异常安全:如果在文件操作过程中发生异常,with open()语句会确保文件在异常抛出后依然被正确关闭
with open(‘example.txt’, ‘r’) as file:
content = file.read()
print(content)
这里,'r’表示以只读模式打开文件。
with open(‘example.txt’, ‘w’) as file:
file.write(‘Hello, world!’)
2、Redis为什么性能好
(1)、Redis 的高性能首先得益于其基于内存的存储设计。传统的数据库通常将数据存储在硬盘中,这会带来大量的磁盘 I/O 操作,而硬盘访问速度远远低于内存访问速度。Redis 通过将数据存储在 RAM(内存) 中,避免了磁盘 I/O,从而大大提高了访问速度。
(2)、单线程处理:Redis 的所有操作在单线程中完成,避免了多线程的锁机制问题,降低了上下文切换的开销。多线程编程常常需要引入锁机制来防止数据竞争,而 Redis 通过单线程架构消除了这一复杂性,减少了系统的负担。
(3)、高效的数据结构设计
Redis 的数据结构设计是高度优化的,这也是其性能提升的核心之一。Redis 支持多种高效的数据结构,包括字符串(String)、列表(List)、集合(Set)、有序集合(Sorted Set)、哈希(Hash)等。
(4)、数据淘汰策略
LRU(Least Recently Used,最近最少使用)
LFU(Least Frequently Used,最少频繁使用)
随机淘汰
3、Python的性能为什么比java慢
1、Python是一种解释性语言,代码在执行时会逐行解释并执行,这种动态类型和解释执行的特性导致其运行速度比静态编译的语言如Java慢
2、Python的内存管理是基于引用计数的,这种机制在处理大量数据时可能会导致内存碎片化,从而影响性能
3、Java在处理并发操作时通常比Python更有效率。Java的JVM(Java虚拟机)提供了高效的线程管理和同步机制,而Python的GIL(全局解释器锁)限制了多线程的并行执行,影响了多线程性能
4、Mysql的四个特性
原子性,一致性,持久性,隔离性
事务的隔离等级:读未提交,读已提交,可重复度,串行化
数据库并发下事务的三种现象:脏读(读取了未提交事务的数据),不可重复读(不可重复读指的是在事务A中先后多次读取同一个数据,读取的结果不一样,因为另外一个事务也访问该同一数据,并且可能修改这个数据,这种现象称为不可重复读。),幻读(在事务A中按照某个条件先后两次查询数据库,两次查询结果的条数不同,这种现象称为幻读。不可重复读与幻读的区别可以通俗的理解为:前者是数据变了&#