Summary
I interviewed for an Intern position at Ciena in India in November '24. The process involved an online assessment followed by two face-to-face technical rounds. Despite performing well in the second round, I was ultimately rejected from the program.
Full Experience
I interviewed for an Intern position at Ciena during their campus placements in November '24. The internship was for 6 months, from January to June 2025, with a stipend of 35k for B.Tech students and 40k for Masters students.
First Round: Online Assessment
This round had three sections:- Coding Round: 25 Minutes
- Q1. I was asked to check if a number's binary representation is a palindrome. This question was exclusively in C, with no other language options.
- Q2. The second question involved an arrangement of students with given heights. I needed to print the indexes of students who were not standing in increasing height order. This question allowed C++.
- Programming Languages Round: 30 Minutes This was an MCQ round focused on syntax. Many confusing pointer-based questions were asked, covering references, pointer arithmetic, and function pointers—basically, deep questions about C language pointer syntax.
- Aptitude Round: This section consisted of 5 basic aptitude questions that high school students could solve.
Face to Face Interviews
Round 1:
I started with a self-introduction. The first technical question was to write the syntax of a void function pointer that takes two integers as input and then assign this function pointer to a real function.Other questions included:
- A
mallocsyntax-related question, asking whatmallocreturns. - What are static variables, and the difference between static and global variables.
- If a struct stores 2 integers and 1 char, how much memory does it occupy? Follow-up: Where is that padding stored internally?
- How to find the middle of a Linked List? Follow-up: If there's an even number of nodes, what would the code return, and how can we configure it?
- How to avoid deadlock, specifically mentioning the 4 conditions.
- The difference between
structandunion. - To reverse the words in a sentence, and I had to write the code on paper.
- I was asked to explain one of my projects in detail.
- The difference between semaphores and mutexes.
- The difference between declaration, initialization, and definition for a variable.
& and *, and felt nervous. At one point, the interviewer asked what topic I was confident in, and I mentioned data structures and algorithms. He then asked for the difference between struct and union, which I couldn't answer, and he commented, 'but these are data structures ;('.Round 2: (20 out of 35 students shortlisted)
This round also started with a basic introduction.- What would happen if
malloc(0)is used? - Write the syntax to declare an array of size 10 that stores pointers to integers, and then declare a pointer to an array of size 10 that stores integers.
- Given a syntax snippet:
I was asked whatint x = 10; int *ptr = x; ++(*ptr);*ptrwould return. - To find a duplicate element in an array containing numbers 1 to
n, where exactly one element has a duplicate. I initially started writing C++ code but was asked to switch to C. I then wrote the standard slow pointer and fast pointer code for this problem. I had to explain in detail how the code works, including when the cycle is detected and then when the duplicate element would be detected. I was also asked if the code would run in O(n) time. I initially said yes, but the interviewer questioned if I was sure, suggesting that pointers might be pointing to indexes randomly, which led me to change my answer, admitting the loop might run more than n times. - Puzzle: If there are 4 jars with infinite 10g balls and 1 jar with infinite 9g balls, how would I detect the defective jar if I could only weigh once?
- Why do we use mutexes?
- Discuss static variables. Have I ever heard of the
volatilekeyword, why do we use it, and how exactly does the compiler 'optimize' a variable if we don't usevolatile? - There was a discussion on whether I had studied compiler design or written assembly code. I talked about my knowledge of the 8086 processor.
Result: 10 out of 20 students were selected, but I was rejected. Overall, the experience was good, and the interviewers were polite and friendly.
Interview Questions (19)
Check if a number's binary representation is a palindrome.
Given students' heights and their current arrangement, identify and print the indexes of students who are not standing in increasing height order.
Write the C syntax for a void function pointer that accepts two integer inputs and demonstrate how to assign it to a real function.
Explain the malloc syntax and describe what type of value malloc returns.
Define static variables and explain the differences between static and global variables in C.
If a C struct contains two integers and one character, calculate the memory it occupies. Follow-up: Where is the memory padding stored internally?
Implement a method to find the middle of a linked list. Follow-up: If the linked list has an even number of nodes, what would the current code return, and how can it be configured to handle this?
Explain how to avoid deadlocks by describing the four necessary conditions for deadlock.
Explain the differences between struct and union in C.
Write code to reverse the order of words in a given sentence.
Explain the difference between semaphores and mutexes.
Explain the differences between declaration, initialization, and definition for a variable.
Describe what happens if malloc(0) is called.
Write the C syntax to declare an array of size 10 that stores pointers to integers, and then declare a pointer to an array of size 10 that stores integers.
Given the C code snippet: int x = 10;
int *ptr = x;
++(*ptr);
, what would *ptr return?
Given an array of n+1 integers where each integer is between 1 and n (inclusive) and there is exactly one duplicate element, find the duplicate. Discuss the time complexity and explain the slow and fast pointer approach (Floyd's Tortoise and Hare).
You have 5 jars, four containing infinite 10g balls and one containing infinite 9g balls. With only one weighing, how do you identify the jar with the 9g balls?
Explain the purpose and use cases of mutexes.
Discuss static variables. Explain the volatile keyword, its purpose, and how a compiler might optimize a variable if the volatile keyword is not used.
Summary
I interviewed for a UI Developer role at Ciena, undergoing a 90-minute technical round focused on advanced JavaScript, React, Redux, and two coding challenges: implementing a call polyfill and counting continuous characters in a string using reduce. I did not receive a response from the recruiter afterward.
Full Experience
My interview experience at Ciena for the UI Developer position involved a comprehensive 90-minute technical round. The discussion covered a wide array of front-end development concepts, starting with advanced JavaScript topics such as higher-order functions, pure functions, and the intricacies of call, apply, and bind methods. We then moved into React, exploring higher-order components, pure components (both functional and class-based), shallow vs. deep comparison, various hooks (useEffect, useRef, and their specific use cases), and how to prevent unnecessary component re-renders.
Redux was also a significant part of the interview, where I was asked about its three principles, how to write a reducer, the use and advantages of middleware, and the in-depth flow of how Redux identifies which reducer should be called. Additionally, I was presented with two coding challenges: one to create a polyfill for the call method and another to write a program using the reduce method to count continuous characters in a string, for example, transforming 'aaabbccaa' into '[{a:3}, {b:2}, {c:2}, {a:2}]'. Unfortunately, after this round, I never received any further communication from the recruiter.
Interview Questions (2)
Implement a polyfill for the native JavaScript call method.
Write a program using the reduce method that takes a string as input and returns an array of objects, where each object contains a character and its continuous count. For example, if the input is 'aaabbccaa', the output should be '[{a:3}, {b:2}, {c:2}, {a:2}]'.