Startup / VO 面试真题解析:Components, Deadlock, Mutex, Singleton 基础题
一组基础题:解释死锁及避免方法,讨论客户、订单、折扣的类组件关系,以及互斥锁与单例的实现。逐题给出概念与设计要点。
题目描述
一组基础题,覆盖并发与设计:什么是死锁、如何避免;讨论 customer、orders、discount 的类组件如何支撑订单历史与订单内容;互斥锁(mutex)与单例(singleton)如何实现。
解题思路
死锁是多个线程互相持有对方所需资源并等待对方释放,形成循环等待。避免方法包括固定加锁顺序、限制持锁时间、使用 try-lock 回退、减小锁粒度,以及用一次性申请所有资源避免部分占用。
组件设计上,Customer 持有多条 Order,Order 聚合订单项并关联 Discount,Discount 描述规则;查询订单历史时从 Customer 经 Order 到订单项,形成清晰的一对多、聚合关系。
单例保证一个类只有一个实例,常见实现有饿汉式、双重检查锁与枚举单例;互斥锁用于保护临界区,保证同一时刻只有一个线程进入。
class Singleton:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance
复杂度与易错点
这些是概念与设计题,重点是讲清因果和取舍而非背定义。死锁要落到「循环等待 + 不可抢占」四个必要条件;单例的双重检查锁在并发下要配合内存可见性语义,Python 里直接依赖 GIL 与 __new__ 更简单。
FAQ
死锁的四个必要条件是什么?
互斥、持有并等待、不可抢占、循环等待。打破其中任意一个即可避免死锁,最常用的是固定加锁顺序打破循环等待。
参考来源
联系 VOPathway
如果你希望把这套方法用于自己的 OA 或 VO 准备,可以把目标岗位、当前阶段、面试时间和主要难点发给 VOPathway,我们会据此安排针对性的练习与复盘。
- 微信:Coding0201
- 邮箱:[email protected]
- Telegram:@OAVOProxy
- WhatsApp:+86 178 6396 8105
可提供 OA辅助、OA辅导、VO辅助与 VO辅导。文章用于训练参考,不代表相关公司的官方流程;实际安排请以候选人收到的通知为准。
本文用于面试准备与训练复盘。公司名称仅用于标识题型素材主题,不代表官方合作或录用承诺。
预约一次训练复盘 ↗