领导布置任务,让我这个小小运维去搞一些 python 的开发面试题;求助一下广大的 V 友们,能出一些 py 开发人员面试题吗,还望附上答案;一经采用,奖励 10 铜币,哈哈哈哈
面试题与港美股量化交易开发类相关最好;
再次感谢!!

看具体职责和期望职级啊, 应届和高级, 后端和数据分析问的问题能一样吗

把问题描述清楚,去问 chatGPT

具体看工作用得到的东西吧

哪个公司?我先给你面试题和答案,然后我去面试😆

问下数据结构,pep8 规范,项目经历,web 框架? 异步任务,chatgpt

基于运维的角度,我个人会问项目依赖管理和多版本 python 共存怎么管理这两块。“我机器上是正常的”这种理由可太常见了。

  1. 港股美股的一些基本概念,深一点的量化交易,多因子选股等,模拟盘系统必须要有2. 技术面如 Pandas 、Numpy 、TA-Lib 是必须的了,其它的看岗位补充吧3. 策略的一些 MACD 、KDJ 等主流,重要的是要能自己写算法4. 其它例如机器学习、深度学习、择时交易策略等等。。

隔壁刚好一道数据处理题 hesudu.com/t/1050302#reply10

基本上这 2 题可以筛掉绝大部分水货:1. Tornado 是如何在没有 async 语法的 Python 2 时代实现异步的?2. ORM 框架的 Model 类是如何实现定义类属性,就可以约束实例的属性类型的?

“为何算法工程师更偏好使用 python 呢? 你是怎么看待网络上有部分人说 python 的性能表现问题的?”“python 内存管理有了解吗,如果线上发现某 python 进程内存爆表,你会如何处置?”

感觉有点茴字的四种写法。1 题的考察范围过于古早,毕竟 asyncio 在 3.4 版本就被引入,那是 2014 年的事了。async 语法和基础 api 在 3.5 以后基本稳定,并作为异步建议实现,饶是我感觉自己经验已经不浅,你问我史前科技我也是不了解的。你叫我猜测的话,我可以说也许它是 gevent 的猴子补丁实现的,或者用生成器也能实现,唯一问题在于谁关心 tornado 的实现细节呢? fastapi 已经是 py 框架战争很后期的产品,以拿来主义著称(首先需要有东西给它拿),即使是它也已经发布七年了,问这种东西是嫌现在 aio 原理和生态都太浅是吧?2 题考察元类倒是确实看上去既有强逻辑性,又涉及到设计模式,看似是不错的排除水货方式。但是应用类别太过于局限,起码我个人写了这么多年码从未见过除了 ORM 以外的场景需要使用元类的地方。所以考察这部分知识对于开发人员来说意义是什么,想必贵司未来准备开发 ORM 产品了才是。例如我个人来说,你要问我懂不懂元类,我可以告诉你 100%完全懂,但是你考我那我不会,因为在此贴看到该问题前我已经有十年从未使用过该特性,我唯一记住的是我以前写 ORM 库的时候完全懂。

这种问题就像问你 cpython 的 str.find 是如何实现的 你没看过源码你知道吗问这种问题的除非你是招要做这个框架相关的开发,要不然没啥意义,不过还有人用 tornado ?

你这个问题 recall 太低了,完全可能把会用 Python 的人也一起筛掉。这种 corner case 的问题真的很好提,比如如何给 Python 的 object 类新增方法。但出题不是为了筛人,而是为了考察对方的水平。

统一回复吧:面试者不是没接触过就不能答,比如「虽然我没用过 Tornado ,但是如果是我来设计,我可能会这么这么实现」。面试官也不是纠结标准答案,可以根据反馈引导面试者或者降低难度。你心目中知道你出这个题涉及到哪些知识,你围绕着把相关知识点问出来就行了,比如「 generator 是如何模拟实现 coroutine 的,它们的差异是啥?」、「协程是怎么调度的?」。我没见过哪个面试是拿一份考题依次往下问,面试者依次说「没用过,不知道」的。有没看过源码正好是筛选候选人的重要标准。不过涉及的一般是他自己的简历里提到的库或者重要的官方库。如果既不懂原理,又不看源码,那和只会 CURD 的调包侠有什么区别?面试官并不需要确保面试者回答正确,而是考查他了解到了哪一步。比如面试者回答了「 Model 应该需要元类来实现,但我想不起具体细节了」,我还会引导去问问「设置类或对象的属性值时为啥会触发校验」来判断是否了解 descriptor 。FastAPI 有用 Pydantic 来做参数校验,它也有 BaseModel ,这就是挺常见的一种 ORM 之外的场景。这个场景下,你还能问 「 Pydantic 是怎么识别出这些属性的 type annotation 的?」、「 BaseModel 会不会引入一些坑和限制?」还有单例之类的场景也会需要用到元类。如果面试者有用过的话,可以问问和其他单例模式的实现有啥区别。或者更进阶一点,当需要让一个抽象类的所有子类都实现单例模式时,应该如何正确声明 call 方法的参数和返回值类型呢?

你提到的那种触发校验的需求除了 orm,在接口用 json schema 之类的方式解决更好我见过的值得学习的元类使用比如 openstack 里的 ovoo 、callbacks(neutron 的一个内部消息广播)、单例实现等不提倡的比如 saltstasck 那个类封装工厂的元类写法简直有病描述器我写 py 的时候也就实际用过一两次,大部分涉及元类的代码就和正则一样..写的时候花半天去折腾、写完基本就忘了说实话 py 的元类大概知道就够了,绝大部分情况都没啥用,太过依赖 py 特性的代码尽量少用我觉得我 python 水平至少不是水货了, 但是没后面的帖子我都不知道你第二个问题在问啥

太离谱的,python 这种胶水语言有啥可问的,而且以我的面试经验来讲基本上都是业务+leetcode ,很少问语言特性。古时候在金蝶写 ironpy 算不算 py 程序员?调用的方法全是 clr 提供的。。。

我博客的文章 blog/post/python_interview_question

Python 没啥好学的,懂了基本语法,不炫技就很好。真正应该学的是后端。 bytebytego.com/

json schema 校验完,你拿到的是一个没有任何类型信息的 dict ,后续需要使用到它的字段时,你需要手写 key ,编辑器也无法判断 value 的类型信息。你愿意花 10 分钟了解一下的话,可能就不会喜欢这种远古的 Python 代码了。鉴于这帖的沟通比较费劲,后续信息我就不再回复了。

#9 这俩题目作为面试题,挺没水平的。1. 完全依赖于是否看过 Tornado 的源码。你要说你是想考察怎么通过考奇技淫巧实现的,那和 Tornado 有什么关系呢?所以这个问题纯粹就是在问:是否看过古早的 Tornado 源码2. 这不就是个简单的 metaclass ,看起来你想通过这个问题问的也是 metaclass 但是你的问题问的过于宽泛,因为 metaclass 能实现的东西太多了,上到最完整的 ORM 框架,下到 最简单的单例模式,都可以用到,所以完全不知道你是想问什么,看起来这个问题完全就是在问:是否知道 python 的元类所以这两个问题作为面试题可以说是毫无营养

你这种做法完全为了自己 py 写得爽json schema 或者 open api 这种前后端跨语言公用的东西才是正道你用元类写完还要自己搞一套前端 api 文档生成这玩意有现成的么?走 json schenm 和 open api 就有现成的现在跨语言开发非常普遍,比如前端要重现一部分你的逻辑,你用元类实现,你让别人怎么抄非必要尽量少用语言特性化写法,大部分地方折腾元类就是邪道