在参加Meta的面试过程中,我被要求解决了一个有趣的性能分析问题。面试官向我介绍了这个任务的背景:为了评估某个应用程序的性能,该应用被设计为记录每个函数开始和结束的事件。每个事件都包含三个字段:函数名称、时间戳以及类型(开始或结束)。以下为题目原文。
We are profiling the performance of some app. In order to do that, app is instrumented to log events for beginning and end of each function. An event is a record with three fields:
1. function name
2. timestamp
3. type (begin or end)
Example:
foo, 10, b bar, 20, b bar, 50, e foo, 100, e
Given such a log, compute exclusive running time for each function (exclusive time excludes time spent in function's sub-routines).
For above example the expected output is:
foo: 60 bar: 30
面试官给了我一个具体的例子,日志中的记录是这样的:
foo
, 10, bbar
, 20, bbar
, 50, efoo
, 100, e
他们要求我编写代码来计算每个函数的独占运行时间。这里的“独占时间”指的是排除在函数子程序中花费的时间后,函数本身的运行时间。
我首先描述了我的思路,即通过栈来跟踪函数调用的开始和结束,从而能够计算出独占时间。在确认了面试官对我的方案没有疑问之后,我开始动手编写代码。我使用Python语言,定义了一个类来解析日志并存储函数的调用信息。然后,我通过迭代每个事件,利用栈来处理函数的开始和结束,以此来计算每个函数的独占时间。
最终,我的代码成功输出了预期的结果,其中foo
的独占运行时间是60,而bar
是30。面试官对我的解决方案表示满意,并对我的代码风格和解决问题的逻辑能力给予了肯定。
面试结束后,我反思了自己的表现,感到自己在处理问题时既系统又高效。整个经历增强了我的信心,并使我对编码测试的应对能力有了更深的理解。
代面试,OA代做,面试辅助,请联系我。