关于调试,多线程的采访问题

时间:2008-11-14 23:14:10

标签: c++ debugging

昨天我接到了电话采访问题。 面试官问我是否遇到过任何具有挑战性的调试问题? 我告诉他我曾经遇到过调试别人代码的问题,我花了3-4天才解决了这个问题。我使用Windbg,符号和崩溃转储来解决问题。

现在这足以告诉我了吗?面试官期待什么?

我不知道还有什么要说的,我在很长一段时间内遇到了这个问题并无法解释所有细节......

这个问题非常常见,我不确定它的正确答案是什么?

另一个非常常见的问题是:

您是否参与过多线程应用程序?你怎么能发现僵局? 答:很好找到死锁,我们可以查看内存中进程的快照,并查看正在等待的线程。

接下来的问题:你能做些什么来避免死锁?

  1. 使用waitformultipleobjects
  2. 保持关键部分的顺序
  3. 你们说什么?

3 个答案:

答案 0 :(得分:21)

采访的一般规则是使用STAR模型(​​我的合作协调员将在这里感到自豪......):

S - 描述您所处的情况 T - 解释任务,提供足够的信息,以便面试官了解问题 A - 描述您为解决问题所采取的措施 R - 您的行动结果是什么

如果您提供简明的答案,不要太短或太长,99.9%的面试官会满意。

答案 1 :(得分:3)

多线程应用程序中可能发生死锁的主要原因之一是循环等待,其中两个不同的线程持有两个资源,每个线程等待另一个资源。 发生僵局的其他条件是没有先发制人,持有等待和相互排斥。

避免死锁的最佳方法是保持锁定顺序。换句话说,让线程能够按特定顺序获取锁定。这将限制线程陷入死锁。

答案 2 :(得分:1)

面试问题(好吧,至少是好的)不关心你告诉你的知识,它向面试官解释你实际上是否知道它。

所以,虽然你可以解释windbg的完整复杂性,但他不会在乎。他会关心你知道该做什么并相信你。您只需提供足够的信息即可满足这一要求。另一种方法是在他面前实际调试一些东西以证明它并且采访从未持续那么久:)

所以我认为(从你所说过的)你知道你在说什么,你确实有这种经历,你可以再做一次。所以让我们继续讨论下一个问题,找出更多关于你知道的其他问题。

有时候你会以一种有点模糊,没有问题的方式回答 - 我们只会问另一个人,直到我们发现我们是否认为你对这个角色是否足够好。

面试只是考试,因为面试官对你的工作感兴趣,而不是结果。