Websites and other Resources to prepare for coding challenges
Curriculum
To find out a list of topics that you need to know, look at these:
- Data Structures in Java: An Interview Refresher (https://www.educative.io/courses/data-structures-coding-interviews-java?affiliate_id=5073518643380224)
- Grokking the Coding Interview - (https://www.educative.io/courses/grokking-the-coding-interview?affiliate_id=5073518643380224)
- 50+ Data Structure and Algorithms Problems from Interviews (https://dev.to/javinpaul/50-data-structure-and-algorithms-problems-from-coding-interviews-4lh2)
- 100+ Coding Interview Questions for Programmers (https://www.java67.com/2018/06/data-structure-and-algorithm-interview-questions-programmers.html)
- https://www.baeldung.com/cs/
- https://takeuforward.org/dbms/most-asked-dbms-interview-questions
- https://neetcode.io/courses
Some Useful Resources for Coding Interviews
Good knowledge of data structure and algorithms is the most important thing to do well on interviews and if you feel that you have forgotten those concepts or want to fill gaps in your understanding, here are some useful list of books and courses to learn Data Structure and Algorithms.
- The most common Adobe coding interview questions https://www.educative.io/blog/adobe-coding-interview-questions
- educative.blog https://www.educative.io/blog/category/interview-prep
- 10 Data Structure, Algorithms, and Programming Courses to Crack Interviews (https://dev.to/javinpaul/10-data-structure-algorithms-sql-and-java-courses-to-crack-any-programming-job-interview-11f6)
- 10 Algorithms Books Every Programmer should Read (https://www.java67.com/2015/09/top-10-algorithm-books-every-programmer-read-learn.html)
- 10 Free Courses to Learn Data Structure and Algorithms in Depth (https://www.java67.com/2019/02/top-10-free-algorithms-and-data.html)
- LeetCode - The Programming Interview Platform
- 20+ binary tree-based problems for interviews (https://medium.com/javarevisited/20-binary-tree-algorithms-problems-from-coding-interviews-c5e5a384df30)
- 10 Courses to Prepare for Programming Job Interviews (https://javarevisited.blogspot.com/2018/02/10-courses-to-prepare-for-programming-job-interviews.html)
- 21 String Programming Interview Questions (https://medium.com/javarevisited/top-21-string-programming-interview-questions-for-beginners-and-experienced-developers-56037048de45)
- 5 Free Courses to Learn Algorithms for Interviews (https://javarevisited.blogspot.com/2018/01/top-5-free-data-structure-and-algorithm-courses-java--c-programmers.html)
- 10 Books to Prepare Technical Programming/Coding Job Interviews (https://www.java67.com/2017/06/10-books-to-prepare-technical-coding-job-interviews.html)
- https://www.geeksforgeeks.org/7-best-coding-challenge-websites-in-2020/
- https://www.geeksforgeeks.org/how-to-begin-with-competitive-programming/
- GeeksforGeeks : An online portal that acts as a library of a wide array of computer science-related topics, with both detailed articles and instructional videos on many different topics regarding data structures & algorithms and systems design
- How To Win Friends And Influence People : A classic book on human behavior that will teach you how to build rapport and prove why you’re the best candidate for the job
- Tech Interview Pro : An interview prep course designed by a former Google software engineer that has instructional video modules on data structures & algorithms and systems design. It also grants access to a private Facebook group with over 1,500 former students who’ve used what they learned in the course to land jobs at big tech companies like Google and Facebook
- InterviewBit : An interview prep program that offers tailored action plans based on your current preparation and goals. It has programming questions relevant to big tech companies like Google, Facebook, and Amazon
- Pramp : A site where you can take part in multiple mock interviews with other software engineers (some of whom have worked in FAANG companies like Facebook and Amazon) while receiving immediate, objective feedback on your performance
Preparing for interview
The process of interview is flawed, it is grossly unfair BUT in absence of any better alternative, we will have to bear with it. Personal example: I did not even qualify the written test for Amazon and within 7 days I had an offer from another team at Amazon ( I cleared all interviews (6 of them) with ease). What changed? Nothing, just that (which I later realized), the other people who came for the written test were already aware of the question and gave a perfect solution (which I obviously did not).
Now that you understand computer science, let’s learn the tricks (yes they are tricks and nothing more, you are still the same person but now you know how to clear interviews):
Principles of interviewing:
a) Its never about the right answer, its always about the approach you take, the clarity of thought and the methodology of the process you employ to try to solve the problem.
b) Start from the naive solution, and then incrementally try to get to a better solution, ex, how can you remove that log(n) to search inside that O(n) loop, use a hashtable perhaps? but won’t that increase the memory required? Is that OK with the given problem size? Ask the interviewer.
c) Listen to the question properly, a lot of hints are hidden in the question itself. Once you are done with (a)/(b), now try to see, if you can use some property of the input to get a better solution, perhaps the input is characters from a to z, characters AHA? Can I now use that hashtable which will just have size O(26)?
d) Also, the expectations vary from company to company. ex, Amazon might focus more on an optimized solution and be a little lenient on corner cases but Microsoft would rather have you take care of each and every corner case and be flexible with the algo. You can get this by reading about the companies interview strategies on Google or Bing.
Getting ready for the perfect interview :
a) Practice questions from Carrercup and Geeksforgeek
. What you want to learn is not the solution to the problem but HOW to solve such problems, how to approach and how to arrive at the solution. Try to solve it yourself first and if you get stuck, look just at the minimal hits and try again.
b) Read this book
Cracking the coding interview. A little out of date but still provides valuable insights into how major technology companies go about their interviews. Discusses 1-2 problems from each of these companies.
c) Hacking the coding interview course:
(GetInterviewed course.) A thorough course on how to structure your response, decoding what makes a great answer. Understanding what an interviewer is looking for, real-interview scenarios 1:1 mock interviews for all the rounds like machine-coding, problem-solving, design and hiring rounds.
d) Practice, practice, practice …
Also remember, those interviews are just a means to land a job, they are not the ends in themselves. What you want to do is to learn, learn why something works, learn how to solve complicated problems.
Resources that help with WhiteBoard Coding Interviews
A list of resources which I collected from many web Q&As related to this and in order of priority.
This is the list of books, sites, and courses I will be working with:
Books:
- Cracking the coding interview
- Introduction to Algorithms
- Programming Interviews Exposed
- Clean code
- Algorithm Design Manual
- How to Think About Algorithms
- Programming Pearls
- Data Structures And Algorithms Made Easy In Java 2nd Edition 2nd Edition
Websites:
- Interview Bit
- HackerRank
- Codewars
- Codefights
- AlgoExpert
- CarrerCup
- Interview Cake
- LeetCode
- Geeks for geeks
- Note that the answers provided may not be 100% correct.
- Take everything that you see in the websites with a grain of salt. Try to write your own implementations and your own test cases.
- Pramp
- HackerEarth
- HiredInTech
- Project Euler https://projecteuler.net/
- Codility
Courses:
- Coderust 2.0
TODO
- https://github.com/laaraujo/system-design-refresher/tree/main
- https://github.com/ashishps1/awesome-leetcode-resources
- https://www.youtube.com/@WilliamFiset-videos
- https://levelup.gitconnected.com/why-i-keep-failing-candidates-during-google-interviews-dc8f865b2c19
- https://betterprogramming.pub/concurrency-control-using-lambdas-and-sqs-99a21da892c0
- Become A Published App Developer In 4.5 hours - https://www.youtube.com/playlist?list=PL7NYbSE8uaBCvfw20f0Q6pNSGgiYGLwzI
Faang interviews training
These tools will be helpful in developing the soft skills you need to perform well in your interviews.
- Jointaro.com
- Techleadpro.com
- Tech Interview Pro
- An interview prep course designed by a former Google software engineer that has instructional video modules on data structures & algorithms and systems design.
- It also grants access to a private Facebook group with over 1,500 former students who’ve used what they learned in the course to land jobs at big tech companies like Google and Facebook
- an interview prep course designed by a former Google software engineer.
- It includes over 20 hours of in-depth video content on both the technical and non-technical aspects of big tech interviews, and the founder holds bi-weekly Q&A sessions to answer your specific questions.
- InterviewBit : An interview prep program that offers tailored action plans based on your current preparation and goals. It has programming questions relevant to big tech companies like Google, Facebook, and Amazon
- Pramp : A site where you can take part in multiple mock interviews with other software engineers (some of whom have worked in FAANG companies like Facebook and Amazon) while receiving immediate, objective feedback on your performance
- Interviewing.io - you can do mock interviews with other software engineers and get immediate feedback on your performance.
https://www.18offers.com/?ref=medium.com
https://www.freecodecamp.org/news/software-engineering-interviews-744380f4f2af/
https://towardsdatascience.com/how-i-leetcode-for-6-months-and-land-a-job-at-amazon-b76bdfc79abb
https://kylelix7.github.io/How-I-leetcode-for-6-months-and-land-a-job-at-Amazon/
https://leetcode.com/problems/coin-change/
LeetCode vs CodeChef
When preparing for software engineering interviews why is CodeChef not as popular as LeetCode?
LeetCode is more popular because it’s focused on interview prep, while CodeChef is more focused on competitive programming.
To be more specific, LeetCode’s questions are usually slightly easier compared to CodeChef’s, and they’re designed to be as close to what you’d see in your technical interviews as possible. On the other hand, CodeChef’s questions are purposefully harder to better accommodate for its emphasis on competitive programming—it’s still a useful tool for learning more about data structures & algorithms, but it’s not optimized for interview preparation like LeetCode is.
Still, both sites neglect to cover a key component of software engineering interviews: soft skills. Despite what most programmers believe, every big tech recruiter is looking for a suite of non-technical skills—skills like communication, teamwork, and leadership—on top of the coding skills you’d expect. Failing to demonstrate that you have these soft skills is a surefire way to get overlooked, so given that you’re preparing for an interview, you may want to look into some other resources to help you out with this.
One resource you may want to check out is Tech Interview Pro, an interview prep course designed by a former Google software engineer. TIP includes over 20 hours of in-depth video content on both the technical and non-technical aspects of big tech interviews, and the founder holds bi-weekly Q&A sessions to answer your specific questions. There’s also Interviewing.io , where you can do mock interviews with other software engineers and get immediate feedback on your performance. Both tools will be helpful in developing the soft skills you need to perform well in your interviews.
To summarize, LeetCode is more popular than CodeChef because programmers are (on the whole) more interested in preparing for job interviews than they are in competitive programming. But to ensure your success in those interviews, you probably want to leverage a few other resources as well. Best of luck.
Helpful links and websites
Use reddit and discord channels for preparation: Use channels like this one: https://discord.com/channels/698366411864670250/1086156037754728489
https://github.com/codecrafters-io/build-your-own-x
The examples from this website are very very good: https://www.java2novice.com/
stack exchange : code golf tasks
https://www.logicbig.com/tutorials/spring-framework/spring-web-mvc/request-mapping-variants.html (not specifically this article - but there are many other articles in the site)
(In the order of quality of content - as I have seen from previous articles)
- https://www.javadevjournal.com/java-design-patterns/flyweight-design-pattern/
- https://springframework.guru/
- http://javarealtimequestions.blogspot.com/
- http://www.developersbook.com/jdbc/interview-questions/jdbc-interview-questions-faqs.php
- http://www.geekinterview.com/Interview-Questions/J2EE?gclid=CNiEs8S__6sCFRFU7AodD0sIow
- https://careydevelopment.us/
- https://docs.oracle.com/cd/E11035_01/wls100/ejb/design_best_practices.html
- https://howtodoinjava.com/series/interview-guides/
- https://javarevisited.blogspot.com/search/label/core%20java%20interview%20question
- https://javatute.com/
- https://jenkov.com/
- https://roytuts.com/
- https://sites.google.com/site/sureshdevang/design-pattern-example
- https://www.bezkoder.com/category/full-stack/
- https://www.roseindia.net/interviewquestions/design-patterns/
- https://www.javastackflow.com/
What made you good at competitive programming?
Sameer Gulati , International Master at Codeforces Updated August 7, 2019 · Upvoted by Kritika Rupauliha , B. Tech Computer Science Engineering & Computer Programming, ITM Universe Gwalior, Sithouli Campus (2021)
Lots of practice and a good practising strategy. Having a bad practice strategy (only solving easy problems, never upsolving, etc.) is very inefficient so it takes a lot of time to improve and can be discouraging as well.
This is the practising strategy I recommend-
Take part in as many contests as you can. After each contest solve at least 1-2 problems above your level.
If you find a new concept that was used to solve this problem -> Find a good tutorial on that concept and learn it (or find it here - Sameer Gulati’s answer to What is a list of data structures that a competitive programmer must know?) . Most likely at the end of that tutorial there will be some practice problems. Try to do 5-15 problems (can be much higher for some things like Dynamic Programming) until you get sort of an intuition for it.
Your rating will go down at first but you will be practising your problem solving skills and contest skills simultaneously so I find this method better than just practising without taking part in contests.
The contests you should take part in for this strategy depends on your level
For Beginners-
Codechef Long Contests and Cook offs
Codeforces Contests (all of them)
Atcoder Beginner Contests
For Experienced (1600+ on Codeforces)-
Atcoder Contests (all of them)
Codechef Cook offs
Codeforces Contests (all of them)
You can participate virtually on Codeforces in case there is no online contest.