Zscaler | Internship + FTE | Software Developer C/C++ | On-Campus | Bangalore [Offer Accepted]
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.