Research and Development Engineer Sr | Synopsys | March 2024

synopsys logo
synopsys
Research and Development Engineer Sr3.5 years
July 26, 20252 reads

Summary

I completed a multi-round interview process for a Research and Development Engineer Sr position at Synopsys in March 2024, which included a phone screen and three subsequent technical rounds heavily focused on data structures, algorithms, and code analysis.

Full Experience

Background

Bachelors of Technology from Tier 2 Company: Oracle Years of Experience: 3.5 years

Phone Screen

  1. Sort a million numbers stored in an array Quick Sort

  2. Sort a million numbers stored in a linked list Merge Sort

Round 1

  1. Middle of a linked list https://leetcode.com/problems/middle-of-the-linked-list/description/

  2. Remove duplicates in a sorted array https://leetcode.com/problems/remove-duplicates-from-sorted-array/description/

  3. Multiply two numbers without using multiplication operator

Round 2

  1. Single Element in a sorted array https://leetcode.com/problems/single-element-in-a-sorted-array/description/

  2. Min Days to make m bouqets https://leetcode.com/problems/minimum-number-of-days-to-make-m-bouquets/description/

Round 3

  1. A tool (master) runs 'm' unit testcases on 'x' distributed machines (slave). For simplicity, consider each slave has equal number of testcases to run.Every slave writes log message in its own file based on timestamp. For example - 00:01 pass - testcase_id 00:05 pass - testcase_id 01:10 fail - testcase_id 02:17 fail - testcase_id

Your task is to enhance the tool such that user will get one consolidated log file. https://leetcode.com/problems/merge-k-sorted-lists/description/

  1. Inorder Traversal of a Binary Tree https://leetcode.com/problems/binary-tree-inorder-traversal/description/

  2. Tell what the following code snippets do


int myFunc_X1()
{
  int a1, a2 = 0, a3 = 1, a4, a5;  
  scanf("%d", &a1);
  for(a5 = 0; a5 < a1; a5++) {
    a4 = a2 + a3;
    a2 = a3;
    a3 = a4;
  }
  printf("%f\n", ((float)a2)/a3);
 
  return 0;
}

// Sample run
//
//
//

int myFunc_X2(int a1)
{
  int a2 = 0, a3, a4;
  a4 = a1;
  while (a4 != 0) {
    a3 = a4 % 10;
    a2 = a2 * 10 + a3;
    a4 /= 10;
  }
  if (a2 == a1) {
    return 1;
  }
 
  return 0;
}

// Sample run
//
//
//

int myFunc_X3(int n)
{
  int i, m;

  if ((n & 1) == 0) {
    return 0;
  }
  i = n;
  m = 0;

  while(i != 0)
    i >>= 1, m++;

  m = (m+1)>>1;
  for (i = 3; i <= (2<<m); i += 2) {
    if (n % i == 0)
      return 0;
  }

  return 1;
}

// Sample run
//
//
//

int myFunc_X4(int m, int n)
{
  int t;

  do {
    if (m < n)
      m += n, n = m - n, m -= n;
      m = m % n;
  } while(m != 0);

  return n;
}

// Sample run
//
//
//

Interview Questions (10)

Q1
Sort a Million Numbers in an Array
Data Structures & Algorithms

Sort a million numbers stored in an array

Q2
Sort a Million Numbers in a Linked List
Data Structures & Algorithms

Sort a million numbers stored in a linked list

Q3
Middle of the Linked List
Data Structures & Algorithms

Middle of a linked list

Q4
Remove Duplicates from Sorted Array
Data Structures & Algorithms

Remove duplicates in a sorted array

Q5
Multiply Two Numbers Without Multiplication Operator
Data Structures & Algorithms

Multiply two numbers without using multiplication operator

Q6
Single Element in a Sorted Array
Data Structures & Algorithms

Single Element in a sorted array

Q7
Minimum Number of Days to Make M Bouquets
Data Structures & Algorithms

Min Days to make m bouqets

Q8
Consolidate Distributed Log Files
Data Structures & Algorithms

A tool (master) runs 'm' unit testcases on 'x' distributed machines (slave). For simplicity, consider each slave has equal number of testcases to run.Every slave writes log message in its own file based on timestamp. For example - 00:01 pass - testcase_id 00:05 pass - testcase_id 01:10 fail - testcase_id 02:17 fail - testcase_id

Your task is to enhance the tool such that user will get one consolidated log file.

Q9
Inorder Traversal of a Binary Tree
Data Structures & Algorithms

Inorder Traversal of a Binary Tree

Q10
Analyze Code Snippets
Other

Tell what the following code snippets do


int myFunc_X1()
{
  int a1, a2 = 0, a3 = 1, a4, a5;  
  scanf("%d", &a1);
  for(a5 = 0; a5 < a1; a5++) {
    a4 = a2 + a3;
    a2 = a3;
    a3 = a4;
  }
  printf("%f\n", ((float)a2)/a3);
 
  return 0;
}

// Sample run
//
//
//

int myFunc_X2(int a1)
{
  int a2 = 0, a3, a4;
  a4 = a1;
  while (a4 != 0) {
    a3 = a4 % 10;
    a2 = a2 * 10 + a3;
    a4 /= 10;
  }
  if (a2 == a1) {
    return 1;
  }
 
  return 0;
}

// Sample run
//
//
//

int myFunc_X3(int n)
{
  int i, m;

  if ((n & 1) == 0) {
    return 0;
  }
  i = n;
  m = 0;

  while(i != 0)
    i >>= 1, m++;

  m = (m+1)>>1;
  for (i = 3; i <= (2<<m); i += 2) {
    if (n % i == 0)
      return 0;
  }

  return 1;
}

// Sample run
//
//
//

int myFunc_X4(int m, int n)
{
  int t;

  do {
    if (m < n)
      m += n, n = m - n, m -= n;
      m = m % n;
  } while(m != 0);

  return n;
}

// Sample run
//
//
//

Discussion (0)

Share your thoughts and ask questions

Join the Discussion

Sign in with Google to share your thoughts and ask questions

No comments yet

Be the first to share your thoughts and start the discussion!