news 2026/3/23 1:43:43

华为od 面试八股文_Python_07_含答案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
华为od 面试八股文_Python_07_含答案

1:is==的本质区别?什么是小整数缓存机制?

回答要点:

  • 本质区别
    • ==比较的是值 (Value),即两个对象的内容是否相等(调用__eq__方法)。
    • is比较的是身份 (Identity),即两个对象在内存中的地址是否相同(相当于id(a) == id(b))。
  • 小整数缓存 (Small Integer Caching)
    • Python 为了性能优化,在启动时会预先创建范围在[-5, 256]之间的整数对象。
    • 现象a = 10; b = 10; a is b返回True。但a = 257; b = 257; a is b在交互式命令行中通常返回False(注意:在 PyCharm 或脚本文件中执行可能会因为编译器优化而返回True,面试时要区分场景)。
  • 字符串驻留 (Interning)
    • 类似的,简短的、只包含字母数字下划线的字符串也会被缓存,指向同一内存地址。

2:讲讲async/await的原理?asyncio是怎么工作的?

回答要点:

  • 核心概念asyncio是基于事件循环 (Event Loop)的单线程并发模型。
  • async/await
    • async def定义一个协程 (Coroutine),调用它不会立即执行,而是返回一个协程对象。
    • await用于挂起当前协程,将控制权交还给事件循环,等待 await 的对象(Awaitable,如 IO 操作)完成。
  • 工作流程
    1. 创建一个 Event Loop。
    2. 将协程注册到 Loop 中(Task)。
    3. Loop 不断循环,检测 IO 事件(如 Socket 可读写)。
    4. 当事件就绪,Loop 唤醒对应的协程继续执行,直到遇到下一个await
  • 优势:相比多线程,无锁竞争,上下文切换开销极小,适合高并发 IO 密集型任务。

3:functools.lru_cache是什么?它是怎么实现缓存的?

回答要点:

  • 作用:这是一个装饰器,为函数提供LRU (Least Recently Used,最近最少使用)缓存策略。
  • 原理
    • 它用一个字典缓存函数的输入参数(key)和返回值(value)。
    • 当函数被调用时,先查字典:
      • 命中:直接返回缓存值,并将该记录移到链表头部(表示最近使用)。
      • 未命中:执行函数,存入结果,若缓存已满,丢弃链表尾部(最久未使用)的记录。
  • 注意点
    • 被装饰函数的参数必须是可哈希的 (Hashable),否则无法作为字典键。
    • maxsize参数控制缓存大小,默认为 128。

4:什么是元类 (Metaclass)?它有什么应用场景?

回答要点:

  • 定义元类是创建类的类。在 Python 中,一切皆对象,类本身也是对象,而元类就是用来创建这些类对象的“模版”。默认的元类是type
  • 关系Instance(实例) ->Class(类) ->Metaclass(元类)。
  • 应用场景
    • ORM 框架:如 Django 的 Model,通过元类读取类属性(字段定义),自动生成数据库映射逻辑。
    • 接口校验:在类创建时检查是否定义了特定方法。
    • 自动注册:插件系统中,自动将子类注册到全局注册表中。
  • 实现:通过继承type并重写__new____init__方法,然后在类定义中指定metaclass=MyMeta

5:collections模块里你常用哪些数据结构?

回答要点:
面试官通常希望听到 dict/list/tuple 之外的答案:

  1. defaultdict:访问不存在的 key 时,自动调用工厂函数生成默认值(避免KeyError,常用于计数或分组)。
  2. Counter:专门用于计数的字典,提供most_common(n)等方便的方法。
  3. deque:双端队列,支持线程安全的、O(1) 复杂度的两端 append/pop(list 在头部插入是 O(n))。
  4. namedtuple:给元组的元素命名,代码可读性更强(比 dict 省内存)。

6:什么是 Monkey Patching (猴子补丁)?有什么风险?

回答要点:

  • 定义:在运行时动态修改类或模块的行为(如替换方法、属性),而无需修改源代码。
  • 常见场景
    • 测试 (Mocking):在单元测试中替换网络请求、数据库连接等外部依赖。
    • 热修复 (Hotfix):在不重启服务或无法修改源码库的情况下修复 Bug。
    • Gevent:通过猴子补丁将标准库的阻塞 IO 替换为非阻塞 IO。
  • 风险
    • 隐式行为:代码逻辑变得难以追踪,排查问题困难。
    • 版本兼容性:第三方库升级后,内部实现变了,补丁可能失效或报错。
    • 冲突:多个补丁可能互相覆盖。

7:Python 的类型注解 (Type Hints) 有什么用?运行时会生效吗?

回答要点:

  • 作用
    • 静态分析:配合 MyPy 等工具在代码运行前发现类型错误。
    • IDE 提示:让 IDE 能提供更好的代码补全和跳转。
    • 文档化:明确函数入参和返回类型,提高代码可读性。
  • 运行时
    • 默认不生效:Python 解释器在运行时会忽略类型注解,不会进行强制类型检查(Python 依然是动态类型语言)。
    • 特例:Pydantic 或 FastAPI 等库会在运行时利用类型注解进行数据校验和序列化。

8:什么是海象运算符 (:=)?它有什么应用场景?

回答要点:

  • 引入版本:Python 3.8+。
  • 作用赋值表达式。允许在表达式内部进行赋值,并返回该值。
  • 场景
    • while 循环:读取文件块或正则匹配。
      # 旧写法chunk=file.read(1024)whilechunk:process(chunk)chunk=file.read(1024)# 海象运算符写法while(chunk:=file.read(1024)):process(chunk)
    • 列表推导式:避免重复计算。
      [yforxindataif(y:=func(x))>0]

9:只要实现了__call__方法的对象就是函数吗?

回答要点:

  • 可调用对象 (Callable):不一定是函数。任何实现了__call__特殊方法的类实例,都可以像函数一样被调用(instance())。
  • 区别
    • 普通函数是function类型。
    • 实现了__call__的对象可以维护状态(属性),比闭包更灵活。
  • 应用:装饰器类、需要保持状态的回调函数。

10:BaseExceptionException的区别?为什么不能直接except BaseException

回答要点:

  • 继承关系BaseException是所有异常的基类;Exception是所有常规异常(非系统退出类)的基类,继承自BaseException
  • 关键区别
    • SystemExitsys.exit()触发)、KeyboardInterrupt(Ctrl+C 触发)等是直接继承自BaseException的。
  • 最佳实践
    • 业务代码应该捕获Exception
    • 如果捕获了BaseException(或裸写except:),会拦截 Ctrl+C 和系统退出信号,导致程序无法正常停止或被运维工具杀掉。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/22 5:09:00

运算放大器:电压/电流转换

转载:https://zhuanlan.zhihu.com/p/647432977 电压/电流转换即V/I转换,是将输入的电压信号转换成满足一定关系的电流信号,转换后的电流相当一个输出可调的恒流源,其输出电流应能够保持稳定而不会随负载的变化而变化。一般来说&am…

作者头像 李华
网站建设 2026/3/18 18:12:33

2025年第十二期正式出版

Volume 3 Issue 12 封面解读 George Fu Gao / Zepeng Xu The ACE2-using coronaviruses (CoVs) have led to two outbreaks that profoundly affected the world, and continue to emerge as investigations deepen. A summarization of known ACE2-using CoVs indicates tha…

作者头像 李华
网站建设 2026/3/18 18:50:22

学长亲荐!万众偏爱的AI论文工具 —— 千笔

你是否曾为论文选题发愁,反复修改却仍不满意?是否在查重、格式、文献整理上耗费大量时间却收效甚微?研究生阶段的论文写作,本就充满挑战,而千笔AI正是为解决这些痛点而生。它不仅能够高效生成结构清晰的论文内容&#…

作者头像 李华
网站建设 2026/3/15 10:49:56

三个线程如何按顺序打印ABC?

这篇文章分享一道非常不错的题目:三个线程按序打印ABC。很多读者朋友应该都觉得这道题目不难,这次给大家带来十二种做法,一定有你没有见过的新姿势。1. synchronizedwaitnotify说到同步,我们很容易就想到synchronized。线程间通信…

作者头像 李华
网站建设 2026/3/20 23:44:00

骨折分类数据集-医学影像分析-6717张X光片-适用于大学生毕业设计-支持目标检测与分类模型训练-完整标注信息-骨折检测与分类-医学影像分析研究者和开发者-推动骨折检测算法的研发与优化

骨折分类数据集:医学影像分析的完整资源 引言与背景 在现代医学影像分析领域,骨折检测与分类是骨科诊断的重要环节。随着深度学习技术的快速发展,基于X光片的骨折自动识别系统逐渐成为辅助临床诊断的关键工具。本数据集为医学影像分析研究者…

作者头像 李华
网站建设 2026/3/22 16:09:35

php 随机红包数生成

无论哪种实现方式,随机红包都要遵守几个核心约束(这是和单纯随机数最大的区别):总金额固定(比如 100 元分 10 个红包);每个红包金额非空(至少 0.01 元,避免分到 0&#x…

作者头像 李华