Senior Software Engineer at Celigo
Summary
I interviewed for a Senior Software Engineer role at Celigo through a referral. The process included rounds on DSA (including LRU Cache), Low-Level Design (Elevator), and System Design (Distributed Counter, PostgreSQL vs. MySQL, Kafka). I received an offer, but ultimately rejected it as the compensation matched my current salary.
Full Experience
I landed an interview opportunity with Celigo for a Senior Software Engineer position through a referral on LinkedIn. The entire process was structured into four distinct rounds.
Round 1: Data Structures & Algorithms
My first round involved tackling two medium-level data structures and algorithms questions. While I don't recall the exact problems, they were typical DSA challenges.
Round 2: Data Structures & Algorithms
The second round focused on a classic problem: implementing an LRU Cache. I was expected to demonstrate my understanding of data structures like hash maps and doubly linked lists to efficiently manage cache operations.
Round 3: Low-Level Design (LLD)
In the third round, the challenge was to design an elevator system at a low level. This involved detailing the components, their interactions, and the underlying logic to manage elevator movements and requests.
Round 4: System Design & Technical Discussion
The final round was comprehensive, starting with a system design problem to build a distributed counter. Beyond that, there were general high-level design questions, and a detailed discussion comparing PostgreSQL and MySQL, along with questions specifically about Kafka's architecture and use cases.
I successfully navigated all rounds and received a positive 'Hire' decision from Celigo.
Compensation & My Decision
Celigo extended an offer with a fixed salary of 44 LPA (including PF) and a joining bonus of 2 Lakh. After careful consideration, I decided to decline the offer as the compensation package was unfortunately equivalent to my current salary, providing no significant incentive for a switch.
Interview Questions (4)
Implement LRU Cache
Implement a Least Recently Used (LRU) cache. The cache should support get and put operations with O(1) average time complexity.
Elevator Low-Level Design
Design an elevator system, focusing on its low-level components, classes, and interactions (e.g., how to handle requests, movement, and state).
Distributed Counter System Design
Design a distributed counter system that can handle a high volume of concurrent increment operations while maintaining accuracy and fault tolerance.
PostgreSQL vs. MySQL & Kafka Discussion
Discuss the key differences between PostgreSQL and MySQL, including their strengths, weaknesses, and appropriate use cases. Additionally, discuss core concepts and applications of Kafka.