Summary
I recently had an interview experience at Cimpress that proved challenging due to the interviewer's communication style during the LLD round, despite my successful approaches to the DSA and System Design problems. Although the overall experience was frustrating, I view it as a valuable learning opportunity.
Full Experience
I recently interviewed with Cimpress, and the experience provided some valuable, albeit frustrating, insights.
The first round was a Data Structures and Algorithms (DSA) round, conducted in C++. I was presented with a problem focused on grouping numbers based on their digital root. For instance, numbers like 321, 6, and 33 would belong to the same group because their digital root is 6. I found this problem engaging and was able to implement a clean solution using in-memory data structures such as maps and vectors, which allowed me to efficiently group the numbers.
Following this, the second round consisted of a Low-Level Design (LLD) and High-Level Design (HLD) question, specifically asking me to design an LRU Cache. This is a fairly common problem, typically tackled by combining a doubly linked list and a hashmap to achieve O(1) time complexity for both `get` and `put` operations. I felt comfortable with the problem and began to explain my well-thought-out approach.
However, the second round's experience wasn't as smooth. I found the interviewer frequently interrupted my explanations, not providing sufficient space for me to articulate my thought process systematically. This made it quite challenging to walk through the design in a coherent manner. While I understand that every interviewer has their unique style, this particular interaction didn't feel very constructive or conducive to a fair assessment of my design skills. It served as a clear reminder that an interview's flow often depends as much on effective communication and active listening from both sides as it does on pure technical ability.
Ultimately, every interview, regardless of its outcome or perceived quality, serves as a learning opportunity. I am sharing this experience to offer insights to others who might be preparing for similar roles and to gently encourage companies to maintain a consistent and empathetic approach in their interview processes.
Interview Questions (2)
Given a list of numbers, group them based on their digital root. The digital root of a number is the single-digit value obtained by an iterative process of summing digits, on each iteration using the result from the previous iteration as the number for the current iteration until a single-digit number is reached. For example, 321 -> 3+2+1=6. 33 -> 3+3=6. 6 -> 6. All these numbers would be in the same group because their digital root is 6.
Design and implement a Least Recently Used (LRU) cache. The get and put operations should both run in O(1) average time complexity. The design typically involves a combination of a doubly linked list and a hashmap.
Summary
I successfully interviewed for a Senior Software Engineer position at Cimpress in January 2024 and received an offer.
Full Experience
I recently interviewed for a Senior Software Engineer role at Cimpress in January 2024. With over 4 years of experience as an SSE at a startup, I went through a fully online interview process comprising three distinct rounds.
- Round 1: This round focused on CS Fundamentals, PHP, Database concepts, and a detailed discussion of my resume, conducted with a Team Lead.
- Round 2: With another Team Lead, this round delved into Node.js, Database knowledge, and further resume discussion.
- Round 3: The final round was with an Engineering Manager, covering behavioral aspects, advanced database topics, and a review of my professional background.
I cleared all rounds and was delighted to receive an offer for the position.
Interview Questions (1)
Explain the concept and working of the Node.js Event Loop, including its components and phases.