Oracle Interview Experience | On Campus for Application engineer/Server Technology Engineer
1st round: MCQ Test Round(online)
There were no coding questions to my surprise. The whole test was divided into 4 sections.
Mathematics(probability, equation based),
Observation(You just had to tell which of the 4 options was present in the above given 10×3 table just by looking and observing),
Flowchart(a flowchart for a given situation was given, and some conditions(standard diamond shaped boxes) were empty. You had to tell which option fits which of the conditional boxes. There were 3,4 questions on the same flowchart, so properly studying the chart could help you answer all the associated questions).
- Coding Output Based:
Most questions were based on predicting output of the given code snippet( There were a lot of questions from Trees(any sub-topic)),
Some complexity based questions.
- Core Subjects:
Fundamental(most) and tricky(few) questions from OS, DBMS, OOPS.
- English Comprehension:
Unseen passage based questions,
Grammar based questions,
Ordering the sentences in a meaningful order,
best synonym substitution based questions.
A lot of Practice and Luck was involved in the 1st round. You don’t need to practice especially for Aptitude part unless your basics aren’t of course. But studying the subjects thoroughly and nicely was important, because it will also help in the following rounds. Memorizing the concepts is of NO GOOD unless you can get a feeling for them so that when needed, you can use them in a practical situation. Trees was a topic which had the most questions in the 2nd section of 1st round(traversals, AVL trees, insertion, deletion, height from given nodes, total nodes from given height).
Out of 250 students, 50 were shortlisted for 2nd round and extra 15,20 were kept in the wait list(thought i don’t think they would get chance only when main list people don’t perform well, odds of which are less since they are shortlisting almost 50 in main list).
2nd round: TECHNICAL Round(online)
All my friends were being asked basic questions on OOPs concepts, OS concepts, Linked List questions(traversal, reversal), sorting algorithms(they will ask to code it as well if they wish too), Puzzles(here are the most frequently asked puzzles).
But unfortunately, I was asked a coding question only.
First he started by introducing himself. And asked me to introduce myself. Then asked me to explain my favorite project. (Always be well prepared with your projects. Don’t write(in your resume) or say(during interview) anything that you don’t know. And always be clear with your contribution in the project as they tend to ask what task was assigned to you). Then he sent me a session link of codepair.com. There complete discussion was done regarding the question. From brainstorming to coding and running the code.
Question: There is a string given. You need to partition the string in minimum number of partitions such that the characters occurring in a particular partition don’t occur in any other partition. Then the lengths of the partitions were to be returned.
Input: S = “ababcbacadefegdehijhklij”
The required partitions are “ababcbaca”, “defegde”, “hijhklij”. These are the partitions so that each letter appears in at most one part.
Output: [9, 7, 8]
My approach will be mentioned at the end of the article.
Since the interviews were being held online in Zoom meetings(in breakout rooms), so I have no idea how many were shortlisted forward.(but many were dropped after this round as well).
So the key is to be communicative with your interviewer, and be confident in answering something. If you find anything wrong in your approach, tell them and try to re-think asking for a little of time again. For coding questions, try dry running you approaches to see if they are right. Keep telling interviewer what you are thinking and why you are writing a piece of code.
3rd round: TECHNICAL Round(online)
The interviewer First introduced himself, and asked me to do the same. Then he asked me my favourite/recent project. So i told him my Networking Based project. He then started a discussion on the same. We moved over to codepair again. There he gave me a problem statement related to my project. I had used an application called Wireshark in my project, so he asked me to design an application similar to wireshark with some tailored functions. He also asked me which language I was comfortable in.
This round was of 1hour and in this 1 hour I had to use all my basics of Networking, OS, Data Structures, System Design, Distributed Systems. Mentioning MULTI-THREADING was a big selling point from my side. He also wanted to know about which Data structure would i use in particular and why. Just be clear with the basics.(for e.g. why vector is beneficial instead of an array). There was also a talk of Thread pool(which he wanted me to relate to Object pool, i.e. creating enough vectors and putting them in a pool and using whenever a task arrives and releasing the vector object back to pool. His main motive to ask this was because he didn’t want me to dynamically allocate memory every time).
So, in short, when mentioning a project/subject as you favorite, make sure you really dig that subject/project more than others. And you have good knowledge of other CORE CS concepts(Threading in particular).
The interviewer was very helpful. Wherever I was getting stuck, i would ask him to point me in some direction, and fortunately enough he would, and it was enough for me to grasp where he wanted me to go. Its important to be vocal and ask for help(but not everytime).
You can also keep asking the interviewer that whether you are going in the right direction.
4th round: HR Round(online)
Okay this was supposed to be the most chill round. It was chill + Challenging as well.
The interviewer was very friendly and polite. We started with the same introductions. He then asked my how were my other rounds. I told him as they were. He was interested in knowing what i found challenging in those rounds.
He then asked me about my favorite subject, Which i told him to be Distributed systems(not many people are daring enough to even opt this subject) XD
He then started asking me basic concepts of DS. I was able to answer them all since i really liked this subject so I knew a lot about it. He seemed happy.
We then moved to some managerial questions. Like when did you face challenges in you life and how did you tackle them. Tell them a good story, everybody likes a good story(but let it not be superficial XD).
It was a very back and forth discussion and we both seemed to enjoy it.
My approach to the 1st Tech round coding question:
The interviewer first asked me to explain my approach. I got it wrong on the first try. But he didn’t tell me that. After explain ing my approach, I started dry running my approach on the sample example that he provided me with. I quickly found that my approach was wrong. I asked for a moment to re-think and then when i explained my other approach he said ‘Yes Right’.
So its very important to be vocal and let the interviewer know what is going on in your mind.
First I thought that counting the frequency of characters would help me somehow. But after dry running i found it to be inadequate. So Then while looking over the test case I then knew that I need to know what is the first occurrence and last occurrence of a character, since any partition that i make must have a characters’ 1st and last occurrence inside it(including end points). I still didn’t know how to proceed with this ahead. So what I did was i started writing down the ranges of each characters, i.e. their 1st and last occurrences in the string(0-based indexing). And then while writing these it clicked me that each character span is forming a kind of interval. I have done some interval merging based questions on leetcode, interviewbit, hence I knew now how to proceed.
So I stored the 1st and last occurrences of all the characters in a map such that the key was the character, and the value was a pair containing 1st and last occurrence. // <char, pair<int, int>>
Now I iterated over the string, and made 3 cases.
- If the character under traversal has the interval completely inside the current interval, then do no thing and proceed since the partition will obviously be decided by the current interval which is already larger.
- If the character under traversal has the interval completely outside the current interval(usually it would be just next to the current interval, i.e. if current interval was say from indices [2,6] then the new interval will be [7,x]. In this case store the length of the prev interval and mark the current index as the beginning of the new interval.
- If the character under traversal has the interval partially inside the current interval, like if current interval was say from indices [2,6] then the starting point of new interval will be somewhere between [3,5] and end point will be somewhere between [7,x]. In this case, only update the current intervals end-point, since this new character can add to the length of the current interval.
Doing interval merging questions will help you understand this concept clearly.
Verdict: Selected for Sever Technology Engineer.
Thanks a lot to GeeksForGeeks in particular.