Round 1 - DSA
Interviewer introduced herself, I gave a bit of my introduction.
There was a person shadowing as well, no introduction for him.
Behavioral Question: Tell me of a time when you gave out of your way to develope something for improving customer experience.
Follow up questions: How did you measure if it really improved user experience.
With above all, 20 mins were over.
Interviewer said that we will be solving 2 coding problems.
Problem: Russian Doll
Solution Process:
The solution I proposed and coded was O(n^2) in Time complexity and O(n) in space complexity.
The interviewer kept on insisting me to improve the solution for the complete time, which I couldn't do.
Hint given by Interviewer: Can compromise with space to get better Time complexity.
I feel the hint was not at all helpful, this was when I was interviewing. But now, I feel more that way because, the best solution with O(nlogn) Time Complexity too takes O(n) space, so I'm not sure what she meant.
But, all in all, I feel it was a bit unjust to ask such a hard question with expectation of asking 2 questions. Though I was not even able to solve even the first one.
Round 2 - LLD
Interviewer introduced himself, and also let the person shadowing him introduce themselves. After that, I introduced myself.
Problem: Design a Calendar app. A user can create, view all events, get notifications. A user can have multiple calendars like, Personal and Work.
Solution:
User
UserId string
Name string
Calendars List<Calendar>
---
Calendar
CalendarId string
Name string
Events List<EventId>
func CreateEvent(Event)
func GetAllEvents() List<Event>
NotificationService
---
Event
EventId string
Invitees List<UserId, State>
Name string
Description string
---
EventStore
Map<EventId, Event>
func Save(Event)
func GetEvent(EventId)
---
State --> {YES, NO, MAYBE, NOT_ANSWERED_YET}
---
NotificationService
NotificationProvider
---
NotificationProvider
func Notify(message, userId)
Implementations of NotificationProvider could be Push Notifications, SMS notifications, etc etc
---
Follow up questions:
1. What if the event is recurring
Ans: Move Start Time and End Time (which have instance of date as well) from events, and marked the Event as EventTemplate. Created RecurringEventTemplate, which has StartTime and EndTime, and then Date is determined by Schedule, which is part of RecurringEventTemplate.
2. You must have seen that, when you create an event, you can also add a location, how do you do that. Let's say, you type "Del", you get suggestion of "Delhi".
Ans: Created a meeting Location entity, that stores all locations, and has a method GetLocationPrefix(string) string, so you could fetch suggestions from here.
Behavioral Question: How do keep learning and be up to date?
Result
Got NOT INCLINED in both the rounds, so the third scheduled round was cancelled.