Summary
I, as a fresh graduate, successfully navigated Zscaler's on-campus placement for a Software Developer C/C++ role in Bangalore, securing an offer after a rigorous process involving online assessments and two technical rounds focused on DSA, C/C++ core concepts, OS, and Networking.
Full Experience
As a fresh graduate with a B.Tech in Electronics and Communication Engineering from a Tier 1 college and prior SDE internship experience, I pursued an on-campus placement opportunity at Zscaler for a Software Developer C/C++ role in Bangalore. The entire process concluded with an offer on November 16th, 2023, which I happily accepted.
Online Assessment (Online Coding Round)
The online assessment consisted of three coding questions of medium to hard difficulty, focused on problem-solving and DSA, with a total time of 90 minutes. The topics revolved around BFS (Graphs) + Binary Search, DP on Trees (which I solved using centroid of a tree), and Segment Tree + Binary Search. I successfully solved two out of the three questions (the first and second ones) but ran out of time for the third. Shortlisted students were announced approximately 40-50 days after this round.
Technical Round 1
The interviewer started warmly, asking about my breakfast before quick introductions. I rated myself 9.5 in C++ and 8.5 in C out of 10. The discussion then dived into core concepts of C, Operating Systems, and Computer Networking.
- We extensively covered different Storage Classes (Auto, Extern, Static, Register), discussing their differences, scope, life, and storage locations (Stack, Data Segment, CPU register). I went an extra step to provide coding applications for each, explaining, for instance, that the compiler treats
int foo(int a);asextern int foo(int a);and howstaticlimits a function's access to a single file. - We moved on to Dynamic Memory Allocation, covering its types, syntax, differences, and applications, including a discussion on stack and heap memory segments. The interviewer probed deeper, asking about the internal working of
realloc– specifically, whether it assigns a new memory address or just changes the segment size at the same base pointer. I wasn't entirely sure but reasoned that assigning a new address and copying data would prevent overlaps and data corruption, which satisfied him. - We discussed Structures vs. Unions, their differences, applications, internal working, and padding in structures. I was given two structures to determine their sizes. When asked why padding is used, I explained it in terms of processor architecture (e.g., 32-bit systems reading 4 bytes at a time) to maintain memory layout consistency and increase access efficiency.
- I also answered questions on pointer arithmetic and concepts like dangling pointers, void pointers, and the
volatilekeyword. - Quick-fire questions on Operating Systems covered race conditions, semaphores, and memory management concepts such as paging and thrashing.
- We then discussed Computer Networking Concepts, including SSL, Certificates, the 3-way handshake, TCP flags, DNS, and encryption (public and private key).
- The interviewer appreciated my Competitive Programming profile but wanted to assess my C coding skills, so he gave me a pattern matching string-based question. I first explained the O(N^2) brute-force approach and coded it in C. When asked for optimization, I briefly explained the Rabin-Karp algorithm, which he was satisfied with.
The interview concluded with me asking questions about Zscaler's products and lasted about 80 minutes. I felt confident about my performance, having answered all questions extensively. I successfully cleared this round.
Technical Round 2
This round also started pleasantly with introductions. The interviewer began with basic data structure concepts and gradually increased the complexity, later including Computer Networking and a coding question.
- I explained the difference between arrays and linked lists based on their use-cases.
- I was asked about binary search and tasked with proving its time complexity.
- I provided a mathematical proof for the working of the Hare and Tortoise algorithm (Floyd's cycle-finding algorithm) for cycle detection in a linked list.
- We discussed the internal working of C++
unordered_maps. I explained hashing keys (using modulo M), collision resolution with an array of linked lists, and rehashing. The interviewer then posed a modification: what if M is very small, rehashing is not used, and insertion/search complexity is limited to O(log N)? This was an indirect hint towards ordered maps (Red-Black Trees). I logically constructed a solution using an array of BSTs, which pleased the interviewer more than a memorized solution. - Extensive and in-depth discussions on Computer Networking included Gateways, Routing vs. Switching, MAC address, Network Interface Cards (NICs), and ARP. I explained how a computer determines it must go to a gateway by comparing subnet IDs based on IP addresses, subnet masks. We also covered CIDR-related IP questions and the 4-phase handshaking in an SSL handshake.
- Finally, a coding question required me to implement a custom
mallocandfreein C. I later realized it's a standard problem. Despite not having solved it before, with a couple of hints, I successfully provided and coded a robust O(1) time complexity solution, which satisfied the interviewer.
The interview ended positively with me asking about the potential work. This round lasted about 75 minutes. I was selected for the role.
My Thoughts
My key takeaway from this experience is to always make an extra effort to elaborate on concepts, even if not directly asked, ensuring relevance and staying on topic.
Compensation offered:
- Stipend during 6 months internship: INR 50,000 per month + Wifi Reimbursement
- CTC for full time: INR 28.5 Lacs (14Lacs base + 2 Lacs joining bonus and 15k USD worth ESOPS)
- Other benefits (apart from CTC) include Relocation, Medical Insurance, Wifi Reimbursement, Free Meals (3x a day and unlimited snacks), Employee Wellness, etc.
Interview Questions (13)
Discuss different storage classes in C (Auto, Extern, Static, Register) including their differences, scope, life, and storage location (Stack, Data Segment, CPU register), and practical applications in coding practices. For example, explain why static is used to limit function access to a single file, and that the compiler treats int foo(int a); as extern int foo(int a);.
Discuss dynamic memory allocation (types, syntax, differences, stack vs. heap). Specifically, explain the internal working of realloc: whether it assigns a new memory address to the base pointer or simply increases/decreases the size of the segment while keeping the base pointer the same. Explain the implications of each scenario, such as potential data corruption if overlapping with other allocated blocks.
Explain the differences, applications, and internal working of Structures and Unions in C. Given two structures, determine the size of each. Elaborate on why padding is used in structures, relating it to processor architecture (e.g., 32-bit systems reading 4 bytes at a time) and how it maintains memory layout consistency for efficient access.
Discuss pointer arithmetic concepts, along with explanations of dangling pointers, void pointers, and the volatile keyword in C.
Explain Operating System concepts such as race conditions, semaphores, and memory management techniques including paging and thrashing.
Discuss fundamental Computer Networking concepts including SSL, Certificates, the TCP 3-way handshake, TCP flags, DNS, and encryption (public and private key).
Implement a string pattern matching algorithm in C. First, describe the brute force approach with O(N^2) time complexity. Then, explain how to optimize it using an algorithm like Rabin-Karp for better performance.
Explain the key differences between arrays and linked lists, focusing on their respective use-cases where each data structure would be more advantageous.
Explain the binary search algorithm and provide a mathematical proof for its time complexity.
Provide a mathematical proof for the working of the Hare and Tortoise algorithm (Floyd's cycle-finding algorithm) for detecting cycles in a linked list.
Explain the internal working of C++ unordered_maps, including key hashing (e.g., modulo M), collision handling (e.g., array of linked lists), and rehashing. Then, consider a modified scenario where a very small M is used without rehashing, and the complexity of insertion and search is limited to O(log N). Explain how to achieve this, implicitly leading to concepts similar to ordered_maps or Red-Black Trees.
Discuss in-depth computer networking concepts: Gateways, Routing vs. Switching, MAC address, Network Interface Cards (NICs), ARP (Address Resolution Protocol). Explain how a computer determines to route traffic to a gateway (based on IP addresses, subnet masks, and subnet IDs). Address CIDR (Classless Inter-Domain Routing) related IP questions and the 4-phase handshaking in an SSL handshake.
Implement custom versions of malloc and free functions in C. Aim for a robust solution with O(1) time complexity.
Summary
I successfully navigated an on-campus interview process with Zscaler for a UI Developer (Internship + FTE) role. The multi-stage process took approximately 8-10 days, covering coding, technical discussions, and HR, ultimately leading to an offer.
Full Experience
My Zscaler Interview Journey: UI Developer (Internship + FTE)
I participated in an on-campus opportunity for a UI Developer role, which included both an internship and a full-time offer. The entire interview process was quite extensive, unfolding over approximately 8-10 days.
Round 1: Coding Round
This round was about 2 hours long. It started with several MCQs related to HTML, CSS, and JavaScript. Following the MCQs, I faced three coding questions. One specific question involved DOM manipulation, where I needed to pass several test cases. I managed to solve all questions, though one test case in the DOM manipulation problem remained elusive.
After about a week, the results were announced, and I was thrilled to be shortlisted for the subsequent rounds.
Round 2: Technical Round
This round began with my introduction, followed by a detailed discussion about my previous internships and projects. The interviewer then shifted focus to HTML and CSS, and later delved deeply into JavaScript. We discussed how JavaScript works internally, its execution model, and many other intricate details. He asked me to write a JavaScript Promise, and then cross-questioned me extensively about its implementation and asynchronous programming concepts. Towards the end, he posed an easy DSA question: remove duplicate elements in an array. He preferred the solution in JavaScript, but since I wasn't well-versed in DSA using JavaScript, I explained different approaches in C++. He seemed satisfied and then proceeded to explain the JavaScript implementation to me.
Round 3: Technical Round
Right after my introduction, this round quickly turned into a rapid-fire session. The interviewer barraged me with numerous questions on React, CSS, and JavaScript. I recall questions about Error Boundaries in React, Polyfilling in JavaScript, Debouncing, the difference between null and undefined, and local and session storage. Finally, he shared a HackerRank CodePair link containing pre-written React code and asked me to make specific modifications, which I successfully completed.
Round 4: Technical + HR Round
This was the easiest round, led by a manager. He started by explaining the company and the role, followed by my introduction. The discussion then revolved around my internship experience; since I had worked in a backend team, he was keen to understand my motivation for applying to a frontend role. This discussion lasted for a while. He also asked me to elaborate on a project I worked on during my internship. Subsequently, he touched upon the basics of HTML, CSS, ReactJS, and JavaScript. The round concluded in about 40 minutes.
About 4-5 days later, a list of selected students was shared, and I was delighted to find my name on it.
Keep Working Hard!!!
Interview Questions (9)
In the first coding round, I was presented with a DOM manipulation question that required passing several test cases. I was able to solve most of it, though one test case failed.
The interviewer asked me to write a JavaScript Promise and then extensively cross-questioned me about its implementation and the broader concepts of asynchronous programming in JavaScript.
I was given a DSA question to remove duplicate elements from an array. Although the interviewer wanted the solution in JavaScript, I explained different approaches in C++ and he seemed satisfied. He then explained the JavaScript code to me.
During a rapid-fire technical round, I was asked about Error Boundaries in React.
During a rapid-fire technical round, I was asked about Polyfilling in JavaScript.
During a rapid-fire technical round, I was asked about Debouncing.
During a rapid-fire technical round, I was asked about the difference between null and undefined in JavaScript.
During a rapid-fire technical round, I was asked about the differences between local and session storage.
I was given a HackerRank CodePair link with existing React code and tasked with making certain modifications to it, which I successfully completed.