cswork / libraryOpen practice workspace

Interview guides · KMS Technology

KMS Technology Software Engineer Interview Guide

KMS Technology Software Engineer interview guide: reported rounds, questions and how candidates describe the process.

The 60-second brief

At KMS Technology, a Software Engineer is not just a coder, but a core driver of digital transformation and product excellence. As a premier global technology consulting and software services company, KMS Technology partners with businesses worldwide to build, scale, and modernize enterprise-grade software. In this role, you will work on diverse, high-impact projects ranging from modern cloud-native architectures to cutting-edge AI Agent development and AI-Native Software Testing tools. Your work directly influences how clients scale their operations, automate complex workflows, and deliver value to millions of end-users. The engineering culture at KMS Technology is built on the pillars of flexibility, self-responsibility, and continuous growth.

This guide is scoped to a Software Engineer candidate at KMS Technology.

Focus areas

  • Java
  • Spring Framework
  • AI Agents Development

The KMS Technology interview process

KMS Technology candidates report 4 rounds over 3-5 weeks. The stages below are what candidates describe, not a published process.

Recruiter Screen

Initial screening focused on your background, communication skills, and career alignment.

What to demonstrate

  • Initial screening focused on your background, communication skills, and career alignment
  • Depth in Java

How to prepare

  • Be able to walk your CV end to end in two minutes, and say why this company specifically.
  • Have your salary expectations, notice period and location constraints ready, and ask for the rest of the loop in writing.

Online Assessment

Complete algorithmic coding challenges and behavioral questions.

What to demonstrate

  • Complete algorithmic coding challenges and behavioral questions
  • Depth in Java

How to prepare

  • Answer aloud and timed: What strategies do you use to resolve dependency conflicts and bundle size issues when upgrading build tools like Webpack?
  • Answer aloud and timed: How does prototypal inheritance work in JavaScript, and how does it differ from class-based inheritance?

Technical Interviews

Rigorous technical interviews with Senior Software Engineers or Software Architects.

What to demonstrate

  • Rigorous technical interviews with Senior Software Engineers or Software Architects
  • Depth in Java

How to prepare

  • Answer aloud and timed: Explain how you would structure CSS and leverage modern layouts (like Flexbox or Grid) to ensure a highly responsive, cross-browser web application.
  • Answer aloud and timed: Walk me through the core concepts of dependency injection and inversion of control in the Spring framework.

Culture and Management Discussion

Discussion focused on cultural fit and management style.

What to demonstrate

  • Discussion focused on cultural fit and management style
  • Depth in Java

How to prepare

  • Prepare three examples from your own work, each with a decision you made and an outcome you can quantify.
  • Re-read the description of the culture and management discussion above and write down what you would ask to confirm before it.

Where candidates lose points

Structure your behavioral answers

Use the STAR method (Situation, Task, Action, Result) to answer behavioral questions. Focus on your specific contributions and quantify the outcomes of your work wherever possible.

Brush up on your core coding skills

Do not neglect algorithmic foundations. Practice writing clean, readable code on platforms like HackerRank, paying close attention to edge cases and input validation.

Assuming the input fits in memory

Ask how large the input is in bytes before committing to an in-memory algorithm; beyond that point the options are a single streaming pass, an external sort with bounded buffers, or a sketch that trades exactness for constant memory. An algorithm that assumes random access to the whole input is a different algorithm from one that sees each element once.

Questions & practice

Given a nested, tree-like data structure representing an organizational hierarchy, write an algorithm to find

Medium · Algorithmic Problem Solving & Data Struc

Given a nested, tree-like data structure representing an organizational hierarchy, write an algorithm to find the shortest path between two nodes.

Approach

  1. Restate the input: its shape, its size, and what is guaranteed about it.
  2. Name the brute-force solution and its complexity before improving on it.
  3. Choose the data structure from the access pattern, not from familiarity.
  4. State the target complexity and say which constraint rules the naive version out.

Follow-up

  • How does this change if the input no longer fits in memory?
  • What is the worst case, and how likely is it on real data?

How do you analyze and optimize the time and space complexity of an algorithm? Provide an example of optimizin

Medium · Algorithmic Problem Solving & Data Struc

How do you analyze and optimize the time and space complexity of an algorithm? Provide an example of optimizing an O(N2)O(N^2) operation to O(Nlog⁡N)O(N \log N).

Approach

  1. Restate the input: its shape, its size, and what is guaranteed about it.
  2. Name the brute-force solution and its complexity before improving on it.
  3. Choose the data structure from the access pattern, not from familiarity.
  4. State the target complexity and say which constraint rules the naive version out.

Follow-up

  • How does this change if the input no longer fits in memory?
  • What is the worst case, and how likely is it on real data?

Walk through your approach to solving a classic algorithmic challenge, such as detecting cycles in a directed

Medium · Algorithmic Problem Solving & Data Struc

Walk through your approach to solving a classic algorithmic challenge, such as detecting cycles in a directed graph or finding the longest common subsequence.

Approach

  1. Restate the input: its shape, its size, and what is guaranteed about it.
  2. Name the brute-force solution and its complexity before improving on it.
  3. Choose the data structure from the access pattern, not from familiarity.
  4. State the target complexity and say which constraint rules the naive version out.

Follow-up

  • How does this change if the input no longer fits in memory?
  • What is the worst case, and how likely is it on real data?

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?

Denormalise tenant onto revisions and backfill it live

Hard · denormalisation · online migration · backfill

resource_revision (revision_id, resource_id, version, actor_user_id, change_kind, patch, request_id, created_at) has 400M rows and no tenant column; tenant_id lives only on resource. Two reads need it: a tenant-scoped audit feed ordered by created_at DESC, and an offboarding purge. Both join back to resource today. Justify adding tenant_id to resource_revision against those two reads, name the anomaly the copy introduces and the constraint that prevents it, then give the ordered migration for a live table taking 1.2k writes/second — the lock each step takes, how the backfill is batched, and where each step stops being reversible. PostgreSQL 16.

Approach

  1. Justify from the access path rather than from taste. Without the column, the audit feed either scans resource_revision by created_at and discards other tenants' rows, or resolves the tenant's resource_ids first and probes with them — both proportional to the tenant's whole history rather than to one page. With (tenant_id, created_at DESC, revision_id DESC) it is a seek that stops at 50 rows, and the purge becomes a ranged delete instead of a join.
  2. Name the cost exactly: a second copy of a fact can disagree with the first. Make the disagreement unwritable rather than documented — add UNIQUE (resource_id, tenant_id) on resource so it can serve as a foreign-key target, then FOREIGN KEY (resource_id, tenant_id) REFERENCES resource (resource_id, tenant_id) on the revision table. A revision can then only ever carry its parent's tenant.
  3. Step one, expand: ALTER TABLE resource_revision ADD COLUMN tenant_id BIGINT NULL, with no default, so it is a catalogue change and no rewrite. It still needs ACCESS EXCLUSIVE for an instant, and that instant queues behind the longest open transaction on the table while every later query queues behind it — set lock_timeout to 2s and retry rather than wait.
  4. Step two, dual-write: deploy the writer that populates tenant_id on every new revision while reads still use the join. Reversible by redeploying the previous build, because nothing reads the column yet.

Follow-up

  • The backfill is half finished and a rollback is required. What state is the table in, and what does the previous build do with a half-populated column?
  • How do you verify the backfill actually finished, given rows are still being inserted while it runs?

Explain the difference between arrow functions and regular functions. In which scenarios should you avoid usin

Medium · Frontend & JavaScript Core

Explain the difference between arrow functions and regular functions. In which scenarios should you avoid using arrow functions?

Approach

  1. Clarify what is being asked and what a complete answer contains.
  2. State your assumptions explicitly before working the problem.
  3. Say what you would check first and why it is the highest-information step.
  4. Work from the requirement backwards to the design.

Follow-up

  • What assumption would you test first?
  • How would you know your answer was wrong?

How do you optimize a complex, tree-like JavaScript object to ensure efficient rendering and manipulation in t

Medium · Frontend & JavaScript Core

How do you optimize a complex, tree-like JavaScript object to ensure efficient rendering and manipulation in the DOM?

Approach

  1. Clarify what is being asked and what a complete answer contains.
  2. State your assumptions explicitly before working the problem.
  3. Say what you would check first and why it is the highest-information step.
  4. Work from the requirement backwards to the design.

Follow-up

  • What assumption would you test first?
  • How would you know your answer was wrong?

How does prototypal inheritance work in JavaScript, and how does it differ from class-based inheritance?

Medium · Frontend & JavaScript Core

Approach

  1. Clarify what is being asked and what a complete answer contains.
  2. State your assumptions explicitly before working the problem.
  3. Say what you would check first and why it is the highest-information step.
  4. Work from the requirement backwards to the design.

Follow-up

  • What assumption would you test first?
  • How would you know your answer was wrong?

Explain how you would structure CSS and leverage modern layouts (like Flexbox or Grid) to ensure a highly resp

Medium · Frontend & JavaScript Core

Explain how you would structure CSS and leverage modern layouts (like Flexbox or Grid) to ensure a highly responsive, cross-browser web application.

Approach

  1. Clarify what is being asked and what a complete answer contains.
  2. State your assumptions explicitly before working the problem.
  3. Say what you would check first and why it is the highest-information step.
  4. Work from the requirement backwards to the design.

Follow-up

  • What assumption would you test first?
  • How would you know your answer was wrong?

Walk me through the core concepts of dependency injection and inversion of control in the Spring framework.

Medium · Backend & Enterprise Architecture

Approach

  1. Fix the scope first: who calls this, how often, and what they do when it fails.
  2. Name the read and write paths separately; they rarely have the same bottleneck.
  3. Choose a partition key and say what query it makes expensive.
  4. State the consistency you need, and where you are willing to be stale.

Follow-up

  • What breaks first when traffic grows ten times?
  • How does this behave when that dependency is down for an hour?

How do you manage transaction boundaries in a multi-service Spring Boot application?

Medium · Backend & Enterprise Architecture

Approach

  1. Fix the scope first: who calls this, how often, and what they do when it fails.
  2. Name the read and write paths separately; they rarely have the same bottleneck.
  3. Choose a partition key and say what query it makes expensive.
  4. State the consistency you need, and where you are willing to be stale.

Follow-up

  • What breaks first when traffic grows ten times?
  • How does this behave when that dependency is down for an hour?

How would you design a secure, RESTful API that needs to handle high concurrent traffic and complex data paylo

Medium · Backend & Enterprise Architecture

How would you design a secure, RESTful API that needs to handle high concurrent traffic and complex data payloads?

Approach

  1. Fix the scope first: who calls this, how often, and what they do when it fails.
  2. Name the read and write paths separately; they rarely have the same bottleneck.
  3. Choose a partition key and say what query it makes expensive.
  4. State the consistency you need, and where you are willing to be stale.

Follow-up

  • What breaks first when traffic grows ten times?
  • How does this behave when that dependency is down for an hour?

What are the primary differences between.NET Core and traditional.NET Framework regarding performance and cros

Medium · Backend & Enterprise Architecture

What are the primary differences between.NET Core and traditional.NET Framework regarding performance and cross-platform deployment?

Approach

  1. Fix the scope first: who calls this, how often, and what they do when it fails.
  2. Name the read and write paths separately; they rarely have the same bottleneck.
  3. Choose a partition key and say what query it makes expensive.
  4. State the consistency you need, and where you are willing to be stale.

Follow-up

  • What breaks first when traffic grows ten times?
  • How does this behave when that dependency is down for an hour?

Every query on one table stalls for forty seconds mid-deploy

Medium · lock contention · ddl · migrations

During a release on PostgreSQL, every query touching resource times out for about 40 seconds and then recovers with no intervention. The release ran one migration, ALTER TABLE resource ADD COLUMN archived_reason TEXT, and the migration log shows it completing in 6 ms. Unrelated tables showed no change in error rate. Explain how a 6 ms statement caused a 40-second stall, give the ordered checks you would run on a live system to confirm it, and give the migration procedure that prevents a repeat.

Approach

  1. Separate the statement's duration from the lock's duration. ADD COLUMN with no default is a catalogue-only change and genuinely runs in milliseconds, but it requires ACCESS EXCLUSIVE, and it cannot acquire that until every transaction already touching the table has finished.
  2. Account for the queueing, which is the part that surprises people. A lock request that is waiting blocks later requests for conflicting modes behind it rather than letting them overtake, so one long-open transaction holds the DDL and the DDL holds all the traffic. The stall length is set by the longest open transaction, not by the size of the change.
  3. Confirm on a live system in this order: pg_stat_activity for that table ordered by xact_start, looking for the oldest transaction and specifically for state = idle in transaction; then pg_locks where granted = false to find the waiter; then join them on pid to name blocker and blocked. pg_blocking_pids() does that join for you and is the fastest single call.
  4. Prevent rather than merely time it better. Set lock_timeout to a second or two on the migration session so the DDL abandons the queue after a bounded wait and is retried, instead of holding it for as long as the oldest transaction lives. Be exact about what that buys: queries arriving during the wait still queue behind the pending ACCESS EXCLUSIVE request, so each attempt costs them up to one lock_timeout of added latency. The outage goes from 40 seconds to about one second per attempt, not to zero. Also run migrations away from deploy-time peaks, and put a statement timeout and an idle-in-transaction timeout on the analytics role that opens the long transactions.

Follow-up

  • The same release also wants NOT NULL on that column. What is the sequence that gets there without a long lock?
  • Your lock_timeout retry fails ten times in a row because the analytics transaction is always open. What do you change?

Suggested practice checklist

Built from the rounds and topics KMS Technology candidates report.

Day 1 — Map the KMS Technology loop

  • Write out the reported sequence: Recruiter Screen, Online Assessment, Technical Interviews, Culture and Management Discussion.
  • For each round, write one sentence on what it is judging, from the description above, and mark the one you are least ready for.

Deliverable: A one-page map of the 4 reported rounds, with the weakest marked.

Day 2 — Work Java

  • Spend the session on Java, which KMS Technology candidates report being tested on.
  • Write one worked example in Java and time yourself on it.

Deliverable: One timed worked example in Java.

Day 3 — Work Spring Framework

  • Spend the session on Spring Framework, which KMS Technology candidates report being tested on.
  • Write one worked example in Spring Framework and time yourself on it.

Deliverable: One timed worked example in Spring Framework.

Day 4 — Work AI Agents Development

  • Spend the session on AI Agents Development, which KMS Technology candidates report being tested on.
  • Write one worked example in AI Agents Development and time yourself on it.

Deliverable: One timed worked example in AI Agents Development.

Day 5 — Answer out loud: Frontend & JavaScript Core

  • Answer aloud, timed: Explain the difference between arrow functions and regular functions. In which scenarios should you avoid using arrow functions?
  • Answer aloud, timed: How do you optimize a complex, tree-like JavaScript object to ensure efficient rendering and manipulation in the DOM?

Deliverable: Spoken answers to 2 reported Frontend & JavaScript Core question(s), under time.

Day 6 — Answer out loud: Backend & Enterprise Architecture

  • Answer aloud, timed: Walk me through the core concepts of dependency injection and inversion of control in the Spring framework.
  • Answer aloud, timed: How do you manage transaction boundaries in a multi-service Spring Boot application?

Deliverable: Spoken answers to 2 reported Backend & Enterprise Architecture question(s), under time.

Day 7 — Answer out loud: Algorithmic Problem Solving & Data Structures

  • Answer aloud, timed: Given a nested, tree-like data structure representing an organizational hierarchy, write an algorithm to find the shortest path between two nodes.
  • Answer aloud, timed: How do you analyze and optimize the time and space complexity of an algorithm? Provide an example of optimizing an O(N2)O(N^2) operation to O(Nlog⁡N)O(N \log N).

Deliverable: Spoken answers to 2 reported Algorithmic Problem Solving & Data Structures question(s), under time.

Behavioural preparation

Behavioural rounds judge the decision you made and what it cost.

What strategies do you use to resolve dependency conflicts and bundle size issues when upgrading build tools l

Medium · Frontend & JavaScript Core

What strategies do you use to resolve dependency conflicts and bundle size issues when upgrading build tools like Webpack?

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?

Describe your experience deploying and managing backend services on cloud platforms like AWS or Azure.

Medium · Backend & Enterprise Architecture

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?

Describe your greatest professional strength and a weakness you are actively working to improve.

Medium · Behavioral & Culture Fit

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?

Tell me about a time you encountered a highly complex technical issue. How did you identify the root cause, an

Medium · Behavioral & Culture Fit

Tell me about a time you encountered a highly complex technical issue. How did you identify the root cause, and how did you document the solution for your team?

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?

How do you handle situations where there is a disagreement on technical direction or architecture within your

Medium · Behavioral & Culture Fit

How do you handle situations where there is a disagreement on technical direction or architecture within your development team?

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?

Describe a situation where you had to work in a highly flexible, self-responsible environment. How did you man

Medium · Behavioral & Culture Fit

Describe a situation where you had to work in a highly flexible, self-responsible environment. How did you manage your time and prioritize tasks?

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?