学习算法最佳方法
发布时间:2018-11-06 作者:jason
我假设您使用谷歌作为进入四巨头(Facebook,谷歌,微软,亚马逊)的象征。
公司在面试期间对以下5个因素进行评估
1.编码技巧。
2.对基础数据结构和算法的了解和理解。
3.解决问题的能力(和白板练习)。
4.能够设计大规模分布式系统。
5.文化契合和人际交往能力
通过有意识地在上述所有类别中提高自己的水平,您可以极大地提高您被Google聘用的机会。让我们详细看看这些因素
1.编码技巧:
你必须精通编码。更好地编写代码的最简单方法就是编写代码。用你最喜欢的编程语言编写很多代码。您在编程语言中的舒适程度有助于您专注于面试的其他部分。面试官可以快速找出您对某种编程语言的熟练程度。如果您编写很多代码,那么您知道的每种语言都会有细微差别。这里有一些例子
1.声明并传递二维数组。
2.字符串操作函数,例如Splice,Substring等。
3.数学函数,例如Math.floor,Math.round等。
这并不意味着您应该记住所有库函数。我只是说,当你编写很多代码时,这些东西大部分都是你自然而然的。您不必在每一步都暂停。
2.对基础数据结构和算法的了解和理解:
刷新数据结构和算法。修改Big-O以获取最常用的算法。没有人会要求你逐字逐句地实现算法,但最好记住这样的事情
1.Merge Sort和Quicksort之间有什么区别。在哪种情况下哪一个更好?
2.什么是稳定的?
3.什么是堆?
4.什么是HashTable以及常见的碰撞解决技术是什么?
5.什么是PreOrder,InOrder,PostOrder,LevelOrder遍历?
6.什么是广度首次遍历和深度优先遍历?
这不是一个全面的列表,但如果您在回答上述问题时遇到困难,则需要学习或修改数据结构和算法。
如果您正在寻找学习数据结构的资源(特别是对于Javascript),请查看Javascript中的数据结构,包括可视化和实践练习。
3.解决问题的技巧(和白板练习):
开始练习并解决编码问题。从基本的开始,然后逐步解决更高级的问题。您不应该花费超过30分钟来解决任何问题。更好的是,练习在白板上解决问题。
作为一种资源,我会推荐使用交互式可视化的Coderust 2.0:更快的编码面试准备来准备编程访谈。它有Java,Python,C ++,Javascript和Ruby等源代码的80个问题。
4.设计大规模分布式系统的能力:
如果编码可以帮助您获得选择,您的设计技能将决定您的薪水和水平。重点是学习分布式系统的基础知识,然后学习如何根据提供给您的约束来设计大规模分布式系统,这一点非常重要。如果以下主题对您来说陌生,您必须学习和练习
1.容量规划,
2.无状态服务器,
3.SQL与NO-SQL
4.分布式队列
5.Blob存储
6.一致性模型(强一致性与最终一致性)。
同样,它不是一个全面的列表,但如果你正在努力解决这些问题,你会在面试中挣扎。我建议看Grokking系统设计访谈,以获得系统设计基础知识和设计Instagram,设计Youtube,设计优步等问题的详细概述。
5.文化契合和人际交往能力:
你必须在团队中工作。公司希望雇用团队合作的工程师。他们会问你关于你和你的团队或你的经理有分歧的棘手情况的问题。您对如何处理此类情况的回答可以说明您的个性。在面试之前尝试记住这些情况。
改善这一点的最佳方法是成为一名优秀的团队合作者。你不仅要讲很好的故事,而且你现在的同事很乐意为你写一篇推荐信(许多顶级公司都要求)。