Coding Interviews require time and practice to ace. You need to be thorough with all the concepts and also be confident about the projects and internships you have mentioned on your resume. This article will give you a complete roadmap for your preparation and how I prepared for my interviews in around 3 months. This article is intended for a fresher who is about to enter the placement season and not for people having a few years of experience. I started my preparation in the month of March 2020, just after the commencement of the worldwide global pandemic.
çoding采访需要时间和实践来王牌。 您需要全面了解所有概念，并对简历中提到的项目和实习充满信心。 本文将为您提供准备工作的完整路线图，以及我如何在大约3个月的时间里为面试做准备。 本文适用于即将进入分班季节的新人，而不适合有几年经验的人。 在全球大流行开始后的2020年3月，我开始准备工作。
Before you go any further in the article, I would like to give a brief about my background. I am currently a final year B. Tech student from Vellore Institute of Technology, Vellore with a full time SWE offer from Société Générale. Throughout my degree, I have worked on projects in various domains like AI, Android and Web. So, what do I mean when I say preparing for the interviews when I have had some coding experience in college? Two things basically :
在继续本文之前，我想简要介绍一下我的背景。 我目前是Vellore理工学院的B. Tech大学最后一年的学生，并拥有SociétéGénérale的全职SWE职位。 在整个学位课程中，我从事过AI，Android和Web等各个领域的项目。 那么，当我在大学里有一些编码经验时，说准备面试是什么意思？ 基本上有两件事：
- Undergraduates are judged only on their coding, problem solving and computer fundamentals knowledge and not on the tech stack they have worked upon. This is the reason, an AI guy might turn out to be a Full Stack Web Developer or an Android Developer may turn out to be a great Data Scientist. The technologies you work upon when you join a company may not be the technologies you work upon as a college student. 仅根据他们的编码，问题解决和计算机基础知识对大学生进行评判，而不根据他们所从事的技术知识来对他们进行评判。 这就是原因，一个AI专家可能证明是Full Stack Web开发人员，或者Android开发人员可能证明是一位出色的数据科学家。 加入公司时所使用的技术可能不是大学生所使用的技术。
- The hobby projects which freshers mention in their resume rarely are up to the standards of the enterprise projects. Enterprise level software should be scalable. 应届毕业生在简历中提到的业余项目很少达到企业项目的标准。 企业级软件应具有可伸缩性。
Now, coming to the placement strategy, I will basically divide it into 4 parts:
Choosing a language — This is the first step for any student aiming to join a product-based company. Choose any language which you prefer and stick to it. Do not change it after a month. Go for any Object Oriented Language from Java, C++ or Python. I prepared in Java. The reason I have excluded languages like JS, C# from the list is because lot of companies do not give you the option of choosing a language other than the 3. Therefore, playing it safe, select any one of the three I have mentioned. Learn the Object Oriented Programming concepts and try to implement all of them in the language you have selected. Luckily for me, I had the Java Programming course in the sixth semester of my college, i.e, just before I started with my preparation. Thus, I could basically skip this step as I had covered these concepts pretty recently and the information was fresh in my mind.
选择语言 -这是任何旨在加入基于产品的公司的学生的第一步。 选择您喜欢的任何语言并坚持使用。 一个月后请勿更改。 寻找Java，C ++或Python的任何面向对象的语言。 我用Java编写。 我之所以从列表中排除诸如JS，C＃之类的语言，是因为许多公司没有给您选择3种语言之外的其他语言的选择。因此，为了安全起见，请选择我提到的三种语言中的任何一种。 学习面向对象编程的概念，并尝试以所选的语言实现所有这些。 对我来说幸运的是，我在大学第六学期(即，在我开始准备之前)上了Java编程课程。 因此，我基本上可以跳过此步骤，因为我最近刚刚介绍了这些概念，因此我脑海中有了新鲜的信息。
Data Structures and Algorithms — This is the most important step of your process. DSA accounts for up to 80% of the questions you get in a coding interview. This step involves learning the basics of DSA and not competitive programming. Select any resource you are comfortable with and stick to it. You can choose either a book or a website. However, choose a single resource and stick to it. I studied from the book called Data Structures and Algorithms made easy in Java by Narsimha Karumanchi. It is one the most complete book out there and is extremely beginner friendly. The book contains multiple questions which are solved using multiple different approaches. The topics to be studied are — Arrays, Strings, Linked Lists, Stacks, Queues, Trees, Graphs, Greedy Programming, Recursion, Backtracking, Dynamic Programming, Bit Manipulation, Binary Search and Sorting Algorithms. In the next couple of months, I will be writing separate articles on some of the important and difficult topics among them and try to give a walk through of how I studied all of them.
数据结构和算法 -这是过程中最重要的步骤。 DSA最多占您在编码采访中遇到的问题的80％。 此步骤涉及学习DSA的基础知识，而不是竞争性编程。 选择您喜欢的任何资源并坚持使用。 您可以选择书籍或网站。 但是，请选择一个资源并坚持使用。 我从Narsimha Karumanchi的《 Java中的数据结构和算法 》一书中学习。 这是一本最完整的书，对初学者非常友好。 本书包含多个问题，可以使用多种不同的方法来解决。 要研究的主题是-数组，字符串，链表，堆栈，队列，树，图，贪婪编程，递归，回溯，动态编程，位操作，二进制搜索和排序算法。 在接下来的几个月中，我将针对其中的一些重要和困难主题撰写单独的文章，并尝试逐步介绍我如何研究所有这些主题。
Competitive Programming and SQL — The third step is to get your hands dirty in the world of competitive programming. The types of questions you get in Competitive Programming(CP) are a bit different from the types of questions you get in the interviews. CP is a bit mathematical whereas interviews are a bit focused towards DSA. This is the step where you apply the concepts learnt in the previous phase and build your actual thinking ability. I highly recommend solving questions from any one of the proper competitive programming websites like Codeforces, Codechef or Hackerrank as the type of questions you get in these platforms are generally questions you have not seen before. This trains your mind in thinking about the most optimized solution on the spot and will build your thought process. Apart from this, solve questions from any one of Leetcode or Geeksforgeeks depending upon your personal preference. Apart from this, I highly recommend you to brush up your RDBMS concepts. At the same time also practice SQL questions from any website of your choice.
竞争性编程和SQL —第三步是让您在竞争性编程的世界中变脏。 在竞争性编程(CP)中遇到的问题类型与在面试中遇到的问题类型有些不同。 CP有点数学，而访谈则有点针对DSA。 这是您应用上一阶段学到的概念并增强实际思维能力的步骤。 我强烈建议您从Codeforces，Codechef或Hackerrank等任何适当的竞争性编程网站中解决问题，因为在这些平台中遇到的问题通常是您以前从未见过的问题。 这样可以训练您的思维，让您思考当场最优化的解决方案，并建立您的思考过程。 除此之外，根据您的个人喜好，从Leetcode或Geeksforgeeks中解决任何一个问题。 除此之外，我强烈建议您复习RDBMS概念。 同时，还可以从您选择的任何网站练习SQL问题。
Revision and Mock Interviews — This is the final phase of the preparation process. Revise the concepts of Operating Systems and Computer Networks as companies tend to ask question from these topics in the online test as well as in the interviews. The final step which you need to follow and which I would say becomes the difference in you acing your first interview or not is practicing mock interviews. This step is a must as it gets you into the feel of how you need to approach the interview. This also removes the fear which you posses for the interviews making you completely comfortable with the process. During interviews, explaining your thought process to the interviewer is more important that solving the question. Thus, do at least 5–10 mock interviews before the placement season begins on Pramp. Also, go through the book called Cracking the Coding Interview by Gayle Laakmann McDowell a week or two before your interviews for a final revision.
修订和模拟访谈 —这是准备过程的最后阶段。 修订操作系统和计算机网络的概念，因为公司倾向于在在线测试以及面试中从这些主题中提出问题。 您需要遵循的最后一步，我想说的是，您在进行初次面试与不进行面试时的区别在于练习模拟面试。 这一步是必须的，因为它可以使您了解如何进行面试。 这也消除了您为面试带来的恐惧感，使您完全满意此过程。 在面试中，向面试官解释您的思维过程比解决问题更为重要。 因此，在就职季节开始于Pramp之前，至少要进行5-10次模拟面试。 另外， 在面试前一到两周，请阅读盖尔·拉克曼·麦克道威尔(Gayle Laakmann McDowell)撰写的《 破解编码面试 》一书，以进行最终修订。
- Solve the questions the correct way. Always get out of your comfort zone and allow your mind to think. Otherwise, even solving a thousand questions won’t get you through. 以正确的方式解决问题。 始终走出您的舒适区，让您的思想进行思考。 否则，即使解决一千个问题也无法解决问题。
- Having a breadth first knowledge of all the topics is recommended rather than having a depth first one. This will allow you to think in all possible directions for a given problem. 建议您具有所有主题的广度优先知识，而不是深度知识。 这将使您能够针对所有给定问题进行思考。
- Never ever mug up a particular approach. This will easily set you a couple of months back in your preparation. Although, it may seem as a shortcut but will definitely harm you in the long run as you are confining your mind in one direction. 永远不要搞砸特定的方法。 这很容易使您重新准备几个月。 虽然，这似乎是一种捷径，但从长远来看，肯定会损害您的利益，因为您将注意力集中在一个方向上。
- Whenever you learn a new algorithm, always try to implement it by yourself before looking how it is implemented in a language. This will increase your grip in the programming language of your choice. 每当您学习新算法时，在查看如何以某种语言实现该算法之前，请始终尝试自行实现该算法。 这将增加您对所选编程语言的了解。
- Along with programming skills and computer fundamentals, having good projects in your resume is equally important. It will allow you with some breathing space and will also give the interviewer a good impression about your problem solving skills with respect to a real time scenario. 除了编程技巧和计算机基础知识外，简历中的优秀项目也同样重要。 这将为您提供一些喘息的空间，也将使访问员对您在实时场景中解决问题的技能有良好的印象。
- Data Structures and Algorithms made Easy by Narsimha Karumanchi Narsimha Karumanchi简化了数据结构和算法
- Cracking the Coding Interview by Gayle Laakmann McDowell 盖伊·拉克曼·麦克道威尔(Gayle Laakmann McDowell)
- Leetcode/Geeksforgeeks for DSAquestions. Leetcode / Geeksforgeeks用于DSAquestions。
- Codeforces/Codechef/Hackerrank for Competitive Programming. 竞争性编程的Codeforces / Codechef / Hackerrank。
- Knowledge Gate youtube channel for DBMS and OS. 用于DBMS和OS的Knowledge Gate youtube频道。
- Hackerrank for SQL Questions. 有关SQL问题的Hackerrank。
- Gate Smashers for Computer Networks. 计算机网络的门粉碎机。
This is basically the strategy which I followed during my preparation and the strategy I would recommend to any junior for their preparation. There are still lots of things which I have covered only up to a superficial level in this article which I would be covering in the future. Till then, Happy Coding :)
这基本上是我在准备过程中遵循的策略，也是我会推荐给任何大三学生准备的策略。 在本文中，我仍然会涉及很多东西，直到我只涉及一个肤浅的层面，以后我会再讨论它们。 直到那时，快乐编码:)