cswork / libraryOpen practice workspace

Interview guides · Actia

Actia Software Engineer Interview Guide

Actia Software Engineer interview guide: two reported rounds, React and Node.js topics, coding and behavioral questions, and a 7-day prep plan.

The 60-second brief

Candidates describe the Software Engineer role at Actia as designing, building and maintaining software products, with project work reported to range from embedded systems to larger software applications. Day to day, the role is described as working alongside product managers, designers and other engineers, and taking part in code reviews. The languages and tools candidates list are Python, Java and JavaScript, with React and Node.js as the frameworks, and Agile or DevOps practice. Cloud platforms (AWS, Azure), SQL and NoSQL databases and microservices appear as extras. Candidate reports do not name specific Actia products or customers, so this guide prepares you through the stack and the question types rather than guessing at the business.

This guide is for candidates interviewing for a Software Engineer position at Actia. It covers the two reported rounds, every question candidates report (domain, problem-solving, coding and behavioral), and a seven-day plan. It is weighted toward React, state management, Node.js and REST, because those are the topics candidates most often associate with the loop, and toward the core computer science that the coding questions need.

Candidates report two rounds over roughly 2-4 weeks: a Screening Interview, then Technical Interviews. Teams may vary the details.

Focus areas

  • React
  • React Hooks
  • Node.js

Overview

The reported loop is short: a screening conversation, then technical interviews. Start with React state management and REST, the topics candidates tie most closely to this loop, together with React Hooks and Node.js. The role lists Python, Java and JavaScript as languages, and Agile or DevOps as working practice. SQL and NoSQL knowledge, AWS or Azure familiarity and microservices appear as bonuses, and candidates describe CI/CD and performance optimization as less common advanced topics.

The reported questions fall into four groups. Domain questions: the principles of Object-Oriented Programming, REST versus GraphQL, your cloud services and deployment experience, how you manage state in a React application, and a complex technical challenge you resolved. Problem-solving questions: debugging a performance issue in a web application, prioritizing when a project deadline is at risk, and designing a system to handle 10,000 requests per second. Coding questions: a whiteboard data-structures challenge, Big O notation with examples, and reversing a linked list. Behavioral questions: a conflict with a team member, effective team communication, and taking the lead on a project.

Most of these questions are open-ended, so a definition on its own will not carry the answer. For OOP, REST and GraphQL, and React state, practise giving the idea, then an example from code you wrote, then a trade-off. For the debugging and design questions, practise a fixed sequence (measure, locate, fix, verify) and rough numbers, so the answer sounds like something you have done rather than a list of buzzwords.

Pick one language for the coding questions and stay in it. Python, Java and JavaScript are all listed, so choose the one in which you can write a linked-list reversal and a hash-map solution without an editor. If you can, practise on paper or a plain text box, since the whiteboard format removes autocomplete and the ability to run your code. Keep your behavioral stories to a small set of real projects, and reuse the same projects for the cloud, challenge and leadership questions so you can describe each one in depth. If your resume includes embedded or low-level work, keep a short story about its resource constraints ready too.

The Actia interview process

Candidates describe two stages, listed below with how to approach each. Different teams reportedly vary the process slightly, so confirm the format with your recruiter.

Screening Interview

Candidates report that the first stage is a conversation about your resume and your reasons for wanting to join Actia. Treat it as the place to explain your background and motivation clearly. Prepare a spoken walkthrough of your two or three strongest projects, naming the languages, frameworks and your own part in each, and a motivation answer that is specific to a role building and maintaining software products with product managers, designers and engineers. Expect follow-up questions on anything your resume lists, so every technology on it should be something you can discuss in depth.

What to demonstrate

  • Be ready to describe your own past projects and your specific contribution to each
  • Be ready to explain your motivation for joining in terms of the role as candidates describe it
  • Be ready to connect your experience to the listed stack (Python, Java, JavaScript, React, Node.js)

How to prepare

  • Write a project walkthrough for each major resume entry: the problem, the stack, what you personally built and one trade-off you made
  • Build a short table of the listed technologies (Python, Java, JavaScript, React, Node.js, AWS or Azure, SQL or NoSQL) against a real project where you used each
  • Write a motivation answer with two concrete reasons tied to the work (for example product collaboration, or breadth from embedded to applications) rather than general enthusiasm
  • Prepare two or three questions about the team, how code review works and what the first project would be

Technical Interviews

Candidates report a series of technical interviews covering problem solving, coding and domain knowledge. The question types reported for the loop are whiteboard-style coding (data structures, Big O, reversing a linked list), problem-solving scenarios (a slow web application, a deadline at risk, a system for 10,000 requests per second) and domain questions (OOP, REST versus GraphQL, cloud and deployment, React state management). Approach it by rehearsing each type separately: code by hand while narrating, run a fixed debugging and design sequence, and answer domain questions with a definition, an example and a trade-off.

What to demonstrate

  • Prepare to write working code on a whiteboard-style problem and state its complexity correctly
  • Prepare a structured approach to open scenarios such as debugging performance and designing for high request volume
  • Prepare practical answers on the web stack candidates list: React, Hooks, Node.js, REST and state management

How to prepare

  • Reverse a linked list iteratively and recursively on paper, test it on empty, one-node and two-node lists, and state time and space for each
  • Prepare a spoken REST versus GraphQL comparison and a worked answer on React state: local state, lifted state, context, a reducer and server-state caching
  • Write a debugging sequence for a slow web page (browser profile, network waterfall, API latency, database queries) and a 10,000-requests-per-second design with a rough per-instance capacity estimate
  • Candidates mention CI/CD and microservices as advanced extras, so have one pipeline you ran ready, with its build, test and deploy stages and how rollback worked, and one service boundary you would split out and why

Where candidates lose points

Reciting the four OOP principles as dictionary definitions with no code or trade-off

For each principle (encapsulation, abstraction, inheritance, polymorphism) have a short example from code you wrote, and be ready to say when composition beats inheritance and where a deep hierarchy caused you trouble.

Losing the rest of the list while reversing a linked list, or never testing the edge cases

Save the next node before you change the pointer, keep previous and current references, and trace the code by hand on an empty list, a single node and two nodes before saying it is done. State O(n) time and O(1) space for the iterative version.

Answering the React state question with one tool name (a store or context) and no reasoning about where state should live

Walk a ladder: component state with useState, lifting state up, useReducer for related transitions, context for widely read values and a data-fetching cache for server data. Say what problem makes you move up each step.

Jumping to caches, queues or microservices on the performance and 10,000-requests-per-second questions before measuring or sizing anything

Ask about read and write mix, payload size and latency target first. Estimate per-instance capacity, then add stateless Node instances behind a load balancer, caching and a database plan, naming what each addition fixes. For a slow application, measure where the time goes before changing code.

Claiming cloud, CI/CD or microservices experience through a list of service names, then being unable to explain a deployment you ran

Claim only what you have used, and prepare one deployment in full: the pipeline, the config, the rollback and one failure. If AWS or Azure is new to you, say so and describe the closest equivalent you have run.

Questions & practice

Solve a coding challenge related to data structures on a whiteboard.

Medium · Coding / Algorithms

Approach

  1. Restate the problem, write one small example on the board, and ask about input size, duplicates, empty input and whether the input is sorted before choosing anything.
  2. Say the brute force and its cost, then choose a structure by the operation you need to speed up: a hash map for O(1) average lookup (two-sum drops from O(n^2) to O(n)), a stack for matching brackets or undo, a queue for BFS, a heap for top-k in O(n log k), a sorted array or balanced BST for range queries.
  3. Write the code in small named steps and keep the board readable; with no compiler, trace your example through it line by line, tracking each variable.
  4. Test edge cases out loud: empty input, one element, all duplicates, negative numbers, and the largest input the constraints allow.
  5. Finish with time and space complexity, and say what you would change if memory were tight or the input arrived as a stream.

Follow-up

  • A hash map lookup is O(1) on average. What is its worst case, and when does it happen?
  • How would you implement an LRU cache with O(1) get and put?
  • How would you find the k most frequent elements in a large list?

Explain the concept of Big O notation and provide examples.

Medium · Coding / Algorithms

Approach

  1. Define it: Big O is an asymptotic upper bound on growth; f(n) is O(g(n)) if there are constants c and n0 with f(n) <= c * g(n) for all n >= n0. That is why constants and lower-order terms are dropped: 3n^2 + 5n is O(n^2).
  2. Give one example per class: O(1) array indexing, O(log n) binary search on a sorted array, O(n) a single scan for a maximum, O(n log n) merge sort, O(n^2) two nested loops comparing all pairs, O(2^n) enumerating all subsets, O(n!) all permutations.
  3. Separate the bound from the case: quicksort is O(n log n) on average but O(n^2) in the worst case (bad pivots on sorted input with a naive pivot choice); hash table lookup is O(1) average but O(n) worst case.
  4. Mention amortized cost and space: appending to a dynamic array is amortized O(1) because occasional O(n) resizes double the capacity; recursion depth counts toward space (recursive DFS uses O(depth) stack).
  5. Name the related notations briefly: Omega is a lower bound and Theta a tight bound, so merge sort is Theta(n log n) in every case.

Follow-up

  • Is O(2n) different from O(n)? Is O(n + m) the same as O(n)?
  • What is the time complexity of a function that loops i from 1 to n, doubling i each step?
  • Why can an O(n^2) algorithm beat an O(n log n) one on small inputs?

Write a function to reverse a linked list.

Medium · Coding / Algorithms

Approach

  1. Iterative, in place: prev = null, curr = head; while curr is not null: next = curr.next, curr.next = prev, prev = curr, curr = next; return prev as the new head. O(n) time, O(1) extra space.
  2. Explain why the temporary next pointer is needed: once curr.next is overwritten, the rest of the list is unreachable without it.
  3. Recursive version: reverse the rest, then head.next.next = head and head.next = null, returning the new head from the deepest call; it is O(n) time but O(n) stack space, and Python's default recursion limit of about 1000 makes it fail on long lists.
  4. Test edge cases aloud: empty list (return null), single node, two nodes, and check that the old head's next is null afterwards so no cycle remains.
  5. For a doubly linked list, swap each node's prev and next pointers while walking, and return the last node visited.

Follow-up

  • Reverse only the nodes between positions left and right in one pass.
  • Reverse the list in groups of k nodes, leaving a final short group as it is.
  • How would you check whether a linked list is a palindrome in O(1) extra space?

Find version gaps and relay lag with window functions

Medium · window functions · event tables · frame semantics

outbox_event holds event_id, aggregate_type, aggregate_id, aggregate_version, event_type, payload, status ('pending','published','dead'), attempts, created_at, published_at. A projection is missing rows and you must decide whether the relay skipped events or the consumer dropped them. Write three queries over the last seven days: one listing every aggregate_id whose published aggregate_version sequence has a hole, one giving per-day counts with a running total, and one returning the newest published event per aggregate. For each, say where the window function is evaluated relative to WHERE and LIMIT. PostgreSQL 16.

Approach

  1. Gaps: compute lead(aggregate_version) OVER (PARTITION BY aggregate_id ORDER BY aggregate_version) in a subquery, then filter next_version <> aggregate_version + 1 in the outer query. Window functions are evaluated after WHERE, GROUP BY and HAVING and before the outer ORDER BY and LIMIT, so the predicate cannot sit in the same WHERE clause and PostgreSQL 16 has no QUALIFY.
  2. Say what the seven-day filter does to the answer: it truncates every partition, so the first row per aggregate has no predecessor inside the window and a hole spanning the boundary is invisible. Widen the window, or join to resource.version as the authority for the true maximum.
  3. Running total: SELECT date_trunc('day', created_at) AS d, count() AS n, sum(count()) OVER (ORDER BY date_trunc('day', created_at) ROWS UNBOUNDED PRECEDING). An aggregate inside a window call is legal because grouping runs before windowing. The grouping key is unique per row here so ROWS and RANGE agree, but write the frame anyway — over ungrouped rows with tied timestamps the default RANGE frame pulls in every peer row and the total jumps.
  4. Newest per aggregate: DISTINCT ON (aggregate_id) ... ORDER BY aggregate_id, aggregate_version DESC is the cheap PostgreSQL-only form when an index matches that order; row_number() OVER (PARTITION BY aggregate_id ORDER BY aggregate_version DESC) = 1 is the portable form and needs a subquery for the same evaluation-order reason as the gap query.

Follow-up

  • Relay failover redelivers events. Does a duplicate break the gap query, and how would you detect one from this table alone?
  • Turn the gap check into a continuous monitor rather than a query someone runs after an incident. What does it watch?

Replace offset paging on the resource feed with keyset

Easy · keyset pagination · composite index · sort order

resource holds resource_id, tenant_id, owner_user_id, title, body_ref, version, status ('draft','active','archived','deleted'), created_at, updated_at, deleted_at, with an index on (tenant_id, status, updated_at DESC, resource_id DESC). The listing endpoint returns active resources for one tenant, newest update first, 50 per page, today with LIMIT 50 OFFSET n. Tenants reach page 400 and rows are created while they read. Write the keyset query, define what the cursor carries and how it is encoded, and say which part of the index each predicate uses. Assume PostgreSQL 16.

Approach

  1. Name the two failures separately. OFFSET 20000 makes the server produce and discard 20,000 rows, so page cost grows with depth rather than with page size. Independently, any write that changes how many rows sort above the offset moves the window between two fetches, and the direction decides which anomaly you get: an insert lands at the head of updated_at DESC and pushes already-returned rows down past the boundary, so they are returned a second time; a delete above the offset, or a row whose updated_at is bumped above the cursor, pulls rows up and one is never returned at all. Nothing in the response reveals either.
  2. Write the seek: WHERE tenant_id = $1 AND status = 'active' AND (updated_at, resource_id) < ($2, $3) ORDER BY updated_at DESC, resource_id DESC LIMIT 50. The row-value comparison is one index range rather than a disjunction, and both columns are NOT NULL, which is what makes that comparison well defined.
  3. Map each predicate onto the index: tenant_id and status are equality on the leading columns, (updated_at, resource_id) is the range, and the ORDER BY matches the index order so no Sort node appears and the scan stops after 50 rows. The DESC in the definition only matters for mixed directions — a plain ascending btree on the same columns is read backwards for this query.
  4. Put both sort columns in the cursor and nothing the client can tamper with into another tenant: base64 of (updated_at, resource_id), validated server-side, with tenant_id taken from the principal.

Follow-up

  • The client asks for 'jump to page 400'. What do you offer instead, and what does the honest version cost?
  • Sort order becomes user-selectable across four columns. How many indexes is that, and which would you refuse to add?

Explain the principles of Object-Oriented Programming.

Medium · Technical / Domain Questions

Approach

  1. Name the four principles and give each a one-line code example: encapsulation (state behind methods, e.g. a BankAccount whose balance changes only via deposit/withdraw), abstraction (callers use an interface, not the implementation), inheritance (a subclass reuses and extends a base class), polymorphism (one call, behaviour chosen at runtime by the object's type).
  2. Explain polymorphism concretely: dynamic dispatch picks the overriding method at runtime (shape.area() on a Circle or a Square), while overloading in Java is resolved at compile time from the argument types.
  3. Contrast languages you list: Java enforces access with private/protected/public; Python has no enforced privacy, only the _name convention and __name mangling, and relies on duck typing for polymorphism.
  4. Give the trade-off: deep inheritance trees couple subclasses to base-class internals, so prefer composition (has-a) when the relationship is not a true is-a.
  5. Mention the Liskov substitution principle with the classic Square-extends-Rectangle failure: setting width on a Square silently changes its height, breaking callers that expect a Rectangle.

Follow-up

  • When would you choose composition over inheritance, and can you show it in a small example?
  • What is the difference between an abstract class and an interface in Java?
  • How does polymorphism work in a dynamically typed language like JavaScript or Python?

What are the differences between REST and GraphQL?

Medium · Technical / Domain Questions

Approach

  1. REST exposes resources at many URLs and uses HTTP methods (GET, POST, PUT, PATCH, DELETE) and status codes; GraphQL exposes one endpoint with a typed schema, and the client sends a query naming exactly the fields it wants.
  2. Fetching: REST endpoints return fixed shapes, so clients over-fetch or make several round trips (under-fetching); a single GraphQL query can pull nested data, such as a user with their orders, in one request.
  3. Caching: REST GETs work with HTTP caching (Cache-Control, ETag, CDNs) out of the box; GraphQL usually POSTs to one URL, so caching moves to a normalized client cache (Apollo, Relay) or to persisted queries sent as GET.
  4. Server cost: naive GraphQL resolvers cause N+1 queries (one per child object); batch them with DataLoader. Arbitrary queries also need depth or complexity limits to stop expensive requests.
  5. Errors and evolution: GraphQL commonly returns HTTP 200 with an errors array, so monitoring cannot rely on status codes; REST often versions the URL (/v1), while GraphQL adds fields and marks old ones @deprecated.

Follow-up

  • How would you solve the N+1 problem in a GraphQL server built on Node.js?
  • When would you still choose REST for a new service?
  • How do you cache GraphQL responses, given that most requests are POSTs to one endpoint?

How do you manage state in a React application?

Medium · Technical / Domain Questions

Approach

  1. Classify the state first: local UI state (useState, or useReducer for multi-field transitions), shared state between siblings (lift it to the nearest common parent), server data (fetched and cached), and URL state (filters, page number in the query string).
  2. Avoid storing derived state: compute it during render, using useMemo only if it is expensive, so it can never drift from its source.
  3. Update immutably and with functional updaters: setCount(c => c + 1) is correct when the next value depends on the previous one, because React batches updates and a stale closure would read an old value.
  4. Use Context for low-frequency global values (theme, auth user); every consumer re-renders when the value changes, so memoize the value object or split contexts. For frequently changing global client state, use Redux Toolkit or Zustand, whose selectors limit re-renders.
  5. Handle server state with React Query or SWR rather than a global store: they give caching, request deduplication, stale-while-revalidate refetching and loading and error states.

Follow-up

  • Why does a component re-render when an unrelated field in a Context value changes, and how would you prevent it?
  • What is a stale closure in useEffect, and how do the dependency array or a ref fix it?
  • When would you introduce Redux into an app that uses only hooks today?

Discuss a complex technical challenge you faced and how you resolved it.

Medium · Technical / Domain Questions

Approach

  1. Pick one problem with a measurable symptom (a latency number, a crash rate, a failing integration) where you personally did the diagnosis or design, and tell it with "I", naming what others did separately.
  2. Lay out the constraints that made it hard: legacy code, hardware or embedded limits, a dependency you could not change, a deadline.
  3. Walk through the hypotheses in order and the evidence that eliminated each (profiler output, logs, a reproduction, a bisected commit), so the reasoning is visible, not only the fix.
  4. State the fix and the alternative you rejected, with the trade-off (for example, a cache that added staleness versus a query rewrite that took longer).
  5. Close with the result in numbers and what you added to stop a recurrence: a test, an alert, a runbook. The answer that fails is one where the result is vague or the problem was solved by someone else.

Follow-up

  • Which alternative did you reject, and why?
  • How did you verify the fix worked in production and did not just move the problem?
  • What would you do differently if you met the same problem again?

Given a scenario where a project deadline is at risk, how would you prioritize tasks?

Medium · Problem-Solving / Case Studies

Approach

  1. Quantify the gap first: list remaining tasks with estimates, compare them with the capacity left before the date, and find the critical path, the chain of dependent tasks that sets the earliest finish.
  2. Sort tasks by value and risk: what the release cannot ship without, what can follow in a later release, and what is risky enough that it should be started first so surprises appear early.
  3. Lay out the real options with their costs: cut or defer scope, move the date, or add people, noting that new people on a late project need ramp-up time and often slow it further at first (Brooks's law). Treat skipping tests as a cost to name, not a free option.
  4. Take the options to the product owner early with a recommendation, rather than announcing a miss at the deadline; agree on the reduced scope in writing.
  5. Re-plan and track daily against the new scope so the next slip is visible within a day; give an example from your own work if you have one.

Follow-up

  • The product manager says every feature is a must-have. What do you do?
  • How do you decide what to defer when two features depend on the same component?
  • How do you stop the same deadline risk from recurring on the next project?

How would you design a system to handle 10,000 requests per second?

Medium · Problem-Solving / Case Studies

Approach

  1. Clarify before drawing: read/write ratio, payload size, latency target (for example p99), consistency needs, and whether 10,000 is the average or the peak. 10,000 requests per second is 864 million a day, so size for the peak plus headroom.
  2. Front tier: a load balancer in front of stateless application servers with autoscaling; measure one instance's throughput with a load test and divide (if one handles about 1,000 rps for this workload, you need about 10 plus spare capacity for a failed instance). With Node.js, keep the event loop free of blocking work and run one process per core or use clustering.
  3. Reads: put a CDN in front of static and cacheable responses and Redis in front of the database; at a 90% cache hit rate the database sees about 1,000 rps instead of 10,000. Say how cache entries are invalidated or expire.
  4. Database: connection pooling, read replicas for reads, indexes for the hot queries, and sharding by a key such as user id only if writes exceed one primary. Move slow or bursty writes onto a queue (Kafka, SQS) processed by workers.
  5. Resilience: rate limiting per client, timeouts on every downstream call, retries with exponential backoff and jitter, and circuit breakers; monitor latency percentiles, error rate and saturation per tier.

Follow-up

  • What fails first if traffic grows to 100,000 requests per second?
  • How do you keep the cache consistent when the underlying data changes?
  • How would you load-test this before launch, and what would you measure?

Describe how you would approach debugging a performance issue in a web application.

Medium · Problem-Solving / Case Studies

Approach

  1. Pin down the symptom: which page or endpoint, which metric (p50 versus p95/p99 latency, LCP, INP), since when, and for which users; then reproduce it and record a baseline before changing anything.
  2. Split the request in two: in browser DevTools, the Network waterfall separates server time (TTFB) from download, and the Performance panel shows long JavaScript tasks and rendering. In a client-rendered React app the HTML document's TTFB is usually fast because it comes from a CDN, while LCP often waits on API calls made after hydration, so check the TTFB of those fetch/XHR requests in the waterfall before blaming the frontend; a slow API response points to the backend.
  3. Backend: use traces or APM spans to find where time goes, then check the database with the slow query log and EXPLAIN ANALYZE for sequential scans, missing indexes and N+1 query patterns. In Node.js, profile with --inspect for synchronous work that blocks the event loop.
  4. Frontend: check bundle size (code splitting, tree shaking), uncompressed or unoptimized images, missing Cache-Control headers, and React components re-rendering on every keystroke (React DevTools Profiler).
  5. Change one thing at a time and compare against the baseline under the same load; check whether a recent deploy, a traffic change or data growth lines up with the start of the slowdown.

Follow-up

  • The p50 is fine but the p99 is ten times worse. What do you suspect and how would you confirm it?
  • The issue appears only in production, not locally. How do you investigate without making it worse?
  • Memory in a Node.js service grows until it restarts. How would you find the leak?

Suggested practice checklist

The plan starts with your project story, then covers the reported question groups in order: core computer science, whiteboard coding, React and REST, performance and design, project and deadline stories, then a full rehearsal. Each day produces something you can reuse in the interview.

Day 1 — Map the loop and inventory your experience

  • Write the two reported rounds (Screening Interview, Technical Interviews) and note which question types each stage can contain, marking the one you are least ready for
  • Write a project walkthrough for your two strongest projects: problem, stack, your own contribution and one trade-off
  • Build a table of Python, Java, JavaScript, React, Node.js, AWS or Azure, and SQL or NoSQL against a real project where you used each, and mark the gaps

Deliverable: A one-page loop map, two project walkthroughs and a stack-evidence table with the gaps marked.

Day 2 — Core computer science: OOP, Big O and the linked list

  • Explain the principles of Object-Oriented Programming aloud with a small example class design in your chosen language, including one case where composition is the better choice
  • Write a Big O reference with an example from real code for O(1), O(log n), O(n), O(n log n) and O(n^2), and a short explanation of space complexity
  • Reverse a linked list iteratively and recursively on paper, trace empty, one-node and two-node inputs, and state the time and space of each version

Deliverable: A spoken OOP answer with an example, a Big O table backed by your own code, and two verified reversal solutions.

Day 3 — Whiteboard data-structure practice

  • Solve three data-structure problems by hand without running anything: a hash-map lookup problem, a stack-based matching problem and a queue or two-pointer problem
  • Narrate each solution as you write it: restate the input, give the brute-force approach, choose the structure from the access pattern, then state complexity
  • Re-solve the one you found hardest from a blank page the next day, again without running it

Deliverable: Three handwritten solutions with stated complexities, plus one re-solved from memory.

Day 4 — React state, Node.js and REST versus GraphQL

  • Build a small React component tree that uses useState, then refactors to useReducer and context, and write down when you would use each
  • Write a Node.js endpoint for a resource, then the equivalent GraphQL schema and query, and list over-fetching, caching, versioning and N+1 differences
  • Run a Node.js drill: explain how the event loop is blocked by synchronous work, handle errors in async/await code including unhandled promise rejections, and say when you would reach for worker threads or clustering

Deliverable: A small working React and Node.js example, a one-page REST versus GraphQL comparison, a Node.js event-loop and error-handling cheat sheet and a rehearsed state-management answer.

Day 5 — Performance debugging and high-volume design

  • Write a debugging runbook for a slow web application: reproduce, measure in the browser (profile, network waterfall), then API latency by percentile, then database queries, then fix and verify
  • Design a service for 10,000 requests per second: clarify read and write mix, estimate per-instance capacity, then add a load balancer, stateless Node.js instances, caching and a database plan
  • List where each design breaks first at ten times the traffic and how you would find out

Deliverable: A one-page debugging runbook and a design sketch with capacity arithmetic and the first bottleneck named.

Day 6 — Project stories: challenge, deployment and deadlines

  • Write the complex technical challenge story: context, options you weighed, what you chose, how you verified it and what you would change
  • Write your deployment story from commit to production, including the rollback and one failure, and be honest about which cloud platform you used
  • Write a prioritization answer for a project whose deadline is at risk: reconfirm scope with the product manager, rank by user impact and dependency, cut or defer, communicate the new plan
  • Optional, if your resume includes embedded or low-level work: write talking points on the resource constraints, memory limits and real-time requirements you worked under and how they shaped your design

Deliverable: Three written story outlines (challenge, deployment, deadline at risk) ready to speak from, plus embedded-work talking points if they apply.

Day 7 — Behavioral rehearsal and full mock loop

  • Outline conflict, team communication and taking-the-lead stories, each with situation, your decision, evidence and result, and say each aloud
  • Run a full mock: a screening-style walkthrough of your resume and motivation, then one coding problem, one design scenario and one domain question without notes
  • Fix the weakest answer from the mock and finalize the questions you will ask your interviewers

Deliverable: Three rehearsed behavioral stories, a completed mock with the weakest answer reworked, and a list of questions for interviewers.

Behavioral prep: deployment, conflict, communication, leading

Candidates report behavioral questions on cloud and deployment experience, a conflict with a team member, communication within a team, and taking the lead on a project. The role is described as working with product managers, designers and other engineers, and as including code review, so choose stories from real projects that show collaboration as well as technical work. Prepare each story with your own decisions, the evidence you used and a measurable result, and reuse the same few projects across answers so you can go deep on each.

  1. Discuss a complex technical challenge you faced and how you resolved it.
  2. Given a scenario where a project deadline is at risk, how would you prioritize tasks?

Describe your experience with cloud services and deployment.

Medium · Technical / Domain Questions

Approach

  1. Choose one system you deployed or helped deploy, and describe it from commit to running service: where the code ran (virtual machine, container service or serverless function), what built and tested it, and where configuration and secrets lived. Name only platforms you have used; AWS and Azure are the ones candidates list, so be specific about whichever you claim.
  2. Walk the release path in order: build, automated tests, artifact, staging, production. Say which strategy you used (rolling, blue/green or canary), why it suited the service, and how you rolled back and what signal told you to.
  3. Cover running it, not just shipping it: the logs, metrics and alerts you set up, how you scaled it or sized it, how environments differed, and the CI/CD tool you used by name.
  4. Include one thing that went wrong, such as a failed deploy, a missing migration or configuration drift. Say how you detected it, how you fixed it and what you changed so it would not recur.
  5. If your cloud experience is limited, say so, describe the closest thing you have done (a container on a single host, a managed platform) and how you would map it to AWS or Azure. A list of service names you cannot explain is the mistake that sinks this answer.

Follow-up

  • How did you roll back a bad release, and how quickly could you tell it was bad?
  • How did you keep secrets and environment-specific configuration out of the repository?
  • If you moved that service to a microservices layout, what would you split first and what would get harder?

Tell me about a time you had a conflict with a team member and how you handled it.

Medium · Behavioral / Leadership

Approach

  1. Choose a disagreement about substance (API shape, an estimate, a design choice, review feedback), not a personality clash. Give the context in two sentences, then state each position fairly, including why the other person's view was reasonable.
  2. Show what you actually did: you spoke to the person directly first, asked what constraint they were optimizing for, and brought evidence (a benchmark, a prototype, bug data, a user requirement) instead of repeating your opinion. Escalate only if direct discussion fails, and say when you did.
  3. State the outcome concretely: the decision, what changed in the code or the process, and how you worked together afterwards. Being partly or fully wrong is a fine ending; casting the other person as the villain, or winning by going over their head, sinks the story.
  4. Close with what you took away, for example a written decision record, an agreed review convention or an earlier check-in, so the story shows a habit rather than a one-off.

Follow-up

  • What would you have done if the data had not changed their mind?
  • When did you involve your manager, and why then?
  • What would you do differently if you faced the same disagreement again?

How do you ensure effective communication within your team?

Medium · Behavioral / Leadership

Approach

  1. This is a how-do-you question, so open with your practices and then prove them with one example. Concrete practices: pull request descriptions that say what changed and why, a short written design outline before a large change, decisions recorded where the whole team can find them, and stand-up updates that state blockers instead of activity.
  2. Adapt to the audience, since the role works with product managers, designers and other engineers. With product managers, turn requirements into constraints and trade-offs; with designers, agree early on states and edge cases such as empty, loading and error screens; with engineers, write review comments that give the reason, not only the instruction.
  3. Give one example where communication nearly failed, such as a misread requirement found in a demo, and name the mechanism you added afterwards (restating the requirement in writing, agreeing acceptance criteria up front).
  4. Show that you listen as well as send: you confirm understanding, ask for the decision behind a request, and tell people early when a date is slipping. Listing tools such as chat apps or ticket trackers without a situation where they changed an outcome is the common mistake.

Follow-up

  • How do you explain a technical trade-off to someone who is not an engineer?
  • What do you do when a teammate goes quiet while blocked?
  • Tell me about a time poor communication cost your team something and how you fixed it.

Describe an instance where you took the lead on a project.

Medium · Behavioral / Leadership

Approach

  1. Pick a project where you set direction, whether or not you held the title. Say what the goal and scope were, how you broke the work into tasks, how you split them across people and what check-ins you set up.
  2. Show the judgement calls: a technical or scope decision you made, a risk you raised early, and a trade-off such as cutting a feature to protect a date. Leading means showing decisions you owned, not a list of tasks you did.
  3. Show how you brought others along: you unblocked teammates, reviewed their code, resolved a disagreement and kept the product manager or other stakeholders informed as plans changed.
  4. Give a concrete result from your own project (what shipped, what improved, what the team could do afterwards) and one thing you would change. The usual mistakes are saying we throughout so your own role disappears, or presenting leadership as doing everything yourself.

Follow-up

  • How did you split the work, and how did you know it was on track?
  • What happened when someone fell behind, and what did you do?
  • How did you decide what to cut when time ran short?