Low Level System Design [An interview perspective]
What you'll learn
- Getting ready for System Design [Low Level Design] interviews
- Learn different ways to approach a problem and underline key points
- Discussing the trade-offs with the interviewer and playing to your strengths
- Optimizing code using better data structures, according to the scenario
- Insights into problem extensibility, and begin coding with this as the end goal in mind.
- Learn to weed out unnecessary information from the problem definition, identify traction, and create a class diagram with it
- Learn to write test cases for the problem as and when required
- Necessary exposure and modifications to the API for code sustainability
- Using encapsulation when required and generate desired accessors and mutators
- Learn code completion in due interview time. Gain insight into fallback plans in emergency cases
- Be comfortable with a programming language
- Know basics of Object Oriented Programming
Software Engineering interviews focus on the coding and software designing skills in an interview. These are fondly known as Algorithm and Design rounds respectively. The Algorithms round check the raw coding skills of a candidate, by the application of Data Structures and Algorithms mostly practiced in school, while the Design round tests the System design skills, which can be High Level Design [HLD] or Low Level Design [LLD].
Low Level Design is also known as Object Oriented Design [OOD] or Object Oriented Analysis and Design [OOAD]. From interns to Senior Software Engineers, top companies dedicate at least one round in the entire interview process for system design. For candidates having less than 3 years' of experience, Low Level Design plays the most crucial role because these candidates are inexperienced, hence not supposed to have knowledge of High Level Design. Candidates having experience of more than 3 years usually face the system design interviews with a mix of both HLD and LLD.
This course Low Level System Design focuses on the low level aspects of the design. The only way to get better at interviews is by practicing lots of similar problems. In this course, based upon my research, a list of most frequently asked questions in interviews is compiled. Not only is this useful for the interviews, but also for general problem solving and application design.
Every problem is broken down and discussed in a comprehensive manner:
Making the problem statement clear of any ambiguity. Terminologies related to the problem are explained and expectations well laid out.
Class Diagram construction serves as a road map for coding the problem
The coding is done in the most elegant manner such that the users learn to approach the problem top-down. This is important because even if the class diagram is in place, it's imperative to know the sequence of class construction in program, for a smooth experience.
Wherever applicable, the code is optimized further. Trade offs related to optimization are also discussed.
At last, test case construction is shown to make the candidate wary about writing good test cases, and their impact on the application.
All this is done while following industry best practices. Proper time utilization during the interview is also talked about intermittently, and ways to deal with a situation when the candidate is stuck at a problem for a long time. The coding is done in C++ but the code is language agnostic to a great extent.
The course also sports Closed Captions [English Subtitles] for all the videos. They are hand-crafted, not auto-generated. This feature is helpful when the student is having problem with the accent, there's a lot of background noise present, or when you want to make detailed notes from the explanation.
After taking this course, you
Will be in a better place to face LLD interviews.
Can participate in design discussions related to such problems
Write better code than before
Have a proper theater to break the problem into pieces and deal with them independently
If you understand all the problems presented in this course, there won't be any fear of solving LLD questions. You'll be asking the right questions about the problem, and will be confident to jab at any design.
Who this course is for:
- Software Engineers
- Aspiring Software Engineers
Abhishek is a Software Engineer with more than 4 years of experience, currently working at Microsoft. He has a Master's in Computer Science and two years of teaching experience. He has conducted workshops and seminars in the past which were welcomed with great enthusiasm. In his free time, he loves to trek and watch anime.