Python面经
#发面经攒人品#
感觉Python相关的面经和八股很少,主包主要分享下自己的一些面试,都是一些基础,少数涉及项目
最近面的一家
1.最常使用的 Python 版本?
常用3.6和3.12,提到新版本中字典的+=操作的字节码变为原子操作,以及3.14正在尝试移除GIL锁。
2.提到了多线程,问对Python中进程、线程与协程的理解
从操作系统轻量级进程(LWP)角度回答的,多线程、多进程都对应多个LWP,但是一个进程对应一个解释器,GIL锁导致多线程只能利用单核,而协程是在用户态通过事件循环实现的应用层调度,只对应一个LWP。
3.这3个并发模型的应用场景?
多线程常用于传统Web开发中IO密集操作;多进程用于启动多个Worker利用多核;协程更适用于处理IO密集型任务,但容易被计算操作阻塞事件循环,多线程则不会。
4.举几个 Python 魔术方法的例子。
举例说明了__new__(构造单例)、__init__(初始化)、__call__(类装饰器)、上下文管理器(__enter__/__exit__)和迭代器(__iter__/__next__)等方法。
5.对元类的理解
元类类的类,是控制类生成阶段的钩子,举例实习中曾见过通过元类为类的方法自动添加限流,但通常能用继承或装饰器解决的问题不会使用元类。
6.提到类生成,问有没有了解过子类生成的魔术方法__init_subclass__
不知道,之前没有了解过……
7.静态注释覆盖率
自己开发基本会全量覆盖注解和必要注释,以追求代码自解释性(其实想问的是类型注解,没理解对,不过也答了相关的内容)
8.对 Pydantic 的理解
Pydantic通过类型注解实现数据校验和序列化,V2版本用Rust重写核心以提升校验和序列化这种CPU密集型操作的效率,可使用Field对象和装饰器+自定义方法定义字段或字段间校验。
9.Pydantic如何从类中读取声明并完成 Schema 校验?
没看过这块源码,推断是从类的__annotations__私有变量中提取类型注解信息,然后再进行处理。
10.是否尝试过用 Pydantic 对第三方或自定义类(不继承BaseModel)做声明?
没有做过……
11.开发中有遇到数据库死锁的情况吗?
开发中未实际遇到过死锁,但举例可能场景,可通过在事务中按字段排序固定顺序操作数据库来预防和解决。
12.接触过的数据库表或Redis Key最大数据规模有多大?
因为实习项目都是ToB私有化部署,接触过最大也就单表不到千万级几百万的数据量,跟面试官说想考察优化和治理策略可以给场景。
13.讲一下实习中提到的租户资源多线程查询慢的问题,是如何发现、排查和解决的?(面试官可能以为这是个数据库优化)
通过本地打印线程耗时发现,根因是元类为调用其它SaaS接口的client的所有方法添加了粗粒度限流导致。
14.DevOps 实践经验?
实习项目中使用GitLab的CI/CD流水线,了解其YAML配置文件的写法及代码检查、依赖扫描等钩子作用。
15.个人玩具项目中状态机和 Outbox 的设计(第一个问我玩具项目的面试官!)
状态机是通过定义字典控制对象状态的合法流转以及流转动作;Outbox模式通过在数据库事务中新增本地消息表插入待发送消息,用定时任务补偿发送失败,来保证操作原子性与一致性。
16.本地响应很快的接口,到线上需要6、7秒,会从哪些方面排查?
采用分治思想,从前后端全链路、本地与线上环境差异、数据库、缓存网络延迟、以及服务器资源耗尽(如TCP连接队列满)等层面排查。(面试官说没有提到主要的用户前端请求进入服务器的完整链路,比如DNS解析、CDN分发等)
总结:面试官很nice,其实主包一直是对自己对Python底层的理解还是很自信的,开发框架和一些常用的模块都看过源码,但是面试官还是能顺着我说的拷打我(基本上一般面试官想拷打我需要在他的场景追问才行,这个可以顺着我的理解追问),但是最后还是很认可主包的


之前面的一家
1.实习中数据模型初始化操作健壮性优化怎么做的?
针对其它SaaS不同版本可能出现同一个接口不同的表现形式,通过读取环境变量切换执行逻辑,同时针对资源名称哈希值可能重复的问题,分别增加了版本判断校验逻辑和基于“实例名+删除时间”的联合唯一校验字段。
2.Python是强类型还是弱类型?
Python是强类型语言。
3.Python是动态类型还是静态类型?
Python是解释执行的动态语言,代码由Python虚拟机中的解释器逐行解释执行,但也会编译成.pyc字节码文件。因为运行时才知道数据类型,Python函数本来就能接受和返回不同类型 一些模块源码中常用Overload装饰器主要是为了通过静态检查工具和方便开发者阅读。
4.Python有哪些数据类型?
Python中一切皆对象,常用数据类型包括整型、浮点型、字符串、列表、字典、元组和集合。
5.哪些数据类型是可变的,哪些是不可变的?
整型是不可变对象,重新赋值其内存地址会变;列表是可变对象,修改内容其内存地址不变,并举例说明将可变对象作为函数默认参数会引发数据串扰问题。
5.熟悉的魔术方法?
老演员
6.元类的理解
依旧老演员
7.既然很多能用继承解决,为什么一定要引入元类?
只有继承解决不了问题的时候才需要用元类,比如框架设计让开发者继承就可以自动注册自定义插件而不需要加类装饰器,或者真的需要控制类的生成而不是类的表现。
8.写基本SQL语句有哪些关键字?
SELECT、FROM、LEFT JOIN、GROUP BY、WHERE、HAVING和LIMIT等常用关键字。
9.SQL语句的执行顺序是怎样的?
从FROM开始,然后SELECT选择列和行,最后LIMIT
10.Django ORM分组写法
记不清api了…但好像也说对了annotate
总结:半小时初面,看主包底子没啥问题还要面下一个候选人就结束了……
主包是误打误撞学的Python后端,最近也学了一些agent开发,当然时间紧没有太深入学也没有大量投递这些岗位,不过感觉如果面试得是用Python做agent开发的公司,应该这些也都可能会问(其实之前还有面的一家岗位写的后端,实际是agent,然后面完还给我发offer了,我的感受是其实agent开发和后端工程落地还是蛮像的…如果你不去深究大模型本身的话)
#春招# #python# #面经#
感觉Python相关的面经和八股很少,主包主要分享下自己的一些面试,都是一些基础,少数涉及项目
最近面的一家
1.最常使用的 Python 版本?
常用3.6和3.12,提到新版本中字典的+=操作的字节码变为原子操作,以及3.14正在尝试移除GIL锁。
2.提到了多线程,问对Python中进程、线程与协程的理解
从操作系统轻量级进程(LWP)角度回答的,多线程、多进程都对应多个LWP,但是一个进程对应一个解释器,GIL锁导致多线程只能利用单核,而协程是在用户态通过事件循环实现的应用层调度,只对应一个LWP。
3.这3个并发模型的应用场景?
多线程常用于传统Web开发中IO密集操作;多进程用于启动多个Worker利用多核;协程更适用于处理IO密集型任务,但容易被计算操作阻塞事件循环,多线程则不会。
4.举几个 Python 魔术方法的例子。
举例说明了__new__(构造单例)、__init__(初始化)、__call__(类装饰器)、上下文管理器(__enter__/__exit__)和迭代器(__iter__/__next__)等方法。
5.对元类的理解
元类类的类,是控制类生成阶段的钩子,举例实习中曾见过通过元类为类的方法自动添加限流,但通常能用继承或装饰器解决的问题不会使用元类。
6.提到类生成,问有没有了解过子类生成的魔术方法__init_subclass__
不知道,之前没有了解过……
7.静态注释覆盖率
自己开发基本会全量覆盖注解和必要注释,以追求代码自解释性(其实想问的是类型注解,没理解对,不过也答了相关的内容)
8.对 Pydantic 的理解
Pydantic通过类型注解实现数据校验和序列化,V2版本用Rust重写核心以提升校验和序列化这种CPU密集型操作的效率,可使用Field对象和装饰器+自定义方法定义字段或字段间校验。
9.Pydantic如何从类中读取声明并完成 Schema 校验?
没看过这块源码,推断是从类的__annotations__私有变量中提取类型注解信息,然后再进行处理。
10.是否尝试过用 Pydantic 对第三方或自定义类(不继承BaseModel)做声明?
没有做过……
11.开发中有遇到数据库死锁的情况吗?
开发中未实际遇到过死锁,但举例可能场景,可通过在事务中按字段排序固定顺序操作数据库来预防和解决。
12.接触过的数据库表或Redis Key最大数据规模有多大?
因为实习项目都是ToB私有化部署,接触过最大也就单表不到千万级几百万的数据量,跟面试官说想考察优化和治理策略可以给场景。
13.讲一下实习中提到的租户资源多线程查询慢的问题,是如何发现、排查和解决的?(面试官可能以为这是个数据库优化)
通过本地打印线程耗时发现,根因是元类为调用其它SaaS接口的client的所有方法添加了粗粒度限流导致。
14.DevOps 实践经验?
实习项目中使用GitLab的CI/CD流水线,了解其YAML配置文件的写法及代码检查、依赖扫描等钩子作用。
15.个人玩具项目中状态机和 Outbox 的设计(第一个问我玩具项目的面试官!)
状态机是通过定义字典控制对象状态的合法流转以及流转动作;Outbox模式通过在数据库事务中新增本地消息表插入待发送消息,用定时任务补偿发送失败,来保证操作原子性与一致性。
16.本地响应很快的接口,到线上需要6、7秒,会从哪些方面排查?
采用分治思想,从前后端全链路、本地与线上环境差异、数据库、缓存网络延迟、以及服务器资源耗尽(如TCP连接队列满)等层面排查。(面试官说没有提到主要的用户前端请求进入服务器的完整链路,比如DNS解析、CDN分发等)
总结:面试官很nice,其实主包一直是对自己对Python底层的理解还是很自信的,开发框架和一些常用的模块都看过源码,但是面试官还是能顺着我说的拷打我(基本上一般面试官想拷打我需要在他的场景追问才行,这个可以顺着我的理解追问),但是最后还是很认可主包的
之前面的一家
1.实习中数据模型初始化操作健壮性优化怎么做的?
针对其它SaaS不同版本可能出现同一个接口不同的表现形式,通过读取环境变量切换执行逻辑,同时针对资源名称哈希值可能重复的问题,分别增加了版本判断校验逻辑和基于“实例名+删除时间”的联合唯一校验字段。
2.Python是强类型还是弱类型?
Python是强类型语言。
3.Python是动态类型还是静态类型?
Python是解释执行的动态语言,代码由Python虚拟机中的解释器逐行解释执行,但也会编译成.pyc字节码文件。因为运行时才知道数据类型,Python函数本来就能接受和返回不同类型 一些模块源码中常用Overload装饰器主要是为了通过静态检查工具和方便开发者阅读。
4.Python有哪些数据类型?
Python中一切皆对象,常用数据类型包括整型、浮点型、字符串、列表、字典、元组和集合。
5.哪些数据类型是可变的,哪些是不可变的?
整型是不可变对象,重新赋值其内存地址会变;列表是可变对象,修改内容其内存地址不变,并举例说明将可变对象作为函数默认参数会引发数据串扰问题。
5.熟悉的魔术方法?
老演员
6.元类的理解
依旧老演员
7.既然很多能用继承解决,为什么一定要引入元类?
只有继承解决不了问题的时候才需要用元类,比如框架设计让开发者继承就可以自动注册自定义插件而不需要加类装饰器,或者真的需要控制类的生成而不是类的表现。
8.写基本SQL语句有哪些关键字?
SELECT、FROM、LEFT JOIN、GROUP BY、WHERE、HAVING和LIMIT等常用关键字。
9.SQL语句的执行顺序是怎样的?
从FROM开始,然后SELECT选择列和行,最后LIMIT
10.Django ORM分组写法
记不清api了…但好像也说对了annotate
总结:半小时初面,看主包底子没啥问题还要面下一个候选人就结束了……
主包是误打误撞学的Python后端,最近也学了一些agent开发,当然时间紧没有太深入学也没有大量投递这些岗位,不过感觉如果面试得是用Python做agent开发的公司,应该这些也都可能会问(其实之前还有面的一家岗位写的后端,实际是agent,然后面完还给我发offer了,我的感受是其实agent开发和后端工程落地还是蛮像的…如果你不去深究大模型本身的话)
#春招# #python# #面经#
全部评论
相关推荐
点赞 评论 收藏
分享

查看7道真题和解析
腾讯工作强度 1164人发布