Practice
Resources
Contests
Online IDE
New
Free Mock
Events New Scaler
Practice
Improve your coding skills with our resources
Contests
Compete in popular contests with top coders
logo
Events
Attend free live masterclass hosted by top tech professionals
New
Scaler
Explore Offerings by SCALER
exit-intent-icon

Download Interview guide PDF

Before you leave, take this NTT Data Interview Questions interview guide with you.
Get a Free Personalized Career Roadmap
Answer 4 simple questions about you and get a path to a lucrative career
expand-icon Expand in New Tab
/ Interview Guides / NTT Data Interview Questions

NTT Data Interview Questions

Last Updated: Jan 02, 2024
Certificate included
About the Speaker
What will you Learn?
Register Now

NTT Data is a global IT services company that was founded in 1967 as the data communications division of Nippon Telegraph and Telephone (NTT), Japan's state-owned telecommunications company. Today, NTT Data is a leading provider of consulting, technology, and outsourcing services, with a presence in more than 50 countries around the world. The company has a diverse range of capabilities, including digital transformation, data analytics, cloud computing, and cybersecurity, making it a valuable partner for organizations looking to leverage the latest technologies to drive business growth and innovation.

For IT professionals, NTT Data is an attractive employer due to its strong reputation, global reach, and focus on innovation. The company is constantly investing in research and development, and encourages its employees to think creatively and come up with new ideas that can help its clients succeed. NTT Data also has a strong emphasis on training and development, offering a wide range of programs and opportunities for employees to further their skills and advance their careers.

Overall, NTT Data is a dynamic and forward-thinking company that is well positioned to help organizations navigate the rapidly changing landscape of technology. If you are an IT professional looking to work with a company that values innovation and has a strong global presence, NTT Data may be a great fit for you.

NTT Data Recruitment Process

1. Eligibility Criteria

The eligibility criteria for NTT Data generally include the following requirements:

Qualification Full Time Graduate of BE/B.Tech/ME/M.Tech
Eligible Stream All branches
Percentage Criteria 60% throughout academics
Backlog No Active Backlog
Gap Criteria Not more than 1 year

It's worth noting that these eligibility criteria are subject to change and may vary depending on the specific role you are applying for. It's always a good idea to check with the company to confirm the current eligibility criteria for the role you are interested in. Additionally, meeting the minimum eligibility criteria does not guarantee that you will be offered a job at NTT Data. The company may also consider other factors, such as your skills and experience, during the recruitment process.

Create a free personalised study plan Create a FREE custom study plan
Get into your dream companies with expert guidance
Get into your dream companies with expert..
Real-Life Problems
Prep for Target Roles
Custom Plan Duration
Flexible Plans

2. Interview Process

NTT Data's recruitment process typically involves three rounds of interviews: a written test, a group discussion, and a technical interview. In the written test, candidates are assessed on their knowledge and skills in various subjects such as programming, data structures, algorithms, and databases. The group discussion is an interactive session in which candidates are given a topic and asked to discuss it in a group. The technical interview is a more in-depth assessment of a candidate's technical skills and knowledge and may include questions about specific technologies, programming concepts, and problem-solving abilities.

  • Written Test
  • Group Discussion
  • Technical Interview

3. Interview Rounds

  • Written Test: The written test consists of four sections: Verbal Ability, Quantitative Ability, Logical Ability, and Technical Ability. This test is designed to assess a candidate's knowledge and skills in various subjects related to IT. In the Verbal Reasoning section of the aptitude test, important topics to focus on include reading comprehension, vocabulary, sentence completion, and critical reasoning. Other key areas to study may include analogy, classification, coding-decoding, and syllogisms. It's also important to have a strong understanding of grammar rules and the ability to spot errors in sentences. Practice with sample questions and exercises in these areas can help improve verbal reasoning skills and prepare for the aptitude test.
  • Group Discussion: The group discussion is an interactive session in which candidates are given a topic and asked to discuss it in a group. This round is designed to assess a candidate's communication skills, teamwork abilities, and problem-solving skills. Some of the most common topics asked in the past include current events, social issues, business scenarios, and ethical dilemmas. Preparing for a group discussion can involve researching current events and practicing effective communication and listening skills. It's also important to be able to contribute to the discussion without dominating it and to be respectful of others' viewpoints.
  • Technical Interview: The technical interview is a more in-depth assessment of a candidate's technical skills and knowledge. This round may include questions about specific technologies such as Java, Python, SQL, JavaScript, and operating systems like Linux and Windows. Programming concepts that may be covered include data structures and algorithms, object-oriented programming, and software design patterns. Additionally, problem-solving skills are also evaluated during this round, so candidates should be prepared to work through coding challenges and discuss their approach to finding solutions. The difficulty of this round is high, so it is important for candidates to prepare well for it by reviewing technical concepts, practicing coding problems, and being familiar with the tools and technologies they will be working with.

Note: A candidate must clear the written test and group discussion rounds in order to be eligible for the technical interview.

You can download a PDF version of Ntt Data Interview Questions.

Download PDF


Your requested download is ready!
Click here to download.

NTT Data Technical Interview Questions: Freshers & Experienced

1. How will you sort an array with many duplicate values in java with explanation?

There are several ways to sort an array with many duplicate values in Java. One approach is to use the Java Arrays class and its sort() method, which is a built-in method for sorting arrays of primitives (such as int, char, and double) and objects (such as String). Here is an example of how to use the sort() method to sort an array of integers:

int[] array = {3, 1, 2, 3, 4, 3, 5, 6, 3};
Arrays.sort(array);

This will sort the array in ascending order, so the resulting array will be: [1, 2, 3, 3, 3, 3, 4, 5, 6].

Alternatively, you could use a more advanced sorting algorithm, such as quicksort or mergesort, to sort the array. These algorithms are more efficient than the sort() method in some cases, but they may be more complex to implement. 

Here is an example of how to use the quicksort algorithm to sort an array of integers:

int[] array = {3, 1, 2, 3, 4, 3, 5, 6, 3};
quicksort(array, 0, array.length - 1);

public static void quicksort(int[] array, int left, int right) {
    if (left < right) {
        int pivot = partition(array, left, right);
        quicksort(array, left, pivot - 1);
        quicksort(array, pivot + 1, right);
    }
}

public static int partition(int[] array, int left, int right) {
    int pivot = array[right];
    int i = left - 1;
    for (int j = left; j < right; j++) {
        if (array[j] < pivot) {
            i++;
            int temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }
    }
    int temp = array[i + 1];
    array[i + 1] = array[right];
    array[right] = temp;
    return i + 1;
}

This will also sort the array in ascending order, so the resulting array will be: [1, 2, 3, 3, 3, 3, 4, 5, 6].

2. Find the smallest window in array sorting which will make the entire array sorted?

To find the smallest window in an array that, when sorted, will make the entire array sorted, you can use a sliding window approach. Here is an outline of the algorithm:

  1. Initialize two pointers, left and right, to the first and last element of the array, respectively.
  2. While the left pointer is less than the right pointer:
    • Find the minimum value in the array between the left and right pointers.
    • Find the maximum value in the array between the left and right pointers.
    • If the minimum value is greater than or equal to the value at the left pointer, increment the left pointer.
    • If the maximum value is less than or equal to the value at the right pointer, decrement the right pointer.
  3. Return the window between the left and right pointers as the smallest window that, when sorted, will make the entire array sorted.

Here is an example of how this algorithm could be implemented in Java:

int[] array = {4, 5, 6, 1, 2, 3};
int left = 0;
int right = array.length - 1;
while (left < right) {
    int min = Integer.MAX_VALUE;
    int max = Integer.MIN_VALUE;
    for (int i = left; i <= right; i++) {
        min = Math.min(min, array[i]);
        max = Math.max(max, array[i]);
    }
    if (min >= array[left]) {
        left++;
    }
    if (max <= array[right]) {
        right--;
    }
}
int[] window = Arrays.copyOfRange(array, left, right + 1);
System.out.println(Arrays.toString(window));

This will print out the smallest window in the array that, when sorted, will make the entire array sorted, which in this case is [1, 2, 3].

Learn via our Video Courses

3. Find the largest / smallest number from a set?

To find the largest or smallest number from a set in Java, you can use the following approaches:

  • Iteration: You can iterate over the set and keep track of the maximum or minimum value seen so far. Here is an example of how to find the maximum value in a set using this approach:
Set<Integer> set = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5));
int max = Integer.MIN_VALUE;
for (int num : set) {
    max = Math.max(max, num);
}
System.out.println(max);

This will print out the maximum value in the set, which is 5.

  • Sorting: You can also sort the set using a sorting algorithm (such as quicksort or mergesort) or the Java Collections class's sort() method, and then return the first or last element of the sorted set as the maximum or minimum value, respectively. Here is an example of how to find the minimum value in a set using this approach:
Set<Integer> set = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5));
List<Integer> sortedSet = new ArrayList<>(set);
Collections.sort(sortedSet);
System.out.println(sortedSet.get(0));

This will also print out the minimum value in the set, which is 1.

4. Give an example of binary search in real life?

Binary search is a search algorithm that is used to find a specific element in a sorted list or array. It works by dividing the list or array in half at each iteration and searching only in the half that is likely to contain the target element. This makes it an efficient algorithm for finding a specific element in large lists or arrays.

One example of binary search in real life is finding a specific book in a library. Imagine you are looking for a book in a library with thousands of books arranged in alphabetical order by the author's last name. Instead of starting at the beginning of the library and looking at every book until you find the one you are looking for, you could use binary search to quickly find the book. Here is how the process might work:

  1. First, you would look at the middle book on the shelf and check the author's last name.
  2. If the last name of the author of the book you are looking for is alphabetically before the last name of the author of the middle book, you would know that the book you are looking for is on the first half of the shelf. You would then look at the middle book on the first half of the shelf and repeat the process.
  3. If the last name of the author of the book you are looking for is alphabetically after the last name of the author of the middle book, you would know that the book you are looking for is on the second half of the shelf. You would then look at the middle book on the second half of the shelf and repeat the process.
  4. If the last name of the author of the book you are looking for is the same as the last name of the author of the middle book, you would have found the book and you could stop the search.

By repeating this process, you can quickly narrow down the search to a small section of the library and find the book you are looking for in a fraction of the time it would take to look at every book on the shelf.

Advance your career with   Mock Assessments Refine your coding skills with Mock Assessments
Real-world coding challenges for top company interviews
Real-world coding challenges for top companies
Real-Life Problems
Detailed reports

5. Given a matrix of integers, find the length of the longest path in the matrix such that all the elements in the path are increasing in value.

To find the longest path in a matrix in Java, you can use a dynamic programming approach. Here is an outline of the algorithm:

  1. Initialize a 2D array dp to store the longest path from each cell to the end of the matrix. Initialize all values in dp to -1.
  2. For each cell (i, j) in the matrix:
    • If dp[i][j] is not -1, skip it (we have already processed it).
    • If (i, j) is the last cell in the matrix, set dp[i][j] to 1.
    • Otherwise, set dp[i][j] to the maximum of dp[i + 1][j], dp[i][j + 1], and dp[i + 1][j + 1], plus 1.
  3. Return the maximum value in dp.

Here is an example of how this algorithm could be implemented in Java:

int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int rows = matrix.length;
int cols = matrix[0].length;
int[][] dp = new int[rows][cols];
for (int[] row : dp) {
    Arrays.fill(row, -1);
}

int longestPath = findLongestPath(matrix, dp, rows - 1, cols - 1);
System.out.println(longestPath);

public static int findLongestPath(int[][] matrix, int[][] dp, int i, int j) {
    if (dp[i][j] != -1) {
        return dp[i][j];
    }
    if (i == rows - 1 && j == cols - 1) {
        dp[i][j] = 1;
    } else {
        int right = 0;
        int down = 0;
        int diagonal = 0;
        if (i < rows - 1) {
            down = findLongestPath(matrix, dp, i + 1, j);
        }
        if (j < cols - 1) {
            right = findLongestPath(matrix, dp, i, j + 1);
        }
        if (i < rows - 1 && j < cols - 1) {
            diagonal = findLongestPath(matrix, dp, i + 1, j + 1);
        }
        dp[i][j] = Math.max(Math.max(right, down), diagonal) + 1;
    }
    return dp[i][j];
}

This will print out the length of the longest path in the matrix, which in this case is 3.

6. What is a quick sort?

Quick sort is a sorting algorithm that is used to sort an array or list of items in ascending or descending order. It is a divide-and-conquer algorithm that works by partitioning the array into two halves, sorting each half, and then merging the sorted halves back together.

Here are the steps of the quick sort algorithm:

  1. Choose a pivot element from the array. This is typically the first element, but it can be any element in the array.
  2. Divide the array into two halves: a left half containing all elements that are less than the pivot, and a right half containing all elements that are greater than or equal to the pivot.
  3. Recursively sort the left and right halves.
  4. Merge the sorted left and right halves back together, with the pivot element in between.

Quick sort is a highly efficient sorting algorithm, with time complexity of O(n log n) on average. It is also an in-place algorithm, meaning it does not require additional memory to sort the array.

Here is an example of how quick sort could be implemented in Java:

int[] array = {3, 5, 1, 2, 4};
quicksort(array, 0, array.length - 1);

public static void quicksort(int[] array, int left, int right) {
    if (left < right) {
        int pivot = partition(array, left, right);
        quicksort(array, left, pivot - 1);
        quicksort(array, pivot + 1, right);
    }
}

public static int partition(int[] array, int left, int right) {
    int pivot = array[right];
    int i = left - 1;
    for (int j = left; j < right; j++) {
        if (array[j] < pivot) {
            i++;
            int temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }
    }
    int temp = array[i + 1];
    array[i + 1] = array[right];
    array[right] = temp;
    return i + 1;
}

The partition() function is responsible for dividing the array into two halves based on the pivot element. It does this by using a two-pointer approach, with one pointer (i) starting at the left side of the array and the other pointer (j) starting at the left + 1. The partition() function then iterates through the array, swapping elements that are less than the pivot with elements on the left side of the pivot. When the iteration is complete, the pivot element is placed in its correct position in the array and the function returns the pivot's index.

7. What is Lucas' theorem?

Lucas' theorem is a result in number theory that describes the behavior of the binomial coefficient (n choose k) when computed modulo a prime number p. The theorem states that if n and k are nonnegative integers, and p is a prime number, then:

(n choose k) = ((n/p) choose (k/p)) * ((n%p) choose (k%p)) (mod p)

Where ((n/p) choose (k/p)) is the binomial coefficient computed with the quotients of the numbers and ((n%p) choose (k%p)) is the binomial coefficient computed with the remainder of the numbers after dividing by prime p.

Lucas' theorem is particularly useful when computing binomial coefficients modulo a prime number, as it allows one to break down the computation into smaller subproblems, which can then be solved independently.

The theorem can be used in many different ways, for example, it can be used in computational number theory, coding theory, and cryptography. 

In computational number theory, Lucas' theorem can be used to compute binomial coefficients quickly when the modulus is a prime number, while in coding theory, it can be used to determine the weight distribution of certain error-correcting codes. And in cryptography, it can be used to speed up the calculation of modular exponentiation.

It's named after the French mathematician Edouard Lucas who proved this theorem in the 19th century.

8. What is the job of ALTER DATABASE command?

The ALTER DATABASE command is a SQL command used to modify the properties or characteristics of a database in a relational database management system (RDBMS). Some examples of modifications that can be made using the ALTER DATABASE command include:

  1. Changing the name of the database.
  2. Modifying the default file locations for the database's data and log files.
  3. Changing the compatibility level of the database.
  4. Adding or removing filegroups from the database.
  5. Setting the default language for the database.
  6. Enabling or disabling features such as full-text search or change data capture.

Here is an example of how the ALTER DATABASE command could be used to change the default file location for a database's data files in SQL Server:

ALTER DATABASE MyDatabase
MODIFY FILE (NAME = MyDatabase_Data, FILENAME = 'C:\MyDatabase\MyDatabase_Data.mdf');

This command will change the default file location for the data files of the database "MyDatabase" to the specified location on the C drive.

9. Write a query that returns the year, month, day, species_id and weight in mg?

To return the year, month, day, species_id, and weight in mg from a table in a database, you can use a SELECT statement with the appropriate column names.

For example, consider a table called "Weights" with the following structure:

+------------+------------+-------+----------+
| RecordID   | Date       | SpeciesID | Weight  |
+------------+------------+-------+----------+
| 1          | 2020-01-01 | 1      | 100      |
| 2          | 2020-01-02 | 1      | 105      |
| 3          | 2020-01-03 | 2      | 200      |
+------------+------------+-------+----------+

To return the year, month, day, species_id, and weight in mg from the "Weights" table, you can use the following SELECT statement:

SELECT
    YEAR(Date) AS Year,
    MONTH(Date) AS Month,
    DAY(Date) AS Day,
    SpeciesID,
    Weight
FROM Weights;

This will return the following results:

+------+-------+----+----------+-------+
| Year | Month | Day | SpeciesID | Weight|
+------+-------+----+----------+-------+
| 2020 | 1     | 1   | 1        | 100   |
| 2020 | 1     | 2   | 1        | 105   |
| 2020 | 1     | 3   | 2        | 200   |
+------+-------+----+----------+-------+

10. Write a query that returns the day, month, year, species_id, and weight (in kg) for individuals caught on Plot 1 that weigh more than 75 g?

To return the day, month, year, species_id, and weight (in kg) for individuals caught on Plot 1 that weigh more than 75 g from a table in a database, you can use a SELECT statement with a WHERE clause to specify the plot and weight criteria. You can also use the DATEPART function to extract the day, month, and year from the "Date" column and the CONVERT function to convert the weight from grams to kilograms.

For example, consider a table called "Weights" with the following structure:

+------------+------------+-------+----------+-------+
| RecordID   | Date       | Plot  | SpeciesID | Weight|
+------------+------------+-------+----------+-------+
| 1          | 2020-01-01 | 1     | 1        | 100   |
| 2          | 2020-01-02 | 1     | 1        | 105   |
| 3          | 2020-01-03 | 2     | 2        | 200   |
+------------+------------+-------+----------+-------+To return the day, month, year, species_id, and weight in kg for individuals caught on Plot 1 that weigh more than 75 g, you can use the following SELECT statement:

To return the day, month, year, species_id, and weight in kg for individuals caught on Plot 1 that weigh more than 75 g, you can use the following SELECT statement:

SELECT
    DATEPART(DAY, Date) AS Day,
    DATEPART(MONTH, Date) AS Month,
    DATEPART(YEAR, Date) AS Year,
    SpeciesID,
    CONVERT(float, Weight) / 1000 AS WeightKg
FROM Weights
WHERE Plot = 1 AND Weight > 75;

This will return the following results:

+----+-------+------+----------+----------+
| Day| Month | Year | SpeciesID | WeightKg |
+----+-------+------+----------+----------+
| 1  | 1     | 2020 | 1        | 0.1      |
| 2  | 1     | 2020 | 1        | 0.105    |
+----+-------+------+----------+----------+

11. Write a query that returns year, species_id, and weight in kg from the surveys table, sorted with the largest weights at the top?

To return the year, species_id, and weight in kg from a table in a database, sorted with the largest weights at the top, you can use a SELECT statement with the appropriate column names and an ORDER BY clause to specify the sorting criteria. You can also use the CONVERT function to convert the weight from grams to kilograms.

For example, consider a table called "Surveys" with the following structure:

+------------+------------+-------+----------+
| RecordID   | Date       | SpeciesID | Weight  |
+------------+------------+-------+----------+
| 1          | 2020-01-01 | 1      | 100      |
| 2          | 2020-01-02 | 1      | 105      |
| 3          | 2020-01-03 | 2      | 200      |
+------------+------------+-------+----------+

To return the year, species_id, and weight in kg from the "Surveys" table, sorted with the largest weights at the top, you can use the following SELECT statement:

SELECT
    YEAR(Date) AS Year,
    SpeciesID,
    CONVERT(float, Weight) / 1000 AS WeightKg
FROM Surveys
ORDER BY WeightKg DESC;

This will return the following results:

+------+----------+----------+
| Year | SpeciesID | WeightKg |
+------+----------+----------+
| 2020 | 2        | 0.2      |
| 2020 | 1        | 0.105    |
| 2020 | 1        | 0.1      |
+------+----------+----------+

12. What is JavaScript and its frameworks?

JavaScript is a programming language that is commonly used to create interactive and dynamic web pages. It is supported by most modern web browsers and is often used in conjunction with HTML and CSS to create web applications.

There are several frameworks (i.e., pre-written code libraries) that are built on top of JavaScript and are designed to make it easier to develop web applications. Some popular JavaScript frameworks include:

  1. React: A popular JavaScript library for building user interfaces, developed by Facebook.
  2. Angular: A full-featured JavaScript framework for building web applications, developed by Google.
  3. Vue.js: A progressive JavaScript framework for building user interfaces, known for its simplicity and ease of use.
  4. Ember.js: A JavaScript framework for building scalable web applications, with a focus on conventions and best practices.
  5. Node.js: A JavaScript runtime that allows developers to build server-side applications in JavaScript.

Each of these frameworks has its own strengths and is suitable for different types of projects. For example, React is often used for building large and complex user interfaces, while Vue.js is well-suited for building lightweight and interactive single-page applications.

13. What are design patterns?

Design patterns are solutions to common design problems that developers encounter when building software. They are not specific pieces of code, but rather descriptions of solutions to problems that have been proven to work well in the past.

There are several types of design patterns, including creational, structural, and behavioral patterns. Creational patterns are concerned with the creation of objects, structural patterns deal with the composition of objects, and behavioral patterns focus on communication between objects.

Some examples of popular design patterns include:

  1. Singleton: A creational pattern that ensures that a class has only one instance, with a global access point to that instance.
  2. Factory: A creational pattern that defines an interface for creating objects in a superclass, but lets subclasses override the implementation to change the type of objects that will be created.
  3. Adapter: A structural pattern that allows two incompatible interfaces to work together by adapting one interface to the other.
  4. Observer: A behavioral pattern that allows an object to publish events and subscribe to events published by other objects so that it can be notified when certain events occur.

Design patterns are useful because they provide a common vocabulary and set of solutions that developers can use to communicate and solve common design problems. They can also help to make code more flexible, maintainable, and reusable.

14. What is MVC?

MVC stands for Model-View-Controller, and it is a software design pattern that separates an application into three main components: the model, the view, and the controller.

The model represents the data and logic of the application. It is responsible for managing the data and providing the necessary business logic to manipulate and process the data.

The view represents the user interface (UI) of the application. It is responsible for displaying the data to the user and providing a way for the user to interact with the application.

The controller is the bridge between the model and the view. It receives input from the user, processes it using the model, and then updates the view to reflect the changes.

The MVC pattern has several benefits, including:

  1. Separation of concerns: Each component of the MVC pattern is responsible for a specific aspect of the application, which helps to keep the code organized and maintainable.
  2. Reusability: Because the components of the MVC pattern are independent of each other, they can be easily reused in other applications.
  3. Testability: The separation of concerns in the MVC pattern makes it easier to test individual components of the application.
  4. Flexibility: The MVC pattern allows developers to easily modify the user interface or the business logic of the application without affecting the other components.

The Model-View-Controller (MVC) pattern offers several advantages in software development. It provides separation of concerns, reusability, testability, and flexibility. By separating the responsibilities of the application into different components, the MVC pattern promotes a more organized and maintainable codebase. This pattern is widely used in web application development and has proven to be effective in delivering high-quality software solutions.

15. What is SQL?

SQL (Structured Query Language) is a programming language used to manage data stored in relational database management systems (RDBMS). It is used to create, modify, and query databases, as well as to manage the data stored in them.

Some common tasks that can be performed using SQL include:

  1. Creating and modifying tables: SQL can be used to create new tables in a database, as well as to modify the structure of existing tables.
  2. Inserting, updating, and deleting data: SQL can be used to add new rows of data to a table, update existing data in a table, or delete rows of data from a table.
  3. Querying data: SQL can be used to retrieve specific data from a database, based on various criteria.
  4. Joining tables: SQL can be used to combine data from multiple tables in a database, based on shared columns or keys.

SQL is a standard language that is supported by most RDBMS, such as MySQL, Oracle, and Microsoft SQL Server. It is a powerful tool for managing and querying data, and is widely used in web development, data analysis, and many other fields.

16. What is an Oracle data integrator?

Oracle Data Integrator (ODI) is a data integration and ETL (extract, transform, load) tool developed by Oracle. It is designed to help organizations extract data from various sources, transform it into a desired format, and load it into a target database or system.

ODI is a graphical design tool that allows developers to build data integration workflows using a visual interface. It includes a number of pre-built connectors and transformations that can be used to extract data from various sources, including relational databases, flat files, and web services. It also includes a runtime engine that can execute the data integration workflows and load the data into the target systems.

Some key features of Oracle Data Integrator include:

  1. Data integration: ODI can extract data from various sources, transform it, and load it into the target systems.
  2. Data quality: ODI includes a range of data quality transformations that can be used to clean and validate data before it is loaded into the target systems.
  3. Scalability: ODI can handle large volumes of data and can be scaled to meet the needs of enterprise-level data integration projects.
  4. Reusability: ODI allows developers to create reusable objects, such as mappings and transformations, which can be used in multiple data integration workflows.

ODI is often used to support data warehousing, master data management, and other data integration projects in organizations.

17. What are the benefits of a DataBase Management System?

A database management system (DBMS) is a software application that is used to create, manage, and manipulate databases. A database is a collection of data that is organized in a specific way, and a DBMS is used to access and manipulate that data.

There are several benefits to using a DBMS, including:

  1. Data organization: A DBMS helps to organize data in a structured and efficient way, making it easier to access and retrieve data when needed.
  2. Data security: A DBMS provides various security features, such as user authentication and data encryption, to protect data from unauthorized access.
  3. Data integrity: A DBMS ensures that data is stored and accessed correctly, and it prevents data inconsistencies and corruption.
  4. Data consistency: A DBMS ensures that data is consistent across the entire database, and it prevents data inconsistencies caused by multiple users accessing the same data simultaneously.
  5. Data independence: A DBMS allows users to access data without having to know the underlying physical structure of the data, which makes it easier to modify the physical structure without affecting the way users access the data.
  6. Data scalability: A DBMS can handle large volumes of data and can be scaled to meet the needs of an organization as it grows.

18. What is a Relational DataBase Management System (RDBMS)?

A relational database management system (RDBMS) is a type of DBMS (database management system) that is based on the relational model of data. In a relational database, data is organized into tables (also known as relations) and is accessed using a standard language called SQL (Structured Query Language).

In an RDBMS, data is stored in tables that consist of rows and columns. Each row represents a record (also known as a tuple), and each column represents an attribute of that record. For example, consider the following table:

ID FirstName LastName Age
1 John Smith 25
2 Jane Doe 30
3 Bob Johnson 35

In this table, "ID" is an attribute that uniquely identifies each record, "FirstName" and "LastName" are attributes that store the first and last names of each person, and "Age" is an attribute that stores the age of each person.

RDBMS are widely used to store and manage data in many types of organizations and are popular because they provide a number of benefits, such as:

  1. Data integrity: RDBMSs ensure that data is stored and accessed correctly, and they prevent data inconsistencies and corruption.
  2. Data security: RDBMSs provide various security features, such as user authentication and data encryption, to protect data from unauthorized access.
  3. Data scalability: RDBMSs can handle large volumes of data and can be scaled to meet the needs of an organization as it grows.
  4. Data independence: RDBMSs allow users to access data without having to know the underlying physical structure of the data, which makes it easier to modify the physical structure without affecting the way users access the data.

19. Define the term 'std’?

In the context of programming and computer science, "std" is often used as an abbreviation for "standard." It is commonly used in reference to the C++ Standard Template Library (STL), which is a collection of reusable components for C++ programming.

For example, "std::vector" is a container class in the STL that is used to store a collection of objects in a dynamic array. "std::sort" is a function in the STL that is used to sort the elements of a container.

"std" is also used as an abbreviation for "standard output" or "standard error," which are streams in the C++ standard library that are used to output data to the console or to a file.

For example, "std::cout" is an object in the C++ standard library that represents the standard output stream and can be used to output data to the console. "std::cerr" is an object in the C++ standard library that represents the standard error stream and can be used to output error messages to the console.

20. In C++, what is the full form of STL?

In C++, the full form of STL is the Standard Template Library. The STL is a collection of reusable components for C++ programming that are designed to make it easier to develop programs using the C++ language.

The STL includes a variety of containers (e.g., vectors, lists, maps, sets), algorithms (e.g., sort, search, transform), and iterators (e.g., forward iterators, bidirectional iterators, random access iterators) that can be used to store and manipulate data.

The STL is implemented as a set of template classes and functions, which means that it can be used with any data type. This makes it a very powerful and flexible tool for C++ programming, and it is widely used in many types of applications.

21. What are the most important differences between C++ and Java ?

Here are some of the most important differences between C++ and Java:

Feature C++ Java
Language type C++ is a statically-typed, compiled programming language. Java is a statically-typed, compiled programming language.
Object-oriented programming C++ supports object-oriented programming (OOP) concepts such as classes, objects, inheritance, and polymorphism. Java is a fully object-oriented programming language that supports OOP concepts such as classes, objects, inheritance, and polymorphism.
Memory management C++ uses manual memory management through the use of pointers and the "new" and "delete" operators. Java uses automatic memory management through a garbage collector that reclaims memory from objects that are no longer being used.
Execution C++ programs are compiled into machine code and can be executed directly on the target platform. Java programs are compiled into bytecode, which is executed by the Java Virtual Machine (JVM).
Platform independence C++ programs are not platform-independent and must be compiled and executed on the target platform. Java programs are platform-independent and can run on any device that has a JVM installed.

22. Define object cloning?

Object cloning is the process of creating a copy of an object in a new memory location. In object-oriented programming languages, objects are often created using a "constructor" method, which is a special function that is used to create a new instance of the object.

Object cloning is similar to object creation, but it involves creating a copy of an existing object rather than creating a new object from scratch. This can be useful in situations where you want to create a new object that has the same state as an existing object, but you want to keep the two objects separate and independent.

There are several ways to implement object cloning in different programming languages. In some languages, such as Java, the object cloning process is handled automatically by the runtime environment. In other languages, such as C++, object cloning must be implemented manually using specific techniques.

23. What are some of the most common data-structure operations?

Here are some common data-structure operations that are frequently used in programming and computer science:

  1. Insertion: Adding a new element to a data structure.
  2. Deletion: Removing an element from a data structure.
  3. Searching: Finding an element in a data structure based on a given key or value.
  4. Sorting: Arranging the elements of a data structure in a specific order.
  5. Traversal: Visiting each element in a data structure and performing some operation on it.
  6. Merging: Combining two or more data structures into a single data structure.
  7. Splitting: Dividing a data structure into two or more smaller data structures.

These operations can be performed on various types of data structures, such as arrays, linked lists, stacks, queues, trees, and graphs. The specific operations and algorithms used to perform these operations will depend on the type of data structure and the specific requirements of the application.

24. What are local variables and global variables in Python?

In Python, variables can be either local or global. Local variables are variables that are defined within a function or block of code, and they are only accessible within that function or block of code. Local variables are created when the function or block of code is executed, and they are destroyed when the function or block of code finishes executing.

Global variables, on the other hand, are variables that are defined outside of any function or block of code, and they are accessible from anywhere within the program. Global variables are created when the program starts, and they remain in memory until the program ends.

Here is an example of how local and global variables are used in Python:

# This is a global variable
x = 10

def foo():
  # This is a local variable
  y = 20
  print(y)

foo()  # Outputs: 20
print(x)  # Outputs: 10
print(y)  # This will cause an error because y is a local variable

In this example, the variable "x" is a global variable, and the variable "y" is a local variable. The function "foo" can access the local variable "y" within its own scope, but it cannot access the global variable "x". Similarly, the global code block can access the global variable "x", but it cannot access the local variable "y" because it is not defined within its scope.

25. Mention various data types in Python?

In Python, there are several built-in data types that can be used to store and manipulate different kinds of data. Here is a list of some common data types in Python:

  1. Integers: Integers are whole numbers that can be positive, negative, or zero. In Python, integers are represented using the int data type.
  2. Floating-point numbers: Floating-point numbers are numbers with decimal points. In Python, floating-point numbers are represented using the float data type.
  3. Booleans: Booleans are values that can be either True or False. In Python, booleans are represented using the bool data type.
  4. Strings: Strings are sequences of characters, such as words or sentences. In Python, strings are represented using the str data type.
  5. Lists: Lists are ordered collections of items that can be of any data type. In Python, lists are represented using the list data type.
  6. Tuples: Tuples are ordered collections of items that can be of any data type. Tuples are similar to lists, but they are immutable, which means that their contents cannot be modified once they are created. In Python, tuples are represented using the tuple data type.
  7. Sets: Sets are unordered collections of unique items. In Python, sets are represented using the set data type.
  8. Dictionaries: Dictionaries are unordered collections of key-value pairs. In Python, dictionaries are represented using the dict data type.

26. In Python, how are classes created?

In Python, classes are created using the class keyword. A class is a template for creating objects, and it defines the properties and behaviors that the objects created from the class will have.

Here is an example of how to create a simple class in Python:

class MyClass:
  def __init__(self, name, age):
    self.name = name
    self.age = age

  def say_hello(self):
    print("Hello, my name is", self.name)

In this example, the class is called MyClass, and it has two properties: name and age. It also has a method called say_hello, which prints a message to the console.

To create an object from the MyClass class, you can use the following syntax:

obj = MyClass("John", 30)

This creates a new object called obj with the name "John" and the age 30. You can access the properties and methods of the object using the dot notation:

print(obj.name)  # Outputs: "John"
print(obj.age)  # Outputs: 30
obj.say_hello()  # Outputs: "Hello, my name is John"

27. What exactly is merge sort, and how does it work?

Merge sort is an efficient, general-purpose, comparison-based sorting algorithm that works by dividing an array into two halves, sorting each half, and then merging them back together.

Here is an example of how merge sort works:

  1. Divide the input array into two halves.
  2. Recursively sort each half.
  3. Merge the sorted halves back together.

The key idea behind merge sort is that it is a "divide and conquer" algorithm, which means that it breaks down a problem into smaller subproblems, solves each subproblem separately, and then combines the solutions to the subproblems to get the solution to the original problem.

To merge the sorted halves back together, merge sort uses a "merge" function that compares the elements at the beginning of each half and adds the smaller element to the result array. This process is repeated until one of the halves is empty, at which point the remaining elements from the other half are added to the result array.

Here is an example of the merge function in Python:

def merge(left, right):
  result = []
  while left and right:
    if left[0] <= right[0]:
      result.append(left.pop(0))
    else:
      result.append(right.pop(0))
  result.extend(left)
  result.extend(right)
  return result

Merge sort has a time complexity of O(n*log(n)), which means that it is very efficient for sorting large arrays. It is a stable sort, which means that it preserves the relative order of elements with equal keys.

28. What is the definition of denormalization?

Denormalization is the process of adding redundant data to a database schema in order to improve the performance of certain queries. It is often used in situations where the performance of a database is critical and the cost of performing complex joins or aggregations is too high.

Denormalization involves breaking the rules of normalization, which is a design technique used to organize a database in a way that reduces redundancy and dependency. Normalization is based on the idea of breaking down a large table into smaller, more focused tables that store related data.

By adding redundant data to the database schema, denormalization can reduce the number of joins or aggregations that are needed to execute a query, which can improve the performance of the query. However, denormalization can also increase the size of the database and make it more difficult to maintain, so it should be used with caution.

29. What is a DLL (Doubly-Linked-List)? What applications does it have?

A doubly-linked list (DLL) is a type of data structure that consists of a sequence of nodes, each of which contains a value and pointers to the previous and next nodes in the sequence.

Doubly-linked lists are similar to singly-linked lists, which are lists that only have pointers to the next node in the sequence. However, doubly-linked lists have the additional benefit of being able to be traversed in both directions, which makes them more flexible and efficient for certain operations.

Here is an example of a simple doubly-linked list in Python:

class Node:
  def __init__(self, val):
    self.val = val
    self.prev = None
    self.next = None

class DoublyLinkedList:
  def __init__(self):
    self.head = None
    self.tail = None
    self.size = 0
  
  def append(self, val):
    new_node = Node(val)
    if self.head is None:
      self.head = new_node
      self.tail = new_node
    else:
      self.tail.next = new_node
      new_node.prev = self.tail
      self.tail = new_node
    self.size += 1

Doubly-linked lists have a number of applications, including:

  • Implementing stacks and queues
  • Implementing memory pools
  • Implementing undirected graphs
  • Implementing associative arrays

30. What are Real-Time Operating Systems (RTOS)?

RTOS stands for "Real-Time Operating System". An RTOS is a type of operating system that is designed to support real-time applications, which are applications that require a guaranteed response within a specified time period.

RTOSs are used in a variety of applications, including industrial control systems, avionics, and automotive systems. They are typically used in situations where the accuracy and timeliness of the system's response is critical, such as in safety-critical systems or systems that control physical processes.

An RTOS typically provides the following features:

  • Preemptive scheduling: The ability to interrupt the execution of a task and run a higher-priority task in its place.
  • Real-time event handling: The ability to process events or interrupts in a timely manner.
  • Resource management: The ability to manage and allocate system resources such as memory, I/O devices, and communication channels.
  • Error handling: The ability to handle and recover from errors or failures that may occur in the system.

An RTOS is a specialized type of operating system that is designed to meet the unique demands of real-time applications. It provides features such as preemptive scheduling, real-time event handling, resource management, and error handling, which are essential for ensuring the accuracy and timeliness of a system’s response. As technology continues to advance and the demand for real-time applications increases, the importance of RTOSs is likely to grow, making them a critical component in a wide range of industries and applications.

31. What are micro and macro kernels?

A kernel is the central component of an operating system that manages the hardware and software resources of a computer. There are two main types of kernels: micro kernels and microkernels.

A microkernel is a type of kernel that only includes the essential components needed to manage the hardware and software resources of a computer. Micro kernels are designed to be small and simple, and they only include the core functionality that is required to manage the system.

A macro kernel, on the other hand, is a type of kernel that includes a wide range of functionality and features, including device drivers, libraries, and system services. Macro kernels are typically larger and more complex than micro kernels, but they provide a more comprehensive set of features and capabilities.

Micro kernels and macro kernels have different trade-offs in terms of performance, flexibility, and complexity. Micro kernels are generally faster and more flexible than macro kernels, but they may be less comprehensive in terms of the features and capabilities they offer. Macro kernels, on the other hand, maybe slower and less flexible than micro kernels, but they may provide a more comprehensive set of features and capabilities.

32. What is Banker's algorithm?

The Banker's algorithm is an algorithm used to manage the allocation of resources in a computer system. It is a deadlock avoidance algorithm that is used to prevent a system from entering a deadlock state, which is a situation where a system is unable to make progress because all of its resources are being used and none are available for new requests.

The Banker's algorithm works by maintaining a table of the resources that are available in the system, as well as the resources that are currently allocated to each process. It uses this information to determine whether a request for resources from a process can be granted without causing the system to enter a deadlock state.

To do this, the Banker's algorithm compares the resources requested by a process with the resources currently available in the system. If the resources are available, the request is granted, and the resources are allocated to the process. If the resources are not available, the request is denied, and the process must wait until the resources become available.

The Banker's algorithm is used in resource allocation systems to ensure that resources are used efficiently and to prevent deadlocks from occurring. It is an important algorithm in the field of computer science and is widely used in operating systems and other resource allocation systems.

33. What are the types of scheduling queues?

In a computer operating system, scheduling queues are data structures that are used to store and manage the execution of processes or tasks. There are several types of scheduling queues, including:

  1. First-In-First-Out (FIFO) queue: This is a simple queue in which processes are added to the end of the queue and are executed in the order in which they were added.
  2. Shortest Job First (SJF) queue: This is a queue in which processes are ordered based on their expected execution time. Processes with shorter execution times are executed before processes with longer execution times.
  3. Round Robin (RR) queue: This is a queue in which processes are executed in a fixed time slice, called a time quantum. Each process is given a time quantum to execute, and if it does not finish within the time quantum, it is moved to the end of the queue and another process is given a chance to execute.
  4. Priority queue: This is a queue in which processes are ordered based on their priority level. Processes with higher priority are executed before processes with lower priority.
  5. Multi-Level Queue (MLQ): This is a queue that consists of multiple sub-queues, each of which is assigned a different priority level. Processes are placed in the appropriate sub-queue based on their priority level, and the scheduler executes the processes in each sub-queue according to the scheduling algorithm that is used for that sub-queue.

34. What are the various Artificial Intelligence (AI) development platforms?

There are several platforms that can be used for developing artificial intelligence (AI) applications. Some of the most popular AI development platforms include:

  1. TensorFlow: TensorFlow is an open-source platform developed by Google for building and training machine learning models. It is widely used in the industry and has a large community of developers and users.
  2. Keras: Keras is a high-level neural network API that is built on top of TensorFlow. It is designed to be easy to use and allows developers to build and train machine learning models quickly and easily.
  3. Scikit-learn: Scikit-learn is a popular open-source library for machine learning in Python. It provides a range of tools and algorithms for tasks such as classification, regression, clustering, and dimensionality reduction.
  4. PyTorch: PyTorch is an open-source machine-learning library developed by Facebook. It is designed to be flexible and easy to use, and it is often used for research and development in the field of AI.
  5. Microsoft Azure Machine Learning: Microsoft Azure Machine Learning is a cloud-based platform for developing and deploying machine learning models. It provides a range of tools and services for building, training, and deploying machine learning models at scale.

These are just a few examples of the many AI development platforms that are available. The best platform for a particular project will depend on the specific requirements and goals of the project.

35. What port does HTTP use?

HTTP (Hypertext Transfer Protocol) uses port 80 by default for communication between web servers and clients. However, HTTPS (HTTP Secure), which uses SSL/TLS encryption to secure the communication, typically uses port 443 by default.

36. What data structure underlies a Python list?

The underlying data structure of a Python list is an array. Specifically, it is a dynamic array that can resize itself as needed to accommodate new elements. The elements of a list can be of any data type, including other lists, and they can be added, removed, and modified using various built-in methods and operations. The array data structure allows for fast indexing and efficient memory usage, making lists a versatile and powerful tool in Python programming.

37. Given two nodes in an arbitrary tree, write a function to find the most-specific-common-ancestor.

Below example Python function to find the most specific common ancestor of two nodes in an arbitrary tree:

def find_lca(root, node1, node2):
    if root is None:
        return None

    if root == node1 or root == node2:
        return root

    left = find_lca(root.left, node1, node2)
    right = find_lca(root.right, node1, node2)

    if left and right:
        return root

    return left or right

This function takes three parameters: root is the root node of the tree, and node1 and node2 are the two nodes for which we want to find the most specific common ancestor. The function recursively traverses the tree from the root node and checks whether the root node is either node1 or node2. If it is, then the function returns the root node. Otherwise, the function recursively searches the left and right subtrees for node1 and node2. 

If both node1 and node2 are found in the left and right subtrees, then the current root node is the most specific common ancestor. Otherwise, the function returns the node found in either the left or right subtree, whichever is not None. If neither node is found in the tree, the function returns None.

38. Given a list of n integers, write a function to determine if any two sum to k [2]?

Below example Python function to determine if any two integers in a list sum to a given value k:

def has_sum_to_k(nums, k):
    seen = set()

    for num in nums:
        if k - num in seen:
            return True
        seen.add(num)

    return False

This function takes two parameters: nums is the list of integers, and k is the target sum. The function uses a set called seen to keep track of the integers that have been seen so far in the list. 

The function iterates over each integer in the list and checks whether k - num is already in the set. If it is, then we have found two integers that sum to k, and the function returns True. Otherwise, the current integer num is added to the set, and the function continues iterating over the list. 

If no two integers are found that sum to k, then the function returns False after iterating over the entire list. 

This algorithm has a time complexity of O(n), because we iterate over the list of n integers exactly once, and the set operations take constant time on average.

39. Given k guards in a museum with n rooms that are connected in a certain way (was drawn on a whiteboard when I was asked this) write a function to determine which of the k guards is closest to each of the n rooms?

Below example Python function that finds the closest guard to each room in a museum

from collections import deque

def find_closest_guards(n, guards, connections):
    # Initialize the result dictionary
    result = {i: None for i in range(n)}

    # Build a graph from the connections list
    graph = {i: [] for i in range(n)}
    for a, b in connections:
        graph[a].append(b)
        graph[b].append(a)

    # For each guard, perform a BFS from its location to all reachable rooms
    for guard in guards:
        visited = set()
        queue = deque([(guard, 0)])

        while queue:
            room, dist = queue.popleft()

            if room in visited:
                continue

            visited.add(room)

            # Update the result for the current room if the guard is closer
            if result[room] is None or dist < result[room][1]:
                result[room] = (guard, dist)

            # Enqueue all reachable rooms that haven't been visited yet
            for neighbor in graph[room]:
                if neighbor not in visited:
                    queue.append((neighbor, dist + 1))

    return result

This function takes three parameters: n is the number of rooms in the museum, guards is a list of k integers representing the room numbers where the guards are located, and connections is a list of tuples representing the connections between rooms in the museum.

The function builds a graph from the connections list, where each room is a node in the graph, and edges represent connections between rooms. Then, for each guard, the function performs a breadth-first search (BFS) from the guard's location to all reachable rooms, keeping track of the distance from the guard to each visited room.

As the BFS progresses, the function updates the result dictionary with the closest guard to each room that has been visited so far. Finally, the function returns the result dictionary, where the value for each room is a tuple representing the closest guard and the distance from that guard to the room.

This algorithm has a time complexity of O(kn + m), where m is the number of connections between rooms. This is because we perform a BFS for each of the k guards, visiting up to all n rooms in the worst case, and the graph construction takes O(m) time.

40. Given an integer, write a function to print it out in words (e.g. given 342, print "three-hundred forty-two"?

Below example Python function to print out an integer in words:

def int_to_words(num):
    # Define the word lists for digits, tens, and multiples of 100
    digits = ['', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
    tens = ['', '', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety']
    multiples_of_100 = ['', 'hundred', 'thousand', 'million', 'billion', 'trillion']

    # Define a helper function to convert a three-digit number to words
    def convert_to_words(num):
        words = []
        if num >= 100:
            words.append(digits[num // 100])
            words.append(multiples_of_100[1])
            num %= 100
        if num >= 10 and num <= 19:
            words.append(digits[num])
        else:
            words.append(tens[num // 10])
            words.append(digits[num % 10])
        return ' '.join(filter(None, words))

    # Handle the case where num is 0
    if num == 0:
        return 'zero'

    # Convert num to a list of three-digit chunks
    chunks = []
    while num > 0:
        chunks.append(num % 1000)
        num //= 1000

    # Convert each chunk to words and concatenate them with the appropriate multiple of 1000
    chunk_words = []
    for i in range(len(chunks)):
        chunk_words.append(convert_to_words(chunks[i]))
        if chunks[i] != 0:
            chunk_words.append(multiples_of_100[i + 1])
    chunk_words.reverse()

    # Join the chunk words into a single string
    return ' '.join(chunk_words)

This function takes one parameter num, which is the integer to be printed out in words. The function defines three lists: digits for the words corresponding to each digit, tens for the words corresponding to each multiple of 10, and multiples_of_100 for the words corresponding to each multiple of 1000.

The function also defines a helper function convert_to_words that takes a three-digit number and returns its corresponding word representation. This helper function works by extracting the hundreds digit, the tens digit, and the ones digit, and converting each to its corresponding word using the digits and tens lists.

The main function then handles the case where num is 0, and converts num to a list of three-digit chunks using integer division and modulus. The function then converts each chunk to its word representation using the convert_to_words helper function and concatenates them with the appropriate multiple of 1000 using the multiples_of_100 list. The resulting word string is returned.

This algorithm has a time complexity of O(log10(num)), because we perform integer division and modulus on num repeatedly to extract its digits, and the number of digits in num is logarithmic in its value.

41. Given an amount charged and cash tendered, write a function to make change using the fewest number of bills/coins possible?

Below example Python function to make change using the fewest number of bills/coins possible:

def make_change(amount_charged, cash_tendered):
    # Define the available denominations of bills/coins
    denominations = [100, 50, 20, 10, 5, 1, 0.25, 0.1, 0.05, 0.01]

    # Calculate the change owed
    change = cash_tendered - amount_charged

    # Initialize a dictionary to store the count of each denomination of bill/coin
    change_dict = {}

    # Loop through each denomination of bill/coin
    for d in denominations:
        # Calculate the number of bills/coins of this denomination needed to make change
        count = int(change / d)
        if count > 0:
            # Add the count to the dictionary if it is greater than zero
            change_dict[d] = count
            # Update the amount of change owed
            change -= count * d

    # Return the dictionary of counts
    return change_dict

This function takes two parameters amount_charged and cash_tendered, which are the amount charged and the cash tendered, respectively. The function defines a list of denominations containing the available denominations of bills/coins. The function calculates the change owed by subtracting the amount_charged from the cash_tendered.

The function then initializes an empty dictionary change_dict to store the count of each denomination of bill/coin needed to make change. The function loops through each denomination of bill/coin in denominations and calculates the number of bills/coins of that denomination needed to make change using integer division. If the count is greater than zero, the count is added to the change_dict dictionary, and the amount of change owed is updated by subtracting the value of the bills/coins.

Finally, the function returns the change_dict dictionary containing the count of each denomination of bill/coin needed to make change.

42. What is the difference between an Interface and an Abstract Class in Java?

In Java, both interfaces and abstract classes are used to define abstract behaviors and properties that are implemented by concrete classes. However, there are several differences between them. Here is a table comparing some of the key differences between interfaces and abstract classes:

Categories Interface Abstract Class
Purpose Defines a contract for a set of behaviors Defines a common set of properties and behaviors
Inheritance Can extend multiple interfaces Can extend only one abstract class
Implementation Can be implemented by any class Must be extended by a subclass to be instantiated
Method implementation Cannot include method implementation Can include method implementation
Method access Methods are public by default Can have methods with different access levels
Default methods Can have default methods since Java 8 Can have no implementation for some or all of its methods
Variables Cannot have instance variables Can have instance variables
Constructors Cannot have constructors Can have constructors
Final variables Can have final variables Can have final variables
Usage Often used to define APIs and implement polymorphism Often used to share implementation among related classes

Interfaces are often used to define APIs and provide a contract for a set of behaviors that implementing classes must follow. They are also useful for implementing polymorphism, allowing multiple classes to be treated as a single type.

Abstract classes, on the other hand, are often used to define a common set of properties and behaviors that are shared by a group of related classes. They can include method implementation, which makes them more versatile than interfaces, but they can only be extended by one subclass.

Ultimately, the choice between using an interface or an abstract class depends on the specific needs of the project and the design goals of the developer.

43. If in a Python class, you inherit from multiple parent classes that both have an instance method of the same name, which implementation is picked by default for the child class?

When a Python class inherits from multiple parent classes that both have an instance method of the same name, the implementation that is picked by default for the child class depends on the method resolution order (MRO) of the class.

The MRO defines the order in which Python searches for methods to call in a class hierarchy. It is determined using a depth-first, left-to-right search algorithm. When there are multiple parent classes with the same method name, Python will search for the method in the first parent class listed in the child class's MRO, and use that implementation if it exists. If the method is not found in the first parent class, Python will continue searching through the other parent classes in the MRO until it finds an implementation or determines that the method does not exist in any of the parent classes.

The MRO of a class can be accessed using the mro() method. For example:

class A:
    def my_method(self):
        print("A's implementation")

class B:
    def my_method(self):
        print("B's implementation")

class C(A, B):
    pass

c = C()
c.my_method()  # Output: A's implementation

print(C.mro())  # Output: [<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>]

In this example, we define two parent classes A and B, both with an instance method my_method() that prints a string. We then define a child class C that inherits from both A and B in that order. When we create an instance of C and call my_method(), Python searches for the method in the first parent class in the MRO, which is A. Therefore, the output is "A's implementation". We can also print the MRO of C using C.mro() to confirm that the search order is [<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>].

44. Implement a "min-stack" (a data structure that behaves just like a stack in terms of push and pop but also supports a function min that returns (but does not pop) the minimum number currently on the stack)?

Here is an implementation of a "min-stack" in Python:

class MinStack:
    def __init__(self):
        self.stack = []
        self.min_stack = []

    def push(self, value):
        self.stack.append(value)
        if not self.min_stack or value <= self.min_stack[-1]:
            self.min_stack.append(value)

    def pop(self):
        if not self.stack:
            return None
        value = self.stack.pop()
        if value == self.min_stack[-1]:
            self.min_stack.pop()
        return value

    def min(self):
        if not self.min_stack:
            return None
        return self.min_stack[-1]

The MinStack class has two internal stacks: stack and min_stack. The stack stack behaves just like a normal stack and is used to store values pushed onto the stack. The min_stack stack is used to store the minimum values seen so far.

When a value is pushed onto the stack using the push method, it is added to the stack stack. If the min_stack stack is empty or the value is less than or equal to the current minimum value, the value is also added to the min_stack stack.

When a value is popped off the stack using the pop method, it is removed from the stack stack. If the popped value is the same as the current minimum value (i.e., the value at the top of the min_stack stack), it is also removed from the min_stack stack.

Finally, the min method returns the current minimum value on the stack (i.e., the value at the top of the min_stack stack). If the min_stack stack is empty, the method returns None.

With this implementation, we can create a MinStack object and use it just like a regular stack, but we also have access to the minimum value on the stack using the min method. For example:

stack = MinStack()
stack.push(3)
stack.push(1)
stack.push(4)
stack.push(2)
print(stack.min())  # Output: 1
stack.pop()
stack.pop()
print(stack.min())  # Output: 3

Useful Resources

NTT Data Interview Preparation

1. Interview Preparation Tips

  1. Familiarize yourself with the technologies and programming languages used at NTT Data: Research the technologies and programming languages that are commonly used at NTT Data and make sure you have a good understanding of them. This will likely include languages such as Java, C++, and Python, as well as technologies such as databases, operating systems, and networking.
  2. Review common algorithms and data structures: Brush up on your knowledge of common algorithms and data structures, such as sorting algorithms, search algorithms, and data structures like arrays, linked lists, and trees. These concepts are frequently tested in technical interviews.
  3. Practice coding: Make sure you have a strong foundation in coding by practicing on online platforms like Interviewbit, HackerRank, or LeetCode. This will help you become more comfortable with coding under time pressure and improve your problem-solving skills.
  4. Review your work experience and projects: Think about the projects you have worked on in the past and be prepared to discuss them in detail. Make sure you can clearly explain your responsibilities, the technologies you used, and the results you achieved.
  5. Understand the company's business and culture: Research the company's business and culture to get a better understanding of its values and goals. This will help you tailor your answers to fit with the company's expectations and show that you are a good fit for the role.

Frequently Asked Questions

1. How can I get placed in NTT DATA?

To get placed in NTT DATA, you can follow these steps:

  1. Check the eligibility criteria for the job role you are interested in on the NTT DATA website.
  2. Apply for the job by submitting your resume and other necessary documents.
  3. Prepare for the recruitment process, which may include a written test, technical interview, and HR interview.
  4. During the recruitment process, showcase your skills and experience relevant to the job role.
  5. If you successfully pass the recruitment process, you will receive an offer letter from NTT DATA.

2. What is the fresher salary in NTT DATA?

It's important to note that the salary for freshers at NTT Data can vary based on a number of factors, including your level of education, your skills and experience, the location of the role, and the specific role you are applying for. 

In general, however, the average salary for freshers at NTT Data in India is around ₹2.4 lakhs per year for those with less than 1 year of experience up to 4 years of experience. This salary range may be higher or lower depending on the specific role and location. It's always a good idea to do your own research and have a realistic understanding of salary expectations before applying for a job.

3. Does NTT DATA provide a joining bonus?

NTT Data does not offer a joining bonus to freshers. This benefit is only applicable to experienced individuals who possess niche skills and can join either immediately or within 15-30 days.

It's worth noting that policies on joining bonuses can vary from company to company, and it's always a good idea to clarify this point during the job offer process. 

While it's not uncommon for companies to offer joining bonuses, it's not always the case. It's always a good idea to ask about any potential bonuses or other perks during the job offer process and to negotiate for the best possible package. 

If a joining bonus is important to you, it's a good idea to bring this up during the negotiation process. Keep in mind that there are many other factors to consider when evaluating a job offer, including salary, benefits, and the overall opportunity for growth and development.

4. Is the NTT Data interview hard?

The NTT Data interview process may be challenging for some candidates, as it may involve a written test, group discussion, and technical interview. In the technical interview, candidates may be asked a variety of questions related to their technical skills and knowledge, and it's important to be prepared to answer these questions effectively.

If we use a scale of 1 to 10, where 1 represents "easy" and 10 represents "difficult", the rating would be 4. 

To prepare for the NTT Data interview, it's a good idea to familiarize yourself with the technologies and programming languages used at the company, review common algorithms and data structures, practice coding, and review your work experience and projects. Additionally, it's a good idea to understand the company's business and culture and to be prepared to discuss your fit with the role and the company. Finally, it's always a good idea to be well-rested and to arrive on time to the interview, as these factors can impact your performance.

5. Why do you want to work for NTT DATA?

NTT Data is a global IT services company that has a strong reputation for delivering high-quality services to its clients. The company has a diverse range of clients in industries such as financial services, manufacturing, and healthcare, and has a strong focus on innovation and sustainability. 

Working for a company like NTT Data could provide opportunities for professional growth and development, as well as the opportunity to work on challenging and meaningful projects that have a positive impact on clients and society. Additionally, NTT Data values diversity and inclusion, which aligns with my programming to treat all individuals with respect and empathy.

Sample Answer: 

I want to work for NTT DATA because it is a global company with a strong reputation for delivering innovative solutions to its clients. I am excited about the opportunity to work on challenging projects with talented colleagues and to continue growing my skills in a dynamic and supportive work environment.

6. Does NTT Data pay well?

The average salary for a software engineer at NTT Data is around ₹6.0 lakhs per year, which is higher than the average salary for a software engineer in India, which is around ₹5.4 lakhs per year. 

It's worth noting that salary can vary based on a number of factors, including your level of education, your skills and experience, the location of the role, and the specific role you are applying for. It's always a good idea to do your own research and have a realistic understanding of salary expectations before applying for a job.

7. How long is the NTT Data Interview Process?

Our industry and work environment operate at a fast pace, and our recruitment process reflects this. We prioritize prompt communication with every applicant to confirm the receipt of their application. Depending on the outcome of the application, candidates can expect to receive an email or phone call from one of our Talent Acquisition consultants within 48 hours.

It is common for the interview process to extend over several weeks. It is recommended that applicants inquire about the company's recruitment process and timeline upon applying for a job to gain insight into what to anticipate. Meanwhile, it is wise to maintain organization and keep track of all interview process requirements and deadlines.

Excel at your interview with Masterclasses Know More
Certificate included
What will you Learn?
Free Mock Assessment
Fill up the details for personalised experience.
Phone Number *
OTP will be sent to this number for verification
+91 *
+91
Change Number
Graduation Year *
Graduation Year *
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
*Enter the expected year of graduation if you're student
Current Employer
Company Name
College you graduated from
College/University Name
Job Title
Job Title
Engineering Leadership
Software Development Engineer (Backend)
Software Development Engineer (Frontend)
Software Development Engineer (Full Stack)
Data Scientist
Android Engineer
iOS Engineer
Devops Engineer
Support Engineer
Research Engineer
Engineering Intern
QA Engineer
Co-founder
SDET
Product Manager
Product Designer
Backend Architect
Program Manager
Release Engineer
Security Leadership
Database Administrator
Data Analyst
Data Engineer
Non Coder
Other
Please verify your phone number
Edit
Resend OTP
By clicking on Start Test, I agree to be contacted by Scaler in the future.
Already have an account? Log in
Free Mock Assessment
Instructions from Interviewbit
Start Test