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 a Least Recently Used (LRU) cache. The cache should support get and put operations with O(1) average time complexity.
Design an elevator system, focusing on its low-level components, classes, and interactions (e.g., how to handle requests, movement, and state).
Design a distributed counter system that can handle a high volume of concurrent increment operations while maintaining accuracy and fault tolerance.
Discuss the key differences between PostgreSQL and MySQL, including their strengths, weaknesses, and appropriate use cases. Additionally, discuss core concepts and applications of Kafka.