Recently, I had the opportunity to appear for an interview process at Oyo Rooms. It was an enlightening experience that included multiple rounds and provided me with valuable insights into technical problem-solving, coding, and soft skills. Here's a detailed account of my journey through the process.
Round 1: Online Assessment (90 Minutes)
The online assessment consisted of three problems with varying levels of difficulty, which had to be solved in 1 hour and 30 minutes. The questions were as follows:
- A Binary Palindrome: A question focused on identifying binary palindromes, which tested my understanding of binary representations and string manipulation.
- Falling Apples: A problem involving logical reasoning and array manipulation.
- Bob and Bot: A moderately challenging problem requiring an understanding of algorithms and data structures.
The questions were easy to medium in difficulty, and I managed to solve them within the allotted time.
Round 2: Technical Interview (45 Minutes, Offline)
This round started with a discussion about my performance in the online assessment. The interviewer had the report from the OA and asked me to:
Explain the OA Questions:
- I explained my approach to each question and clarified my thought process.
- Code for Falling Apples: The interviewer asked me to write and explain the code for the "Falling Apples" problem. She understood my approach and was satisfied with the explanation.
Next, we dived into problem-solving:
Sudoku Solver:
- I began with the brute force approach.
- She then guided me towards optimizing the solution using backtracking.
- We discussed the time and space complexity and eventually explored a Dynamic Programming (DP) approach, though I didn’t write its code as I was unfamiliar with DP.
House Robber Problem:
- The problem involved maximizing the value a thief could rob without stealing from adjacent houses.
- I started with a brute force approach and then discussed using a priority queue.
- The interviewer asked about the time complexity of priority queues, differences between Max Heap, Min Heap, and Binary Search Tree, and how to insert elements in a Max Heap.
- The Interview asked, how will the code be modified if the array contains negative integers.
- After writing and dry-running my code, we discussed a DP-based optimization strategy for this problem as well.
Merge Intervals:
- I explained my approach and wrote the code.
- The interviewer asked me to dry run the code and analyze its time and space complexity.
Takeaway: Be thorough with Dynamic Programming approaches and their complexities, as they are often revisited during interviews.
Round 3: Technical Interview (45 Minutes, Offline)
This round began with an introduction and a discussion about my projects. The interviewer asked about the questions from my previous round and then proceeded with the following:
Triplet Sum:
- I started with the brute force approach and explained its time and space complexity.
- Then I optimized it using the two-pointer approach and performed a dry run to demonstrate its efficiency.
Generalized Subset Sum Problem:
- The problem required selecting x elements from an array whose sum equals k.
- We brainstormed and implemented a recursive approach.
- We discussed optimizing it using DP, though I couldn’t write its code due to a lack of familiarity with the concept.
Project Discussion:
The interviewer asked about my website project, the technologies I used, and how I implemented it.
- Questions about APIs, including the difference between PUT and PATCH methods.
JavaScript and React:
- Differences between synchronous and asynchronous JavaScript.
- Concepts of callback, promises, async/await.
- Asked about React hooks like useState(), useNavigate(), and useEffect().
- Discussed a code snippet to understand the behavior of useEffect().
Database and System Concepts:
- Differences between NoSQL and SQL databases, and why I chose MongoDB for my project.
- Differences between processes and threads.
- Challenges of multithreading and strategies to resolve them.
The interviewer concluded by asking if I had any questions. I requested feedback, and he emphasized the importance of mastering Dynamic Programming.
Key Takeaways:
- Be thorough with fundamental data structures and algorithms, especially Dynamic Programming.
- Focus on understanding time and space complexities for all approaches.
- Be prepared to explain your projects in depth, including the technologies used and the rationale behind them.
- Practice problem-solving with both brute force and optimized approaches.
- Understand core concepts of JavaScript, React, and API development.
This interview experience was a great learning opportunity, and I hope it helps others in their preparation journey!