发布于 2026-01-06 12 阅读
0

4年以上破解技术面试的经验

4年以上破解技术面试的经验

一个可以解决任何技术面试问题的框架

我担任高级软件工程师 II(前端)已经有一段时间了,也曾担任过面试官和面试官。我主持过很多技术面试,也参加过同样多(甚至更多)的面试。

从在白板上讲解数据结构和算法问题,到与面试官结对编程,这次经历让我大开眼界,也让我意识到面试有多么耗费精力!

因此,在过去的 4 年里,我总结出了这个小框架,它帮助我在多家科技公司成功胜任了多个职位。

这个问题解决方法包含 5 个主要部分。

  1. 理解问题
  2. 探索具体案例
  3. 分解
  4. 求解或简化
  5. 回顾并重构

让我们逐一详细了解一下:

理解问题

拿到题目后,不要立刻敲击键盘或声明变量。深呼吸。仔细阅读题目,然后再读一遍。

“回答自己不理解的问题是愚蠢的。”

——乔治·波利亚《如何解决它》

然后,试着记下以下问题的答案:

  1. 我可以把问题重新表述一下吗?
  2. 这个问题需要考虑哪些输入?你可以在这里询问面试官关于输入参数的边界情况。
  3. 解决该问题后应该产生哪些输出结果?
  4. 能否根据输入确定输出?换句话说,我是否掌握足够的信息来解决这个问题?
  5. 我应该如何标记构成问题的重要数据(变量声明)?

探索具体示例

举例可以帮助你更好地理解问题。这些例子还能帮助你检验解决方案是否有效。

这可以帮助您更清楚地了解输入和输出的性质,并揭示任何极端情况。

这些只不过是针对问题陈述的用户故事或单元测试。

例如,请考虑以下问题:

编写一个 名为 charCount 的 函数,该函数接受一个字符串作为参数,并返回字符串中每个字符的计数?

例如:

charCount("aaa");        // Output -> {a:3}
charCount("hello");      // Output -> {h:1, e: 1, l: 2, o: 1}

// Check examples for empty inputs
charCount(""); // Output -> { }

// Check examples for invalid inputs
charCount(1234);         // Output -> { } 

// Check examples for invalid inputs
charCount(false);        // Output -> { }
Enter fullscreen mode Exit fullscreen mode

分解

这是最重要却又最容易被忽略或跳过的步骤之一。在整个问题解决过程中,你需要让面试官始终了解你的思路。

  1. 在分解问题的同时进行沟通
  2. 问一些诸如“这样听起来好吗?”“我走的路对吗?”之类的问题。
  3. 请写注释,不要直接写代码。
  4. 请明确写出你需要采取的步骤。你只需要写出解决问题的伪代码或步骤即可。

问题分解的过程会促使你在编写代码之前先思考代码,并帮助你发现任何残留的概念性问题或误解。这是非常重要的一步,在你深入研究代码细节(例如语法)之前,它将对你大有帮助。

求解或简化

到这一步时,你应该已经写好了伪代码。现在你只需要编写代码即可。

逐个击破:分而治之策略。

分析对手的各个组成部分,确定如何控制每个部分,制造分裂并加以利用。——

罗伯特·格林

如果你遇到难题无法继续,别担心。试着把问题分解成更小的问题。先找到一个更简单的问题,然后解决它。这样做会让你获得成就感,从而帮助你从心理上克服困难,继续前进。

是的,情绪上确实如此。有时候我在解DSA题的时候会开始冒汗、口干舌燥。解题需要保持良好的心理状态,因为这毕竟是一场脑力游戏!

简单来说:

  1. 找到你所尝试做的事情的核心难点。
  2. 暂时忽略困难
  3. 写出一个简化的解
  4. 然后把这个难题重新考虑进去。

回顾与重构

这是最后一部分,但却是区分优秀候选人和良好候选人的关键所在!

对于重构,请问自己:

  1. 我可以查看结果吗?
  2. 我可以用其他方法得出结果吗?
  3. 我能一眼看懂答案吗?答案是否易于理解?
  4. 我可以用同样的方法解决其他问题吗?
  5. 我能否提升该方案的性能?
  6. 我还能想到其他重构方法吗?
  7. 其他人是如何解决同样的问题的?这属于框架中“回顾”部分的范畴!

祝你面试一切顺利(如果你有面试安排的话)。


感谢阅读❤

如果这篇博客对您有所帮助,请在Medium上关注我!您的支持是我前进的动力!

原文发表于adityatyagi.com

想建立联系吗?

请在TwitterLinkedIn上关注我,或在下方评论区留言!

我叫Aditya,是一名高级软件工程师(前端方向)。我写博客,内容是关于Web开发的

文章来源:https://dev.to/adityatyagi/4-years-of-cracking-technical-interviews-24o0