Summary
I recently interviewed for a Senior Software Engineer position at Black Duck. After successfully navigating through four rounds covering data structures, algorithms, system design, and core Java concepts, I was unfortunately rejected due to perceived slowness in my Java typing during the final technical round.
Full Experience
Application and Initial Contact
I applied directly through Black Duck's career portal. Shortly after, a recruiter contacted me to schedule a HackerRank online assessment, followed by a series of face-to-face interviews.
Round 1 - Online Assessment
This round consisted of two medium-to-hard coding questions. One was based on strings, and the other involved the Trie data structure. I felt I performed adequately.
Round 2 - Face-to-Face
In this round, I was asked to find palindromes within a given string and to reverse an integer, which had some tricky edge cases. Beyond coding, we had a detailed discussion on SOLID principles, elaborated on LEFT OUTER JOINs, and I wrote a specific SQL query. We also delved into project discussions, the differences between interfaces and abstraction in Java, various other Java-related questions, and Dependency Injection. I was able to answer most questions and progressed to the next round.
Round 3 - Face-to-Face
This was a comprehensive round with many questions. The interviewer explained that if I answered quickly, we would also cover Low-Level Design (LLD) and High-Level Design (HLD). I aimed to answer as many as possible to maximize my chances. Questions included finding the maximum height of a Binary Tree, implementing preOrder, postOrder, and inOrder traversals, and explaining the differences between DFS and BFS. I was also asked to find the first unique character in a string and to identify unique pairs that sum up to a target in a variation of the Two Sum problem. System design questions involved designing an ArrayList and a URL Shortener, which led to significant discussion. The round concluded with questions on SpringBoot, Java, Java streams, and further project discussions. The interviewer seemed satisfied, and I cleared this round as well.
Round 4 - DSA
The recruiter informed me this round would be with a US team, focusing purely on Data Structures and Algorithms. I was given two easy-to-medium problems to solve in Java and managed to complete both within 40 minutes.
Verdict
Despite feeling confident after the interviews, I was ultimately rejected. The feedback I received was that I took too much time typing in Java during the technical rounds. While disappointed, I believe I gave my best effort.
Interview Questions (15)
Given a string, find all palindromes present within it.
Reverse the digits of a given integer. This question typically involves handling edge cases like negative numbers and potential integer overflow.
Discussion around the principles of SOLID design for object-oriented programming.
Explanation of the LEFT OUTER JOIN clause in SQL and writing specific SQL queries based on given scenarios.
Discussion on the key differences and use cases between interfaces and abstract classes in Java.
Various questions related to core Java concepts and the concept of Dependency Injection.
Find the maximum height or depth of a given binary tree.
Implement recursive or iterative pre-order, in-order, and post-order traversals for a binary tree.
Explain the differences between Depth-First Search (DFS) and Breadth-First Search (BFS) algorithms, including their use cases and typical implementations.
Given an array of integers and a target sum, find all unique pairs of numbers that add up to the target sum.
Design and implement a dynamic array similar to Java's ArrayList, including considerations for operations like add, remove, get, and resizing when capacity is exceeded.
Design a URL shortening service like TinyURL. This typically involves discussions on system architecture, database schema, hashing algorithms, collision handling, and scalability considerations.
Questions related to the SpringBoot framework, covering its features, components, and common usage patterns.
Questions specifically on the Java Streams API, including intermediate and terminal operations, functional interfaces, and common use cases.
Preparation Tips
My preparation involved rigorous practice of data structures and algorithms, focusing on various problem patterns. I also brushed up on core Java concepts, including advanced topics like streams, and solidified my understanding of SpringBoot. Furthermore, I prepared for system design challenges, especially low-level design aspects like designing common data structures, and reviewed general object-oriented principles. Project discussions were also a significant part, so I ensured I could articulate my past work effectively.