- 解决问题的技巧=了解技术工具箱+在不同情况下应用它的实践
- 理解问题是解决问题最重要的一步。
- 不要急于解决。在那之前问:
我可以简化问题吗?
我可以把问题分解成更简单的问题吗? - 当卡在问题上时。保持好奇,不要沮丧。
- 花一些时间思考问题的更多示例和边缘案例。
- 先忘记代码。考虑一个人如何“系统地”解决问题。
- 暂时忽略困难的部分并稍后再接近它们是可以的。
- 在白板上解决比键盘容易 10 倍。
- 没有计划地钻研代码只会给你带来压力。
- 在采用一个解决方案之前,请考虑多种解决方案。
- 从蛮力解决方案开始,然后修复次优部分。
- 逐步创建高级计划并验证它是否会引导您找到所需的解决方案。
- 尝试简化解决方案。更简单的解决方案更容易编码。
- 如果您正在努力实施您的计划,请先编写伪代码。
- 使用伪代码作为程序注释,在编码时将每个注释翻译成代码。
- 在进行任何改进之前,先专注于让解决方案发挥作用。
- 验证您的解决方案是否适用于所有可能的场景和边缘情况。
- 你只有解决很多问题才能变得更好。陈词滥调是有原因的。
- 对于面试,优先练习公司问得最多和问得最多的问题。
- 不要停留在工作解决方案上。了解解决同一问题的其他方法。
- 放松并将失败视为反馈。它只是告诉你什么不该做。
沟通
涉及到编码问题的时候,沟通是关键。一个在工作时需要帮助却能和人正确沟通的求职者比那些能轻松解决问题的求职者甚至更好。 了解这是哪种问题。有两种类型的问题: 1、编码。面试官希望你能针对问题写出简洁高效的代码。 2、闲聊。面试官希望能和你聊一聊。话题通常是(1)高水平的系统设计(“如何克隆Twitter?”)或(2)琐事(“Javascript中的hoisting是什么意思?”)。有时候这些琐事中也会引入“实际”问题,例如,“如何迅速排序整数列?好的,如果不是整数,是其他类型的呢…… ”。 如果你开始编写代码,并且面试官并不想多说废话,只想尽快过渡到“实际”问题,那么如果你罗哩叭嗦太多的话,她可能会觉得厌烦。不妨直接问,“是不是为这个问题写代码?” 让人感觉你有团队精神。面试官想知道和你一起工作是什么感觉,会有什么问题,所以要让他们看到你的团队合作性。使用“我们”来代替“我”,例如,“如果那个时候我们做广度优先搜索的话,就能及时/准时得到解决方案。”如果让你选择在纸上还是在白板上编码的话,选白板。这样,你就可以接近面试官,直接面对他提出的问题(而不是和她在桌子两边遥遥相望)。 把自己的想法大声说出来。不是开玩笑,比如说:“我不知道这样做是否有效——但请让我试一试。”如果你不知道怎么办,不知道这个问题该如何解决,那么就说一说你现在的想法。说一说你认为怎么做可能会有效。说一说你认为哪些会有用,以及为什么没用的原因。这同样适用于琐碎的闲聊问题。当面试官要求你解释Javascript闭包的时候,“这与范围有关,不妨把它放到一个函数中”可能会让你得到90%的分数. 不知为不知。如果正在谈论的话题(例如,具体的语言事务,具体的琐事,运行时分析)的确是你不曾涉猎的内容,那么不要不懂装懂。相反,你可以直接说:“我不知道,但我猜$thing,因为……”,因为后面可以通过分析排除其他选项,还可以拿其他语言或问题做例子
说话不要不经大脑。不要自信地将答案脱口而出。如果是正确的,那么你还是需要时间来考虑如何解释,如果是错的,那会显得你冲动鲁莽。你不是在和人比速度,而且你这么做更有可能因为打断她的话或者妄下结论而惹恼她。