LLD is fair game even for SDE-1. Although LLD rounds are much more common for SDE-2 and above positions. Don't skip it. Focus on SOLID principles and writing extensible code. Follow-ups become trivial when your base design is clean.
For LLD rounds, expectation is to write production ready classes with proper syntax on paper .
During first 10-15 minutes Leadership Principles questions are asked like
LLD question asked in Bar Raiser
Many times low level design questions can also be asked in the bar raiser round.
One person interviewing for SDE 2 position had their first round itself as the bar raiser round. They were asked to design a system that handles audio buffers across different stages at X frames per second (https://codezym.com/question/448-audio-buffers-across-stages).
This is unusual since most candidates have the Bar Raiser towards the end, often as a DS & Algo round.
It was an engaging discussion. But the problem was that he kept going deeper into the system design (high level) and, before he realized it, most of the available time was spent discussing the HLD aspects of the problem rather than the LLD implementation.
With only around 5–10 minutes left, the interviewer asked him to code whatever he felt was ideal for the design. He quickly wrote a few classes and functions, but they ran out of time.
He had 2 DSA + 1 HLD (hiring manager) round after that, but eventually he was rejected. LLD round performance was one of the reasons for that.
During LLD rounds you are always running out of time. It is important that you keep your discussion focussed on the problem statement.
Not understanding question context or not able to code the solution
Asking clarifying questions and thinking out loud is the best thing you can do if you donot understand the question or are running out of time.
One person was asked LLD of unix "find" command for file search (https://codezym.com/question/14-design-unix-find-command-file-search).
Although this is one of the most common LLD questions asked by Amazon, candidate was not familiar with it.
Also he had very little Unix knowledge. But he remained calm and asked more clarifing questions. Then proceeded to create classes and write the logic while trying to explain his thought process aloud. He felt very skeptical about this round and thought his chances were slim. But eventually he had a positive feedback and ended up receiving the offer.
Answering follow-ups, extending functionality while avoiding too many changes to existing code
Follow up questions are mostly around adding a new functionality without making too many changes to existing code or arranging your classes a bit differently.
For example one person was asked to design a notification system (https://codezym.com/question/454-notification-system-for-sending-alerts).
One they gave an intial solution then interviewer asked them if a new notification type comes, eg. push notification , how to handle it ? Interviewer also wanted him to avoid change in the existing service class.
More follow up questions were asked:
- In the Message object, you have type that varies. What if the content also varies ? Eg. For email,the content will be large. For SMS, small.
- Should you make Message class abstract and have EmailMessage,SMSMessage,WhatsappMessage ? Is that better?
- A user may want to receive messages via multiple channels .eg. both SMS and email. How will you handle it: two messages or within one message?