I recently gave an interview with Adobe for the position of MTS 1 (Member of Technical Staff 1). Before I begin describing my experience, I’d like the readers to know that the outcome was positive and I’ll be joining Adobe very soon. Having referred to interview experiences on GFG for interview preparation myself, I have always found them very useful and would love to contribute.
A third party organization, responsible for connecting bright students with leading technical companies, came to our college for the preliminary rounds of Adobe’s recruitment process. This was under Adobe’s “Adobe for Women” programme and hence only female coders were eligible to apply. Students already placed in top companies with high paying packages were directly called for interviews, while others had to give an online coding test (2 hours, 15 aptitude MCQs, 2 coding questions). I was one of those who got a direct interview.
The interviews were held at Adobe’s Noida office. There were 3 rounds of F2F technical interviews, followed by a telephonic HR round. Each round was an elimination round and tested us majorly on data structures and algorithms, with some questions on Operating Systems. In each round, we were being marked on our logic, coding, DS and OS, with all the parameters having equal weightage. I was called on Day 1 (of 20 maybe) of interviews, and so were 54 other girls from different colleges. At the end of this day, only 2 of us got offers.
Round 1 (Technical-F2F): This was the longest and the most challenging round (maybe to filter out maximum candidates in the first round itself). My first technical round lasted around 80-90 minutes. It started with a brief introduction, followed by these questions:
- https://www.geeksforgeeks.org/find-maximum-possible-stolen-value-houses/ (Had to write the pseudo code too)
- https://www.geeksforgeeks.org/next-greater-element/ (similar question phrased in a different manner: Daily temperatures are given, for each day, return the number of days after which the next rise in temperature is seen. Was asked to code the entire solution as well.)
- https://www.geeksforgeeks.org/external-sorting/ (Large file to be sorted, too less RAM. Suggest a way to sort the entire file with the limited RAM. Was only asked for a verbal solution. Not asked to code.)
- https://www.geeksforgeeks.org/burn-the-binary-tree-starting-from-the-target-node/ (Same question, just had to give the time it would take for the entire tree to burn if it takes 1 second per edge for the fire to propagate. Wasn’t asked to code, only verbal solution.)
- Given a phone directory (contacts alphabetically sorted) that is too large to fit into the RAM, suggest an optimized search algorithm for quick retrieval of contacts. Solution I gave: Divide the phone directory into blocks of size=size of RAM. Load each block in the RAM one by one, check the last entry in each block and compare the first letter of entry to the first letter of the contact being searched. If entry alphabet<contact alphabet, search in next block. Continue until entry alphabet>=contact alphabet. Once this condition is reached, apply binary search in this block to find the contact. Handle corner cases like last entry=contact, contact not found etc.
- ^Same question changed to multiple contacts being search. I suggested that we maintain an array with 26 indices. Each array index will store the start address of that particular alphabet using the solution suggested above. eg. array will store start address of alphabet A in directory, array for B and so on. This way, given the contact to be searched and the size of the RAM, you can look up the array and know the block number in which you’ll find your contact. The same solution can be further optimized by taking a 2D array (26*26 matrix) for storing start addresses of AA, AB, AC and so on. Similarly a 3D array can also be taken for storing the first three alphabets if search time further needs to be reduced (at the cost of space).
- Questions from OS and OOPs: What are virtual functions? What is a pure virtual function? Differentiate between internal and external fragmentation.
I got stuck in a couple of places but was able to easily recover on being given hints by the interviewer. More than 75% of the candidates were sent back after Round 1. After a wait of hardly 10 minutes, I was told that I’ll be having a 2nd round.
Round 2 (Technical-F2F):. This was the shortest, easiest and the most straightforward round. There were exactly 3 coding questions and I was asked to write the code for each one of them after giving a solution and optimising it to the maximum extent possible. The questions were as follows:
- https://www.google.com/amp/s/www.geeksforgeeks.org/connect-nodes-at-same-level/amp/ (Assign right sibling pointers in an unbalanced binary tree.)
- https://www.geeksforgeeks.org/find-all-combinations-that-adds-upto-given-number-2/ (Was further asked to modify above solution to consider only distinct elements in a combination.)
- Given a standard stack class with only push and pop functions, implement a MyStack class with push, pop and peek functions. Each function of MyStack class can use a maximum of one function from original Stack class. The solution I suggested was to add 2 more private variables to MyStack class: top, and isValid. For peek(), first check if isValid()==true. If yes, return top (will be needed in case there are two consecutive peeks); if not, pop from stack, store it in top. Set isValid to true and then return top. For pop(), first check if isValid()==true. If yes, it means that the element has already been popped earlier. So set isValid=false(because the top element has to be popped, so no longer a part of the stack) and return top. If not, call pop() from Stack. For push(x), check if isValid==true. If yes, first push(top), then push(x), then set isValid=false. Else, just call push(x) from Stack class.
This interview lasted 30 minutes. I did not get stuck in this round, nor did I require any hints,which might be why no more questions were asked and I was called for my third technical round right away. Only 5 candidates from day 1 qualified for the last technical round.
Round 3 (Technical-F2F): This round lasted 40-50 minutes and had questions from various different topics. This interview was taken by a senior Adobe employee from the Managerial level, so he had really good knowledge. To begin with, I was asked about my projects that I had mentioned in my CV. It turned out that my interviewer was working in the same field that I had my project on, so he seemed really interested in the work I had done. I was also asked a lot of technical details about the same. At the end of this 10 minute discussion, he seemed impressed with my answers and suggested that I publish a paper on my work. This was a good start to the interview. This was followed by some questions on DS, DP, Bit manipulation and OS:
- https://www.geeksforgeeks.org/count-possible-paths-top-left-bottom-right-nxm-matrix/ (Was asked to give the pseudo code)
- ^Multiple variations in the same question eg. all cells with i*j=odd number are blocked, find the route now.
- https://stackoverflow.com/questions/33684970/print-2-d-array-in-clockwise-expanding-spiral-from-center (Only counterclockwise, instead of clockwise. Also, the given matrix could be rectangular, so also had to take care of the cases when rows/columns are left in the end. These also had to be printed in order. Was asked to properly code the entire solution.)
- ^Variation of this. A and B given, return X such that X has the same number of set bits as B and is just higher than A, i.e. next higher number possible with the same number of set bits as in B.)
- Explain dual mode in OS. Explain the significance of each mode.
Since it was getting late, we were asked to go home and were told that we would be informed of the subsequent rounds, if any. Next day, I (and 1 other candidate) got a call from the HR, informing me that I had cleared all the technical rounds.
This call was supposedly my HR round (Round 4), which was not an elimination round, as I was informed. However, the HR did say that it did not guarantee my selection since they would have to find a suitable team for me as well. This call lasted 40 minutes and was more of a discussion about my personality and preferences than an interview. I was given various different scenarios and was asked how I would react and what I would do in such situations. I was also asked if I was a risk-taker and if I was more inclined towards research than software development. They were also interested in knowing why I was willing to give up my other offer for Adobe.
About 10 days after this interview (a long and anxious wait), I received an email from the HR, confirming my selection (the other candidate was selected as well). 2 months from now, I’ll be joining Adobe at the position of MTS1 (Product Development, specifically), in the Document Cloud team.
Hope this helps! 🙂