Kotlin Interview Questions (2026): By Level, With Model Answers

How to use this

Kotlin fixes a lot of Java’s sharp edges, but only if you use it idiomatically. These questions check whether a candidate writes Kotlin or Java-in-Kotlin.

Hiring a Kotlin developer is easy. Telling a real one from a convincing résumé is the hard part — and it’s most of what we do. These are grouped by level, because the same question that stretches a junior is a warm-up for a senior.

Junior Kotlin interview questions

0–2 years

Language fundamentals.

How does null safety work in Kotlin?

What a strong answer covers

Types are non-nullable by default; nullable types use ?, and the compiler forces you to handle nulls with ?., ?: or checks.

Red flag

Uses !! everywhere, defeating null safety.

What is the difference between val and var?

What a strong answer covers

val is a read-only reference, var is reassignable; prefer val for immutability.

Red flag

Uses var by default with no reason.

What is a data class?

What a strong answer covers

A class that auto-generates equals, hashCode, toString and copy for holding data.

Red flag

Writes boilerplate equals/hashCode by hand.

What are the safe-call and Elvis operators?

What a strong answer covers

?. calls only if non-null; ?: provides a fallback value; together they replace verbose null checks.

Red flag

Uses nested if-null checks instead.

What is the difference between == and ===?

What a strong answer covers

== calls equals (structural), === checks referential identity.

Red flag

Assumes == is reference equality like Java.

What are when expressions?

What a strong answer covers

A powerful switch that can return a value, match ranges/types, and be exhaustive over sealed types.

Red flag

Writes long if-else chains instead.

What is string templating?

What a strong answer covers

Embedding expressions in strings with $ and ${} rather than concatenation.

Red flag

Concatenates strings with + everywhere.

What are default and named arguments?

What a strong answer covers

Parameters can have defaults and be passed by name, reducing overloads and improving readability.

Red flag

Writes many overloads instead of defaults.

Mid-level Kotlin interview questions

2–5 years

Idioms and coroutines.

What are extension functions?

What a strong answer covers

Functions that add behaviour to existing types without inheritance, resolved statically.

Red flag

Wraps classes unnecessarily to add helpers.

What are coroutines and how do they differ from threads?

What a strong answer covers

Lightweight, suspendable computations for asynchronous code that read sequentially; many coroutines multiplex onto few threads.

Red flag

Blocks threads instead of suspending.

What is suspend and structured concurrency?

What a strong answer covers

suspend functions can pause without blocking; structured concurrency scopes coroutines so they’re cancelled together and don’t leak.

Red flag

Launches coroutines with no scope, leaking them.

What are sealed classes and why use them?

What a strong answer covers

Restricted class hierarchies that enable exhaustive when handling, great for modelling states/results.

Red flag

Uses enums or open classes where sealed fits.

What are higher-order functions and lambdas?

What a strong answer covers

Functions taking or returning functions; lambdas plus the trailing-lambda syntax make DSL-like APIs readable.

Red flag

Avoids functional style and writes verbose loops.

What do let, apply, run, also, with do?

What a strong answer covers

Scope functions that differ in receiver (this vs it) and return value; used for null handling and configuration.

Red flag

Uses them randomly without knowing the difference.

What is the difference between a List and a MutableList?

What a strong answer covers

The read-only List interface vs the mutable one; Kotlin encourages immutable collections by default.

Red flag

Defaults to mutable collections everywhere.

How does Kotlin interoperate with Java?

What a strong answer covers

Seamless two-way interop; platform types from Java can be null, so you add null handling at the boundary.

Red flag

Trusts Java-returned values as non-null and hits NPEs.

Senior Kotlin interview questions

5+ years

Concurrency, design and Android.

How do coroutine dispatchers and context work?

What a strong answer covers

Dispatchers (Main, IO, Default) decide which thread pool runs the work; you switch context with withContext for the right workload.

Red flag

Runs blocking IO on the Main dispatcher.

What are Flows and how do they differ from suspend functions?

What a strong answer covers

Cold asynchronous streams of values with operators and backpressure, versus a single suspended result.

Red flag

Uses one-shot suspend functions where a stream is needed.

How do you handle coroutine exceptions and cancellation?

What a strong answer covers

Cancellation is cooperative and propagates through the scope; use SupervisorJob and handlers where children should fail independently.

Red flag

Swallows CancellationException and breaks cancellation.

What are inline functions and reified generics for?

What a strong answer covers

inline avoids lambda allocation overhead and enables reified type parameters so generic types are available at runtime.

Red flag

No idea why some generic functions can inspect types.

How do you design idiomatic APIs in Kotlin?

What a strong answer covers

Immutability, null safety at boundaries, sealed results, extension functions and DSLs where they aid readability.

Red flag

Writes Java-style APIs in Kotlin.

How do delegated properties work (e.g. by lazy)?

What a strong answer covers

Property access is delegated to an object implementing get/set, enabling lazy initialisation, observables and map-backed properties.

Red flag

Reimplements lazy initialisation manually and unsafely.

What is Kotlin Multiplatform and its tradeoffs?

What a strong answer covers

Sharing business logic across platforms while keeping native UIs; it reduces duplication but adds build and tooling complexity.

Red flag

Thinks it means one UI for all platforms.

How do you test coroutine-based code?

What a strong answer covers

A test dispatcher and runTest to control virtual time, making suspending code deterministic.

Red flag

Adds real delays and flaky sleeps in tests.

Skip the screening entirely.We vet Kotlin engineers so you don’t have to — embed one in your team, or have us build it.

Hire Kotlin developersCompare us

Build and score a full interview with our free interview scorecard tool, browse the full question hub, or see how we interview engineers.

Share