Get Your Thoughts Down
It’s easy to trip over yourself. Focus on getting your thoughts down first and worry about the details at the end.
If you can’t immediately think of how to implement some part of your algorithm, big or small, just skip over it. Write a call to a reasonably-named helper function, say “this will do X” and keep going. If the helper function is trivial, you might even get away with never implementing it.
Don’t worry about syntax. Just breeze through it. Revert to English if you have to. Just say you’ll get back to it.
Leave yourself plenty of room. You may need to add code or notes in between lines later. Start at the top of the board and leave a blank line between each line.
Save off-by-one checking for the end. Don’t worry about whether your for loop should have “< ” or “< =.” Write a checkmark to remind yourself to check it at the end. Just get the general algorithm down.
Use descriptive variable names. This will take time, but it will prevent you from losing track of what your code is doing. Use names_to_phone_numbers instead of nums. Imply the type in the name. Functions returning booleans should start with “is_*”. Vars that hold a list should end with “s.” Choose standards that make sense to you and stick with them.
Use Abstraction To Your Advantage
I love asking complicated interview problems. If a problem involves several different components, you as the interviewer get such great insights into how a candidate manages their thinking when there is so much to deal with all at once.
The key to successfully solving these problems is to use abstraction. At its core, this means breaking out your code into smaller functions with more specific purposes.
Consider a simple example. Lets say that we wanted to print out a linked list in reverse order. After working through this problem we realize that there is an O time and space solution to the problem using a stack , but we can solve the problem in O time and O space by reversing the linked list.
Now it would be easy enough to reverse the linked list in our code, but what if we had a function to do that for us? That would make our lives way easier. We just call the function on the linked list, iterate over everything in the list and print it, and then reverse the list again so that we return our input to the original state.
With that logic, we can now isolate the process of reversing a linked list and think about how to do that effectively. While this problem is a very simple example, it is easy to see how this reduces the amount of complexity we have to think about at any given time.
This has several advantages:
I find that the more involved the problem is, the more valuable it can be to break things up into manageable components.
Grokking The Coding Interview By Educativeio Is One Of The Best Intermediate Coding Interview Resources This Year
Thats because the creators of this course had one goal in mind for programmers: the ability to map a new problem to an already known problem.
So instead of 25, 50 or even 100 coding problems, youll find 16 patterns for solving coding questions. The idea is that once youre familiar with a pattern, youll be able to solve multiple problems with it.
Reusing design patterns reduces issues and improves code readability for coders familiar with the patterns.
We love Educative.io and this course! Read our full Grokking the Coding Interview review.
Educative.io has an interactive layout. So instead of setting up your own environment, youll do all work inside the same browser using over 1000 coding playgrounds.
Each of the 16 patterns in Grokking the Coding Interview is given its own module. Some of the patterns include:
- Sliding Window
Zero to Mastery
Read Also: How To Practice For A Job Interview
Generate Permutations And Combinations With Itertools
Interviewers love to give real life scenarios to make coding interviews seem less intimidating, so heres a contrived example: you go to an amusement park and decide to figure out every possible pair of friends that could sit together on a roller coaster.
Unless generating these pairs is the primary purpose of the interview question, its likely that generating all the possible pairs is just a tedious step on the way towards a working algorithm. You could calculate them yourself with nested for-loops, or you could use the powerful itertools library.
itertools has multiple tools for generating iterable sequences of input data, but right now well just focus on two common functions: itertools.permutations and itertools.combinations.
itertools.permutations builds a list of all permutations, meaning its a list of every possible grouping of input values with a length matching the count parameter. The r keyword argument lets us specify how many values go in each grouping:
> > > importitertools> > > friends=> > > list)
With permutations, the order of the elements matters, so represents a different pairing than , meaning that they would both be included in the list.
itertools.combinations builds combinations. These are also the possible groupings of the input values, but now the order of the values doesnt matter. Because and represent the same pair, only one of them would be included in the output list:
> > > list)
Build The Hard Skills
Get in the habit of regularly doing code challenges. Its a much more effective way to prepare for coding interview questions than trying to cram a bunch of studying in before the big day. Its important to schedule time each day to attempt at least one code challenge. Youll get better at solving them, and youll also get better at outlining your process and speaking to it. A few great websites to help you practice code challenges in varying degrees of difficulty include LeetCode
These code challenges help build the essential hard skills you need to perform well in a coding interview technically. If youre applying for a mid-level position as a software engineer, youll want to feel pretty solid with these types of practice problems in your interview preparation. If youre gearing up for your first technical interview as a junior engineer, youll want at least some exposure and practice with these.
You May Like: How To Prepare For Amazon Coding Interview
A Comprehensive Guide On How To Prepare For A Coding Interview
bySeptember 23, 2021, 3:03 pm38.6k Views
Despite the bad press, coding interviews or technical interviews are an expected step in the interview process at most tech companies. At App Academy, weve placed over 4,500 people in software engineering jobs at companies like Amazon, Google, and Netflix, and our team has coached students through thousands of coding interviews.
Since youre likely to come up against one, we created a comprehensive guide on how to prepare for a coding interview and what you should do before, during and after the interview.
Where Can I Learn What Questions Each Company Will Ask Me
As I mentioned, the coding questions asked in an interview will differ based on the company the position in question. Its important to figure out in advance what common question are asked for the company youre interviewing with. Generally, you can find this information in a few places:
- The job description: to gauge the focus of the questions. For example, an entry level developer will be asked far more questions on data structures than a senior developer. Sites like Glassdoor will sometimes provide common questions as well.
- Coding Interview: This site provides detailed guides and question breakdowns for many big tech companies. You can read up on the unique processes alongside the top coding questions.
- The company website: most companies will provide details on their interview process, including lists of common behavioral and technical questions. You should also look at a companys Values page.
- Current/former employees: online forums, blogs, and the like are a great resource, as current or former employees commonly discuss their interview process.
- Online video/course tutorials: many online tutorials offer in-depth guides for company-specific interviews. Just may sure that the site explains where they are getting their information
- Ask the recruiter: if you are in contact with a recruiter, you can ask them directly for resources and lists of questions. They may provide this to you when you agree to an interview, but it cant hurt to ask.
You May Like: How To Do A Group Interview
What Resources Should I Use To Prepare For A Coding Interview
“Cracking the Coding Interview,” a book by software engineer Gayle Laakmann McDowell, breaks down 189 common technical interview questions and walks the reader through each solution. It also gives tips on how to complete on-the-spot algorithms and how to handle behavioral questions.
You practice your coding skills on LeetCode, a website dedicated to helping tech professionals get jobs. It offers hundreds of test questions and even has a premier membership in which members can filter sample interview questions by specific companies.
Job and recruitment website Glassdoor is a repository for hundreds of sample interview questions that Glassdoor users were asked in their technical interviews.
Applicants can hone their soft skills and get ready for behavioral questions with Educative’s Grokking the Behavioural Interview course.
Clean Up When You’re Done
Walk through your solution by hand, out loud, with an example input. Actually write down what values the variables hold as the program is runningyou don’t win any brownie points for doing it in your head. This’ll help you find bugs and clear up confusion your interviewer might have about what you’re doing.
Look for off-by-one errors. Should your for loop use a “< =” instead of a “< “?
Test edge cases. These might include empty sets, single-item sets, or negative numbers. Bonus: mention unit tests!
Don’t be boring. Some interviewers won’t care about these cleanup steps. If you’re unsure, say something like, “Then I’d usually check the code against some edge casesshould we do that next?”
Also Check: How To Prepare For A Facebook Interview
Starting Continuous Learning Activities
Concept Learning / Revision
We need to learn concepts in the proper order of dependencies. If possible, preparing a self note and writing down ideas in a visual format would help a lot in fast revision.
We also advise planning a brainstorming session around each topic with a peer or colleague. If any DSA concepts are challenging to understand, mark them, revisit them later or take help from a mentor. Continuously iterating and never giving up is a basic idea for mastering DSA concepts.
Top 20 Data Structure and Algorithms concepts
Finding various patterns via coding problems is one of the best approaches to master the problem-solving skill in DSA. But the critical question is – what are the important problem-solving ideas to learn? What would be the best approach to solve a coding problem? Before starting problem-solving, we recommend doing an in-depth analysis of each problem-solving approach via 3-4 coding problems related to it.
Top 20 algorithms to learn Problem-solving
Top 10 problem-solving ideas to master
Problem-solving on Paper and Coding Practice
To master problem-solving, paper or a whiteboard can be a handy tool to practice visualisations, solution steps, and pseudo-codes. Writing down algorithm steps and necessary details can help us in designing efficient solutions.
Note: For coding practice, we recommend leetcode. One can find several coding problems organised according to the different difficulty levels.
Resolving Critical Doubts
Define Default Values In Dictionaries With Get And Setdefault
One of the most common programming tasks involves adding, modifying, or retrieving an item that may or may not be in a dictionary. Python dictionaries have elegant functionality to make these tasks clean and easy, but developers often check explicitly for values when it isnt necessary.
Imagine you have a dictionary named cowboy, and you want to get that cowboys name. One approach is to explicitly check for the key with a conditional:
> > > cowboy=> > > if'name'incowboy:... name=cowboy... else:... name='The Man with No Name'...> > > name'The Man with No Name'
This approach first checks if the name key exists in the dictionary, and if so, it returns the corresponding value. Otherwise, it returns a default value.
While explicitly checking for keys does work, it can easily be replaced with one line if you use .get:
> > > name=cowboy.get
get performs the same operations that were performed in the first approach, but now theyre handled automatically. If the key exists, then the proper value will be returned. Otherwise, the default value will get returned.
But what if you want to update the dictionary with a default value while still accessing the name key? .get doesnt really help you here, so youre left with explicitly checking for the value again:
> > > if'name'notincowboy:... cowboy='The Man with No Name'...> > > name=cowboy
Checking for the value and setting a default is a valid approach and is easy to read, but again Python offers a more elegant method with .setdefault:
Recommended Reading: What To Prepare For A Phone Interview
Weeks 9 & 10 System Design Interviews
System design interviews are now an integral part of the software engineering interview process particularly if you are applying for a senior role. These interviews have a significant impact on your hiring level.
Learn distributed systems concepts like Cap Theorem, Consistency, Partitioning, Load-Balancing etc.
Look at the course Grokking the System Design Interview for more design interview practice.
As part of your System Design Interviews, you are asked to design a web-scale service. Interviewers are interested in evaluating your ability to describe the different parts of a scale-able service, such as:
- How are web-servers load-balanced?
- How are large files stored?
- How is the network set up for redundancy and maximum throughput?
Youll want to practice questions like:
- Design Instagram
Check out my article the Top 10 System Design Interview Questions for Software Engineers for more example questions, tips, and resources for the System Design Interview.
Data Structures Crash Course
Data structures are the building blocks of algorithm-style coding interviews. They constitute the foundational knowledge that you absolutely need for coding interviews.
AlgoExperts Data Structures Crash Course gives you all the fundamentals you need to start tackling problems, even if you have zero data structures background, and serves as a great brush-up if youre just rusty on your knowledge.
The crash course, which consists of videos and glossary terms, covers 13 topics in data structures, from Complexity Analysis and Memory to Hash Tables, Trees, and everything in between.
Don’t Miss: How To Close An Interview
What Concepts Are Most Common During Coding Interviews
The most common concepts discussed or tested in a coding interview are arrays and strings, binary trees, dynamic programming, and linked lists. In addition to these, you may find concepts such as search algorithms, palindrome checker, and sorted lists of numbers as topics you are tested on.
Data structures and algorithms are a universally discussed topic in coding interviews. For data structures, you should focus your study on arrays, linked lists, stacks, and queues. You should study recursion, bubble sort, insertion sort, and binary search for algorithms.
Its challenging to provide information on what will be in the coding interview. It will depend on the company and the processes they use, the programming language, and whether youre a senior or junior programmer. So, make sure you research the company and the tools it uses, so you can confidently discuss specifics about the company.
Aside from the technical discussion and the actual coding, the interviewer will assess your fit for the team and how well you work with others. Ensure youre constantly explaining what youre doing. If the interviewer questions something, either agree or explain why youre doing it a certain way. Dont be afraid to admit youve made a mistake adjust your code or understanding, which is a great way to show you can be taught and work with others.
Access Common String Groups With String Constants
Its trivia time! Is ‘A’ > ‘a’ true or false?
Its false, because the ASCII code for A is 65, but a is 97, and 65 is not greater than 97.
Why does the answer matter? Because if you want to check if a character is part of the English alphabet, one popular way is to see if its between A and z .
Checking the ASCII code works but is clumsy and easy to mess up in coding interviews, especially if you cant remember whether lowercase or uppercase ASCII characters come first. Its much easier to use the constants defined as part of the string module.
You can see one in use in is_upper, which returns whether all characters in a string are uppercase letters:
> > > importstring> > > defis_upper:... forletterinword:... ifletternotinstring.ascii_uppercase:... returnFalse... returnTrue...> > > is_upperFalse> > > is_upperTrue
is_upper iterates over the letters in word, and checks if the letters are part of string.ascii_uppercase. If you print out string.ascii_uppercase youll see that its just a lowly string. The value is set to the literal ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’.
All string constants are just strings of frequently referenced string values. They include the following:
These are easier to use and, even more importantly, easier to read.
You May Like: What Are Some Good Responses To Interview Questions
How To Divide The Variety Of Questions Among 10 Days
Or if you have less than 10 days, still follow this but decrease the number of questions per topic and increase the number of topics per day.
Coming to the list of questions that I created , in that list of questions,I have specified the DS/Algo concept that the question tackles and the level of that question, and this will mainly help you structure your game plan. In my experience, I have found that tackling a broad topic per day helps. Obviously, spend some more time on topics you are weak at but roughly a topic per day works. On a day, start with 12 easy questions and then solve around 15 medium questions mixed with a couple of hard ones.
If you manage to do this, it is extremely best but dont worry if you cannot practice that many questions. I couldnt solve 20 questions every day, so I alternated between a tough topic and an easy one that gave me good breaks. But do try to code the hard questions as that will help you a lot and allot more time for them as well. You can customize the plan for what works best for you, if you are confident with solving just 5 questions a day, that is also not bad as long as you are working on your weaknesses.