Synopsys R&D Engineer L1 Interview Experience
Summary
I interviewed for an R&D Engineer L1 position at Synopsys, which involved three technical rounds focusing on DSA, system design, and advanced OOP concepts, followed by an HR round. I successfully received an offer.
Full Experience
My interview journey for the R&D Engineering role at Synopsys began with an initial online assessment, followed by three technical rounds and a final HR round. I'm a fresher with a BE in ETCE from a Tier 1 college.
Technical Round I
The first technical round was conducted by a mid-senior level employee and lasted about an hour. After a brief introduction, the interviewer presented two DSA questions. The first was a medium-level dynamic programming problem, a twisted variation of the classic coin change problem. I initially explained a brute-force recursive approach and then optimized it, coding the solution and performing a dry run. The second DSA question involved a binary tree problem, which was quite similar to the "Amount of Time to Infect a Binary Tree" problem on LeetCode. I described my approach, wrote the complete code, and executed a dry run with sample test cases. Additionally, I was asked several OOP questions, specifically whether a constructor or a destructor can be virtual, and was required to explain the reasoning behind my answers. The round concluded with a puzzle.
Technical Round II
Approximately an hour and a half, the second technical round was led by a senior-level engineer. After a self-introduction and a brief discussion about my first round experience, I was surprised with a real-life design problem instead of a typical algorithmic question. This problem focused on optimizing the declaration of a variable across several nested function calls to ensure maximum efficiency in terms of accessibility and performance. Despite initial nervousness, I gathered my thoughts and analyzed the problem. The interviewer asked for my chosen data structure and the rationale. I deduced that an n-ary tree could represent the situation, with each function call as a node. After detailing my approach, I coded the solution, demonstrating efficient variable declaration. Following this, I tackled a medium-level linked list question by explaining my approach and coding the solution. This round also ended with a logical puzzle.
Technical Round III
A week after the second round, I had my third technical interview, lasting about an hour and conducted by another senior-level engineer. It began with a self-introduction. The interviewer then delved deep into Object-Oriented Programming (OOP) concepts. I was asked to describe the four pillars of OOP—encapsulation, abstraction, inheritance, and polymorphism—providing suitable code examples for each. We then moved to more advanced topics such as the virtual table (vtable), the diamond problem, and complex questions on runtime polymorphism, which really tested my understanding and application. Later, a design-based problem was presented: a scenario about a 2010 survey on infected and healthy people. The challenge was to track changes over the years, given infection spread through acquaintances, and to identify the most appropriate data structure. I suggested using a graph to model the relationships and infection spread, explained my logic, and then coded the solution.
HR Interview
The final round was an HR interview, which took place after the third technical round. This interview primarily assessed my soft skills, cultural fit, and overall suitability for the R&D Engineering role within Synopsys.
Verdict: Selected
Interview Questions (6)
I was asked a medium-level dynamic programming problem, described as a twisted variation of the classic coin change problem. I first explained a brute-force recursive approach and was then asked to optimize it. I proceeded to code the solution in a compiler and performed a dry run to demonstrate its functionality.
I was given a binary tree problem, which was similar to the LeetCode problem 'Amount of Time to Infect a Binary Tree'. I described my approach, wrote the complete code, and executed a dry run with provided sample test cases.
I was asked several Object-Oriented Programming (OOP) questions, specifically: Can a constructor be virtual? Can a destructor be virtual? I had to explain the reasoning behind my answers for both.
I was presented with a real-life design problem focused on optimizing the declaration of a variable used across several nested function calls. The goal was to place the variable in the most efficient location for both accessibility and performance. I was asked which data structure would be most appropriate and encouraged to explain my logic. I deduced that the situation could be represented using an n-ary tree, where each function call acted as a node, allowing me to track variable scope and dependencies.
I was asked to describe the four pillars of Object-Oriented Programming (OOP)—encapsulation, abstraction, inheritance, and polymorphism—and provide suitable code examples for each. The interviewer then delved into more advanced OOP topics, including the virtual table (vtable), the diamond problem, and complex questions related to runtime polymorphism, challenging my understanding and application of these concepts.
I was presented with a design-based problem: a 2010 survey collected data on infected and healthy individuals. The challenge was to track how many people remained healthy and how many became infected over the years, given that infected individuals could transmit the infection to their acquaintances. I had to identify the most appropriate data structure for this problem.