Adobe | Computer Scientist II | Noida, India | 2020 [Reject]
Summary
I interviewed for the Computer Scientist II role at Adobe in Noida, India, which involved two technical rounds covering C++, data structures, algorithms, system design, and OS concepts. Unfortunately, I didn't receive any feedback after the second round and assume I was rejected.
Full Experience
I recently interviewed for the Computer Scientist II position at Adobe, located in Noida, India. My total experience at the time was over 10 years. The virtual interview was conducted using BlueJean.
Round 1 (1 hour)
The first round covered a mix of probability, puzzles, system design, and data structures:
- We discussed a basic probability question involving biased dice.
- A puzzle based on the Lucky 7 dice game was presented. I was asked about the strategy for this game.
- I was asked to design the classic Snake game, with expectations for both high-level architecture and low-level class diagrams.
- Finally, there was a question involving a BST tree where each node had additional information about the number of children in its left subtree. With limited memory, the interviewer wanted to know how to divide the tree into multiple pages (files/parts) given a maximum number of nodes per page. I implemented a solution using a
getPagemethod, and you can refer to my code via the provided link.
Round 2 (1 hour)
The second round focused heavily on C++ internals, operating system concepts, and more design challenges:
- We discussed move semantics in C++.
- The difference between
std::moveandstd::forwardin C++ was questioned. - I was asked about methods pre-generated by the compiler in C++, specifically regarding C++11 and C++14 standards.
- The interviewer inquired about the
mutablekeyword in C++. - Variadic templates in C++ were also a topic of discussion.
- I had to explain the differences between static linking and dynamic linking.
- The "copy on write" operating system concept was brought up.
- A design problem involved creating a class with the restriction that only two objects of it could be instantiated, followed by a discussion on how to handle this in multi-threaded environments.
- The final question required designing a class for managing meeting room intervals, including methods for adding/deleting intervals and getting the number of rooms, both generally and for a specific time range.
After completing Round 2, I did not receive any feedback call from HR. Based on this, I concluded that I was rejected for the position.
Interview Questions (12)
Lucky 7 Dice Game Strategy
Design Snake Game
Design the classic Snake game, including both high-level architecture and low-level details, with a focus on class diagrams.
Paginate BST with Left Subtree Count
Given a BST where each node includes the count of children in its left subtree, and with limited memory, design a way to paginate the tree into multiple files/parts, given a maximum number of nodes per page.
Explain C++ Move Semantics
Describe the concept of move semantics in C++ and its benefits.
Compare C++ `std::move` and `std::forward`
Explain the differences between std::move and std::forward in C++ and their appropriate use cases.
C++ Compiler Pre-Generated Methods
Discuss methods automatically generated by the C++ compiler, specifically detailing differences or new features in C++11 and C++14 related to this.
C++ `mutable` Keyword
Explain the purpose and usage of the mutable keyword in C++.
C++ Variadic Templates
Describe variadic templates in C++ and provide examples of their application.
Static vs. Dynamic Linking
Explain the differences, advantages, and disadvantages of static and dynamic linking.
Explain Copy-on-Write (CoW) OS Concept
Describe the 'copy-on-write' optimization concept in operating systems, explaining its benefits and typical use cases.
Design a Class with Max 2 Instances
Design a C++ class such that only a maximum of two objects of that class can be instantiated. Discuss how to handle this in a multi-threaded environment (follow-up).
Meeting Room Interval Management System
Design a class to manage meeting room intervals with the following methods:
addInterval: Adds a room if a meeting is ongoing.deleteInterval: Removes a room for a specific time interval.getNumRoom(): Returns the total number of rooms; returns -1 if no meeting is ongoing.getNumRoom(int start, int end): Returns the total number of rooms for a given interval; returns -1 if no meeting.