在过去的几个月里,我的许多朋友都向我咨询我是如何最终通过亚马逊的软件开发工程师面试的,所以我用这篇文章来尽可能简短和切中要害的描述我的面试准备路线图,希望读者在阅读完这篇文章之后,也能获得一个清晰的思维导图,继续自己的梦想公司求职之旅。
路线图概要:
C++/Java+OOPS基础知识→ 数据结构和算法→ Web开发技能和项目→ InterviewBit → codeforces(可选)→ CS基础知识→ Leetcode→ 软技能提升
开始前:准备过程中每个阶段需要遵循的要点
从准备的第1天开始,遵循以下要点。无论怎样,这些要点都至关重要。
(1)在笔记本上做笔记:手写笔记总能让你更好地理解,最适合修改。你会在面试前一个月意识到他们的重要性。
(2)只写下重要的内容:现在,不要只开始写你读到的所有内容或你解决的每个问题。只需写下你觉得很新鲜或难以理解/记忆的东西。你也可以写下你花了很多时间并学到了一些漂亮的东西的解决方案。
(3)不要跳过任何事情:试着理解为什么你要这样做,而不是采取其他的方式,你怎么知道应该用这种方法解决什么问题,为什么要用这种方法来解决这个问题,试着理解问题背后的逻辑。试着去理解你所学的所有东西背后的核心,不要只是忽略/拼凑一些东西而不去理解它。
(4)在编写代码之前先思考:不要在没有清晰逻辑的情况下开始编写代码。首先,阅读问题,试着了解你得到了什么,问题想要你做什么。然后在笔记本上找出解决问题的可能方法。当你对逻辑有点确定时,就开始编码。这不仅会提高你的准确性,而且会随着时间的推移提高速度。
(5)从准确度转向速度:信不信由你,在学习任何新技能时,准确度是最重要的。速度来自练习。试着用学开车来做一个类比。你不能仅仅以100英里/小时的速度开始骑行。你首先要尽可能慢地开车,这样你就可以控制汽车了。首先,你试着去理解它,一段时间后,你可以驾驶它,而不会给你的大脑带来太大压力。这一切都是自动发生的,你的腿会产生肌肉记忆,在离合器和制动器等之间切换。
(6)从错误中吸取教训:当你犯错误时不要感到沮丧,在那一刻要开心,并且要想一想,你已经能够解决的问题对你的学习没有太大的帮助。他们只是提高了你的速度,给了你信心(这也很重要)。现在你终于学到了一些新的东西,所以现在尽你所能解决这个问题,阅读社论,观看一些视频解决方案,询问某人,但最后,确保你知道与这个问题相关的所有概念。接下来,如果出现类似的情况,你应该能够解决它。这就是你的进步。
(7)有一个编码伙伴:有一个可以讨论疑问的编码伙伴,你们两个可以在这段旅程中追踪彼此的进展。
(8)思考时说话:解决问题时试着自言自语(没人会说你疯了)。这种习惯在虚拟面试中很有用,因为这样,面试官将能够更好地理解你的思维过程,并能够更好地判断你,即使你只能部分地解决一个问题。
阶段1:语言基础知识
现在问题来了,我如何获得一些语言的基本知识?假设你不想花任何钱在不同付费网站的课程上,不用担心。YouTube上有很多好的视频,而且已经足够了。按顺序遵循以下列表:
(1)CodeWithHarry的C++播放列表:这包含了你开始面试准备旅程所需的一切C++内容,它还涵盖了OOPS的一些概念。
(2)DS Algo播放列表:这篇文章还涵盖了C++语言的基础知识,也涵盖了许多数据结构和算法。在学习了这些之后,你将对编程有更完整的认识,并且你将能够自己解决许多简单/中等的问题,或者至少你将能够理解他们的解决方案。
如果您正在关注YouTube,请记住,当YouTuber正在解决问题时,您需要与视频一起编写代码,请在问题陈述后暂停视频,首先尝试自己编写代码,如果您无法对解决方案进行任何思考,请在观看视频中的解决方案之前,给问题至少15–30分钟的时间。
如果你有预算,并且把学习任务集中在一处,你可以了解一下篱笆教育的课程(https://www.libaspace.com/course/careerCoaching/1)。在课程中将涵盖必备的各类数据结构(Array, LinkedList, Binary Tree, Hashmap, Queue/Stack/Heap, PriorityQueue)和算法(Sorting, Graph Search, Backtracking, Divede And Conquer,Dynamic Programming),采用理论讲解 + 在线quiz + 课后练习的形式,强化对知识的理解,定期Mock interview指导,线上线下组队学习,锁定OFFER。
