Bravura Solutions · Software Engineer
Updated · 2026-10-02

Bravura Solutions Software Engineer
Interview Guide

THE 60-SECOND BRIEF

Bravura Solutions builds financial technology platforms and delivers them to clients in many countries. Those platforms handle financial data and transactions, which is why candidates describe the Software Engineer job as careful engineering on software that already exists: maintaining it, extending it, tuning how it caches data, tightening its database queries and implementing business rules. In practice that means reading unfamiliar Java code, working out why a query or a cache is slow, and changing behaviour without breaking what clients rely on. Candidates also describe regular contact with senior engineers and architects on design, and with product managers and business analysts who hand over financial requirements that you turn into technical specifications.

This guide is for candidates interviewing for the Software Engineer role at Bravura Solutions. It covers the five rounds candidates report, from Application Review to Final Decision-Making, and the thirteen questions reported for the loop: Java foundations, SQL, and algorithms and puzzles. It adds a project-discussion and behavioral section, because candidates report that past work is a main subject of conversation, and a seven-day plan that can also point you to PracHub's own practice set. The role lists Core Java, SQL, OOP concepts and standard algorithms as must-haves, so the guide spends most of its depth there.

Candidates report five rounds over roughly four to six weeks: Application Review, Screening Phase, Technical Assessments, Managerial Assessments and Final Decision-Making. The pace is reported to differ between immediate joiners and campus recruitment drives.

JavaCore Java OOPSorting Algorithms

41 min read

Browse Software Engineer questions

See the practice prompts

18Practice promptsAcross five skill areas

The Software Engineer role is described as work inside established financial platforms rather than greenfield building. The listed must-haves are Core Java, SQL and database management, OOP concepts applied to enterprise software, and the ability to implement standard algorithms and data structures. Spring Boot, microservices, SOAP or web services, JUnit and prior financial services or fintech work are listed as nice-to-haves. For preparation, that ordering matters: fundamentals first, framework familiarity second. You can recover from not having used SOAP; it is much harder to recover from not being able to explain how a HashMap resolves collisions.

The thirteen reported questions fall into three groups. The Java group is mostly conceptual: Comparable versus Comparator, how String works and why it is immutable, HashMap internals with collision handling, static versus dynamic memory allocation, and the role of static and interface implementations. The SQL group mixes one writing task (create a table with specific constraints) with three explain-and-differentiate questions on DDL, DML and DCL, join types, and primary, candidate and composite keys. The algorithm group is hands-on: implement common sorting algorithms such as Quick Sort and give their complexity, reverse a string without extra space, print the frequency of every number in an array, and solve logic puzzles such as the Water Jug problem. So the right preparation is two skills at once: explaining a concept with its reason, and producing short, correct code.

Candidates also report evaluation areas that go past those thirteen questions: memory management and finding memory leaks, multithreading, Java 8 features such as method references, the difference between final, finally and finalize, query optimization, normalization and key constraints, PL/SQL where the team uses it, transactions and locking under high concurrency, and a three-table join. Candidates report being asked to write code without an IDE and to talk through their thinking while solving puzzles. Practise by hand and out loud, not only in an editor.

Use the plan at the bottom of the guide in order. Days 2 and 3 cover the Java questions, day 4 the SQL ones, day 5 the algorithms, day 6 transactions, concurrency and debugging, and day 7 a mock round plus the project and motivation stories that the managerial stage is reported to draw on.

01

Application Review

reported

Candidates describe this first stage as a review of the application to judge qualifications and fit, so your CV carries the whole stage. The role lists Core Java, SQL, OOP concepts and standard algorithms as must-haves, and Spring Boot, microservices, SOAP or web services, JUnit and financial services experience as nice-to-haves. Make each of those that you have really used visible together with the project it came from, because candidates also report that any project you list can become a discussion topic in later rounds.

What to demonstrate

  • Whether your qualifications match the listed must-have skills: Core Java, SQL, OOP, data structures and algorithms
  • Fit with the role, as judged from the application
  • The projects on your CV, which candidates report are discussed in depth later

How to prepare

  • Put Core Java and SQL work first and name any nice-to-have items you have genuinely used: Spring Boot, microservices, SOAP, JUnit, finance or fintech.
  • For every project, write three sentences of architecture, one real challenge and your own contribution before anyone asks.
  • Read the company's annual report and note the financial products it describes, so your reason for applying is specific.
  • Know your availability and notice period, since candidates report the pace differs for immediate joiners and campus drives.
Bravura Solutions Software Engineer candidate reports ↗
02

Screening Phase

reported

Reported as an initial screen of basic skills and suitability. Candidates also report that early rounds lean toward breadth, meaning aptitude and core concepts, before later rounds go deep. Expect Java, OOP and SQL fundamentals plus short logic or coding exercises. Practise giving each concept as a definition, the reason behind it and a tiny example, so that breadth does not turn into shallow answers.

What to demonstrate

  • Basic skills and suitability, as the stage is reported
  • Breadth across aptitude and core concepts, which candidates report for early rounds
  • Clear explanation of fundamentals, since communication is reported as part of the evaluation

How to prepare

  • Rehearse Java and OOP fundamentals as definition, reason and small code example; days 2 and 3 of the plan cover the reported Java questions.
  • Review the SQL basics in day 4: command categories, join types and key types, each with a table you can sketch from memory.
  • Solve one logic puzzle and one small array or string task aloud, so the aptitude-style material is not the first time you speak your reasoning.
Bravura Solutions Software Engineer candidate reports ↗
03

Technical Assessments

reported

Candidates describe a series of technical interviews on coding skills and architectural concepts. They also report that code may have to be written without an IDE, that working and efficient code matters, and that puzzles are solved while thinking aloud. This is the stage where the coding questions of this guide (sorting, in-place string reversal, frequency counting, the Water Jug puzzle) and the Java and SQL depth topics are practised. Aim to explain why a choice is right in terms of memory and Big O, not only to produce output.

What to demonstrate

  • Coding skill: code that runs correctly and efficiently
  • Architectural concepts, as the stage is reported
  • The Java and SQL depth that candidates report as the main evaluation areas
  • How clearly you reason through a puzzle or problem

How to prepare

  • Write Quick Sort, an in-place reversal of a character array, a HashMap frequency counter and a Water Jug solver by hand, then trace each on an empty input and on duplicates.
  • Prepare reasons, not just answers: for each solution say its time complexity, its extra memory and the case where it degrades.
  • Prepare a short architecture walk-through of one past project covering components, data flow, and where caching and database queries sit.
  • Practise narrating your thinking on a puzzle you have not seen, including the point where you are stuck.
Bravura Solutions Software Engineer candidate reports ↗
04

Managerial Assessments

reported

Reported as interviews with management on cultural fit and teamwork. Candidates report that past projects are a main subject and that you should be ready to explain why you want to join Bravura Solutions and why you are leaving your current role. The role as described involves working with senior engineers, architects, product managers and business analysts, and handling production issues, so stories about that kind of collaboration are the natural material.

What to demonstrate

  • Cultural fit and teamwork, as the stage is reported
  • Your account of your own role and contribution in past projects
  • Your reasons for wanting this company and for leaving your current role

How to prepare

  • Write three project stories with a clear owner (you), a problem, a decision and an outcome; day 7 of the plan walks through this.
  • Prepare one story about turning a business requirement into a technical specification with a non-engineer, and one about debugging a production issue.
  • Write honest, specific answers to why Bravura Solutions and why leave your current role, using what you learned from the annual report.
Bravura Solutions Software Engineer candidate reports ↗
05

Final Decision-Making

reported

Reported as the final review and decision, made on how the interviews went. Candidates describe no further exercise for this stage, so the useful preparation happens earlier: after every round, record what you were asked and which answers you would improve, then close those gaps before you hear back.

What to demonstrate

  • Overall interview performance across the earlier rounds, as the stage is reported
  • The final decision on the application

How to prepare

  • After each earlier round, write down every question you were asked and mark the answers that were weak; revisit those topics the same day.
  • Keep your availability, notice period and location constraints ready for any follow-up conversation.
  • Prepare two questions about the codebase and systems you would maintain first, so a closing conversation is informed.
Bravura Solutions Software Engineer candidate reports ↗

PracHub editorial advice for the preparation topics above.

01

Describing HashMap or String in one line ("it uses hashing", "it is final") without the mechanism

Give the mechanism and the reason. For HashMap: a bucket array, an index derived from the key's hash, equals and hashCode deciding identity, chaining in each bucket, conversion of long chains to trees in Java 8 and later, and a resize when the load factor is exceeded. For String: the string pool, cached hash codes, thread safety and use as a map key. Rehearse each as mechanism, reason, small code example.

02

Trying to reverse a Java String in place, or claiming O(1) extra space with a StringBuilder

State that a Java String is immutable, so any reversal copies it. Say the truthful version: convert to a char array and swap with two pointers, which is O(n) space in Java but in place on the array, and O(1) extra beyond that. Handle empty, single-character and odd-length inputs, and mention surrogate pairs if asked about Unicode.

03

Writing a sorting algorithm on paper with a broken partition or no complexity discussion

Practise Quick Sort without an IDE until the partition loop is automatic. State average O(n log n), worst case O(n squared) on already sorted input with a poor pivot, in-place with a stack of O(log n), and not stable. Contrast with merge sort (stable, O(n) extra space) and name a pivot strategy such as random or median-of-three.

04

Knowing join names or key definitions but not what happens to rows

Practise on real tables. Show that a LEFT JOIN keeps unmatched left rows with NULLs, that a one-to-many join multiplies rows before aggregation, and that a composite key is a primary key made of several columns whose combination is unique. Write the CREATE TABLE with primary, foreign, unique, NOT NULL and CHECK constraints from memory, since writing one is a reported question.

05

Staying quiet on a puzzle like Water Jug or giving a vague project story

Candidates report that thinking aloud and project depth matter. For the puzzle, say you are modelling states as pairs of jug levels, list the six moves, and search breadth-first; add that a target is reachable only if it fits the larger jug and is a multiple of the gcd. For projects, bring the architecture, one challenge and what you personally did.

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

15 technical prompts0 include a worked solution

How does the `String` class work, and why are strings in Java immutable?

medium
Core Java and Technical Foundations

How does the String class work, and why are strings in Java immutable?

Approach
  1. Describe the class. String is final and wraps a private final array: char[] up to Java 8, and since Java 9 a byte[] plus a coder flag (compact strings, Latin-1 or UTF-16). Every 'modifying' method such as substring, concat, replace or toUpperCase returns a new String and leaves the original unchanged.
  2. Explain the string pool. Literals and compile-time constants are interned, so "ab" == "a" + "b" is true, while new String("ab") creates a separate heap object and == between the two is false. Compare contents with equals(). intern() returns the pooled copy, and since Java 7 the pool lives in the main heap.
  3. Give the reasons for immutability. Pooling is only safe if no holder can change a shared value. The hash code can be cached in a field, which makes String a cheap and safe HashMap key. Values can be shared across threads without locking. A validated value such as a file path, URL or class name cannot be altered after the check.
  4. Name the cost. Concatenating with += in a loop copies the accumulated characters each time, which is O(n^2) work overall, so use StringBuilder (unsynchronized) or StringBuffer (synchronized). This is also why a char[] is preferred for passwords: you can overwrite it, but a String stays in memory until it is garbage-collected.
Follow-up
  • With String s = "a"; what does (s + "b") == "ab" return, and why is it different from the all-literal case?
  • Can reflection change a String's contents, and what would that break?
  • When would you choose StringBuffer over StringBuilder?

What is the difference between static and dynamic memory allocation?

medium
Core Java and Technical Foundations

What is the difference between static and dynamic memory allocation?

Approach
  1. Define both terms. Static allocation has a size and lifetime fixed before the program runs or when it loads: globals, static variables, fixed-size arrays in C. Dynamic allocation happens at runtime with a size that can depend on input: malloc/free in C, new/delete in C++, new in Java. Name stack (automatic) allocation of locals separately, since many people blur it with static.
  2. Map the terms onto Java. Every object and array created with new lives on the heap and is reclaimed by the garbage collector once it becomes unreachable; there is no explicit free. Local primitives and references live in the calling thread's stack frame. Static fields belong to the class, and since Java 8 class metadata sits in Metaspace, which replaced PermGen.
  3. Give the trade-offs. Stack and static allocation is cheap and its lifetime is tied to scope or the program. Heap allocation is flexible but costs allocator and GC time, and in C it can fragment memory or leak if free is missed. The typical failures are StackOverflowError from deep recursion and OutOfMemoryError: Java heap space.
  4. Link this to leaks in a garbage-collected language. A leak happens when a reference stays reachable: a static collection that only grows, listeners that are never removed, ThreadLocal values on pooled threads, or caches without eviction. To diagnose one, capture a heap dump (-XX:+HeapDumpOnOutOfMemoryError or jmap) and follow the dominator tree in a tool such as Eclipse MAT.
Follow-up
  • In Object o = new Object(); inside a method, where does o live and where does the object live?
  • How can a Java program leak memory if the garbage collector frees unreachable objects?
  • How would you find what is holding memory in a service whose heap keeps growing?

Implement common sorting algorithms (e.g., Quick Sort) and explain their time complexity.

medium
Algorithms and Problem Solving

Implement common sorting algorithms (e.g., Quick Sort) and explain their time complexity.

Approach
  1. Write quicksort with a Lomuto partition: pivot = a[hi]; i = lo; for j from lo to hi-1, if a[j] < pivot then swap a[i], a[j] and i++; finally swap a[i], a[hi] and recurse on [lo, i-1] and [i+1, hi]. Quicksort sorts in place and is not stable. Hoare partitioning does fewer swaps.
  2. State the complexity precisely. Quicksort averages O(n log n). The worst case is O(n^2) when the pivot is always the minimum or maximum, which happens on already-sorted input with a first- or last-element pivot, and on all-equal keys with a plain two-way partition. The fixes are a random or median-of-three pivot and a three-way (Dutch national flag) partition for duplicates. Recursing on the smaller side first bounds the stack at O(log n).
  3. Compare the other standard sorts. Merge sort is O(n log n) in every case and stable, but needs O(n) extra space; it suits linked lists and external sorting. Heap sort is O(n log n) worst case with O(1) extra space, but it is not stable and has poor cache locality. Insertion sort is O(n^2) in general but O(n) on nearly sorted input, which is why hybrid sorts use it for small subarrays.
  4. Connect this to Java. Arrays.sort(int[]) uses Dual-Pivot Quicksort, because stability is meaningless for primitives. Arrays.sort(Object[]), List.sort and Collections.sort use TimSort, which is stable, O(n log n) worst case and close to O(n) on input that is already partly sorted.
  5. Mention the lower bound. Any comparison sort needs Ω(n log n) comparisons in the worst case. Counting sort and radix sort avoid that bound for bounded integer keys, at O(n + k) and O(d(n + k)) respectively.
Follow-up
  • Why does Java sort int[] and Object[] with different algorithms?
  • How would you find the k-th smallest element in average O(n) time?
  • How would you sort a file too large to fit in memory?

Reverse a string without using extra space.

medium
Algorithms and Problem Solving

Reverse a string without using extra space.

Approach
  1. Clarify the input first. A Java String is immutable, so a true in-place reversal needs a char[]. toCharArray() already copies, and any method that returns a new String must allocate. State your assumption: either the input is a char[], or O(1) extra space means no buffer beyond the output.
  2. Use two pointers: i = 0, j = n - 1, and while i < j, swap s[i] and s[j], then i++ and j--. That is O(n) time with n/2 swaps and O(1) extra space. Use a temporary variable for the swap. The XOR swap trick saves nothing and zeroes the value if both indexes ever point at the same element.
  3. Cover the edge cases: null, an empty array, length 1, and odd lengths, where the middle character stays in place. Note that a recursive reversal is not O(1) space, because it uses O(n) stack.
  4. Raise Unicode. Reversing char by char splits surrogate pairs such as emoji. StringBuilder.reverse() treats surrogate pairs as single units, but combining marks still end up detached. For user-facing text, reverse by code point or by grapheme cluster instead.
Follow-up
  • Reverse the order of words in a sentence in place.
  • Check whether a string is a palindrome, ignoring case and non-alphanumeric characters, with O(1) extra space.
  • What does your char-swapping version do to a string that contains an emoji?

Given an array, write a program to print the frequency of every number.

medium
Algorithms and Problem Solving

Given an array, write a program to print the frequency of every number.

Approach
  1. Start from the brute force: for each element, count matches with an inner loop and skip values already printed. That is O(n^2) time.
  2. Write the standard answer: one pass into a HashMap<Integer, Integer> with counts.merge(x, 1, Integer::sum), then print each entry. That is O(n) average time and O(k) space for k distinct values. Use a LinkedHashMap to print in order of first appearance, or a TreeMap for sorted output at O(n log k).
  3. Offer alternatives for other constraints. Sort a copy, then count runs of equal values: O(n log n) time and no map, and sorting in place mutates the caller's array. If values are known to lie in [0, m), a counting array gives O(n + m) time. Negative values need an offset.
  4. Show the stream version and its types. Arrays.stream(arr).boxed().collect(Collectors.groupingBy(Function.identity(), Collectors.counting())) returns a Map<Integer, Long>, and its iteration order is not guaranteed.
  5. Cover the edge cases: an empty array, a single element, every value distinct, every value equal, and negative or very large values. These last two rule out the counting-array approach.
Follow-up
  • Print only the k most frequent values. Compare a size-k heap with bucket sort.
  • How would you count frequencies over a stream too large to keep in memory?
  • Can you do it with O(1) extra space if every value lies between 1 and n?

Solve logical puzzles or algorithmic challenges like the Water Jug problem.

medium
Algorithms and Problem Solving

Solve logical puzzles or algorithmic challenges like the Water Jug problem.

Approach
  1. Model the puzzle as a graph search. A state is (a, b), the litres in jugs of capacity x and y. The six moves are: fill either jug, empty either jug, and pour from one into the other until the source is empty or the target is full, transferring min(a, y - b) litres one way and min(b, x - a) the other. Restate what counts as the goal: the target amount in one jug, or the total across both.
  2. Run BFS from (0, 0) with a visited set. Every move costs one step, so the first time BFS reaches a goal state it has found the minimum number of moves. There are at most (x + 1)(y + 1) states, so the search is O(xy) time and space. Store a parent pointer per state to print the sequence of moves.
  3. Give the number-theory check. Measuring z as the total in both jugs is possible if and only if z ≤ x + y and z is a multiple of gcd(x, y), by Bézout's identity. To have z in a single jug, you also need z ≤ max(x, y). z = 0 is trivially reachable.
  4. Trace the classic case of measuring 4 with jugs of 3 and 5, writing states as (jug3, jug5): (0,5) → (3,2) → (0,2) → (2,0) → (2,5) → (3,4). That is six moves. Narrating the states out loud is how to approach any logic puzzle: define the state, the moves and the goal, then search.
  5. Cover the edge cases: a capacity of zero, z greater than x + y, and z equal to x or y, which takes a single fill.
Follow-up
  • Why is gcd(x, y) dividing z both necessary and sufficient?
  • Generalise the search to three jugs, for example splitting 8 litres into 4 and 4 with jugs of 8, 5 and 3.
  • Would DFS also find a solution? Would it find the shortest one?

The seven days follow the reported loop: project material first, then the Java, SQL and algorithm questions, then concurrency and debugging, and a mock run on day 7. Days that use PracHub's own practice set say so.

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
01Map the loop and your own projects
  • Write the five reported rounds in order and one line on what each is reported to cover, then mark the stage you are least ready for.
  • List every project on your CV and, for each, write a three-sentence architecture summary, one challenge and your own contribution.
  • Read the company's annual report and note the financial products it describes.

Deliverable: A one-page loop map, a project sheet with architecture, challenge and contribution for each CV project, and a few notes on the annual report.

02Java collections, strings and object contracts
  • Sort a list of account objects with Comparable by one field, then with Comparator.comparing(...).thenComparing(...) by two others, and write the difference in two sentences.
  • Draw a HashMap from memory: bucket array, hash-to-index step, chaining, tree conversion for long chains, resize at the load factor. Write a key class with and without hashCode to show the failure.
  • Explain aloud why String is immutable, covering the string pool, cached hash, thread safety and map keys, and show the effect of new String versus a literal.

Deliverable: A working Comparator demo, a labelled HashMap diagram with the broken-hashCode demo, and a spoken String immutability answer.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
03Memory allocation, static and interfaces
  • Explain static versus dynamic allocation in Java terms: locals and call frames, objects on the heap, static fields living as long as the class is loaded, and what garbage collection does.
  • Write an interface with default and static methods, a class implementing two interfaces that share a default method, and resolve the conflict explicitly. Add static fields, blocks and a nested class to show initialization order.
  • Produce a memory leak on purpose (a static collection that only grows) and describe how you would find it, then explain final, finally and finalize and write one method reference example.

Deliverable: A one-page note on allocation and static, a compiled interface-conflict example, and a leak reproduction with a written diagnosis.

Practice prompt ↗Practice prompt ↗
04SQL: constraints, command types, joins and keys
  • Write CREATE TABLE statements for accounts and transactions with primary key, foreign key, unique, NOT NULL, CHECK and DEFAULT, and name the primary, candidate and composite keys in your schema.
  • Sort statements into DDL, DML and DCL with two examples each, and note where TRUNCATE and transaction-control statements fall.
  • Load three small tables and write inner, left, right, full, cross and self joins, then the three-table join, noting row counts and NULLs for each.
  • Work PracHub's practice question on denormalising a column onto a table and backfilling it live, and write the safe sequence of steps.

Deliverable: A runnable schema script, a DDL/DML/DCL table, a file of joins with annotated row counts, and a written backfill plan.

Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗
05Algorithms by hand
  • Write Quick Sort on paper with a random pivot, then merge sort, and note average and worst time, extra space and stability for each.
  • Reverse a character array in place with two pointers, and write a frequency counter three ways: HashMap, sort then scan, and counting array. State complexity and when each fits.
  • Solve the Water Jug puzzle with breadth-first search over states, then add the gcd reachability check and explain why it works.

Deliverable: Handwritten Quick Sort and merge sort, three frequency counters, an in-place reverse and a Water Jug solver, each with its complexity and edge cases written beside it.

Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗
06Transactions, concurrency and debugging
  • Open two database sessions and reproduce a lost update, then fix it with a row lock and again with a version column; write down the isolation level you were using.
  • Write a Java program with a shared counter that races, then fix it with synchronized, an atomic class and a thread pool, and explain what each costs.
  • Write JUnit tests for the day 5 sorting and frequency functions, including empty and duplicate inputs.
  • Work PracHub's debugging practice question about a log partition that stops advancing, and write your diagnosis sequence.

Deliverable: A lock and version-column transcript, a race demo with three fixes, a JUnit test class and a written debugging sequence.

Practice prompt ↗
07Mock loop and managerial stories
  • Run a mock technical round: one Java concept, one SQL query and one algorithm, answered aloud and written without an IDE.
  • Write and say your answers to why Bravura Solutions and why you are leaving your current role.
  • Rehearse three project stories, then use PracHub's behavioral practice on a code-review disagreement, defending an estimate, and unblocking an engineer.

Deliverable: A recorded mock round with notes on weak answers, written motivation answers, and three rehearsed project stories.

Practice prompt ↗Practice prompt ↗Practice prompt ↗

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

Candidates report that the Managerial Assessments look at cultural fit and teamwork, and that past projects are a main subject throughout the loop. The role as described has you working with senior engineers, architects, product managers and business analysts, debugging production issues, and changing software that already exists. Build stories from that kind of work, each with your own role, a decision you made and a result, and rehearse why you want to join Bravura Solutions and why you are leaving your current role.

Turn a code review disagreement into a decision

easy
code reviewoptimistic concurrencycommunication

A colleague's change updates a row with UPDATE resource SET version = version + 1 WHERE resource_id = $1 AND version = $2 and treats an affected-row count of zero as a successful no-op. You read that as a silently lost update; they think returning 200 is friendlier to clients than returning a conflict. Describe how you have handled a review disagreement of this shape: what goes in the comment, when you leave the thread, and who decides. Then write the comment you would leave here, in under 80 words.

Approach
  1. Sort the disagreement before writing anything. A silently discarded write is a correctness claim about data; the choice between 409 and 412 is taste. Only the first justifies blocking a merge, and saying which one you are doing is most of the value of the comment.
  2. Make the claim reproducible in the comment itself with an interleaving rather than a principle: A reads version 7, B reads version 7, B commits version 8, A's predicate matches zero rows, A is told it succeeded and A's edit is gone.
  3. Offer the alternative with its cost attached: return 409 carrying the current version and the revision that won, so the client can re-read and re-apply. Note that automatic retry is not the fix, because a retry re-reads the winner's state and reapplies an intent formed against data that no longer exists.
  4. Apply an escalation rule you can state: two round trips on the thread, then a call, and the service's owner decides rather than the reviewer. A reviewer who cannot be overruled is a bottleneck with extra steps.
Follow-up
  • Where would you put the test that fails if someone reintroduces the swallowed zero rowcount?
  • The author says clients cannot handle a 409. How do you check whether that is true?

Estimate work you have never done and defend the range

hard
estimationbackfillsexpand-contract

You are asked to estimate a change you have never attempted: add a column to a 100-million-row table, populate it, move reads across, and drop the old shape. Give a range with the assumptions that generate it, including batch size, the signal your backfill throttles on, and wall-clock hours, and name the three unknowns that would move the number most. Then describe a real estimate you gave under comparable ignorance: how you expressed its uncertainty, what you committed to, and how wrong you turned out to be.

Approach
  1. Decompose into independently deployable steps before estimating anything: add the column nullable, write both shapes, backfill in batches, verify, move reads, stop writing the old shape, drop it. That is four deploys spread over days, and the calendar estimate is dominated by them rather than by the loop's runtime.
  2. Do the arithmetic aloud for the part that has arithmetic in it: batch size times number of batches times per-batch duration, at a write rate the primary can absorb alongside roughly 1.2k writes per second of production traffic. The loop is throttled by replication lag and lock waits, not by how fast it can issue statements.
  3. Price the schema step by its lock rather than its statement duration. In PostgreSQL an ALTER TABLE taking ACCESS EXCLUSIVE waits for every open transaction on that table while later queries queue behind it, so a millisecond change issued during a thirty-second analytics query stalls that table for thirty seconds. Adding a nullable column with a non-volatile default avoids a rewrite from version 11; a new index wants CREATE INDEX CONCURRENTLY, which cannot run inside a transaction block and leaves an invalid index behind if it fails.
  4. Express the answer as a range whose endpoints each trace to a stated assumption, then name the cheapest experiment that collapses it, which is almost always running one real batch against the real table and multiplying.
Follow-up
  • How do you verify the backfill genuinely finished, given rows written by production traffic while it ran?
  • Where does the backfill resume from after a worker is killed mid-batch, and what makes that resume point trustworthy?

Unblock an engineer without taking the keyboard

easy
mentoringleasesat-least-once

A teammate has spent two days on a job handler that occasionally writes duplicate rows. They are certain the queue is delivering twice by mistake. You suspect a lease expiring under a slow handler, so the job is running concurrently with itself. Describe how you have unblocked someone in this position: what you asked before offering a hypothesis, what you showed them rather than told them, and what you left them owning. Then say what you would do if their theory turned out to be the right one.

Approach
  1. Ask before diagnosing, and ask for things answerable from data they already have: the attempt count on the job rows that produced duplicates, the handler's observed duration against its lease expiry, and whether the duplicate rows share a natural key that a unique constraint could have caught.
  2. Teach the shape rather than the answer. A lease cannot distinguish a dead worker from a slow one, so a handler that outruns its lease is running twice by design, and deploys deliver the other half by killing handlers mid-run on every rollout. Both of their candidate theories produce identical duplicate rows, which is why the evidence has to come from timings rather than from argument.
  3. Hand over a checklist they execute: a natural key on every write the handler performs so the second copy collides rather than appends, the record of intent written before any external effect, a lease heartbeat while running, and the metric that shows it working.
  4. Keep ownership with them deliberately. Pair on the first write, then step back; if you finish it yourself you have closed one ticket and left the same person stuck on the next redelivery.
Follow-up
  • How would you distinguish a genuine double-delivery from a lease expiry using only the data already stored?
  • Their handler calls an external endpoint before recording that it did. What do you tell them to change first?
  • 01

    Why do you want to work at Bravura Solutions, and why are you looking to move from your current role?

  • 02

    Walk me through the architecture of your most recent project: what you owned, the hardest problem and how you solved it.

  • 03

    Tell me about a time you turned a business or financial requirement from a product manager or business analyst into a technical specification.

  • 04

    Describe a production issue you debugged: how you narrowed it down, what the fix was and what you changed to stop it recurring.

  • 05

    Tell me about a time you had to change a codebase you did not write and keep existing behaviour intact.

PracHub preparation framework ↗
What does the Bravura Solutions Software Engineer loop look like?

Candidates report five rounds over about four to six weeks: Application Review, Screening Phase, Technical Assessments, Managerial Assessments and Final Decision-Making. Early rounds are reported to lean toward breadth and later ones toward deep technical scenarios and fit. The pace is reported to vary between immediate joiners and campus recruitment drives.

PracHub Software Engineer practice ↗
What should I study first?

Start with Core Java, SQL, OOP and standard algorithms, since those are the listed must-have skills. A sensible order is Java collections and memory (HashMap, String, allocation, static), then SQL constraints, joins and keys, then sorting, string and array tasks, then transactions and concurrency. The seven-day plan follows that order.

Bravura Solutions Software Engineer candidate reports ↗
Is the interview theoretical or practical?

Candidates report a mix. Expect conceptual questions on Java, OOP and SQL, and coding exercises where the code must work and be efficient. You may be asked to write without an IDE, so practise by hand, and explain your reasoning aloud as you go.

Bravura Solutions Software Engineer candidate reports ↗
Do I need Spring Boot, microservices or SOAP?

They are reported as nice-to-haves, along with JUnit and financial services experience, not as must-haves. If they are on your CV, be ready to explain how you used them. If they are not, put your time into Core Java and SQL first; you can mention the closest thing you have done, such as REST services or unit testing.

PracHub Software Engineer practice ↗
How should I prepare for the project discussion?

Candidates report that any project on your CV can be explored. For each one prepare a short architecture description, the hardest problem, what you specifically did and what you would change. Be ready to connect the work to the role's themes: database queries, caching, business logic and production issues.

PracHub Software Engineer practice ↗
Will I get feedback if I am not selected?

Candidates report that experiences vary, so do not plan around detailed feedback. Write down your own questions and weak answers right after every round and use them to improve, whatever the outcome.

Bravura Solutions Software Engineer candidate reports ↗
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.