Oracle Health | Senior Software Developer | IC3 | Interview Experience
Summary
I interviewed for a Senior Software Developer, IC3 role at Oracle Health in August 2025. Despite clearing most technical rounds and presenting viable solutions, I was ultimately rejected, with feedback that seemed to contradict the interview process itself, possibly due to a misalignment with my C++ background or role expectations.
Full Experience
Pre-screening Round
My interview journey with Oracle Health began in August 2025. After a recruiter reached out via email, we had a video conference where she detailed the Senior Software Developer profile, emphasizing it would be primarily backend work with some frontend.
This round covered various technical topics:
- Differences between exceptions and errors in Java.
- How to create an immutable class.
- Concepts related to deadlock.
- All SOLID principles with illustrative examples.
- Factory and Abstract Factory design patterns.
- Encapsulation versus Abstraction.
- Questions on Actuator and Dispatcher Servlet, which I admittedly didn't know.
- Discussion about my projects. I clarified that my professional experience was mainly in C++ but that I used Java extensively for DSA.
I left this round not expecting to proceed further, mainly due to my C++ background and my inability to answer the Spring Boot questions.
Loop Round 1 - Hiring Manager Round
This round started with introductions and a discussion about my current role. Surprisingly, the hiring manager mentioned they were looking for a frontend developer, which directly contradicted the recruiter's information about a backend-focused role. Despite this, the interview continued.
We discussed API query parameters, path variables, and request bodies. The main focus was a system design question for a BookMyShow-like service. The interviewer was primarily interested in requirements and API design, specifically asking for API request types, request bodies, and response bodies. We skipped database schema and estimations due to time constraints, and I concluded by creating an HLD diagram. The interviewer was friendly throughout.
Loop Round 2 - DSA
After a brief project discussion, I was asked to convert a number to a Roman numeral. My initial solution used a direct mapping for all combinations (e.g., 1000, 900, 500, 400). The interviewer then challenged me to use only base mappings (1000, 500, etc.) and make the solution "extensible." I provided a hardcoded solution for this, which wasn't satisfactory. He then hinted at a pattern where for 'even' values (like 1000), the next subtraction rule might be at index +2, and for 'odd' values (like 500), at index +1. I coded this, but I argued that this pattern itself wasn't truly "extensible" for Roman numerals, as they are fixed, and this arbitrary pattern wasn't a universal rule. I felt I had provided a correct solution, even if not meeting his specific "extensible" criteria for an inherently non-extensible system.
Loop Round 3 - Bartender Round
This round began with the interviewer introducing himself, followed by questions about my current work and projects, focusing on a specific feature I implemented. He tried to delve quite deeply into the feature, which I felt was beyond the scope of this round, especially since my C++ protocol development work was hard for him to grasp. Despite my use of analogies, I doubt he fully understood. We also discussed disagreements with seniors. The interviewer was neutral, neither friendly nor rude.
Loop Round 4 - DSA
This round involved a mix of DSA and core Java concepts:
- I had to implement a producer-consumer problem using two threads to count and print odd and even numbers alternately, using
wait/notify. - Questions on
Cloneable,Serializable, and thetransientkeyword. - Implementing an immutable class and the use of the
finalkeyword. - Creating a thread-safe singleton class.
- A DSA question to find a cycle in a linked list. I offered both the slow/fast pointer and HashSet approaches. He requested another approach, but I couldn't recall one.
- Another DSA question was about the sum of values of all leaf nodes in a binary tree. I provided a recursive solution, and when he clarified he wanted only the sum of leaf nodes at the deepest level, I quickly adapted my code. I performed dry runs for both DSA problems.
This interview went very well, and I felt I answered about 90% of the questions correctly. I couldn't answer some specific questions like the drawbacks of Cloning or the multiton pattern.
Verdict: Not Selected
The recruiter later provided feedback, which was quite conflicting:
- The hiring manager claimed I failed to implement the DB schema in the system design round, which was baffling because she explicitly told me to skip it and focus on API design.
- She also stated I couldn't make the system design, which I strongly disagree with. I provided a design, asked clarifying questions, and offered options when she gave no input, always confirming my choices.
- Another piece of feedback claimed I couldn't come up with a solution for one of the DSA rounds. This is also untrue; I provided correct solutions, even if one wasn't "extensible" in the way the interviewer preferred for an inappropriate problem context.
In conclusion, I'd advise caution with overly "friendly" interviewers. I suspect my rejection was more likely due to my C++ background or the initial confusion about the role's frontend/backend requirements, leading the hiring manager to fabricate feedback. This kind of experience can be quite disheartening for job seekers.
Interview Questions (15)
Explain the differences between exceptions and errors in Java, and how they are typically handled.
Describe the principles and steps to create an immutable class in Java. Provide a code example.
Explain what a deadlock is in concurrent programming, its necessary conditions, and common strategies for prevention or detection and recovery.
Elaborate on each of the five SOLID principles of object-oriented design and illustrate them with practical examples.
Differentiate between the Factory Method and Abstract Factory design patterns. Explain their use cases and provide examples for each.
Compare and contrast encapsulation and abstraction in object-oriented programming, highlighting their distinct purposes and how they are implemented.
Explain the roles and functionalities of Spring Boot Actuator and the Dispatcher Servlet in a Spring application context.
Design a system similar to BookMyShow for ticket booking. Focus on defining core requirements, API design (including request types, request bodies, and response bodies). You may skip detailed database schema and capacity estimations. Finally, provide a High-Level Design (HLD) diagram.
Convert an integer to its Roman numeral representation. The interviewer was particularly interested in an 'extensible' solution, suggesting that mappings should primarily be for base values (e.g., 1000, 500, 100) and that combinations (e.g., 900, 400) should be derived through a pattern, such as 'for even indexes, subtraction is at +2, and for odd, at +1'.
Implement a producer-consumer problem using two threads. One thread should produce odd numbers, and the other even numbers, ensuring they are printed alternately. Use Java's concurrency primitives like wait() and notify() for synchronization.
Explain the purpose and usage of the Cloneable and Serializable interfaces, and the transient keyword in Java. Discuss their implications and potential pitfalls.
Demonstrate how to implement an immutable class in Java. Discuss the various applications and implications of the final keyword when used with variables, methods, and classes.
Implement a thread-safe Singleton design pattern in Java, explaining the considerations for ensuring thread safety.
Given the head of a singly linked list, determine if it contains a cycle. Implement multiple approaches if possible.
Given the root of a binary tree, calculate the sum of values of all leaf nodes that are located at the deepest level of the tree.