Round 1: F2F Technical.(1 hr)
Discussion Regarding Previous Projects in C++.
Design a Dictionary. The APIs you would support and Data structure to store all the data. : I proposed a Trie Data Structure. I was asked to implement the data structure and data fields on a Notepad. He was looking for production quality code . Things to consider : mutiple definition of words, Error codes design using enums, Class structures etc.
Then I was asked to implement add and delete api for the trie structure on Notepad, handling all the corner cases.
Round 2: F2F Technical (1 hr)
This round I found at the tougher side. Below are the things he asked me.
C++ 11 features : Lambda Functions, unique pointers and 1-2 more features which I dont remember exactly.
Then came Inheritance : Virtual Functions,, How derived class functions can be accessed by pointer to base class.
Memory map of Derived Class when it is compiled : I gave vPointer and vTable explanation. He discussed in detail what all things get stored in vTable. Accessing Base Class functions .
He asked about Incomplete Types in C++. When to use those and how they can be used properly. Discussed compiler actions in case of incomplete type.
He asked Forward Declarations in C++, how they are useful . Discussed in detail Pimpl Pattern and Incomplete Type. Gave me code for Pimpl Pattern to check and fix error.
Then came Smart Pointers, He asked about shared pointer, how are they implemented. Memory map of shared pointer object on compilation.
How is reference count shared between shared pointers ? What happens when copy constructor of shared pointer called.
Then came Mutex, Sempahores and Condition Variables. Wait and Notify purpose. When to use Condition variables.
Spurious wake up in case of wait() : This I did not know. He explained the term and its consequences, and why condition wait is in while loop rather than if check.
He asked about std::promise() and std::future(). Write code for set() of promise and get() of future and synchronize between them using lock and condition variables.
In the above discussion he also asked about RAII concept and stack unwinding in case of crash when mutex is locked.
Round 3: F2F Technical
He asked about current projects. Asked me to explain the architecture of the current project which I had done in C++.
Then He asked me to design an SDK which can handle concurrent calls from application : I proposed mutithreaded design for handling concurrent calls to the sdk. He asked me to draw class structures LLD . I explained design of ThreadPool factory class and how would you manage thread creation and destruction and other classes as well. But couldn’t meet his expectation. Not sure what he was looking for. I found the guy very weak in communication, considering him being at one of the higher positions in Adobe.