BayOne · Software Engineer
Updated · 2026-10-02

BayOne Software Engineer
Interview Guide

THE 60-SECOND BRIEF

BayOne is described as a technology consulting and talent solutions firm, so its engineers work on client projects rather than on one in-house product. Candidates describe project types such as cloud migrations, cloud-native architectures, distributed systems, high-throughput REST web services, platform systems and AI or machine learning workflows. In this role you design and deploy backend services, work on data pipelines, take part in code reviews and CI/CD pipelines, and turn business requirements into technical specifications together with architects, product owners and client stakeholders.

This guide is for engineers preparing for a BayOne Software Engineer loop. It covers the three reported stages, the three question groups candidates report (Java and backend development, data structures and algorithms, cloud and distributed systems), the scenario-style prompts that appear in the reported evaluation areas, and a seven-day plan. The requirements candidates describe are Java or another major backend language, data structures and algorithms, REST web services and some database experience, with cloud platforms, Docker, Kubernetes and AI/ML frameworks listed as extras.

Candidates report three rounds over about 3-5 weeks: an Initial Recruiter Screen, Technical Evaluations and a Client-Alignment Round. The third stage is reported as depending on the team and role, so confirm with your recruiter whether it applies to you.

Data StructuresAlgorithmsJava

37 min read

Browse Software Engineer questions

See the practice prompts

20Practice promptsAcross five skill areas

BayOne engineers work on client projects, and the reported work spans backend services, REST APIs, data pipelines, cloud infrastructure and, on some projects, AI or platform systems. That breadth shapes preparation: you are less likely to need one product's domain knowledge than a solid base in Java (or another major backend language), core data structures, database behavior and the design of services that stay up under load.

The questions candidates report fall into three groups. Java and backend development: ArrayList versus LinkedList and their complexities, Java memory management and the garbage collector, the principles of a scalable REST web service, concurrency and thread safety, and optimistic versus pessimistic locking. Data structures and algorithms: level-order traversal of a binary tree, the first non-repeating character in a string, cycle detection in a directed graph, merging two sorted linked lists, and the contiguous subarray with the largest sum. Cloud and distributed systems: consistency across microservices, the CAP theorem and database choice, a rate limiter for a public API, horizontal scaling of a stateless application, and failover and disaster recovery.

The reported evaluation areas also name scenarios worth rehearsing: a thread-safe cache built without the built-in concurrent collections, how a HashMap handles collisions, REST design for large file uploads, merging overlapping intervals, the lowest common ancestor of two tree nodes, turning an O(N^2) algorithm into O(N log N), a notification system that sends millions of pushes, moving a monolith to microservices without downtime, and replication lag in a read-heavy application. The failover question reads as an experience prompt, so prepare it as a story from your own work as well as a design answer.

Candidates report that the technical evaluations follow the stack and architectural patterns of the target project, and that the recruiter says which areas to prioritise. Use the recruiter screen to learn the stack, then weight your time accordingly. The role description lists Redis-style caching, sharding, circuit breakers, retries and rate limiting under distributed systems, and AWS, Azure, GCP, Docker and Kubernetes as nice-to-have experience, so be ready to discuss what you have actually used and to reason from first principles about what you have not.

01

Initial Recruiter Screen

reported

Candidates report that the loop opens with an Initial Recruiter Screen about your professional background, your career goals and how they line up with open opportunities. Candidates also report that work arrangements (remote, hybrid or onsite) depend on the client engagement and location and come up here, and that the recruiter indicates which areas to prioritise for the technical stage. Treat it as a two-way call: arrive with a clear account of your Java and backend experience and a short list of questions that will shape the rest of your preparation.

What to demonstrate

  • Your professional background and career goals
  • How your experience lines up with the open opportunities
  • Practical fit such as location and work arrangement

How to prepare

  • Write a short spoken summary of your career that ends on your backend, REST and database experience, and name one project where you owned a Java service.
  • Map your experience against the listed requirements: Java or another backend language, data structures, REST services, relational or non-relational databases, then cloud platforms, Docker and Kubernetes.
  • Ask which client stack the technical evaluation will follow, which areas to prioritise, whether a client-alignment round applies, and what the work arrangement is.
  • Have your location constraints and availability ready, and ask for the remaining steps in writing.
BayOne Software Engineer candidate reports ↗
02

Technical Evaluations

reported

Technical Evaluations are reported as covering coding proficiency, data structure knowledge and architectural knowledge. The reported evaluation areas are core Java and object-oriented design (collections, concurrency, RESTful API design), data structures and algorithms (arrays and strings, trees and graphs, dynamic programming and recursion) and cloud and distributed systems (microservices, caching and sharding, resilience patterns). This is where the coding and design questions in this guide are practised. Prepare to write working code in your chosen language, state its complexity, and sketch a service design that names its failure paths.

What to demonstrate

  • Working code and the choice of data structure behind it
  • Java fundamentals: collections, memory, concurrency and locking
  • Architectural knowledge of services, caching, consistency and resilience

How to prepare

  • Code level-order traversal, first non-repeating character, directed-graph cycle detection, merging sorted lists and the largest-sum subarray in Java, each with its complexity and edge cases.
  • Rehearse the Java topics aloud: ArrayList versus LinkedList, HashMap collisions, heap and garbage collection, thread safety, optimistic versus pessimistic locking.
  • Practise the design prompts: a rate limiter, a scalable stateless REST service, a notification system and a monolith-to-microservices migration, each with a failure path.
  • Work through the interval-merge, lowest-common-ancestor and O(N^2)-to-O(N log N) scenarios so that you can explain the optimisation step, not only the final code.
BayOne Software Engineer candidate reports ↗
03

Client-Alignment Round

reported

The Client-Alignment Round is reported as a check that your experience fits the project's technical environment, based on the specific team and role requirements; candidates describe it as applying depending on the team and role. The role itself involves working with architects, product owners and client stakeholders, so expect the conversation to sit closer to your project experience and communication than to a pure algorithm session. Prepare by learning the project's stack from your recruiter and linking your past work to it.

What to demonstrate

  • Fit between your experience and the project's technical environment
  • How you explain technical choices to architects, product owners and client stakeholders
  • Your approach to turning requirements into technical specifications

How to prepare

  • Take the stack details from the recruiter screen and write down where your experience matches and where you would be learning, with a plan for each gap.
  • Prepare two or three project stories covering a service you built, a trade-off you explained to a non-technical person and a requirement you clarified before building.
  • Rehearse the failover and disaster-recovery story so it covers both the design and your personal part in a real event.
  • Prepare questions about the project: the stack, how releases reach production, and how the team handles code review and CI/CD.
BayOne Software Engineer candidate reports ↗

PracHub editorial advice for the preparation topics above.

01

Calling a LinkedList faster for insertion without counting the traversal to the position, or ignoring ArrayList's amortised O(1) append and cache locality

State each operation separately: get by index is O(1) on ArrayList and O(n) on LinkedList, insertion in the middle needs a shift or a walk, and LinkedList insertion is O(1) only when you already hold the node or are at an end. Say which workload you would choose each for.

02

Writing the thread-safe cache with one coarse synchronized block, or with a plain HashMap and a check-then-act race, when asked to avoid the built-in concurrent collections

Name the shared state and the invariant, then pick the lock deliberately: a ReentrantReadWriteLock or lock striping, with the lookup-and-insert done as one atomic step. Run it under several threads and say what the lock costs under contention.

03

Coding the tree, list, string or graph questions before checking edge cases: empty tree, all-negative array, no unique character, or an undirected visited set in cycle detection

Clarify input size and degenerate cases first, then test them by hand after writing. Directed cycle detection needs three states (unvisited, on the current path, done) or a topological sort, not a single visited flag.

04

Answering the CAP, microservice consistency or replication-lag prompts with slogans such as 'pick two' or 'eventually consistent' without naming what the user sees

Say what the system does during a partition, operation by operation, and describe the visible anomaly you accept, such as a stale read after a write. Then name the mechanism that reconciles it: a saga with compensating steps, an outbox, or idempotent retries.

05

Presenting the rate limiter or failover design as a list of components (Redis, Kubernetes, load balancer) with no algorithm and no failure path

For the rate limiter, pick an algorithm (token bucket, sliding window), say where counters live, how they are shared across instances, what the client sees when it is limited, and what happens if the counter store is down. For failover, state recovery targets before naming tools.

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

17 technical prompts0 include a worked solution

Explain the difference between an ArrayList and a LinkedList, and describe the time complexity of their primar

medium
Java & Backend Development

Explain the difference between an ArrayList and a LinkedList, and describe the time complexity of their primary operations.

Approach
  1. ArrayList is backed by a resizable Object[]: get(i) and set(i) are O(1), add at the end is amortized O(1) because a full array grows by about 1.5x and copies, and add or remove at an index is O(n) because System.arraycopy shifts the tail.
  2. LinkedList is a doubly linked list that implements both List and Deque: addFirst, addLast, removeFirst and removeLast are O(1), but get(i) is O(n) because it walks from whichever end is nearer.
  3. Insertion in the middle of a LinkedList is O(1) only once you hold the position through a ListIterator; finding that position is still O(n). contains and indexOf are O(n) in both.
  4. Memory and locality: each LinkedList node carries an item, next and prev reference plus an object header, and nodes are scattered on the heap, so iteration is slower than over a contiguous array. ArrayList can hold unused capacity (trimToSize releases it).
  5. Conclusion I would state: ArrayList is the default for indexed access and iteration, and for a queue or stack I would reach for ArrayDeque rather than LinkedList.
Follow-up
  • Why is ArrayList often faster than LinkedList even for inserts in the middle of a list of moderate size?
  • What happens if you remove elements inside a for-each loop over an ArrayList, and how do Iterator.remove or removeIf avoid ConcurrentModificationException?
  • When would you pick ArrayDeque over LinkedList, and what does ArrayDeque refuse to store?

How does memory management work in Java, and what is the role of the Garbage Collector?

medium
Java & Backend Development

How does memory management work in Java, and what is the role of the Garbage Collector?

Approach
  1. Lay out the memory areas: each thread has a stack of frames holding local primitives and references; objects live on the shared heap; class metadata lives in Metaspace since Java 8 (it replaced PermGen).
  2. The garbage collector frees objects that are unreachable from GC roots (thread-stack locals, static fields, JNI references). Reachability tracing means reference cycles are collected, unlike reference counting.
  3. Generational collection: new objects go to Eden, minor GCs copy survivors between the survivor spaces, and long-lived objects are promoted to the old generation. Name the collectors: Serial, Parallel, G1 (the default since JDK 9, region-based with a pause-time goal), and ZGC or Shenandoah for low pause times.
  4. Java still leaks memory when references stay reachable: static collections, caches with no eviction, listeners never unregistered, ThreadLocal values in pooled threads. I diagnose with -XX:+HeapDumpOnOutOfMemoryError, a heap analyzer such as Eclipse MAT, and GC logs (-Xlog:gc*).
  5. The GC only manages memory: files, sockets and connections need try-with-resources, and finalize() is deprecated, so nothing should rely on it.
Follow-up
  • How would you tell apart and fix 'OutOfMemoryError: Java heap space' and 'OutOfMemoryError: Metaspace'?
  • What is a stop-the-world pause, and how do minor, mixed and full collections differ in G1?
  • What do WeakReference and WeakHashMap give you, and when is a weak-keyed cache the wrong tool?

How do you handle concurrency and thread safety in a multi-threaded Java application?

medium
Java & Backend Development

How do you handle concurrency and thread safety in a multi-threaded Java application?

Approach
  1. Start by finding the shared mutable state; the cheapest fixes are to remove it: thread confinement, immutable objects with final fields, and safe publication.
  2. Explain the Java Memory Model guarantees: synchronized gives mutual exclusion plus visibility through happens-before; volatile gives visibility and ordering but not atomicity, so count++ on a volatile field is still a race.
  3. Use java.util.concurrent rather than hand-rolled locking: AtomicInteger or LongAdder for counters, ConcurrentHashMap with computeIfAbsent or merge for per-key atomic updates, ReentrantLock when you need tryLock with a timeout or Conditions, ReadWriteLock for read-heavy data, and ExecutorService instead of raw threads.
  4. Name the classic bugs: check-then-act (containsKey then put) and read-modify-write races, fixed with atomic map operations or a single lock around the compound action.
  5. Deadlock needs mutual exclusion, hold-and-wait, no preemption and circular wait; prevent it with a global lock ordering, tryLock timeouts and short critical sections, and diagnose it from a jstack thread dump.
Follow-up
  • Why is double-checked locking for a lazy singleton broken without volatile?
  • When would you choose ReentrantLock over synchronized?
  • How would you size a thread pool for CPU-bound work versus work that mostly waits on I/O?

Given a binary tree, write an algorithm to perform a level-order traversal.

medium
Data Structures & Algorithms (DSA)

Given a binary tree, write an algorithm to perform a level-order traversal.

Approach
  1. Use BFS with a queue (ArrayDeque in Java): enqueue the root if it is non-null, then loop while the queue is non-empty.
  2. Snapshot size = queue.size() at the start of each level, poll exactly that many nodes into the level's list, and enqueue each node's left then right child; this groups the output into a list per level without sentinel markers.
  3. Complexity: O(n) time since each node is enqueued and dequeued once; O(w) extra space where w is the maximum width, up to about n/2 on the last level of a complete tree.
  4. Edge cases: a null root returns an empty list; a skewed tree has width 1; ArrayDeque throws on null, so check children before offering them.
  5. Mention the DFS alternative that passes depth and appends to result[depth], using O(h) stack, and the common variants: zigzag order, right-side view (last node per level), bottom-up order and per-level averages.
Follow-up
  • Return the levels in zigzag order. What changes?
  • How would you find the minimum depth of the tree, and why can BFS stop early there?
  • How would you do this without the size snapshot, for example with two queues or a null marker?

Implement a function to find the first non-repeating character in a given string.

medium
Data Structures & Algorithms (DSA)

Implement a function to find the first non-repeating character in a given string.

Approach
  1. Two passes: count every character's frequency, then scan the string again in order and return the first character whose count is 1. O(n) time and O(k) space for an alphabet of size k.
  2. Pick the counter from the clarified input: int[26] for lowercase letters, int[128] or int[256] for ASCII, a HashMap<Character, Integer> for arbitrary text.
  3. Clarify the contract first: return the character or its index, what to return when none exists (-1 or a sentinel), the empty string, and whether case and whitespace count.
  4. Unicode: a Java char is a UTF-16 code unit, so emoji and other supplementary characters span two chars. Iterate s.codePoints() and count by code point if the input can contain them.
  5. Contrast with the O(n^2) nested-loop brute force, and mention a LinkedHashMap alternative whose second pass walks distinct characters in insertion order instead of the whole string.
Follow-up
  • The characters arrive as a stream. How do you report the first non-repeating character after each one (queue of candidates plus counts, amortized O(1))?
  • How does your solution change for 'first unique integer' in a large array?
  • What breaks if the input contains emoji and you iterate with charAt?

How would you detect a cycle in a directed graph?

medium
Data Structures & Algorithms (DSA)

How would you detect a cycle in a directed graph?

Approach
  1. DFS with three states per node: unvisited, on the current recursion stack, finished. An edge to a node that is on the stack is a back edge, which means a cycle.
  2. Explain why a single visited set is wrong for directed graphs: reaching an already-finished node through a cross edge is not a cycle, so you need the separate on-stack state.
  3. Alternative: Kahn's algorithm. Compute in-degrees, queue every zero in-degree node, pop and decrement neighbours; if fewer than V nodes are processed, the rest are in or behind a cycle. It also produces a topological order.
  4. Both run in O(V + E) time and O(V) space with adjacency lists. Start DFS from every unvisited node to cover disconnected parts, and treat a self-loop as a cycle.
  5. Recursion can overflow the Java stack on long chains, so use an iterative DFS or Kahn's for large graphs. To print the cycle, keep parent pointers and walk back from u to v when the back edge u->v is found.
Follow-up
  • Given course prerequisites, return a valid order or report that none exists.
  • How does cycle detection differ in an undirected graph (parent check or union-find)?
  • How would you return the nodes that form the cycle, not just a boolean?

Write a program to merge two sorted linked lists into a single sorted list.

medium
Data Structures & Algorithms (DSA)

Write a program to merge two sorted linked lists into a single sorted list.

Approach
  1. Use a dummy (sentinel) head and a tail pointer. While both lists are non-null, attach the smaller node and advance that list; using <= takes equal values from the first list first, which keeps the merge stable.
  2. When one list runs out, attach the remainder of the other in a single step rather than looping over it.
  3. Complexity: O(n + m) time and O(1) extra space, because existing nodes are relinked rather than copied.
  4. The recursive version is shorter but uses O(n + m) stack depth, which can overflow on long lists, so I would write the iterative one.
  5. Edge cases: one or both lists null, very different lengths, duplicate values, and every element of one list being smaller than the other's head.
Follow-up
  • Merge k sorted lists. Compare a min-heap (O(N log k)) with pairwise divide-and-conquer merging.
  • Sort a singly linked list in O(n log n) time using this merge as the building block.
  • How would you merge two sorted arrays in place when the first has spare capacity at the end?

Given an array of integers, find the contiguous subarray with the largest sum.

medium
Data Structures & Algorithms (DSA)

Given an array of integers, find the contiguous subarray with the largest sum.

Approach
  1. Start from the brute force: O(n^2) by fixing a start and extending with a running sum.
  2. Kadane's algorithm: cur = max(x, cur + x) and best = max(best, cur) for each element. Initialise both with the first element so an all-negative array returns its largest element. O(n) time, O(1) space.
  3. Clarify whether the subarray must be non-empty; if an empty subarray is allowed, the answer is max(0, Kadane's result).
  4. To return the subarray itself, record a tentative start whenever cur resets to x, and save start and end whenever best improves. Use long for sums if values are large enough to overflow int.
  5. Mention equivalent views: with prefix sums the answer is the maximum of prefix[j] - min(prefix[i]) for i < j, and a divide-and-conquer solution runs in O(n log n).
Follow-up
  • Solve it for a circular array (max of Kadane and total minus the minimum subarray, with the all-negative case handled).
  • Find the maximum product subarray instead. Why must you track both the running max and the running min?
  • Extend it to the maximum-sum submatrix of a 2D grid.

The plan follows the three reported question groups: Java fundamentals first, then data structures and algorithms, then the design questions and your failover story. Day 1 covers the recruiter screen and the project-stack conversation.

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
01Recruiter screen and stack map
  • Write a short spoken summary of your career that leads to your Java, REST and database experience, and say it aloud twice.
  • Build a table of the listed requirements (Java or another backend language, data structures, REST services, databases, then cloud platforms, Docker, Kubernetes, AI/ML frameworks) against what you have used, with one project per row.
  • Write the questions you will ask the recruiter: the client stack, the areas to prioritise, whether a client-alignment round applies, and the work arrangement.

Deliverable: A career summary, a requirements-versus-experience table and a list of recruiter questions.

02Java collections and memory
  • Write a table of ArrayList and LinkedList operations (get, append, insert at head, insert in the middle, remove) with their complexities and one sentence on when you would pick each.
  • Explain aloud how a HashMap handles collisions, including buckets, resizing and the conversion of long bins to trees.
  • Explain Java memory: stack versus heap, reachability, generations, what a garbage collection pause is, and one way to find a memory leak.

Deliverable: A one-page Java collections and memory sheet, plus a spoken answer to each of the two reported Java questions.

Practice prompt ↗Practice prompt ↗
03Concurrency and locking
  • Write a thread-safe cache in Java without ConcurrentHashMap, using a ReentrantReadWriteLock or lock striping, and run it from an ExecutorService with many threads.
  • List the other tools you would name for thread safety: immutability, synchronized, volatile, atomics and thread confinement, each with one use.
  • Write the SQL for optimistic locking with a version column and the SELECT FOR UPDATE form for pessimistic locking, and state when each wins.

Deliverable: A tested cache class, a thread-safety checklist and a two-line rule for choosing optimistic or pessimistic locking.

Practice prompt ↗Practice prompt ↗
04Trees, lists and strings
  • Code level-order traversal with a queue, returning a list of levels, and handle the empty tree.
  • Code the first non-repeating character with a count map and a second pass, then discuss a single-pass variant using an ordered map.
  • Code the merge of two sorted linked lists with a dummy head, then solve the interval-merge and lowest-common-ancestor scenarios.

Deliverable: Five tested Java solutions, each annotated with time and space complexity and three edge-case tests.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
05Graphs and arrays
  • Code directed-graph cycle detection twice: a DFS with three states and Kahn's topological sort, and note when each is preferable.
  • Code the largest-sum contiguous subarray with Kadane's algorithm, including an all-negative array, then return the indices of the subarray.
  • Take an O(N^2) pairwise solution and rewrite it with sorting, a hash map or a heap, and state what you traded for the speedup.

Deliverable: Two graph solutions, one array solution with indices, and a written before-and-after optimisation with complexities.

Practice prompt ↗Practice prompt ↗
06REST and distributed design
  • Sketch a scalable REST service: resource naming, status codes, pagination, idempotent writes, statelessness, caching headers and a large-file upload flow.
  • Design a rate limiter for a public API: pick token bucket or sliding window, put the counters in Redis, and say what happens when Redis is unavailable.
  • Write the consistency answer for microservices (saga, outbox, idempotency) and the CAP answer, then outline how you scale a stateless service horizontally.

Deliverable: Three one-page design sketches (REST service, rate limiter, consistency and scaling), each with a failure path.

Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗
07Failover story and full rehearsal
  • Write your failover and disaster-recovery story: the system, its recovery targets, the event or drill, your decision, the metrics and the lesson.
  • Rehearse the story aloud, then practise the incident-ownership exercise from PracHub's reviewed practice set.
  • Run a mock technical evaluation: one coding question, one Java question and one design question back to back, then a conversation about how your experience fits a given project stack.

Deliverable: A written failover story and a recorded or noted mock run listing the weakest answer to revisit.

Practice prompt ↗Practice prompt ↗

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

Only one reported question is behavioral in form: how you handle failover and disaster recovery. The recruiter screen and the client-alignment round are also described as conversations about your background, goals and fit with a project, and the role involves working with architects, product owners and client stakeholders. Prepare stories where you made the decision, with numbers where you have them.

How do you handle failover and disaster recovery in a cloud-hosted environment?

medium
Cloud & Distributed Systems

How do you handle failover and disaster recovery in a cloud-hosted environment?

Approach
  1. Treat it as an experience prompt first. Name one real system you ran (or one failover drill you led), say what it served, and state its recovery targets: how long it could be down (RTO) and how much recent data it could lose (RPO). If you cannot name them, say what you inferred from the business impact.
  2. Walk the layers in order. For the stateless tier: instances spread across availability zones behind a load balancer with health checks. For the database: a replica, a promotion path and point-in-time backups. For a regional loss: cold, pilot-light, warm-standby or active-active, and what each costs against how fast it recovers.
  3. Name the hazards you handled. Asynchronous replication can lose the latest writes on promotion; the old primary must be fenced so two nodes never accept writes; clients need idempotent retries and timeouts; a cold cache after failover can flood the database.
  4. Give the proof. Describe the restore test, game day or failover exercise you ran, the timings you measured (time to detect, time to promote, error rate during the switch) and the runbook or alert you changed afterwards. An untested backup is not a recovery plan.
  5. Close with your own contribution and a lesson: the decision you made, the result in numbers, and what you would change. The mistake that sinks this answer is reciting a list of cloud services with no event, no metric and no personal decision attached.
Follow-up
  • How would you choose between warm standby and active-active for this system, and what does the extra cost buy?
  • What happens to writes the old primary accepted just before the failover, and how do you reconcile them?
  • How do you know your backups restore, and how often have you actually tested one?

Narrate an outage you owned from page to postmortem

hard
incident responseblast radiuspostmortems

Pick an incident you personally drove, ideally one where writes were affected rather than reads. In six to eight minutes: state the symptom as it first appeared on a dashboard, the blast radius you established before you knew the cause, the mitigation you applied and when, the mechanism you eventually proved, and the follow-up that would prevent a repeat. Bring numbers: error rate, tenants affected, minutes to mitigate, minutes to resolve. If you cannot name what you measured, choose a different incident.

Approach
  1. Open on the signal rather than the cause: which metric at which percentile moved, on which service, at what time, so the listener follows the same evidence you had rather than a conclusion you already reached.
  2. Separate mitigation from diagnosis out loud. State what you did to stop the bleeding (flag off, shed traffic, drain a lease, roll back a deploy) and say plainly that you did it before the mechanism was known, because those are two jobs with different deadlines.
  3. Establish blast radius in countable terms: how many tenants, how many writes, and crucially whether the effect was loss or only delay. An append-only revision table or a pending outbox row means the change survived and the projection was merely behind, which is a repair rather than a data-loss incident.
  4. Prove the mechanism instead of asserting it. Name the trace span that grew, the plan that flipped to a sequential scan, the lease that expired, plus one alternative you ruled out and the signal that stayed flat while you ruled it out.
Follow-up
  • What would you do differently in the first five minutes, given the same dashboard and no more information?
  • Which follow-up action did you deliberately not take, and why was dropping it the right call?

Reverse your own decision and price the reversal

medium
reversibilitymeasurementmigrations

Describe a technical decision you made and later reversed. Pick one that cost something: a service you split and merged back, a cache you added and removed, an index you created that pushed the planner onto a worse plan, a projection you rebuilt from scratch. State what you believed when you decided, the measurement that changed your mind, how long the wrong version ran in production, and what the reversal cost in migrations, dual writes, and a deprecation window for callers you did not own.

Approach
  1. State the original rationale without irony, in the version you would still defend given what was known then. If it is not defensible, the story is about carelessness rather than judgement, and a different example serves you better.
  2. Give the measurement that moved with a before and after: the p99 that did not improve, the cache hit rate that sat at 40%, the plan that flipped to a sequential scan once the table passed a size you can name.
  3. Cost the reversal in steps, not adjectives: expand-and-contract deploys, the dual-write window, the callers who had to be notified, the rows already written in the wrong shape that had to be backfilled or abandoned.
  4. Distinguish reversal from rewrite by naming what you kept. Most good reversals preserve the schema or the interface and undo one decision inside it, which is also why they were affordable.
Follow-up
  • What in that decision was irreversible, and did you know it was irreversible when you made it?
  • How did you tell the people who had already built on top of the original decision?
  • 01

    How do you handle failover and disaster recovery in a cloud-hosted environment?

  • 02

    Tell me about a time you explained a technical trade-off to a non-technical stakeholder or client.

  • 03

    Describe a project where the requirements were unclear and you had to ask questions before building.

  • 04

    Tell me about a time you had to learn an unfamiliar framework, cloud service or language quickly to deliver a project.

  • 05

    Describe a disagreement with an architect or product owner about a design, and how you settled it.

  • 06

    Walk me through a production bug you traced to concurrency or data consistency.

PracHub preparation framework ↗
How many rounds are there, and what is in each?

Candidates report three rounds over about 3-5 weeks: an Initial Recruiter Screen about your background, goals and fit with open opportunities; Technical Evaluations covering coding, data structures and architecture; and a Client-Alignment Round about fit with the project's technical environment. The third round is described as depending on the team and role, so ask your recruiter whether it applies.

PracHub Software Engineer practice ↗
Will the technical evaluation follow a specific client's stack?

Candidates report that the evaluations follow the stack and architectural patterns of the target project, and that the recruiter says which areas to prioritise. Ask in the screen which language, database and cloud services the project uses, then weight your preparation toward them while keeping the core Java, algorithm and distributed-systems topics sharp.

PracHub Software Engineer practice ↗
Which question topics are reported most?

Reported questions fall into three groups: Java and backend development (collections, memory management, REST design, concurrency, database locking), data structures and algorithms (tree traversal, strings, graph cycles, linked lists, subarrays) and cloud and distributed systems (microservice consistency, CAP, rate limiting, horizontal scaling, failover). Practise at least two questions from each group aloud.

PracHub Software Engineer practice ↗
Do I need to use Java?

The requirements candidates describe ask for Java or another major backend language, and most reported questions are phrased around Java. Prepare Java collections, memory and concurrency in particular. If you would rather code in a different backend language, ask your recruiter what the technical evaluation allows before you commit.

PracHub Software Engineer practice ↗
I have not worked with AWS, Azure or GCP. Is that a problem?

Cloud platforms, Docker, Kubernetes and distributed-systems experience are listed as nice-to-have, while Java, data structures, REST services and databases are listed as must-have. Prepare the concepts behind the cloud questions (availability zones, replicas, load balancing, caching, retries, circuit breakers) so you can reason about them without naming a vendor's service.

PracHub Software Engineer practice ↗
What are the work arrangements?

Candidates report that remote, hybrid and onsite arrangements all exist, that they depend on the client engagement and location, and that the recruiter discusses them in the initial screening. Have your location constraints ready before that call.

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.