Status: 5 years YOE (3 years in iOS)
Position: iOS Engineer, SE2
Location: Virtual Onsite Interview
Date: April - 2021
I was contacted by a recruiter. I was interested in learning about the role so the recruiter called me and explained the role and the interview process. Scheduled phone screen after a week.
Technical Phone Screen (1 Hour):
Gave me a protocol Iterator with 2 functions:
protocol Iterator {
associatedtype T
func getNext() -> T
func hasNext() -> Bool
}Initially, the Iterator protocol was Int type not generic(T), I had to write a Collection class which implements this and later had to write test cases for it. Once I finished this I had 35 minutes left, he changed the protocol to generic (T) and asked me to write a Collections class which will now handle an array of the collection which we previously made and to implement the same protocol, again had to write test cases for this. I finished it just on time. The interviewer seemed satisfied with my logic and told me I will hear back from the recruiter.
Within 2 hours got the email from the recruiter that I passed the Phone Screen and will move to onsite. I asked the recruiter to book my virtual onsite after 3 weeks.
Onsite Interview (5 Rounds):
Round 1 - Bar Raiser (45 mins):
Mostly about my experience, my projects, mentoring experience. Then he dived into one of my projects and asked me questions to understand how I solved specific problems I faced, what are the steps I faced, What could I have done better if given a chance etc. He was quite friendly and mentioned since this was my first Interview there will be coding rounds ahead he is not going to ask any coding questions just at the start of my Interview.
Round 2: Hiring Manager (45 mins):
Behavioural Interview, Asked mostly about my experiences and questions about the team, explained to me what they are looking for and asked me what do I like working on, Asked me few questions on a project like what specifically I did in it, any challenges I faced. He didn't dive deep but asked me quite the overview about the project. ( Interviewer had some connection issue as well so my actual interview time was around 30 mins). Hiring Manager seemed satisfied and happy with my answers.
Round 3: Algo (1 hr): I got 2 questions, not sure if they are on Leetcode, but they were like this:
1. This gave me an array with heights of buildings and there was a river on the right side of all the buildings, the buildings are behind each other, so we need to return how many buildings will be able to get the view of the river based on their height.
2. In this problem, I was given a 2D Array, with 0s and 1s similar to:
[0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0
0,0,0,1,1,1,1,1,1,1
0,0,0,1,1,1,1,1,1,1
0,0,0,0,0,0,0,0,0,0]
I had to return the height and width that 1s have by scanning this matrix, for example, height in the above example is 2 ( since there are 2 rows of 1) and width is 7, I wrote a simple basic solution which passed all the tests. He asked me to optimize it, so to calculate the width I applied Binary search which also passed all the tests. The interviewer seemed satisfied.
------2 Hours Break------
Round 4: System Design (1 hr):: Asked me to design Instagram, I gathered requirements, also asked If I have to set up the API or assume it is already there. I drew the VIPER model and gave him a brief intro of components based on the requirements, He asked me various questions such as if we want to add a new feature how will this architecture handle it what will be new layers I have to add to support it, what will be new protocols I have to add. Asked me to explain how the double-tap to like feature work in UI and follows the architecture up to the API. I also wrote some basic API function signatures in Swift how it will look like for example loading the feed etc. The interviewer was impressed and also started some discussion around how Uber RIBs work and some challenges they face.
Round 5: Building iOS App (1 hr):
I had the share my screen for this round. The interviewer provided me with a demo weathering app with API support and provided me 2 screenshots, I had to build all the UI using code (no storyboards, XIBs allowed). I did not finish this part, as I was so tired. I finished around 70% of the work in this round. The interviewer was looking at my screen during this round and was available if I had any questions for requirements. For this round, I was not sure if I satisfied the interviewer since I was a bit slow and tired so I couldn't complete the whole iOS App.
Overall: I had a great experience interviewing at Uber. It's a bit lengthy process to go through but is worth it. Every Interviewer I talked to was quite polite and friendly. They seemed to enjoy working in Uber.
Results: After around 5 days (7 days with weekend): I got a mail from the recruiter that he received a positive signal from the team and scheduled a call with me. In this call, he provided me detailed feedback about each round and provided me details about the next steps of the offer. Around 5 days more ( 7 Days with weekend) I got the offer letter from Uber.
Preparation:
I did almost all the questions from Leetcode for the Uber section, also after that, I searched the interview experiences and discussions to find more problems to practice, must have done like 10-15 more problems. In total for Leetcode, I did 145 Easy, 159 Medium, 45 Hard. I did almost 3-5 mock for DS/Algo round with my friends
The major challenge I faced was in preparation for Mobile System Design, as I couldn't find any good resources. Coming from a web background I have worked on the backend as well. so I referred Gro** ing to understand how to build the scalable back-end. I read this because in case if Interviewer also wants me to design the API for the App, I need to be prepared. Since I have worked in VIPER Model in all my iOS experience I knew the layers, components, their responsibility, testing etc. To revise the whole Architecture from scratch, I practiced by creating a messenger app from scratch, also while designing the UI for this messenger App I practiced doing it by code (to increase my speed for Round 5). Also watched some youtube videos just to decide how to go about the mobile system design interview as a whole e.g OS requirements, Backgrounding the App etc.
Compensation: https://leetcode.com/discuss/compensation/1197110/UBER-or-iOS-Engineer-SE2-or-Canada
Please upvote if this post was helpful