Adani Digital Labs · Software Engineer
Updated · 2026-10-02

Adani Digital Labs Software Engineer
Interview Guide

THE 60-SECOND BRIEF

Adani Digital Labs builds software for Adani's digital businesses. The role candidates describe covers building, testing and maintaining applications, on backend systems and on user interfaces alike. The responsibilities they list are gathering requirements with other teams, reviewing peers' code, working across the full lifecycle from design to deployment, and fixing defects and performance problems. The listed requirements are C#, Java or Python, web frameworks and databases, RESTful APIs, cloud services and Agile ways of working, with DevOps practice and Docker as extras. The reported topic tags add C++, sorting algorithms (merge sort in particular), object-oriented programming and problem solving.

This guide is for software engineers preparing for the Adani Digital Labs loop, which candidates report as aimed at roughly 2-5 years of experience. It covers each of the four reported rounds and gives question-specific approaches and follow-ups for the five technical and domain questions (OOP, sorting, .NET, SQL vs NoSQL, code quality), the three scenario questions (latency, feature design, production debugging), the three behavioral questions and the three coding questions. It ends with a seven-day plan, common mistakes and an FAQ.

Candidates report four rounds over roughly 3-5 weeks: Initial Screening, Technical Assessments, Behavioral Questions and Coding Assessments.

C++Algorithms - SortingMerge Sort

28 min read

Browse Software Engineer questions

See the practice prompts

15Practice promptsAcross five skill areas

The reported questions are fundamentals more than puzzles. On the technical side they ask you to explain OOP principles, implement and justify a sorting algorithm, compare SQL with NoSQL stores, describe your .NET experience and say how you keep code maintainable. The coding questions are reversing a string and finding two numbers that sum to a target, followed by a question on the complexity of your solution and how to improve it. Because these problems are well known, a working answer is the minimum. What makes an answer complete is stating the edge cases, the complexity and the alternatives without being prompted.

Three reported questions are open scenarios rather than algorithm problems: a slow web application, a new feature for an existing application, and a serious production bug. Each one needs a repeatable sequence: measure, then narrow down, then fix, then verify. The responsibilities candidates list for the role (troubleshooting performance, code reviews, design-to-deployment work) match these scenarios closely. Prepare each one as a structured walkthrough that uses real tools from your own experience: profilers, query plans, feature flags, logs and traces.

The language picture is mixed. The listed requirements name C#, Java or Python, one reported question asks specifically about .NET, and the reported topic tags include C++ and merge sort. Pick one language for live coding and know its string mutability, sort library and hash map behaviour well. Be ready to explain OOP concepts such as virtual dispatch and interfaces in both C++ and C# or Java terms. If you have little .NET experience, prepare an honest answer that maps your own stack onto the same layers.

The behavioral questions candidates report cover a hard project challenge, prioritising under tight deadlines, and teamwork and conflict. Prepare three or four stories in the first person, each built around a decision you made, with one result you can measure. A story about a code-review disagreement or a performance fix can serve both these questions and the scenario questions.

01

Initial Screening

reported

Candidates report the first stage as an initial screening of their qualifications. Treat it as a check of your background against the role's listed requirements. Have a short walkthrough of your experience ready, and connect each recent project to the languages, APIs and ways of working the role lists. Use the stage to confirm the rest of the loop with the recruiter: the language allowed for coding, and whether the technical and coding rounds are live or on a platform.

What to demonstrate

  • Whether your experience matches the qualifications listed for the role
  • How clearly you summarise your past projects and your own part in them

How to prepare

  • Write a two-minute walkthrough of your last two roles that names your work in C#, Java or Python, RESTful APIs, databases and any cloud services, Docker or DevOps.
  • Prepare one concrete Agile example: how your team planned sprints, reviewed code and shipped.
  • Write down the questions to ask the recruiter about the format of the Technical Assessments and Coding Assessments rounds, including which languages are accepted.
Adani Digital Labs Software Engineer candidate reports ↗
02

Technical Assessments

reported

Candidates describe this stage as in-depth technical assessments. The reported technical and domain questions are the type of material such a stage covers: OOP principles, choosing and implementing a sort, .NET experience, SQL versus NoSQL, and code quality. The reported topic tags add C++ and merge sort. For each concept, prepare a definition, a short code example and a trade-off. A definition alone makes a thin answer.

What to demonstrate

  • Depth of knowledge in the languages, frameworks and tools on your CV
  • Ability to explain a technical decision and its trade-offs

How to prepare

  • Write a small C++ or C# class hierarchy that shows encapsulation, an interface or abstract base, and a virtual call through a base reference, and explain each line aloud.
  • Implement merge sort from memory and make a table of time, space and stability for merge sort, quicksort, heap sort and insertion sort.
  • Build a SQL vs NoSQL comparison around one example (orders with line items), modelled once as tables and once as documents.
  • Outline your .NET (or equivalent stack) answer in layers: language, web framework, data access, testing and tooling.
Adani Digital Labs Software Engineer candidate reports ↗
03

Behavioral Questions

reported

Candidates report a round of behavioral questions on soft skills and cultural fit. The reported prompts ask about a significant project challenge, prioritising under tight deadlines, and teamwork and conflict handling. Prepare stories that put your own decision at the centre and end with a result, and keep them in the first person.

What to demonstrate

  • Teamwork and how you handle disagreement
  • How you prioritise and communicate under deadline pressure

How to prepare

  • Write three STAR stories (a technical challenge, a deadline you had to triage, a disagreement with a teammate), each with a measurable result.
  • For each story, write one sentence on what you would do differently now.
  • Prepare one code-review disagreement story, since peer code review is among the listed responsibilities.
Adani Digital Labs Software Engineer candidate reports ↗
04

Coding Assessments

reported

Candidates report a coding assessment stage that tests coding skill and algorithms. The reported coding questions (reversing a string, two numbers summing to a target, and the complexity of your solution and how to improve it) are the type of problem to practise for it. On these well-known problems, get to correct code quickly, then explain the alternatives, the edge cases and the complexity before you are asked.

What to demonstrate

  • Correct, working code in your chosen language
  • Complexity analysis and the ability to improve a first solution

How to prepare

  • Solve two-sum three ways (all pairs, hash map, sort plus two pointers) and say the time and space of each aloud.
  • Reverse a string in place in C++ and with a char array or StringBuilder in Java or C#, and handle empty, one-character and Unicode inputs.
  • Run your solutions against edge-case tests you write yourself: empty input, duplicates, no valid answer, negative numbers.
Adani Digital Labs Software Engineer candidate reports ↗

PracHub editorial advice for the preparation topics above.

01

Listing the four OOP principles as textbook definitions without code

For each principle, have a code example in C++ and in C# or Java: a private field with a validating setter, an interface with two implementations, a virtual call through a base reference. Add one trade-off, such as composition over inheritance or object slicing in C++.

02

Choosing a sort without its properties, such as calling quicksort O(n log n) with no worst case, or forgetting that merge sort needs extra memory

Memorise a four-row table (merge, quick, heap, insertion) with best, average and worst time, extra space and stability, and know what std::sort and std::stable_sort actually do. Implement merge sort from memory and check that equal keys keep their order.

03

A two-sum solution that pairs an element with itself or returns indices from a sorted copy

In the hash-map version, check for the complement before inserting the current number, and test [3,3] with target 6 and [3,2,4] with target 6. If you sort for two pointers, sort (value, index) pairs or say plainly that you are returning values.

04

Answering the latency or production-bug scenario with a fix ("add a cache", "restart the server") before any measurement

Go through the steps in order: scope and percentile, a tier-by-tier breakdown with traces, the database plan, then a fix chosen by cause, verified against the same metric. For a production incident, mitigate first and find the root cause second.

05

Claiming NoSQL has no transactions or no schema, or answering SQL vs NoSQL with no example

Name the NoSQL families with one store each, note that some document stores support multi-document transactions, and end with one domain modelled both ways to show when each fits.

Choose a category, try a prompt, then open its approach, worked solution or follow-up when you need it.

11 technical prompts0 include a worked solution

Can you implement a sorting algorithm? Which one would you choose and why?

medium
Technical / Domain Questions

Can you implement a sorting algorithm? Which one would you choose and why?

Approach
  1. Choose merge sort and justify it: O(n log n) in every case, stable, and easy to write correctly. The cost is O(n) auxiliary memory for arrays. On a linked list it needs only the recursion stack, or O(1) when written bottom-up.
  2. Implementation: compute mid = lo + (hi - lo) / 2, sort both halves recursively, then merge into a buffer with two indices. Take from the left half when elements are equal (<=) to keep the sort stable, then copy over whatever remains of the half that is not exhausted.
  3. Compare alternatives by their deciding property. Quicksort is in place and fast in practice, but O(n^2) on bad pivots (sorted input with a first-element pivot) and not stable. Heap sort is O(n log n) worst case with O(1) extra space, but unstable and cache-unfriendly. Insertion sort is O(n^2) but the best choice for small or nearly sorted input.
  4. Know the library behaviour. C++ std::sort is introsort (quicksort that falls back to heapsort, with insertion sort for small ranges) and is not stable. std::stable_sort is merge-based. Java sorts primitives with dual-pivot quicksort and objects with TimSort. Python uses TimSort.
  5. Test on empty input, a single element, all-equal values, already sorted and reverse-sorted arrays, and records with equal keys to show stability.
Follow-up
  • How would you sort a file too large for memory?
  • Can you write merge sort bottom-up without recursion?
  • How would you count inversions in an array using the merge step?

Write a function to reverse a string in your preferred programming language.

medium
Coding / Algorithms

Write a function to reverse a string in your preferred programming language.

Approach
  1. Clarify first: a new string or in place, ASCII or Unicode, and how to handle null or empty input.
  2. Use two pointers: swap s[i] and s[j] while i < j, moving both inward. That is O(n) time and O(1) extra space on a mutable buffer. C++ std::string is mutable, so swap in place or call std::reverse. Java and C# strings are immutable, so use a char array or StringBuilder (O(n) extra). In Python, s[::-1].
  3. Edge cases: empty string, one character, even and odd lengths. With Unicode, reversing UTF-16 code units splits surrogate pairs such as emoji, and reversing raw bytes breaks multibyte UTF-8 characters. Combining marks need grapheme-aware reversal.
  4. Point out that building the result by repeated concatenation is O(n^2) in languages with immutable strings.
Follow-up
  • Reverse the order of words in a sentence in place.
  • Check whether a string is a palindrome, ignoring non-alphanumeric characters.
  • Write it recursively and say what happens on a very long string.

Given a list of integers, write a function to find the two numbers that add up to a specific target.

medium
Coding / Algorithms

Given a list of integers, write a function to find the two numbers that add up to a specific target.

Approach
  1. Clarify: return indices or values, whether exactly one answer is guaranteed, whether one element can be used twice, and whether the input can be sorted or contain duplicates and negatives.
  2. Brute force checks every pair: O(n^2) time, O(1) space. The better version is one hash-map pass. For each i, compute complement = target - nums[i]. If the complement is in the map, return [map[complement], i]; otherwise store nums[i] -> i. Checking before inserting stops an element pairing with itself and handles [3,3] with target 6. This is O(n) time and O(n) space.
  3. If the input is sorted, or you only need values, two pointers moving in from both ends cost O(n log n) for the sort plus an O(n) scan, with O(1) extra space. Sorting loses the original indices unless you sort (value, index) pairs.
  4. Edge cases: no valid pair (return empty or throw, and say which), fewer than two elements, and integer overflow when adding large values in C++ or Java.
Follow-up
  • Return all unique pairs instead of one.
  • Extend it to three numbers that sum to the target.
  • What if the numbers arrive as a stream you cannot hold in memory?

What is the time complexity of your solution, and how can you optimize it?

medium
Coding / Algorithms

What is the time complexity of your solution, and how can you optimize it?

Approach
  1. Give time and space for each solution, with n defined. Two-sum: all pairs O(n^2)/O(1), hash map O(n) average/O(n), sort plus two pointers O(n log n)/O(1). String reversal in place: O(n)/O(1). Merge sort: O(n log n)/O(n).
  2. Explain where each term comes from (nested loops; one pass with O(1) average hash lookups; the sort dominating the scan). Note that hash lookups degrade towards O(n) under heavy collisions, and that recursion uses stack space.
  3. To optimise, name the bottleneck and what you trade for it: memory for time (a hash map), structure in the input (sorted data allows two pointers or binary search), less repeated work (precompute or cache), and removing hidden costs such as concatenation in a loop or slice copies in recursion.
  4. Say when not to optimise: for small n or one-off code, a clearer O(n^2) version can be the better choice. State that as a deliberate decision.
Follow-up
  • What is the space used by the recursion stack in your solution?
  • Is there a lower bound that stops you doing better?
  • How do the average and worst cases of your hash map differ?

Each day targets one of the four reported rounds and practises specific reported questions. Every day ends with a written or spoken output you can review the day before the loop.

Small steps. Visible outcomes.0 / 7 completed
ONE WEEK · YOUR PACE

Prepare, practise & reflect

One practical outcome each day. Spend longer where you need it.

0 / 7 done
01Screening pitch and stack inventory
  • Write a two-minute walkthrough of your last two roles that names your work in C#, Java or Python, REST APIs, databases, cloud services and Agile delivery.
  • Outline your .NET answer in layers (language, web framework, data access, testing and tooling), or map your own stack onto those layers if your .NET experience is thin.
  • Write down the questions about round format and allowed languages that you will ask the recruiter.

Deliverable: A timed walkthrough script, a layered .NET or stack answer, and a list of questions for the recruiter.

Practice prompt ↗
02OOP and code quality
  • Write a small C++ class hierarchy with an abstract base, a virtual destructor and two implementations, then the same in C# or Java with an interface.
  • Explain the four principles aloud using that code, adding one SOLID violation and its fix.
  • Write your code-quality answer: tools, review standard, test strategy and one example with an outcome.

Deliverable: Two compiled OOP examples, a recorded explanation of the four principles, and a one-page code-quality answer.

Practice prompt ↗Practice prompt ↗
03Sorting and merge sort
  • Implement merge sort in C++ from memory and test it on empty, single, all-equal, sorted and reverse-sorted input and on equal-key records.
  • Implement quicksort, show its worst case on sorted input with a first-element pivot, then fix the pivot choice.
  • Make the comparison table (time, space, stability) for merge, quick, heap and insertion sort, and note what the standard library uses.

Deliverable: Tested merge sort and quicksort implementations and a one-page sorting comparison table.

Practice prompt ↗Practice prompt ↗
04Coding assessment drills
  • Solve two-sum three ways and state the time and space of each aloud.
  • Reverse a string in place in C++ and with a char array or StringBuilder in Java or C#, and handle the Unicode case in writing.
  • Write edge-case tests for both problems, then solve a follow-up (reverse the words in a sentence, or 3Sum).

Deliverable: Working two-sum and string-reversal solutions with tests, a written complexity summary, and one solved follow-up.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
05Databases: SQL vs NoSQL and indexing
  • Model orders with line items once as relational tables and once as a document, and list what each makes easy and hard.
  • Write a comparison covering data model, transactions, consistency, scaling and query flexibility, with one store named per NoSQL family.
  • Work through the index practice question and explain with EXPLAIN output why a filter cannot use a composite index.

Deliverable: Two schemas for the same domain, a SQL vs NoSQL comparison sheet, and a written index-usage explanation.

Practice prompt ↗Practice prompt ↗
06Scenario walkthroughs
  • Answer the slow web application scenario aloud, tier by tier, naming the tool you would use at each tier.
  • Answer the new-feature scenario: acceptance criteria, API contract, a safe migration, feature flag and rollout.
  • Answer the production-debugging scenario using a real incident from your work, from mitigation to postmortem.

Deliverable: Three recorded scenario answers, each with a written checklist of the steps.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
07Behavioral stories and a full mock
  • Write STAR stories for the project challenge, deadline prioritisation and team conflict prompts, each with a measurable result and a lesson.
  • Rehearse each story in the first person, cutting any 'we' that hides your own decision.
  • Run a mock combining one technical question, one coding problem and one behavioral story back to back.

Deliverable: Three written STAR stories, recordings of them, and notes from one mixed mock.

Practice prompt ↗Practice prompt ↗Practice prompt ↗

Expand any day for tasks and deliverables. Your progress is saved on this device.

Candidates report a round called Behavioral Questions covering soft skills and fit. The prompts they report cover overcoming a hard project challenge, prioritising under tight deadlines, and teamwork with conflict handling. Prepare first-person stories built on a decision you made, with a measurable result. Have one story about a code review or a performance fix ready, since both appear in the listed responsibilities.

Describe your experience with.NET and any related tools you have used.

medium
Technical / Domain Questions

Describe your experience with.NET and any related tools you have used.

Approach
  1. Organise the answer in layers. Language: C# generics, LINQ, async/await. Web framework: ASP.NET Core for REST APIs, with middleware, dependency injection and configuration. Data access: Entity Framework Core or Dapper, plus migrations. Tooling: Visual Studio or Rider, NuGet, the dotnet CLI, xUnit or NUnit, and a CI pipeline.
  2. Tie each layer to a project: what you built, which part you owned, and one decision with its reason. For example, I moved a blocking HTTP call to async to stop thread-pool starvation under load, or I used Dapper for a read-heavy reporting endpoint where EF Core generated slow SQL.
  3. Be ready to go deeper on anything you name: IEnumerable versus IQueryable (filtered in memory versus translated to SQL), service lifetimes (transient, scoped, singleton) and the bug of capturing a scoped DbContext in a singleton, and why calling .Result or .Wait() on async code can deadlock or starve threads.
  4. If your .NET experience is thin, say so and map Java, Python or C++ work onto the same layers. The requirements candidates describe accept C#, Java or Python, so an honest, well-mapped answer is better than vague claims.
Follow-up
  • How does dependency injection work in ASP.NET Core, and what goes wrong with lifetimes?
  • How did you test the API you built, and what did you mock?
  • How would you find the cause of a slow Entity Framework query?

Describe a time when you faced a significant challenge in a project. How did you overcome it?

medium
Behavioral / Leadership

Describe a time when you faced a significant challenge in a project. How did you overcome it?

Approach
  1. Pick a challenge with a technical core that you personally owned, such as a failing integration, a performance problem or a migration against a deadline, not one the team solved while you watched.
  2. Structure it as STAR: the situation and the stakes in two sentences, the specific obstacle, the options you weighed and why you chose one, what you did (in 'I', not 'we'), and a measurable result.
  3. Close with what you learned and what you now do differently. A story with no change in your own practice sounds rehearsed.
  4. What sinks the answer: a story about an outside blocker (a vendor, a manager) with no decision of your own in it.
Follow-up
  • What would you have done if your first approach had failed?
  • Who else was involved, and how did you keep them informed?
  • How did you measure that it worked?

How do you prioritize tasks when working under tight deadlines?

medium
Behavioral / Leadership

How do you prioritize tasks when working under tight deadlines?

Approach
  1. Name your method, then prove it with a real deadline. List the work, rank it by impact on the goal behind the deadline, find the dependencies that block other tasks, and estimate effort.
  2. Show the trade-offs: what you cut or deferred, how you agreed the scope with the product owner or lead instead of silently working longer, and how you protected quality (tests on the risky path first).
  3. Cover communication: you raised the risk to the deadline early and kept the team updated through standups or sprint reviews.
  4. End with the result: what shipped on time, what was deferred, and when the deferred work was done.
Follow-up
  • Two stakeholders both say their task is the top priority. What do you do?
  • Tell me about a deadline you missed.
  • How do you handle production bugs that interrupt a sprint?

Explain your experience working in a team. How do you handle conflicts?

medium
Behavioral / Leadership

Explain your experience working in a team. How do you handle conflicts?

Approach
  1. Set out your place in the team first: its size, what you owned, and how work flowed (sprint planning, code review). Then move to one specific conflict instead of saying you get along with everyone.
  2. Choose a disagreement about substance, such as a design choice, a code-review dispute or a scope argument, and present both positions fairly, including what was right about the other person's view.
  3. Show how it was resolved through conversation and evidence: a one-to-one talk, a quick prototype or benchmark, agreed criteria, or escalation to the lead when needed. Then say how the working relationship went afterwards.
  4. What sinks the answer: blaming the colleague, or a conflict that resolved itself without anything you did.
Follow-up
  • What if the decision had gone against you?
  • How do you give critical feedback in a code review?
  • How do you work with a teammate who misses commitments?
  • 01

    Describe a time when you faced a significant challenge in a project. How did you overcome it?

  • 02

    How do you prioritize tasks when working under tight deadlines?

  • 03

    Explain your experience working in a team. How do you handle conflicts?

  • 04

    Tell me about a code review where you disagreed with the reviewer or the author. How was it resolved?

  • 05

    Tell me about a performance problem or defect you tracked down and fixed. How did you confirm the fix worked?

PracHub preparation framework ↗
How long is the Adani Digital Labs Software Engineer process, and what are the rounds?

Candidates report four rounds over roughly 3-5 weeks: Initial Screening, Technical Assessments, Behavioral Questions and Coding Assessments. Use the screening call to confirm the format of the later rounds and which languages you may code in.

Adani Digital Labs Software Engineer candidate reports ↗
Which topics come up in the reported questions?

The reported topic tags are C++, sorting algorithms, merge sort, object-oriented programming and problem solving. The reported questions also cover .NET experience, SQL versus NoSQL, code quality, three scenarios (latency, feature design, production debugging) and two classic coding problems: string reversal and two-sum, each followed by a complexity question.

Adani Digital Labs Software Engineer candidate reports ↗
Which language should I use for the coding questions?

The requirements candidates describe list C#, Java or Python, and the topic tags include C++. Use the language you write most fluently, and know its specifics for the reported problems: whether strings are mutable (C++ yes; Java, C# and Python no), how its hash map behaves, and what its standard sort does and whether it is stable.

PracHub Software Engineer practice ↗
I have not worked with .NET. How should I answer the .NET question?

Say so directly, then map your own experience onto the same layers: language features, web framework for REST APIs, data access or ORM, testing and CI. Since the listed requirements accept C#, Java or Python, a clear mapping from Spring or Django work is a real answer. If you have time, learn enough ASP.NET Core to explain dependency injection lifetimes and async/await.

PracHub Software Engineer practice ↗
Do I need to prepare large-scale system design?

The reported questions are scenario discussions about a single application: diagnosing latency, adding a feature to an existing app, and debugging production. Prepare those as structured walkthroughs covering measurement, database query plans, caching with invalidation, REST API contracts, safe schema migrations and feature-flag rollouts. Those skills also carry over if a broader design question comes up.

PracHub Software Engineer practice ↗
The coding questions look easy. What makes an answer complete?

Correct code is the minimum on problems this well known. A complete answer states the alternatives with their complexity (all pairs, hash map, two pointers for two-sum), handles edge cases explicitly (empty input, duplicates, no solution, Unicode for string reversal) and answers the reported follow-up on complexity and optimisation without being prompted.

PracHub Software Engineer practice ↗
Sources & methodology 3 sources ↗

No official company page is cited. Rounds and questions come from candidate reports and PracHub editorial material; each source shows the date it was read.