Optum Interview Preparation and Recruitment Process


About Optum


Optum, Inc. is a major American healthcare company and a subsidiary of UnitedHealth Group, formed in 2011 by consolidating UnitedHealth’s pharmacy and care delivery services. It operates three main divisions: OptumHealth, OptumInsight, and OptumRx, focusing on five core areas: data and analytics, pharmacy care services, population health, healthcare delivery, and healthcare operations. Optum serves a wide range of clients, including employers, government agencies, health plans, life sciences companies, care providers, and individuals, with services like health data analytics, pharmacy benefit management, and direct care delivery.

Optum Interview Quesions

Key Facts:


* Revenue & Growth: In 2019, Optum’s revenues exceeded $100 billion, growing 11.1% year-over-year, making it UnitedHealth’s fastest-growing unit at the time. It accounted for 44% of UnitedHealth’s profits in 2017.

* Acquisitions: Optum has aggressively expanded through acquisitions, including MedExpress (2015), Surgical Care Affiliates (2017), DaVita Medical Group (2017), Change Healthcare ($13 billion, 2021), and Amedisys ($3.3 billion, 2023). These moves have fueled its vertical integration but sparked concerns about market consolidation.

* Optum Serve: A division dedicated to providing health-related services to U.S. federal agencies, supporting military, veterans, and other government programs with a focus on whole-person care.

* Global Presence: Operates in 150 countries, with significant operations in the U.S., India (Optum India, a global capability center), and the UK. Optum India employs over 34,000 people and is a hub for technology and operations.

* Leadership: Heather Cianfrocco has been CEO since April 2024. UnitedHealth Group’s CEO, Sir Andrew Witty, oversees Optum’s parent company.

Operations & Services:


* OptumHealth: Delivers primary, specialty, urgent, and chronic care, emphasizing value-based, patient-centered care. It includes initiatives like OptumLabs (a research partnership with Mayo Clinic) and acquired physician-led groups like Caremount Medical.

* OptumInsight: Provides data analytics, consulting, and technology solutions to streamline clinical and administrative processes for hospitals, physicians, and health plans.

* OptumRx: Manages pharmacy benefits, serving 13.5 million people through a network of 67,000 pharmacies and mail-order services.

* Technology & Innovation: Leverages AI, deep learning, and analytics to enhance care delivery, with platforms like Optum One for patient engagement and tools for population health management.



Optum Recruitment Process


The Optum recruitment process for freshers and experienced candidates, particularly for roles like Software Engineer or Associate Software Engineer, is structured to assess technical skills, aptitude, and cultural fit. Based on available information, primarily from web sources like Unstop, Glassdoor, GeeksforGeeks, and AmbitionBox, the process typically involves 3-4 stages and takes 2-5 weeks to complete. Below is a detailed breakdown of the recruitment process, tailored for 2025:

Eligibility Criteria


* Academic Requirements:
* Minimum 65% in 10th and 12th standard.
* Minimum 6.5 CGPA in Bachelor’s (BE/B.Tech) or Master’s (ME/M.Tech) degrees.

*
No active backlogs.

*
Preferred Degrees: BE/B.Tech, ME/M.Tech in Computer Science, IT, or related fields.

*
Skills: Knowledge of SQL, Power BI, Java, Python, or other programming languages is advantageous.

*
Experience: Freshers (0-2 years) for entry-level roles; experienced candidates for specialized roles.


Recruitment Process Stages


Application Stage:

* Candidates apply through Optum’s career portal (www.optum.com/careers), job platforms like Naukri or LinkedIn, or campus/off-campus drives.

* Resumes are screened for eligibility and relevant skills. Shortlisted candidates are invited for further rounds.

* Tip: Tailor your resume to highlight technical skills and projects, especially those involving healthcare or IT.

Online Written Assessment:

* Conducted on platforms like CoCubes or Hackerearth.

* Duration: 60-90 minutes.

* Sections:

* Quantitative Aptitude & Logical Reasoning: Tests numerical skills, data interpretation, and critical thinking (20-30 questions).

* Technical Aptitude: Covers programming concepts, data structures, algorithms, OS, and networking (10-20 MCQs).

*
Coding Challenge: 1-2 problems (e.g., array manipulation, palindrome detection, or queue implementation) of moderate difficulty.

* Difficulty: Easy to moderate, with time management being critical due to the high number of questions.

* Tip: Brush up on fundamentals of math, logical reasoning, and core programming concepts (e.g., DSA, OOPs). Practice on platforms like LeetCode or GeeksforGeeks.

Group Discussion (GD) (Optional):
* Used in some campus or off-campus drives to filter candidates.

* Candidates are divided into groups and given a topic (often related to current affairs or healthcare).

* Evaluates communication skills, leadership, teamwork, and knowledge.

* Tip: Stay updated on healthcare trends and practice clear, concise communication.

Interview Rounds:

Technical Interview (1-2 rounds):
* Focuses on technical knowledge, problem-solving, and application of concepts.

* Questions cover:

* Programming languages (e.g., Java, Python, C++) and concepts like OOPs, exception handling, or SQL queries.

* Data structures and algorithms (e.g., array intersection, Fibonacci series, or linked list operations).

* Projects listed on the resume, with emphasis on real-world problem-solving.

* Sample Questions:

* “Explain operator overloading vs. overriding.”

* “Write a program to find the largest palindrome in a string.”

* “How do you handle corrupted data with poor fill rates?”

* Duration: 30-60 minutes.

* Tip: Be prepared to explain your code and approach clearly. Relate theoretical knowledge to practical scenarios.

HR Interview:
* Assesses personality, cultural fit, and alignment with Optum’s core values (integrity, innovation, compassion, relationships).

* Common Questions:

* “Tell me about yourself.”

* “Why do you want to work at Optum?”

* “Describe a time you worked in a team to solve a problem.”

* Evaluates communication skills, teamwork, and career aspirations.

Duration: 15-30 minutes.

* Tip: Research Optum’s mission and its role in healthcare. Prepare answers to behavioral questions using the STAR method (Situation, Task, Action, Result).

Offer and Onboarding:

* Successful candidates receive a verbal offer followed by an email with the offer letter.

* The offer letter is issued within 1-15 days after interviews, depending on the role and background verification.

* Background checks and documentation (e.g., educational certificates) are required before onboarding.

* Joining typically occurs within 1-4 weeks, though delays may occur for large-scale hiring.

* Onboarding: Includes orientation and role-specific training (e.g., 4-week paid training for some CSR roles).

Benefits of Working at Optum

* Competitive salaries (varies by role; e.g., Software Engineer salaries are well-regarded).

*
Benefits include health coverage, leave policies, retirement schemes, daycare facilities, and concierge services.

*
Opportunities to work with cutting-edge healthcare technology and a global network of professionals.

Optum Interview Questions :

1 .
What is the difference between local storage, session storage, and cookies?
* Local storage persists data without expiration and is used to store large amounts of data on the client-side that need to be retained across sessions. It has a storage limit of about 5MB.

* Session storage is temporary and only lasts for the duration of the session (until the browser or tab is closed). It has a similar storage limit to local storage.

* Cookies store small pieces of data, typically 4KB in size, and are sent to the server with each HTTP request. Cookies can have expiration dates and are commonly used for session tracking and authentication. Unlike local and session storage, cookies are available on both client and server.
2 .
How would you implement a basic debounce function in JavaScript?
A debounce function limits the rate at which a function can fire. It ensures that the function only runs after a specific period has passed since the last call. The debounce function wraps the target function and clears any previous timeout if the function is called again within the delay period. Here’s an example:
function debounce(func, delay) {
   let timeoutId;
    return function(...args) {
       clearTimeout(timeoutId);
timeoutId = setTimeout(() => func(...args), delay);
};
}​

This is useful for scenarios like handling window resizing events or preventing multiple API requests on rapid button clicks.
3 .
Describe what a promise is in JavaScript and how it can be used to handle asynchronous operations.
A promise is an object representing the eventual completion or failure of an asynchronous operation. It has three states: pending, fulfilled, and rejected. Promises provide a more readable way of handling asynchronous tasks compared to callbacks, as they allow chaining using .then() and .catch() methods for success and error handling. For instance:

let promise = new Promise((resolve, reject) => {
   setTimeout(() => resolve("Data received"), 1000);
});
promise.then((data) => console.log(data)).catch((error) => console.error(error));​


This makes async code more readable, manageable, and less prone to callback hell.
4 .
Explain the purpose of a JavaScript closure with an example.
A closure is a function that preserves access to its lexical scope even when the function is executed outside that scope. For example:
function makeCounter() {
    let count = 0;
    return function() {
      return ++count;
};
}
const counter = makeCounter();
console.log(counter()); // 1
console.log(counter()); // 2​

The counter function retains access to the count variable even after makeCounter has finished executing. Closures enable private data storage and encapsulation in JavaScript.
5 .
How does hoisting work in JavaScript?
Hoisting is JavaScript’s behavior of moving variable and function declarations to the top of their containing scope during compilation. This allows functions to be called before they are defined and variables to be declared later in the code. However, only declarations are hoisted, not initializations. let and const declarations are hoisted but placed in a “temporal dead zone” until they are initialized.
6 .
What is Big O Notation, and why is it important in algorithm analysis?
Big O Notation describes the upper limit of an algorithm’s running time or space requirements in terms of the input size. It helps determine the efficiency and scalability of algorithms, allowing developers to choose optimal solutions. Common Big O notations include O(1), O(n), O(log n), and O(n^2), each describing different growth rates, with O(1) being constant time and O(n^2) indicating quadratic growth.
7 .
What is the difference between map, filter, and reduce in JavaScript?
* map: Creates a new array by applying a function to each element of an array.

* filter: Creates a new array with elements that pass a specified test.

* reduce: Reduces the array to a single value by applying a function against an accumulator and each element in the array.

These methods enhance functional programming in JavaScript by providing concise ways to handle data transformations.
8 .
How would you handle CORS errors in a web application?
Cross-Origin Resource Sharing (CORS) errors occur when a browser blocks requests from one domain to another. They can be resolved by setting appropriate headers on the server, such as Access-Control-Allow-Origin, which allows specified origins to access resources.
9 .
What is JSONP, and how does it work?
JSONP (JSON with Padding) is a technique for making cross-origin requests by adding a <script> tag with a URL containing a callback function. This was commonly used before CORS support to allow data retrieval from other domains, as <script> tags are not restricted by CORS.
10 .
What is the need of tree shaking?
In every application, tree shaking may dramatically reduce code size. In other words, the less code we transmit over the wire, the more performant the programme. For example, if we only want to develop a "Hello World" application utilising SPA frameworks, it will take a few MBs, but tree shaking can reduce the size to a few hundred KBs. Tree shaking is supported by the Rollup and Webpack bundlers.
11 .
What's the distinction between native, host, and user objects?
Native objects are objects that are described by the ECMAScript standard as being part of the JavaScript language. String, Math, RegExp, Object, Function, and other ECMAScript basic objects are examples. Host objects are those made available by the browser or runtime environment (Node). Host objects include windows, XmlHttpRequest, DOM nodes, and so on. User objects are objects that have been defined in the javascript code. User objects, for example, are built for profile information.
12 .
What are the two types of loops in javascript?
Entry Controlled Loops: The test condition is tested before entering the loop body in this sort of loop. This category includes For Loop and While Loop, for example.

Exit Controlled Loops: The test condition is tested or assessed at the end of the loop body in this sort of loop. i.e., regardless of whether the test condition is true or not, the loop body will run at least once. This category includes, for example, the do-while loop.
13 .
What are the problems with post message target origin as a wildcard?
The postMessage method's second argument defines which origin is permitted to receive the message. If you provide the wildcard "*" as a parameter, the message can come from any origin. When sending the message, the sender window has no means of knowing if the target window is at the intended origin. If the target window was browsed to another origin, the data would be sent to that origin. As a result, XSS vulnerabilities may arise.
14 .
What are constructors in .NET Core, and how do you overload a constructor?
Constructors are special methods used to initialize objects. Overloading allows multiple constructors with different parameters.

* Constructors have the same name as the class and no return type.

* Overloading constructors allows for different ways to initialize objects.

* Example: public class Person { public Person(string name) { } public Person(string name, int age) { } }

* Overloaded constructors can call each other using the 'this' keyword.
15 .
What is the process for implementing a linked list?
Implementing a linked list involves defining nodes, linking them, and providing methods for insertion, deletion, and traversal.

* Define a Node class with data and a pointer to the next node.

* Create a LinkedList class to manage the head node and operations.

* Implement methods for insertion (at head, tail, or specific position).

* Implement methods for deletion (by value or position).

* Provide traversal methods to display the list or search for elements.
16 .
What is normalisation ? What is group by and dense rank?
Normalization organizes data to reduce redundancy and improve integrity in databases.

* Normalization involves dividing a database into tables and defining relationships.

* It typically follows several normal forms (1NF, 2NF, 3NF) to eliminate data anomalies.

* Example: Splitting a customer table into separate tables for customer info and orders.

* Group By is an SQL clause that aggregates data based on one or more columns.

* Example: SELECT department, COUNT(*) FROM employees GROUP BY department;

* Dense Rank is a SQL function that assigns ranks to rows within a partition, without gaps.

* Example: SELECT employee_id, DENSE_RANK() OVER (ORDER BY salary) FROM employees;
17 .
What is an IoC (Inversion of Control) container?
An IoC container manages object creation and dependencies, promoting loose coupling and easier testing in software applications.

* IoC containers handle the instantiation and lifecycle of objects, reducing manual dependency management.

* They support Dependency Injection (DI), allowing dependencies to be provided externally rather than hard-coded.

* Examples include Spring Framework (Java), .NET Core's built-in IoC container, and Angular's dependency injection system.

* IoC containers can manage singleton, transient, and scoped lifetimes of objects, optimizing resource usage.
18 .
How do you approach ETL design?
ETL design involves identifying data sources, defining data transformations, and selecting a target system for loading the transformed data.

* Identify data sources and determine the data to be extracted

* Define data transformations to convert the extracted data into the desired format

* Select a target system for loading the transformed data

* Consider scalability, performance, and data quality issues

* Use ETL tools such as Informatica, Talend, or SSIS to automate the process

* Test and validate the ETL process to ensure accuracy and completeness
19 .
Return an array containing the intersection of two integer arrays nums1 and nums2. Each element in the result must be distinct, and the result may be returned in any order.
Example 1:

* Input: nums1 = [1,2,2,1], nums2 = [2,2]
* Output: [2]

Example 2:

* Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
* Output: [9,4]
* Explanation: [4,9] is also accepted.

In constant time, we utilise a hash table to keep track of all the unique components of a smaller array. Then, using the hash table, explore the larger list to discover the unique entries.
class Solution {
public:
    // TC: O(M + N), SC: O(min(M, N))
    // Using Hashing
    vector<int> hashingSol(vector<int>& nums1, vector<int>& nums2) {
        vector<int> result;
        // find the smaller array to create a hash table
        vector<int> *smaller = nums1.size() < nums2.size() ? &nums1 : &nums2;
        vector<int> *bigger = nums1.size() > nums2.size() ? &nums1 : &nums2;
        
        unordered_set<int> elements(smaller->begin(), smaller->end());
        
        // Now in the bigger array, check each element if it belongs to the other array
        // using the hash table
        for(const int& num: *bigger)
            if(elements.count(num)) {
                result.emplace_back(num);
                // remove the current element from hash table
                elements.erase(num);
            }
        return result;
    }
    
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        return hashingSol(nums1, nums2);
    }
};​
20 .
What is BOM?
JavaScript may "speak to" the browser via the Browser Object Model (BOM). It is made up of the window's children, navigator, history, screen, location, and document.

The Browser Object Model is not standardized and might vary depending on the browser.
21 .
Move all 0s to the end of an integer array nums while keeping the relative order of the non-zero members. It is important to note that you must accomplish this in-place, without producing a duplicate of the array.
Example 1:

* Input: nums = [0,1,0,3,12]
* Output: [1,3,12,0,0]

Example 2:

* Input: nums = [0]
* Output: [0]

The method used is a two-pointer algorithm that reads and writes pointers. Traverse all the integers in the input array, and if the current num is not zero, write the current value to the index pointed by write ptr; otherwise, do nothing.
void moveZeroes(vector<int>& nums) {
        // Base case: If the input is empty
        if (nums.empty()) {
            // input is empty, nothing to process
            return;
        }
        
        // Initialize read and write indices that initalizes to 0
        int rIdx = 0;
        int wIdx = 0;
        
        // Variable to store number of zeros
        int numzeros = 0;
        
        // Traverse the loop for all input numbers
        while (rIdx < nums.size()) {
            // Check whether the current number is zero or not
            if (nums[rIdx] != 0) {
                // Current number is not zero, push it to the write
                // index
                nums[wIdx++] = nums[rIdx];
            }
            else{
                // The current number is a zero, increment the count
                numzeros++;
            }
            
            // Increment the read index
            rIdx++;
        }
        
        // Fill the zeros at the end of array
        while (numzeros--) {
            nums[wIdx++] = 0;
        }
        
        return;
    }​
22 .
Return true if t is an anagram of s, and false otherwise, given two strings s and t. An anagram is a word or phrase created by rearranging the letters of another word or phrase, usually utilising all of the original letters precisely once.
Example 1:

* Input: s = "anagram", t = "nagaram"
* Output: true

Example 2:

* Input: s = "rat", t = "car"
* Output: false

The goal is to see if s and t have the same characters. We use an unordered map charMap (hashtable) to map a character to the frequency with which it appears in s. In the second step, we loop over t to see if all of its characters have a frequency greater than one in charMap. If the character frequency is equal to zero, we delete this charMap record. We know that t is not an anagram of s if a character is not present. Finally, we ensure that all characters in charMap have been "used" in t by verifying whether charMap is empty.

class Solution {
public:
    bool isAnagram(string s, string t) {
        unordered_map<char, int> charMap;
        for (int i = 0; i < s.size(); i++){
                charMap[s[i]]++;
        }
        for (int i = 0; i < t.size(); i++){
            if (charMap.count(t[i]) == 0){
                return false;
            }
            charMap[t[i]]--;
            if (charMap[t[i]] <= 0){
                charMap.erase(t[i]);
            }
        }
        return charMap.empty();
    }
};​
23 .
5. Return true if the number n is a power of two. Return false otherwise. If there exists an integer x such that n == 2x, then n is a power of two.
Example 1:

* Input: n = 1
* Output: true
* Explanation: 20 = 1

Example 2:

* Input: n = 16
* Output: true
* Explanation: 24 = 16

Example 3:

* Input: n = 3
* Output: false

If n is a negative integer or zero, the function returns false (self-explanatory). All powers of two have only one bit set in their binary form, for example, 2 -> 1 0, 16 -> 1 0 0 0 0. So we use the (__builtin popcount()) method, which returns the number of set bits (1) and if it equals 1 then the number is a power of two, else it is not.
class Solution {
public:
    bool isPowerOfTwo(int n) {
       if(n<1) return false;
        else if(__builtin_popcount(n)==1) return true;
        else return false;        
    }
};​