Adobe | CS2 | Noida, India | Oct 2021 | [Offer]
Summary
I successfully interviewed for a CS2 role at Adobe in Noida, India, covering data structures, algorithms, low-level design, and C++ concepts across multiple rounds, ultimately receiving an offer.
Full Experience
First Round (~1Hr)
I was asked to code standard LeetCode questions with a bit of follow-ups and a code walkthrough. The problems included a LeetCode hard question similar to reversing nodes in a group of K, Course Schedule, and LRU Cache.
Second Round (~50Mins)
In this round, I was grilled on various C++ concepts. The primary focus was on Multi-threading (mutex, condition variable), Smart Pointers, lambda internals, and move semantics. I was also asked to code a multi-threaded program and answer a question based on a priority queue.
Third Round - Low Level Design (~1.5Hr)
This round was with the hiring manager. My task was to design a file explorer within an IDE. I was probed on various design patterns relevant to the problem and asked to write skeleton classes, ensuring the right abstraction. Behavioral questions were also included in this round.
Result & Final Round
I received positive feedback and was scheduled for a director round. The final round consisted of behavioral questions, a discussion on my current work and accomplishments, and some open-ended technical questions. I received an offer.
Interview Questions (6)
There are a total of numCourses courses you have to take, labeled from 0 to numCourses - 1. You are given an array prerequisites where prerequisites[i] = [ai, bi] indicates that you must take course bi first if you want to take course ai. Return true if you can finish all courses. Otherwise, return false.
Design a data structure that follows the constraints of a Least Recently Used (LRU) cache. Implement the LRUCache class: LRUCache(int capacity) initializes the LRU cache with positive size capacity. int get(int key) Return the value of the key if the key exists, otherwise return -1. void put(int key, int value) Update the value of the key if the key exists. Otherwise, add the key-value pair to the cache. If the number of keys exceeds the capacity from this operation, evict the least recently used key.
I was asked to implement a multi-threaded program, likely involving concepts such as mutexes, condition variables, and smart pointers for synchronization and resource management.
I was tasked with designing a file explorer functionality within an Integrated Development Environment (IDE). This involved discussing various design patterns, suitable abstractions, and outlining skeleton classes for the implementation.
I was asked a series of behavioral questions, including discussions on my current work and accomplishments. These questions aimed to assess my soft skills, past experiences, and how I handle various situations.