V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
axin2023
V2EX  ›  Python

求助一些关于 Python 开发的面试题

  •  
  •   axin2023 · 191 天前 · 3076 次点击
    这是一个创建于 191 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    25 条回复    2024-07-07 18:55:22 +08:00
    Rebely
        1
    Rebely  
       191 天前
    看具体职责和期望职级啊, 应届和高级, 后端和数据分析问的问题能一样吗
    Mianmiss
        2
    Mianmiss  
       191 天前
    把问题描述清楚,去问 chatGPT
    EndlessMemory
        3
    EndlessMemory  
       191 天前
    具体看工作用得到的东西吧
    chi1st
        4
    chi1st  
       191 天前 via Android
    哪个公司?我先给你面试题和答案,然后我去面试😆
    Leonooo13
        5
    Leonooo13  
       191 天前 via Android
    问下数据结构,pep8 规范,项目经历,web 框架? 异步任务,chatgpt
    tomczhen
        6
    tomczhen  
       191 天前
    基于运维的角度,我个人会问项目依赖管理和多版本 python 共存怎么管理这两块。

    “我机器上是正常的”这种理由可太常见了。
    chauncychan
        7
    chauncychan  
       191 天前
    1. 港股美股的一些基本概念,深一点的量化交易,多因子选股等,模拟盘系统必须要有
    2. 技术面如 Pandas 、Numpy 、TA-Lib 是必须的了,其它的看岗位补充吧
    3. 策略的一些 MACD 、KDJ 等主流,重要的是要能自己写算法
    4. 其它例如机器学习、深度学习、择时交易策略等等。。
    Sawyerhou
        8
    Sawyerhou  
       191 天前
    隔壁刚好一道数据处理题

    https://v2ex.com/t/1050302#reply10
    keakon
        9
    keakon  
       191 天前   ❤️ 1
    基本上这 2 题可以筛掉绝大部分水货:
    1. Tornado 是如何在没有 async 语法的 Python 2 时代实现异步的?
    2. ORM 框架的 Model 类是如何实现定义类属性,就可以约束实例的属性类型的?
    GeekGao
        10
    GeekGao  
       191 天前
    “为何算法工程师更偏好使用 python 呢? 你是怎么看待网络上有部分人说 python 的性能表现问题的?”
    “python 内存管理有了解吗,如果线上发现某 python 进程内存爆表,你会如何处置?”
    LeeReamond
        11
    LeeReamond  
       191 天前   ❤️ 3
    @keakon 感觉有点茴字的四种写法。

    1 题的考察范围过于古早,毕竟 asyncio 在 3.4 版本就被引入,那是 2014 年的事了。async 语法和基础 api 在 3.5 以后基本稳定,并作为异步建议实现,饶是我感觉自己经验已经不浅,你问我史前科技我也是不了解的。你叫我猜测的话,我可以说也许它是 gevent 的猴子补丁实现的,或者用生成器也能实现,唯一问题在于谁关心 tornado 的实现细节呢? fastapi 已经是 py 框架战争很后期的产品,以拿来主义著称(首先需要有东西给它拿),即使是它也已经发布七年了,问这种东西是嫌现在 aio 原理和生态都太浅是吧?

    2 题考察元类倒是确实看上去既有强逻辑性,又涉及到设计模式,看似是不错的排除水货方式。但是应用类别太过于局限,起码我个人写了这么多年码从未见过除了 ORM 以外的场景需要使用元类的地方。所以考察这部分知识对于开发人员来说意义是什么,想必贵司未来准备开发 ORM 产品了才是。例如我个人来说,你要问我懂不懂元类,我可以告诉你 100%完全懂,但是你考我那我不会,因为在此贴看到该问题前我已经有十年从未使用过该特性,我唯一记住的是我以前写 ORM 库的时候完全懂。
    noahlias
        12
    noahlias  
       190 天前
    @keakon 这种问题就像问你 cpython 的 str.find 是如何实现的 你没看过源码你知道吗
    问这种问题的除非你是招要做这个框架相关的开发,要不然没啥意义,不过还有人用 tornado ?
    InkStone
        13
    InkStone  
       190 天前
    @keakon 你这个问题 recall 太低了,完全可能把会用 Python 的人也一起筛掉。

    这种 corner case 的问题真的很好提,比如如何给 Python 的 object 类新增方法。但出题不是为了筛人,而是为了考察对方的水平。
    keakon
        14
    keakon  
       190 天前
    @LeeReamond
    @noahlias
    @InkStone
    统一回复吧:

    面试者不是没接触过就不能答,比如「虽然我没用过 Tornado ,但是如果是我来设计,我可能会这么这么实现」。
    面试官也不是纠结标准答案,可以根据反馈引导面试者或者降低难度。你心目中知道你出这个题涉及到哪些知识,你围绕着把相关知识点问出来就行了,比如「 generator 是如何模拟实现 coroutine 的,它们的差异是啥?」、「协程是怎么调度的?」。
    我没见过哪个面试是拿一份考题依次往下问,面试者依次说「没用过,不知道」的。

    有没看过源码正好是筛选候选人的重要标准。不过涉及的一般是他自己的简历里提到的库或者重要的官方库。如果既不懂原理,又不看源码,那和只会 CURD 的调包侠有什么区别?

    面试官并不需要确保面试者回答正确,而是考查他了解到了哪一步。
    比如面试者回答了「 Model 应该需要元类来实现,但我想不起具体细节了」,我还会引导去问问「设置类或对象的属性值时为啥会触发校验」来判断是否了解 descriptor 。

    FastAPI 有用 Pydantic 来做参数校验,它也有 BaseModel ,这就是挺常见的一种 ORM 之外的场景。这个场景下,你还能问 「 Pydantic 是怎么识别出这些属性的 type annotation 的?」、「 BaseModel 会不会引入一些坑和限制?」
    还有单例之类的场景也会需要用到元类。如果面试者有用过的话,可以问问和其他单例模式的实现有啥区别。或者更进阶一点,当需要让一个抽象类的所有子类都实现单例模式时,应该如何正确声明 __call__ 方法的参数和返回值类型呢?
    lolizeppelin
        15
    lolizeppelin  
       190 天前
    @keakon

    你提到的那种触发校验的需求除了 orm,在接口用 json schema 之类的方式解决更好
    我见过的值得学习的元类使用比如 openstack 里的 ovoo 、callbacks(neutron 的一个内部消息广播)、单例实现等
    不提倡的比如 saltstasck 那个类封装工厂的元类写法简直有病
    描述器我写 py 的时候也就实际用过一两次,大部分涉及元类的代码就和正则一样..写的时候花半天去折腾、写完基本就忘了

    说实话 py 的元类大概知道就够了,绝大部分情况都没啥用,太过依赖 py 特性的代码尽量少用

    我觉得我 python 水平至少不是水货了, 但是没后面的帖子我都不知道你第二个问题在问啥
    nulIptr
        16
    nulIptr  
       190 天前
    太离谱的,python 这种胶水语言有啥可问的,而且以我的面试经验来讲基本上都是业务+leetcode ,很少问语言特性。古时候在金蝶写 ironpy 算不算 py 程序员?调用的方法全是 clr 提供的。。。
    enrolls
        17
    enrolls  
       190 天前
    我博客的文章 blog/post/python_interview_question
    lttzzlll
        18
    lttzzlll  
       190 天前
    Python 没啥好学的,懂了基本语法,不炫技就很好。真正应该学的是后端。https://bytebytego.com/
    keakon
        19
    keakon  
       190 天前
    @lolizeppelin json schema 校验完,你拿到的是一个没有任何类型信息的 dict ,后续需要使用到它的字段时,你需要手写 key ,编辑器也无法判断 value 的类型信息。你愿意花 10 分钟了解一下的话,可能就不会喜欢这种远古的 Python 代码了。

    鉴于这帖的沟通比较费劲,后续信息我就不再回复了。
    deplives
        20
    deplives  
       190 天前   ❤️ 1
    @keakon #9 这俩题目作为面试题,挺没水平的。
    1. 完全依赖于是否看过 Tornado 的源码。你要说你是想考察怎么通过考奇技淫巧实现的,那和 Tornado 有什么关系呢?所以这个问题纯粹就是在问:是否看过古早的 Tornado 源码
    2. 这不就是个简单的 metaclass ,看起来你想通过这个问题问的也是 metaclass 但是你的问题问的过于宽泛,因为 metaclass 能实现的东西太多了,上到最完整的 ORM 框架,下到 最简单的单例模式,都可以用到,所以完全不知道你是想问什么,看起来这个问题完全就是在问:是否知道 python 的元类
    所以这两个问题作为面试题可以说是毫无营养
    lolizeppelin
        21
    lolizeppelin  
       190 天前
    你这种做法完全为了自己 py 写得爽

    json schema 或者 open api 这种前后端跨语言公用的东西才是正道
    你用元类写完还要自己搞一套前端 api 文档生成
    这玩意有现成的么?走 json schenm 和 open api 就有现成的

    现在跨语言开发非常普遍,比如前端要重现一部分你的逻辑,你用元类实现,你让别人怎么抄
    非必要尽量少用语言特性化写法,大部分地方折腾元类就是邪道
    levelworm
        22
    levelworm  
       189 天前
    @keakon 我觉得还不如用 Python 实现一个 Python subset 的解释器。直接看思路和伪代码即可。

    a subset of operators, while loop, if-else branch, function call 。就这些就行了。反正都是考用不到的东西,还不如这个更有意思一些。。。
    levelworm
        23
    levelworm  
       189 天前
    @levelworm 想要难一些的话,要求生成 AST 。不过这玩意实在是没必要生成 AST ,直接在 parser 里 eval 就完了。

    或者这样,给一个解释器的雏形,然后让他实现 break 功能。
    luvHat1988
        24
    luvHat1988  
       185 天前
    @keakon 你是不是没玩过 Java 的 mybatis,或者 hibernate, 玩过之后就不会说出这么没意思的话术了
    daishuge
        25
    daishuge  
       171 天前 via Android
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   997 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:50 · PVG 05:50 · LAX 13:50 · JFK 16:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.