news 2026/4/16 15:17:58

华为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/4/16 15:07:35

IP转换器解决PLC跨网段通信难题

工厂随着生产规模逐渐扩大,增加了越来越多的新的自动化设备,但同时部分老设备也在继续运行。这时如果没有正确配置网络并更新网络规划,这些设备可能会发生IP冲突的情况,导致设备无法通信,MES、ERP等信息化管理平台得不…

作者头像 李华
网站建设 2026/4/15 19:54:38

挑战一周带Java程序员精通SpringBoot?

大家可以回想一下,当初我们最开始学习Java的时候,搭建一个Web所需要的步骤。。。1、配置web.xml,加载spring和spring mvc2、配置数据库连接、配置spring事务3、配置加载配置文件的读取,开启注解4、配置日志文件...5、配置完成之后…

作者头像 李华
网站建设 2026/4/16 13:41:44

KubeEdge 云端+边缘节点一键部署脚本

KubeEdge 云端+边缘节点一键部署脚本,脚本基于 Ubuntu 20.04/22.04 环境(云端需单节点 K8s,边缘节点需联网),兼顾易用性和稳定性。 一、前置条件说明 云端节点: 操作系统:Ubuntu 20.04/22.04(推荐 2核4G 及以上) 已安装 Docker、kubeadm/kubelet/kubectl(K8s 1.24+)…

作者头像 李华
网站建设 2026/4/15 10:30:13

从《机械公敌》到人类雇主:AI正在学会“租用”我们的双手

01 引言 2004年的电影《机械公敌》中,威尔史密斯饰演的警探戴尔斯普纳对产生了自主意识的机器人充满怀疑,那个世界中的NS-5机器人被设计为“完美仆人”,却最终成为人类的威胁。 原本只是电影的桥段,却似乎慢慢的映射到现实中。 02…

作者头像 李华
网站建设 2026/4/16 15:15:00

定稿前必看!本科生必备降AI率工具 —— 千笔·降AI率助手

在AI技术迅速渗透学术写作领域的当下,越来越多的本科生开始借助AI工具辅助完成论文撰写。然而,随着查重系统对AI生成内容的识别能力不断提升,AI率超标已成为影响论文通过的关键问题。面对市场上琳琅满目的降AI率与降重复率工具,许…

作者头像 李华