Tip 1: Solve DSA questions daily.
Tip 2: Prepare 2-3 system design questions each week.
Tip 3: Continuously try to conduct mock interviews with your friends.
Tip 1: Highlight key projects that demonstrate your technical skills and problem-solving abilities.
Tip 2: Keep your resume concise and tailor it to the role you are applying for, focusing on relevant experience and accomplishments.
The first round was scheduled in the afternoon, and the timing was convenient. The environment was professional yet relaxed, which helped ease my nerves. The interviewer was friendly and focused, ensuring the conversation flowed smoothly. They primarily asked questions about data structure and algorithm (DSA), encouraging me to explain my thought process and approach as I worked through the problems. The interviewer was patient, provided hints when necessary, and maintained a positive atmosphere throughout the round. There were no significant disruptions, making it a straightforward and focused technical discussion.



Given a staircase with N steps, you are at the bottom and need to reach the top. You can climb either 1 step, 2 steps, or 3 steps at a time. Write a function to determine the minimum number of steps required to reach the top. Use dynamic programming to optimize the solution.
Step 1: I initially approached the problem using a basic recursive solution, where I considered all possible steps (1, 2, or 3) at each position. However, this approach was inefficient due to overlapping subproblems and led to exponential time complexity.
Step 2: The interviewer suggested optimizing the solution, so I decided to implement a dynamic programming (DP) approach. I created an array to store the minimum steps required to reach each step, reducing redundant calculations.
Step 3: By applying the DP approach, I was able to calculate the minimum steps in O(N) time. The interviewer was pleased with the optimized solution and how I used dynamic programming to handle larger inputs efficiently.



Given the arrival and departure times of N trains at a railway station, find the minimum number of platforms required so that no train has to wait. You are given two arrays, arr[] and dep[], which represent the arrival and departure times of the trains respectively. Write a function to compute the minimum number of platforms required for the station to accommodate all the trains. Example: Input: arr[] = {900, 940, 950, 1100, 1500, 1800} dep[] = {910, 1200, 1120, 1130, 1900, 2000} Output: 3 Explanation: The station needs 3 platforms to handle the train traffic at its peak time. Constraints: 1 ≤ N ≤ 1000 0000 ≤ arr[i], dep[i] ≤ 2359 Arrival and departure times are in 24-hour format.
Step 1: I initially approached the problem by iterating through each train's arrival and departure times and checking overlaps manually. This brute-force approach was inefficient and did not scale well with larger inputs.
Step 2: The interviewer suggested optimizing the solution. I decided to use a more efficient approach by sorting the arrival and departure times separately. This allows us to use a two-pointer technique to calculate the number of platforms needed.
Step 3: I implemented the following optimized approach:
Sort the arrival and departure arrays.
Use two pointers to traverse these sorted arrays: one pointer for arrival and one for departure.
Track the number of platforms required by comparing the current arrival and departure times. Increment the platform count for each arrival and decrement it for each departure.
Update the maximum number of platforms required during the traversal.
The optimized solution with sorting and the two-pointer technique ensured an efficient calculation of the minimum number of platforms required. The interviewer was satisfied with this approach due to its clarity and efficiency.
During this low-level design (LLD) round, the interviewer was very engaging and encouraged a thorough discussion of design principles and trade-offs. We explored various aspects of the system design, including scalability, modularity, and error handling. The interviewer was keen on understanding the thought process and rationale behind design decisions, rather than just the final solution.
Objective:
Design a Splitwise app to help users track and split expenses among a group of people. The app should support adding expenses, splitting them among multiple users, and tracking each user’s balance with others. Users should be able to view and settle their debts.
Requirements:
User Management:
Expense Management:
Balances and Settlements:
Notifications and Reporting:
Tip 1: Define Clear Use Cases - Before diving into the design, clearly define the use cases and requirements for the app. Understanding what features are essential and how users will interact with the app will guide your design decisions.
Tip 2: Consider Scalability - Design your system to handle increasing loads efficiently. Use scalable data storage solutions and consider how your system will handle a growing number of users and transactions.
Tip 3: Focus on Data Consistency - Ensure that your system handles transactions and balances accurately. Implement mechanisms to prevent duplicate entries and inconsistencies in user balances, especially when handling concurrent operations.
The HR round was scheduled in the late afternoon, which was a convenient time for a thorough discussion. The environment was professional yet relaxed, allowing for an open and comfortable conversation.
During this round, the focus was on understanding my fit within the company culture, discussing my career aspirations, and evaluating my interpersonal skills. There were no significant activities beyond the standard interview discussion.

Here's your problem of the day
Solving this problem will increase your chance to get selected in this company
What is recursion?