CS-OA cs-vo Faang

中国春招 – 量化机构 – 法巴证券 – 春招面试真题

一起来看看一道近期某国内的量化机构的面试真题吧

你需要实现一个计时程序,程序会使用5个线程/进程,持续打印日志。线程/进程1每秒等间隔打印一次数字1及当前时间,线程/进程2每秒等间隔打印2次2及当前时间,…. 线程/进程5每秒等间隔打印5次5及当前时间。但是,你的计时程序受到了不可控的扰动,每次打印日志时,对应线程/进程将有1%的棚率异常,随机挂起停止打印日志1-5秒钟。当结束挂起后,该线程/进程需要加速打印1秒钟,以弥补停止打印的时间里需要打印但未打印的日志数量,加速打印过程中仍然需要保持日志等间隔打印。请注意,在加速打印环节,打印日志也同样面临概率异常问题。请书写代码实现符合描述的计时程序,包括模拟概率扰动。
提示:可以构造递归

为了实现这个计时程序,我们可以使用Python的多线程库threading来创建并控制五个线程,每个线程负责一个打印任务。每个线程根据其序号(从1到5)在每秒中打印相应的数字相应次数,并附上当前的时间戳。同时,每个线程将有1%的概率随机挂起1到5秒钟。当线程从挂起中恢复后,需要尽快补充未打印的日志,同时保持等间隔打印。

实现步骤

  1. 定义线程任务函数
    • 每个线程循环执行打印任务,打印其线程编号对应的数字和当前时间。
    • 每次打印后,通过随机数判断是否触发挂起。
    • 如果挂起,记录挂起的时间和未打印的数量。
    • 恢复后,加速打印未打印的日志。
  2. 处理挂起和异常情况
    • 使用random模块来决定是否发生挂起以及挂起的时长。
    • 在加速打印期间,仍然按照1%的概率可能再次触发挂起。
  3. 确保打印等间隔
    • 正常情况下,线程每秒打印对应次数。
    • 在加速打印期间,如果需要补充日志,需要计算补充日志的总次数,并根据时间间隔等比例地加速打印。
  4. 线程的创建和管理
    • 使用threading.Thread来创建线程。
    • 对每个线程设置守护线程,确保主程序结束时,所有线程也能正常结束。

全球各地,CS方面面试,都可以找我们进行代面试或者面试辅助服务,我们的价格公开透明可查(点击查看)。我们支持任意地区英语和汉语普通话的面试。欢迎联系我。

Leave a Reply

Your email address will not be published. Required fields are marked *