The interview process consisted of four rounds, all conducted virtually via Coder Pad and Zoom. The first round focused on coding problems. The interviewer reviewed my resume, inquired about my current project and technical expertise, and then presented two coding challenges. The first question involved determining if a level order traversal of a binary tree represented a binary search tree. The second question required decoding a string containing integers into uppercase English alphabets, where 'A' corresponds to 1, 'B' to 2, and so on. I implemented solutions using recursion and dynamic programming, demonstrating my understanding of time complexity and optimization techniques. The second round delved into core Java concepts. The interviewer asked about the purpose of gateways in microservices and the significance of the volatile keyword. Following these discussions, I was presented with two more coding problems. The first involved detecting duplicates in an array, which I solved using a hash set. The second problem simulated an ATM dispensing system, requiring me to minimize the number of notes dispensed for a given transaction while adhering to a maximum note limit. The third round began with a discussion about my current project, my motivation for seeking a job change, and my interest in Oracle. This was followed by a series of core Java questions, including the significance of the volatile keyword, the difference between Comparator and Comparable, the distinction between StringBuffer and StringBuilder, the purpose of static variables, the concept of final classes and variables, and the use of the synchronized keyword. The interviewer then presented two coding challenges. The first involved extracting endpoints and parameters from a Swagger file, which I attempted but struggled with due to unexpected exceptions. The second question required identifying the top k most frequent characters in a large string, which I solved using a HashMap to store character frequencies, a Comparator to sort in descending order, and then printing the top k entries. The fourth and final round started with a review of my resume and a discussion about my current project, technology stack, compensation expectations, and reasons for seeking a change and interest in Oracle. The interviewer then presented a real-world business use case involving a manufacturer producing various products like bikes, cars, washing machines, and ACs. Each product was composed of multiple parts, which in turn had subparts and sub-subparts. The challenge was to write a program that took two components as input and returned the number of components of the second argument required to manufacture the first component. I initially struggled with this problem but eventually devised a solution using trees. The interviewer was impressed with my approach and the Component class I created to represent the data. The interview concluded with a puzzle involving measuring 4 liters of water using two containers of 5 and 3 liters. I was also given the opportunity to ask questions about the role, team, and the interviewer's memorable experiences at Oracle. Overall, the interview process was challenging but rewarding, with several out-of-the-box questions in rounds 3 and 4. I found the experience to be positive and learned a lot from the technical discussions and coding challenges.