Uber | SSE - II (Level 5B) | India | Mar 2020 [Reject]
Anonymous User
15140
KeyValue
Status7.5 years of experience. Graduated from top IIT in India (non-CS)
PositionSenior architect at (600-800 people) robotics company
LocationIndia
DateMarch 2020

Interview Result

There were 8 rounds of interviews

  • 1 technical phone screen (coding and design question)
  • 2 coding rounds
  • 2 LLD and general design rounds
  • 1 System HLD round
  • 1 Hiring manager (technical and behavioural)
  • 1 Bar raiser

Since my job requires me to lead the architecture group, I am not a hands-on coder always at my workplace. I cleared the design rounds, solved all the problems but the company felt that I wasn't fast enough at programming. Hence they didn't go ahead with me yet. If I had more time to speed-up my coding, I would have been through per my recruiter

Nevertheless!

How I prepared for software interviews?

I allocated myself one month to prepare for software engineering positions (e.g. SSE-II at Uber). I was picky about companies as I am looking to solve massively large scale challenges in the next phase of my career progression

First things first

  • An important assessment is to chalk out the time period for preparation. Software interviews are fairly difficult in senior positions in big companies. They also involve a fair bit of luck. Until you are solving LeetCode or HackerRank challenges daily, it's best to give yourself at-least one month or more
  • It's important to realize that the eventual goal is to become a good engineer, not rather someone who is only good at cracking interviews.

1. Topics

1.1 Sofware engineering topics

I prepared a list of topic I would need revision or practice on.

CategoryTopics
Data structuresArrays, LinkedList, Queues, Stack, HashTable, Graph, Bloom filters, Binary tree, Binary search tree, B-trees, Red-black trees, Disjoin sets, Heaps, Van emde boas trees, Fenwick trees, Steiner tree
MathsBasic probability and statistics, common mathematical series (such as geometric series)
Algorithmic conceptsTime & space complexities, recurrence relations and master theorem
AlgorithmsAll sortation algorithms (quick sort, merge sort, heap sort, insertion sort, bubble sort, counting sort, radix sort), Divide & conquer algorithms, Dynamic programming (top-down, 1-D and 2-D memoization), approximation algorithms, Greedy algorithms, Pattern matching, Recursion and backtracking, NP complexity classes, Game theory related algorithms, Linear programming, basics of randomized algorithms
Operating systemsProcess scheduling, process synchronization and deadlocks, memory management, file system management, user-space processes and threading etc.
DatabasesRelation algebra, Functional decomposition, ER schema design etc.
Database usageConcepts (such as ACID, BASE, CAP theorem etc.), Databases access patterns, Partitioning, Sharding, NoSQL databases (deep diving into one), Database locking and strategies, Concurrency controls, Database isolation levels, Databases transactions, Indexing, full-text search, time series databases, Views / materalized views, replication (WAN replication) etc.
NetworksOSI model, HTTP/1.1 and HTTP/2 protocol, web-socket communication, TCP/IP internals, SSL/TLS, Checksums and error-correcting mechanisms
Distributed systemsTwo-general's problem, Byzantine failures, Consensus protocols (such as Paxos, Raft etc.), Distributed transactions (2-phase commit, SAGA etc.), Distributed locking, Leader election, Partition tolerance, Distributed state machines, Distributed file systems, Distributed hash-table etc.
CompilersCompilation lifecycle, AST, JIT compilation, Key optimizations (such as Tail call optimization)
OOPSKey design patterns (factory, abstract factory, visitor, singleton, strategy, command etc.), heavy practice on OOPS modelling
Programming languageErlang, Erlang BEAM VM internals, Python deep-dive, functional programming vs OOPS vs imperative, niche concepts such as (futures, closures, referential transparency etc.), Garbage collection
ArchitectureMicroservices, n-tier (details of MVC, MVVM etc.)
Microservice ArchitectureOrchestration, Choreography, Distributed tracing, reporting, instrumentation, Service discovery and service mesh, API gateways, authentication, Eventing, Common anti-patterns, Security
System designRequirement collection (functional and non-functional), performance and load budgeting, Caching, Load-balancing, Deployment, Instrumentation, API and message communication, message queues, Logging, Infrastructure management
CachingCaching types (L1 cache, in-memory caches, distributed caches, CDN), caching strategies (write-through, write-back etc.), cache boot strategies, Eviction strategies (LRU, MRU etc.), manual management of caches in production
Load balancingL3, L4, L7 load balancing, API gateway and authentication, SSL termination, request forwarding vs reverse proxy, Load balancing strategies, Direct server return, DNS load balancing, Rate limiting
Machine learningBasic statistical machine learning algorithms (supervised / unsupervised), basic neural networks, high level concepts of deep learning networks
MiscellaneousFinite state automata, Performance numbers (disk IOPS, network bandwidth, database transaction benchmarks, HTTP server benchmarks), MapReduce, Serialization/Marshalling, Concurrency controls (mutex, semaphores), Lockless data structures, Operational transformation algorithms

1.2. Other topics

I had to prepare other two dimensions

  • Experience related questions: related to past projects, hard problems that one might have solved so on and so forth
  • Personality related questions: related to working style, people management and leadership style, conflict resolution skills

2. Time allocation

Of all the topics that have been mentioned, it's important to allocate time properly to maximize impact. A number of interviews will focus on problem-solving, hence solving for different kind of algorithm is more important than being thorough with compiler design

3. Learning style

I am a huge fan of Fyenman learning technique. My usual approach was

  • Pick a topic
  • Find out a credible learning source (such as video lectures, books). Now a days, there are incredible lecture series on YouTube or Udemy
  • Do as much internet research on concepts which are under-prepared. Deep-dive into those concepts until you are thorough on them
  • Write a mind-map and/or explain it to a panda in your house

Additionally, specifically for algorithms and system-design

  • Practice as much as you can on LeetCode and/or HackerRank
  • Practice end-to-end system design on variety of software's out there

3.1 Practicing system design

It's best if you can get a peer to review your design on whiteboard or while you explain to them. I tried to categorize many applications and practice those categories so I am covered

3.1.1 Websites
CategoryExamples
Online gamesCounter-strike, DOTA 2 etc.
Social mediaFacebook, Instagram
UtilitiesGmail, Reddit, Swiggy, Uber, Github, New York Times, Amazon, Alexa
ChatWhatsapp, Facebook messenger, Slack
StreamingYouTube streaming
VideoYoutube
VoIPWhatsApp, FaceTime
TicketingAirline booking system
3.1.2 Software
CategoryExamples
SQL databasesPostgres, MySQL
NoSQL databasesRedis, Cassandra, MongoDB, Influx
Operating systemsLinux kernel
Web serversnginx, NodeJS

4. Learning resources

  1. I took the interview preparation kit of HackerRank and almost solved 50 percent of it. It was immensely useful for brushing up with concepts
  2. Leetcode Premimum was helpful in having mock tests of various difficulty levels.
  3. Someone on LeetCode summarized common patterns of algorithms that are asked. It's a good grouping of problems
  4. Algorithms by Abdul Bari is phenomenally well-explained course on algorithms. Highly recommended.
  5. I took couple of courses on Udemy for revising distributed systems and operating systems. They were quite good
  6. On software architecture, this was a quick primer playlist on Youtube by Mark Richards
  7. It's best to reference videos of different conference where representations from different companies explain how they were able to solve key problems (e.g. SRECon Americas)

Lastly, it's best to practice a lot, do a lot of Googling, deep-dive into topics with the help of books, blogs, intelligent StackOverflow questions and any other resources

Interview experience

Uber was really good and engaging in the hiring process. Their interviewers, recruitment panel, recruiters are helpful. Highly recommeded. In the interest of their privacy of their questions, I woudn't divulge it.

Takeaways from giving interview

it's been almost 6 years since I had given interview. Honestly, I had no idea about the landscape of interview at large scale companies. My biggest takeaways

  • Interviews are heavily geared towards algorithms than many other apsects of succeeding in workplace
  • System design is not something that 15-30 mins of talk will do justice to. Everyone has a different approach to system design
  • Interview is very different place than your relaxed office. Someone is observing your code, there is a clock that is ticking, hence it's best to factor this in your preparation
Comments (15)