What should you review for an Android and Kotlin interview?

Which topics should you start with?

Kotlin Multiplatform appeared in the most interviews, covering 11 of 30 interviews. Android fundamentals and architecture were the next most common topics in these interviews. Start with concrete checks: can you explain what code you would share across platforms, how an Android lifecycle works, and why you use a ViewModel?

The questions span junior, mid-level, and senior levels. Use them to check both basic terms and design choices. For example, can you define an extension function and explain what advantage it gives you?

Can you explain Kotlin Multiplatform trade-offs?

The most asked question covered Kotlin Multiplatform challenges, trade-offs, and how to address them. It appeared in 3 of 30 interviews. The topic also covers Compose Multiplatform, working with Swift, platform differences, migration, and team organization.

Check whether you can answer:

  • What code would you share, and what would stay specific to each platform?
  • What challenges would you address when working with Swift?
  • How would you choose a framework and plan a migration?
  • How would you organize work across a cross-platform team?

Can you explain Kotlin and coroutine choices?

Repeated questions include extension functions, inline, noinline, and crossinline. Can you explain what each keyword means in a higher-order function?

For coroutines and Flow, check these questions:

  • How do launch and async differ, including how their execution is dispatched?
  • What are coroutine scopes, and when would you use viewModelScope or another scope?
  • What do dispatchers control?
  • What is a Flow, and how would you create one?

Also check whether you can explain structured concurrency and coroutine exception handling. Both are covered by this topic.

Can you connect architecture to app behavior?

Architecture questions cover ViewModels, state delivery, module boundaries, use cases, dependency injection, and app design exercises. Can you explain how state reaches the UI and where dependency injection fits in your design?

For Compose, can you explain state, recomposition, and effects? For Android fundamentals, can you describe how push notifications work and how you would implement them? These checks go beyond naming the tools.

What implementation details should you check?

A coding task appeared in 1 of 30 interviews: defining a Room database class, including its database name and entities. Can you write that class and explain Room setup and migrations?

Check whether you can describe how you would investigate startup problems, memory leaks, or an app that stops responding. For releases, can you explain staged rollouts, feature flags, and rollback strategies?

Who gets asked Android and Kotlin

Mobile developer27 interviews
QA tester1 interviews
ML engineer1 interviews

The 20 most asked Android and Kotlin questions

Counted by interview, not by mention: a question asked twice in one conversation counts once.

  1. What challenges and trade-offs come with Kotlin Multiplatform, and how would you address them?

    Asked in 3 of 30 interviews · last asked May 19 · Scenario · Senior

    Show answer

    Kotlin Multiplatform shares Kotlin code across platforms, but it adds build complexity and still needs platform expertise. I would start with shared business logic, keep platform-specific features separate, and check library support early. For iOS, I would work with iOS developers on Swift-facing APIs and test both shared logic and native integration.

    • Share stable logic first; sharing UI is optional and may limit platform-specific design.
    • Some libraries lack support for every target; use platform-specific implementations behind shared interfaces.
    • Swift interoperability can need wrappers to make shared APIs easy to use.
    • Run tests on each target and budget for CI, debugging, and toolchain maintenance.

    What the interviewer checks: The interviewer checks whether you can balance code reuse against integration costs and plan a practical rollout.

    Other ways it was asked
    • “What potential downsides or trade-offs of Kotlin Multiplatform should leadership be aware of?”
    • “Can you explain any issues you’ve encountered with Kotlin Multiplatform?”
    • “Can you explain how Kotlin Multiplatform works in principle?”
  2. What is an extension function in Kotlin, and what advantage does it give you?

    Asked in 2 of 30 interviews · last asked Sep 2 · Concept · Junior

    Show answer

    An extension function lets you call a new function on an existing type without changing its class or using inheritance. You define it by placing the receiver type before the function name, such as `fun String.lastWord()`. It makes helper functions easier to read and use, including for library classes.

    • Inside the function, `this` refers to the receiver object.
    • Extensions cannot access private or protected members of the receiver.
    • Extensions are resolved using the declared receiver type, not its runtime type.
    • A matching class member takes priority over an extension.
    Code
    fun String.lastWord(): String = trim().substringAfterLast(' ')
    
    fun main() {
        println("Hello Kotlin".lastWord()) // Kotlin
    }

    What the interviewer checks: The interviewer checks whether you understand extension syntax, its readability benefit, and its limits compared with real class members.

    Other ways it was asked
    • “How do you define an extension function in Kotlin?”
  3. What do inline, noinline, and crossinline mean in Kotlin higher-order functions?

    Asked in 2 of 30 interviews · last asked Apr 11 · Concept · Senior

    Show answer

    `inline` asks the compiler to copy a function’s body and eligible lambda bodies into each call site. `noinline` keeps a lambda parameter as a normal function value, so it can be stored or passed elsewhere. `crossinline` allows inlining but forbids the lambda from using `return` to exit the enclosing function.

    • Inlining can reduce lambda allocations and call overhead, but may increase generated code size.
    • An inline lambda can normally use a non-local return to exit its enclosing function.
    • Use `noinline` when the lambda must be treated as a regular function value.
    • Use `crossinline` when invoking the lambda inside another execution context, such as a Runnable; labeled returns remain allowed.

    What the interviewer checks: The interviewer checks whether you understand inlining, lambda storage, and local versus non-local returns.

    Other ways it was asked
    • “What does noinline do in Kotlin?”
    • “Can you explain what inline functions are in Kotlin?”
  4. How do push notifications work, and how would you implement them in a mobile app?

    Asked in 2 of 30 interviews · last asked Sep 30 · Scenario · Mid-level

    Show answer

    Push notifications let a server send messages through FCM on Android or APNs on iOS. On Android, I would add FCM, register its device token with my backend, and handle incoming messages using FirebaseMessagingService. I would configure notification channels, request notification permission where required, and make notification taps open the right screen.

    • Android 8+ requires channels for apps targeting API 26+; Android 13+ requires runtime permission for most notifications.
    • FCM automatically displays notification messages in the background; foreground messages need app handling.
    • Send refreshed tokens to the backend, and remove their user association on logout.
    • Delivery is not guaranteed or always immediate; fetch current data when the app opens.

    What the interviewer checks: The interviewer checks whether you understand the delivery flow, backend registration, Android requirements, and foreground versus background handling.

    Other ways it was asked
    • “How would you handle push notifications in a mobile app?”
    • “How do push notifications work?”
  5. How do launch and async differ in Kotlin coroutines, including how their execution is dispatched?

    Asked in 2 of 30 interviews · last asked Apr 11 · Concept · Mid-level

    Show answer

    `launch` returns a `Job`, with no result value. `async` returns a `Deferred<T>`; `await()` waits for its result or throws its exception. Both use the scope's dispatcher unless overridden, or `Dispatchers.Default` if none exists. The dispatcher controls where execution runs; neither builder guarantees a new thread or parallel execution.

    • `join()` waits for completion but does not return a result or rethrow the coroutine's failure.
    • Both start by default; `CoroutineStart.LAZY` delays starting until needed.
    • A root `launch` reports uncaught failures; a root `async` exposes failures through `await()`.
    • In a regular scope, either child's failure cancels its parent; `async` does not wait for `await()`.

    What the interviewer checks: The interviewer checks result handling, failure propagation, and whether you understand that dispatching works the same for both builders.

    Other ways it was asked
    • “How do launch and async differ in Kotlin coroutines, and how is execution dispatched in each?”
    • “What is the difference between launch and async?”
  6. What are coroutine scopes, including viewModelScope, and when should you use each?

    Asked in 2 of 30 interviews · last asked Sep 2 · Concept · Mid-level

    Show answer

    A coroutine scope defines the context and lifetime of coroutines launched in it. Use viewModelScope for ViewModel work; cancellation happens when the ViewModel is cleared. Use lifecycleScope for Activity or Fragment work; cancellation happens when that lifecycle is destroyed. For Fragment UI work, use viewLifecycleOwner.lifecycleScope.

    • viewModelScope survives configuration changes when the same ViewModel is retained.
    • Use repeatOnLifecycle within a lifecycle scope to stop and restart UI collection as visibility changes.
    • Use coroutineScope to group child tasks; supervisorScope lets siblings continue when one child fails.
    • Use an owned application scope for work that must outlive screens; avoid GlobalScope for ordinary app work.

    What the interviewer checks: The interviewer checks whether you can match coroutine lifetime and cancellation to the owner of the work.

    Other ways it was asked
    • “What are the main coroutine scopes in Kotlin, and when would you use each?”
    • “What is coroutine scope, and what is ViewModel scope?”
  7. What are coroutine dispatchers in Kotlin, and what do they control?

    Asked in 2 of 30 interviews · last asked Sep 2 · Concept · Mid-level

    Show answer

    A coroutine dispatcher controls where a coroutine runs and resumes, usually by choosing a thread or thread pool. On Android, use Dispatchers.Main for UI work, Dispatchers.IO for blocking I/O, and Dispatchers.Default for CPU-heavy work. A coroutine usually inherits its dispatcher from its scope, but you can change it with withContext.

    • A dispatcher is part of the coroutine context.
    • Suspending a coroutine does not block its thread; blocking code still does.
    • A dispatcher does not always keep a coroutine on the same thread.
    • Dispatchers.Main requires platform support, such as kotlinx-coroutines-android.

    What the interviewer checks: The interviewer checks whether you can choose the right dispatcher and keep blocking or CPU-heavy work off the UI thread.

    Other ways it was asked
    • “What are dispatchers in coroutines?”
    • “What is a dispatcher, and what is its purpose?”
  8. What are Kotlin coroutines?

    Asked in 2 of 30 interviews · last asked Sep 2 · Concept · Junior

    Show answer

    Kotlin coroutines are lightweight tasks that let you write asynchronous code in a sequential style. They can suspend while waiting without blocking a thread, then resume later. They are not threads; dispatchers control which threads they run on. On Android, they help keep the main thread responsive.

    • A suspend function can pause a coroutine, but does not automatically run on a background thread.
    • Use Dispatchers.IO for blocking I/O and Dispatchers.Default for CPU-heavy work.
    • Coroutine scopes manage task lifetimes and support structured concurrency.
    • Cancellation is cooperative: running code must reach a cancellation check to stop.

    What the interviewer checks: The interviewer checks whether you understand suspension, threads, dispatchers, and coroutine lifetimes.

    Other ways it was asked
    • “What is a coroutine?”
  9. What is a Kotlin Flow, and how do you create one?

    Asked in 2 of 30 interviews · last asked Sep 2 · Concept · Junior

    Show answer

    A Kotlin Flow is a stream of values that can be produced and collected asynchronously using coroutines. Create one with the flow builder and send values with emit, or use flowOf for fixed values. A flow built with flow is cold: its code runs separately for each collector when collect is called.

    • Flow<T> represents a stream of values of type T.
    • The flow builder supports suspending calls, such as network requests.
    • Use collect in a coroutine or suspend function to receive values.
    • Not all flows are cold: StateFlow and SharedFlow are hot flows.
    Code
    import kotlinx.coroutines.flow.Flow
    import kotlinx.coroutines.flow.collect
    import kotlinx.coroutines.flow.flow
    suspend fun main() {
        val numbers: Flow<Int> = flow {
            emit(1)
            emit(2)
        }
        numbers.collect { println(it) }
    }

    What the interviewer checks: The interviewer checks whether you can create and collect a Flow and explain when it starts running.

    Other ways it was asked
    • “What is a Flow?”
    • “Can you write in the chat how to declare a Flow?”
    • “How does Flow work?”
  10. What is a ViewModel, and why do you use it?

    Asked in 2 of 30 interviews · last asked Sep 2 · Concept · Junior

    Show answer

    A ViewModel is an Android Jetpack class that holds screen state and handles screen-level logic. It keeps that state during configuration changes, such as screen rotation, so a recreated screen can use it. It also keeps this logic separate from Activities, Fragments, or composables, making it easier to test.

    • A ViewModel survives configuration changes, but not process death.
    • Use SavedStateHandle to restore small pieces of state after system-initiated process death.
    • Do not hold references to Views or Activities; they can cause memory leaks.
    • A ViewModel is cleared when its owner is permanently removed.

    What the interviewer checks: The interviewer is checking whether you understand ViewModel lifetime, state handling, and separation of UI code from logic.

    Other ways it was asked
    • “What is a ViewModel, and what is it used for in Android?”
  11. What software architecture do you use for Android applications, and why?

    Asked in 2 of 30 interviews · last asked Oct 2 · Concept · Senior

    Show answer

    I usually use MVVM with a repository layer for Android apps. The UI displays state from a ViewModel, while repositories handle data access. This separates responsibilities and makes testing easier. For complex apps, I add a domain layer with use cases, but I avoid extra layers for simple apps.

    • The ViewModel exposes UI state and handles UI actions without holding Activity or Fragment references.
    • Repositories hide data sources, such as network APIs and local databases.
    • ViewModels survive configuration changes, but process death needs saved state or persistent storage.
    • Choose layers based on app complexity; more layers add code and maintenance.

    What the interviewer checks: The interviewer checks whether you can explain your architecture choice, its benefits, and its trade-offs.

    Other ways it was asked
    • “Which architecture pattern would you choose for an Android application, and why?”
  12. When does LaunchedEffect run in Jetpack Compose, and how do its keys control restarts?

    Asked in 2 of 30 interviews · last asked Feb 12 · Concept · Mid-level

    Show answer

    LaunchedEffect starts a coroutine when it enters the composition. If any key changes, Compose cancels the running coroutine and starts a new one. Recomposition with equal keys does not restart it, and leaving the composition cancels it. It accepts one or more keys and a suspending block, which can call regular or suspending functions.

    • Keys are compared using equality, not just object identity.
    • A constant key, such as Unit, runs once per entry into the composition.
    • Use keys for values whose changes should restart the work.
    • It does not automatically move work to a background thread; avoid blocking the UI thread.

    What the interviewer checks: The interviewer checks whether you understand effect lifetime, key-based restarts, and coroutine cancellation.

    Other ways it was asked
    • “When does LaunchedEffect run in Jetpack Compose?”
    • “How does LaunchedEffect work in Jetpack Compose, how do its keys control when it runs, and what kinds of code can it execute?”
    • “What parameters does LaunchedEffect accept in Jetpack Compose?”
  13. What should be shared in Kotlin Multiplatform, and what should remain platform-specific?

    Asked in 2 of 30 interviews · last asked May 18 · Design · Mid-level

    Show answer

    Share business rules, data models, validation, and data access that use multiplatform libraries. Keep direct OS calls and native integrations in platform-specific code. Native UI stays platform-specific, but UI can also be shared with Compose Multiplatform. On iOS, app startup, lifecycle integration, and Apple framework calls usually remain platform-specific.

    • Use commonMain for code that does not depend directly on Android or iOS APIs.
    • Connect shared logic to platform features through interfaces or expect/actual declarations.
    • Share networking and storage logic when libraries support all target platforms.
    • UI sharing is optional; SwiftUI and UIKit screens remain iOS-specific.

    What the interviewer checks: The interviewer checks whether you can separate reusable logic from platform dependencies without assuming UI must stay native.

    Other ways it was asked
    • “In a Kotlin Multiplatform project, what belongs in shared code, and what should remain in the platform-specific UI?”
    • “What responsibilities or functionality typically remain in the iOS-specific code of a Kotlin Multiplatform app?”
    • “Which parts of an application generally cannot be shared in Kotlin Multiplatform?”
  14. What is a typealias in Kotlin, and when would you use one?

    Asked once · last asked Feb 10 · Concept · Mid-level

    Show answer

    A typealias gives another name to an existing Kotlin type. It does not create a new type. I use it to make long generic types or function types easier to read and to show their purpose.

    • Declare an alias with the typealias keyword.
    • The alias and the original type are interchangeable.
    • It improves readability but does not add type safety.
    Code
    typealias UserNames = Map<String, String>
    
    val names: UserNames = mapOf("u1" to "Ana")

    What the interviewer checks: The interviewer is checking whether you understand that a typealias is another name, not a separate type.

    Other ways it was asked
    • “Can you give an example of a Kotlin typealias?”
  15. What is the difference between object and companion object in Kotlin, and when would you use each?

    Asked once · last asked Feb 10 · Concept · Mid-level

    Show answer

    An `object` declaration creates a singleton: one shared instance of a type. A `companion object` is a singleton inside a class, whose members you can access through the class name. Use `object` for standalone shared utilities, and a companion object for factory functions or constants closely tied to a class.

    • A class can have only one companion object.
    • You do not need a class instance to access its companion members.
    • Companion functions are not Java static methods by default; use `@JvmStatic` for Java-friendly static access.
    • Both can implement interfaces.

    What the interviewer checks: The interviewer checks whether you understand shared instances and when to tie shared behavior to a class.

  16. What are lateinit and lazy in Kotlin, and how do they differ?

    Asked once · last asked Feb 10 · Concept · Mid-level

    Show answer

    `lateinit` lets you declare a non-null `var` and assign it later. Reading it before assignment throws `UninitializedPropertyAccessException`. `lazy` initializes a `val` when it is first read, then reuses the result. With `lateinit`, you control assignment; with `lazy`, a supplied function creates the value.

    • `lateinit` cannot use nullable types or primitive types such as `Int` and `Boolean`.
    • A `lateinit var` can be reassigned; a `lazy val` cannot.
    • Where accessible, `::property.isInitialized` checks whether a `lateinit` property has been assigned.
    • On the JVM, `lazy` uses synchronized initialization by default; `lateinit` provides no thread safety.

    What the interviewer checks: The interviewer checks whether you understand initialization timing, mutability, and the risks of reading values too early.

  17. What happens if a lateinit property is accessed before it has been initialized?

    Asked once · last asked Feb 10 · Concept · Junior

    Show answer

    Accessing a Kotlin lateinit property before it is initialized throws an UninitializedPropertyAccessException at runtime. Assign a value before reading it. Where Kotlin allows access to its backing field, you can check initialization with this::property.isInitialized.

    • The exception message names the uninitialized property.
    • Reading it does not return null or a default value.
    • The isInitialized check is only available where Kotlin allows access to the property's backing field.

    What the interviewer checks: The interviewer is checking whether you understand lateinit initialization and the runtime failure caused by reading it too early.

  18. How do you overload operators such as plus in Kotlin, and what restrictions apply?

    Asked once · last asked Feb 10 · Concept · Mid-level

    Show answer

    Define an `operator` member or extension function with Kotlin's required name and signature. For example, defining `plus` lets you write `a + b`. You can overload only supported operators; you cannot create new operator symbols or change their precedence.

    • `plus` takes one argument and can return a custom type, not just a number.
    • A matching member function takes priority over an extension function.
    • `plusAssign`, used for `+=`, must return `Unit`.
    Code
    data class Point(val x: Int, val y: Int) {
        operator fun plus(other: Point): Point =
            Point(x + other.x, y + other.y)
    }
    
    val sum = Point(1, 2) + Point(3, 4) // Point(4, 6)

    What the interviewer checks: The interviewer checks whether you know operator function conventions and the limits of operator overloading.

    Other ways it was asked
    • “How do you implement a custom operator in Kotlin, and what restrictions apply?”
    • “Can you overload operators in Kotlin?”
    • “Can arithmetic operators be overloaded in Kotlin, for example for numeric types?”
  19. What is the scope of a private top-level function in Kotlin?

    Asked once · last asked Feb 12 · Concept · Mid-level

    Show answer

    A private top-level function in Kotlin is visible only inside the file where it is declared. Code in another file cannot access it, even if both files are in the same package.

    • Visibility is limited to the declaring file, not the package.
    • Functions and classes in that file can access it.

    What the interviewer checks: The interviewer is checking whether you know that top-level private visibility is file-based, not class-based or package-based.

  20. Which Kotlin language features help you write more concise code?

    Asked once · last asked Feb 12 · Concept · Junior

    Show answer

    Kotlin reduces repeated code with type inference, data classes, default arguments, and named arguments. Properties and string templates simplify common tasks. Lambdas and extension functions make reusable logic shorter, while safe calls and the Elvis operator simplify null handling.

    • Type inference removes many explicit type declarations without losing static type checking.
    • Data classes generate methods such as equals(), hashCode(), toString(), and copy().
    • Default arguments reduce overloads; named arguments make calls easier to read.
    • Safe calls (?.) and the Elvis operator (?:) reduce explicit null checks.

    What the interviewer checks: The interviewer wants to know whether you can connect Kotlin features to less repeated, readable code.

Kotlin language interview questions

Kotlin questions cover syntax, types, classes, visibility, initialization, extension functions, higher-order functions, and operator overloading. 21 questions.

  1. How do you access the receiver inside a Kotlin extension function?

    Asked once · last asked Feb 12 · Concept · Junior

  2. Can you explain what higher-order functions are in Kotlin?

    Asked once · last asked Apr 11 · Concept · Junior

  3. What are scope functions in Kotlin?

    Asked once · last asked Apr 11 · Concept · Junior

  4. What is a sealed class, and why do you need it in Kotlin or Android?

    Asked once · last asked Sep 2 · Concept · Mid-level

  5. What other visibility modifiers does Kotlin provide?

    Asked once · last asked Feb 12 · Concept · Junior

    Other ways it was asked
    • “How do Kotlin's visibility modifiers work?”
    • “Which Kotlin visibility modifier lets you hide code from other modules?”
  6. What is the difference between val and var in Kotlin?

    Asked once · last asked Feb 10 · Concept · Junior

  7. What kinds of members would you put in a Kotlin companion object?

    Asked once · last asked Feb 10 · Concept · Mid-level

  8. Can a lateinit property in Kotlin be declared as val?

    Asked once · last asked Feb 10 · Concept · Junior

  9. Can a Kotlin data class be abstract?

    Asked once · last asked Feb 10 · Concept · Junior

  10. In Kotlin, when should you provide a value through a constructor parameter rather than use a default value?

    Asked once · last asked Feb 10 · Concept · Mid-level

  11. In Kotlin, where do you specify that a method overrides an inherited method?

    Asked once · last asked Feb 10 · Concept · Junior

  12. What is a data class in Kotlin?

    Asked once · last asked Sep 2 · Concept · Junior

Android fundamentals interview questions

Explore Android components, context, lifecycle, intents, storage, background work, notifications, media, and device integrations. 14 questions.

  1. What is ExoPlayer, and how does it work?

    Asked once · last asked Feb 9 · Concept · Junior

  2. What is the difference between Application Context and Activity Context in Android, and which operations require an Activity Context?

    Asked once · last asked Feb 10 · Concept · Mid-level

  3. How do Parcelable and Serializable differ in Android, and when should you use each?

    Asked once · last asked Feb 10 · Concept · Mid-level

  4. What are the most challenging aspects of Android TV development?

    Asked once · last asked Feb 12 · Concept · Mid-level

  5. How do you integrate Android applications with mobile printers over Bluetooth using a printer SDK?

    Asked once · last asked May 13 · Tooling · Mid-level

  6. How do you handle a configuration change, like screen rotation, without losing input data?

    Asked once · last asked Sep 2 · Scenario · Mid-level

  7. How would you handle background work and long-running tasks in an Android shopping app if the user might kill the app during checkout?

    Asked once · last asked Oct 23 · Scenario · Senior

  8. What is Context in Android?

    Asked once · last asked Feb 10 · Concept · Junior

    Other ways it was asked
    • “What types of Context are available in Android?”
  9. What are the key considerations in mobile application development?

    Asked once · last asked Apr 11 · Concept · Junior

  10. What is SharedPreferences?

    Asked once · last asked Aug 21 · Concept · Junior

  11. What is Android?

    Asked once · last asked Sep 2 · Concept · Junior

  12. What is an Intent in Android?

    Asked once · last asked Sep 2 · Concept · Junior

Show 1 more
  1. Why do we need the Android manifest file?

    Asked once · last asked Sep 2 · Concept · Junior

Kotlin coroutines and Flow interview questions

Coroutine and Flow questions cover asynchronous execution, scopes, dispatchers, structured concurrency, exception handling, polling, and reactive streams. 21 questions.

  1. What are Kotlin's hot flow types, and how do StateFlow and SharedFlow differ?

    Asked once · last asked Apr 11 · Concept · Mid-level

    Other ways it was asked
    • “What is the difference between StateFlow and SharedFlow?”
    • “Can you write how to declare a StateFlow and a SharedFlow?”
    • “What are the different types of hot flows?”
  2. How do coroutine exceptions propagate, and what happens to an uncaught exception in launch?

    Asked once · last asked Feb 10 · Concept · Mid-level

    Other ways it was asked
    • “How are exceptions propagated in Kotlin coroutines?”
    • “What happens to an uncaught exception in a coroutine launched with launch?”
    • “Where are exceptions from API requests handled when the requests run in Kotlin coroutines?”
  3. How do you manage concurrency in Android applications?

    Asked once · last asked Mar 20 · Concept · Mid-level

  4. Can you explain what Dispatchers.Unconfined is?

    Asked once · last asked Apr 11 · Concept · Senior

  5. What is structured concurrency?

    Asked once · last asked Apr 11 · Concept · Mid-level

  6. What is the difference between a cold flow and a hot flow in Kotlin?

    Asked once · last asked Apr 11 · Concept · Mid-level

    Other ways it was asked
    • “What is the difference between a cold flow and a hot flow?”
  7. What are Kotlin Flow operators, and how do they transform or combine flows?

    Asked once · last asked Apr 11 · Concept · Mid-level

  8. How do flatMapConcat and flatMapLatest differ when flattening Kotlin Flows?

    Asked once · last asked Apr 11 · Concept · Senior

  9. How would you implement coroutine polling, and why use delay instead of Thread.sleep?

    Asked once · last asked May 7 · Scenario · Senior

    Other ways it was asked
    • “A mobile app needs to check a transaction's status every two seconds, and a developer polls in a coroutine using Thread.sleep. How would you assess this in a code review, and what risks would you point out?”
    • “What would be a better way to implement this polling loop, and how would it differ from using Thread.sleep?”
  10. How do you use Kotlin Flow with different dispatchers or threads?

    Asked once · last asked Sep 2 · Concept · Mid-level

  11. What does launch return in Kotlin coroutines?

    Asked once · last asked Feb 10 · Concept · Junior

  12. When would you use async in Kotlin coroutines?

    Asked once · last asked Feb 10 · Concept · Mid-level

Show 4 more
  1. How do you launch a coroutine in an Android application?

    Asked once · last asked Mar 20 · Concept · Junior

  2. What is runBlocking in Kotlin?

    Asked once · last asked Apr 11 · Concept · Junior

    Other ways it was asked
    • “What is runBlocking?”
  3. What is a suspend function?

    Asked once · last asked Sep 2 · Concept · Junior

  4. What is a thread in Java and Kotlin?

    Asked once · last asked Oct 2 · Concept · Junior

Android architecture and dependency injection interview questions

App design questions focus on architecture patterns, ViewModels, state delivery, module boundaries, use cases, and dependency injection. 17 questions.

  1. What dependency injection mechanisms are used in Android, how do they work, and what are their advantages and disadvantages?

    Asked once · last asked Feb 10 · Concept · Senior

  2. What are the main limitations of Koin for dependency injection in Android?

    Asked once · last asked Feb 10 · Concept · Mid-level

  3. In an MVP architecture, what happens step by step when a user taps a balance-refresh button and the remote repository returns an updated value?

    Asked once · last asked Feb 10 · Scenario · Mid-level

  4. How do you implement an Android ViewModel and expose state changes to the view?

    Asked once · last asked Feb 10 · Concept · Mid-level

    Other ways it was asked
    • “How does a ViewModel communicate a state change to the view so that the displayed balance updates?”
    • “How can you implement ViewModels in an Android app, and how can they expose data to the view?”
  5. When should an Android app use use cases, and how strictly should an architecture enforce them?

    Asked once · last asked Feb 12 · Concept · Mid-level

  6. Why would you use MVVM instead of another pattern, such as MVC or MVP, in an Android application?

    Asked once · last asked Mar 20 · Concept · Mid-level

  7. What is LiveData, and what problem does it solve?

    Asked once · last asked Mar 20 · Concept · Junior

  8. What is Clean Architecture, and when would you use it in an Android application?

    Asked once · last asked Mar 20 · Concept · Mid-level

  9. How would you design an Android banking app whose main screen shows a list of transactions, fetches data from a REST API, displays cached data offline, refreshes automatically when connectivity returns, supports multiple requests, is testable, handles errors, and keeps the UI responsive?

    Asked once · last asked Mar 20 · Design · Senior

  10. What are the key differences between Hilt and Dagger?

    Asked once · last asked Apr 11 · Concept · Mid-level

  11. Which annotation do you use to initialize Hilt dependency injection in an Android app?

    Asked once · last asked Apr 11 · Concept · Junior

    Other ways it was asked
    • “Which annotation do you use to initialize dependency injection for an Android app?”
  12. Which annotation should you use for a ViewModel with Hilt?

    Asked once · last asked Apr 11 · Concept · Junior

Show 3 more
  1. How would you structure an Android app's modules and layers, and how should state flow between them?

    Asked once · last asked Oct 23 · Design · Senior

    Other ways it was asked
    • “How would you architect an Android app, including its modules, layers, and state flow?”
    • “How would you define module boundaries in an Android app, and how should state flow between modules?”
  2. How do you decide whether Android and iOS apps should use different architectures, and what trade-offs guide that choice?

    Asked once · last asked Oct 23 · Design · Senior

  3. Is it appropriate to use a Kotlin data class as a ViewState?

    Asked once · last asked Feb 10 · Concept · Junior

Android networking and Room database interview questions

Review questions about backend communication, authentication, WebView sessions, concurrent requests, offline data, and Room setup and migrations. 7 questions.

  1. What are the key components you need to define when integrating a Room database into an application?

    Asked once · last asked Apr 11 · Concept · Mid-level

  2. What should you consider when performing a Room database migration?

    Asked once · last asked Apr 11 · Scenario · Mid-level

  3. How do you define a Room database class, including its database name and entities?

    Asked once · last asked Apr 11 · Write code · Mid-level

  4. What components and Kotlin keywords would you use to implement a singleton Room database connection, and what role does @Volatile play?

    Asked once · last asked Apr 11 · Concept · Senior

    Other ways it was asked
    • “How do you define a Room database singleton, and what roles do @Volatile and the connection-related keywords play?”
  5. How do you handle data communication between an Android app and a backend, including encoding or encrypting data and sending and receiving tokens?

    Asked once · last asked May 7 · Scenario · Mid-level

  6. How are sessions managed when an Android app communicates with a backend through a WebView, and what roles do the backend and WebView play?

    Asked once · last asked May 7 · Scenario · Mid-level

  7. How would you handle 100 API requests in an Android application?

    Asked once · last asked Aug 2 · Scenario · Mid-level

Jetpack Compose and Android UI interview questions

UI questions cover Compose state, recomposition, effects, navigation, lists, XML migration, responsive layouts, constraints, and accessible text scaling. 12 questions.

  1. What challenges would you anticipate when migrating native mobile interfaces to SwiftUI and Jetpack Compose?

    Asked once · last asked Oct 6 · Behavioral · Senior

    Other ways it was asked
    • “How would you plan and prioritize a migration from legacy native mobile interfaces to SwiftUI and Jetpack Compose?”
    • “What challenges have you faced when migrating native mobile interfaces to SwiftUI and Jetpack Compose?”
    • “How did you build business support for migrating native mobile interfaces to SwiftUI and Jetpack Compose?”
  2. How does recomposition work in Jetpack Compose?

    Asked once · last asked Feb 10 · Concept · Mid-level

    Other ways it was asked
    • “What can you do to reduce unnecessary recompositions in Jetpack Compose?”
  3. What is Jetpack Compose, and how does it differ from XML?

    Asked once · last asked Sep 2 · Concept · Junior

    Other ways it was asked
    • “Why do you prefer Jetpack Compose over XML?”
  4. How can you call a suspend function from a Jetpack Compose composable?

    Asked once · last asked Feb 10 · Concept · Mid-level

  5. How do you navigate between screens in Jetpack Compose using NavHostController?

    Asked once · last asked Feb 10 · Concept · Mid-level

    Other ways it was asked
    • “How do you handle navigation between screens in Jetpack Compose?”
    • “How does NavHostController work in Jetpack Compose?”
    • “How can you pass arguments between screens in Jetpack Compose navigation?”
  6. Why would you use LazyColumn instead of a scrollable Column for a long list in Jetpack Compose?

    Asked once · last asked Feb 12 · Concept · Junior

    Other ways it was asked
    • “What would you use to build a vertically scrolling list with many items in Jetpack Compose?”
    • “What is the advantage of using LazyColumn instead of a regular scrollable Column in Jetpack Compose?”
  7. How do you translate a Figma layout into a responsive mobile UI that stays consistent across iOS and Android and multiple screen sizes?

    Asked once · last asked Jul 20 · Scenario · Mid-level

  8. When Auto Layout on iOS or ConstraintLayout on Android doesn't match the intended Figma behavior, what's your process to diagnose and fix the constraint issues without breaking other screen sizes?

    Asked once · last asked Jul 20 · Scenario · Senior

  9. How do you implement Dynamic Type on iOS and font scaling on Android so text reflows gracefully without clipping or breaking layouts, especially in list cells?

    Asked once · last asked Jul 20 · Tooling · Mid-level

  10. When would you choose Jetpack Compose over XML views in a large existing Android app?

    Asked once · last asked Oct 23 · Concept · Senior

    Other ways it was asked
    • “Compose versus XML views in a large existing Android codebase: what is your migration position and why?”
    • “What specific criteria would make you choose Compose for a screen, despite keeping XML as the default?”
  11. What are deep links in Jetpack Compose navigation?

    Asked once · last asked Feb 10 · Concept · Junior

    Other ways it was asked
    • “How do you specify a deep link's destination, such as a terms and conditions screen, in Jetpack Compose navigation?”

Kotlin Multiplatform interview questions

Explore shared code, Compose Multiplatform, working with Swift, platform differences, framework choices, migration, and cross-platform team organization. 32 questions.

  1. Besides the division between shared business logic and UI, what are other differences between Kotlin Multiplatform and Compose Multiplatform?

    Asked once · last asked Feb 10 · Concept · Mid-level

    Other ways it was asked
    • “What underlying factors account for the differences between Kotlin Multiplatform and Compose Multiplatform?”
  2. How would you implement advanced gestures such as drag and drop in Compose Multiplatform across different platforms?

    Asked once · last asked Feb 10 · Scenario · Senior

    Other ways it was asked
    • “Which Compose modifiers can you use to implement drag-and-drop gestures across platforms?”
  3. How does the project directory structure differ between Compose Multiplatform and Kotlin Multiplatform?

    Asked once · last asked Feb 10 · Concept · Mid-level

  4. How do Kotlin Multiplatform and Compose Multiplatform handle shared resources, and are external libraries needed?

    Asked once · last asked Feb 10 · Concept · Mid-level

    Other ways it was asked
    • “How are resources such as strings handled in Compose Multiplatform compared with Kotlin Multiplatform?”
    • “Does Compose Multiplatform support resources natively, or do you need an external library?”
  5. What challenges arise when managing state in Compose Multiplatform?

    Asked once · last asked Feb 10 · Concept · Senior

    Other ways it was asked
    • “Does state handling work out of the box on Android in Compose Multiplatform, and what issues can arise?”
  6. What can and cannot be tested in Compose Multiplatform?

    Asked once · last asked Feb 10 · Concept · Mid-level

  7. How can you use Compose Multiplatform previews in older versions of Android Studio?

    Asked once · last asked Feb 10 · Tooling · Mid-level

  8. In which source set should Compose Multiplatform previews be placed: commonMain or another one?

    Asked once · last asked Feb 10 · Concept · Mid-level

  9. How do you divide work between Android and iOS in a Kotlin Multiplatform project?

    Asked once · last asked Feb 12 · Design · Mid-level

  10. How do you integrate Kotlin Multiplatform business logic into an iOS app?

    Asked once · last asked Feb 12 · Scenario · Mid-level

  11. How can Swift consume suspend functions and Flows exposed by Kotlin Multiplatform?

    Asked once · last asked Feb 12 · Tooling · Senior

  12. What tools can make Kotlin Multiplatform interoperability with Swift easier, and what database technologies can be used in a Kotlin Multiplatform app?

    Asked once · last asked Feb 12 · Tooling · Mid-level

Show 18 more
  1. Are there cases where a native app, such as one built with Kotlin, might be better than Flutter, given that Flutter abstracts away some platform-specific functionality?

    Asked once · last asked Apr 17 · Concept · Senior

  2. For a membership app's digital key card, would you choose Flutter or a native Kotlin app, and why?

    Asked once · last asked Apr 17 · Scenario · Senior

  3. Why would you choose Kotlin Multiplatform for sharing business logic and dependencies?

    Asked once · last asked May 4 · Concept · Senior

    Other ways it was asked
    • “Why was Kotlin Multiplatform selected as the preferred framework for sharing business logic and dependencies?”
  4. If you were building a brand-new version of a mobile app today without native-module friction, what factors would you consider when comparing Compose Multiplatform, Flutter, and React Native?

    Asked once · last asked May 4 · Scenario · Senior

    Other ways it was asked
    • “If you were building a brand-new version of the app today without native-module friction, what factors would you consider when comparing Compose Multiplatform, Flutter, and React Native?”
  5. What memory-management differences between the JVM and iOS should Kotlin Multiplatform developers account for?

    Asked once · last asked May 4 · Concept · Senior

  6. In what scenarios would you share functionality in Kotlin Multiplatform versus implement it natively on iOS to avoid memory-management issues related to object lifetimes?

    Asked once · last asked May 4 · Scenario · Senior

  7. When a Kotlin Multiplatform feature does not work on iOS, how do you investigate whether to fix it in your implementation or involve an iOS specialist?

    Asked once · last asked May 19 · Scenario · Mid-level

  8. How would you approach migrating a mobile app from UIKit to SwiftUI and then to Kotlin Multiplatform?

    Asked once · last asked Oct 19 · Scenario · Senior

  9. How do mobile teams share code between iOS and Android, and when might they migrate to Kotlin Multiplatform?

    Asked once · last asked Oct 19 · Concept · Senior

  10. How do you keep feature parity between Android and iOS without duplicating every effort twice, and where does that approach break down?

    Asked once · last asked Oct 23 · Design · Senior

  11. How would you handle iOS or Android platform constraints when implementing real-time camera processing with machine learning?

    Asked once · last asked Oct 24 · Behavioral · Senior

    Other ways it was asked
    • “What was the hardest platform constraint you hit on iOS or Android while running real-time camera plus ML, and how did it shape your implementation?”
  12. Are imports in Compose Multiplatform the same as in Android Jetpack Compose, or do they differ?

    Asked once · last asked Feb 10 · Concept · Junior

    Other ways it was asked
    • “What other differences should you consider between Android Jetpack Compose and Compose Multiplatform?”
  13. How would you use Kotlin Multiplatform and dependency injection in a project, and how would you decide whether to keep an existing solution?

    Asked once · last asked Feb 10 · Scenario · Senior

  14. What is the main shared source directory alongside androidMain and iosMain in a Kotlin Multiplatform project?

    Asked once · last asked Feb 10 · Concept · Junior

  15. Where are resources typically stored in Compose Multiplatform projects?

    Asked once · last asked Feb 10 · Concept · Junior

  16. Can you tell me the difference between native and cross-platform mobile development?

    Asked once · last asked Aug 12 · Concept · Junior

  17. What are the basic differences between an iOS developer and an Android developer, and what operating systems do they use?

    Asked once · last asked Oct 19 · Concept · Junior

  18. How would you organize mobile development when all engineers use Kotlin and there are no platform specialists?

    Asked once · last asked Oct 19 · Scenario · Senior

    Other ways it was asked
    • “How can a mobile team organize development when engineers work across Kotlin without platform specialists?”

Android testing and performance interview questions

Testing and performance questions cover debugging, profiling, startup, memory leaks, ANRs, image loading, and build performance. 11 questions.

  1. Tell me about a time you diagnosed and resolved an Android app performance or stability problem, such as freezes, threading issues, network instability, or offline availability.

    Asked once · last asked May 7 · Behavioral · Mid-level

  2. How would you load RecyclerView images smoothly, including downsampling, caching, and canceling requests when views are recycled?

    Asked once · last asked Jul 20 · Tooling · Mid-level

    Other ways it was asked
    • “On Android, how would you load a list of remote images in RecyclerView so scrolling stays smooth?”
    • “Specifically, what would you do about decode/downsampling, memory and caching, and canceling requests on view recycling in Android RecyclerView?”
  3. When you implement your own image loader, how do you calculate an appropriate inSampleSize and choose the target decode size based on the view's measured dimensions and screen density?

    Asked once · last asked Jul 20 · Tooling · Senior

  4. What is the main difference between testing an Android application and an iOS application?

    Asked once · last asked Aug 4 · Concept · Mid-level

  5. Can you open Android Studio and walk me through two specific tools or techniques that differentiate an expert from an amateur, explaining each step and its significance?

    Asked once · last asked Oct 3 · Tooling · Mid-level

  6. How do you use the Android Studio profiler to diagnose issues?

    Asked once · last asked Oct 3 · Tooling · Mid-level

  7. How do you use the Android Studio debugger for disciplined diagnosis?

    Asked once · last asked Oct 3 · Tooling · Mid-level

  8. How would you diagnose an Android cold-start regression and distinguish initialization work from rendering or I/O?

    Asked once · last asked Oct 23 · Scenario · Senior

    Other ways it was asked
    • “Your Android cold start time regresses by 800 milliseconds after a release. How would you find the cause?”
    • “Which trace signals would help you determine whether an Android cold-start regression is caused by initialization work rather than rendering or I/O?”
  9. What is your approach to memory leaks and ANRs in production, and which tools do you rely on?

    Asked once · last asked Oct 23 · Scenario · Senior

  10. How would you keep a large Android build fast, and what specific change could you make to reduce build time?

    Asked once · last asked Oct 23 · Tooling · Senior

    Other ways it was asked
    • “How do you keep a large Android build fast, and what specific change have you made to reduce build time?”
  11. How do you handle image loading and caching in a heavy Android app on low-end devices and poor networks?

    Asked once · last asked Oct 23 · Tooling · Senior

Android app release and deployment interview questions

Release questions cover app distribution, store publishing, staged rollouts, feature flags, rollback strategies, store policies, and target SDK upgrades. 5 questions.

  1. How would you transfer an APK file from a laptop to an Android phone without using a USB cable?

    Asked once · last asked Aug 28 · Tooling · Junior

  2. How do you publish a mobile application to the Google Play Store and Apple App Store?

    Asked once · last asked Sep 29 · Tooling · Mid-level

  3. How would you manage an Android feature rollout using feature flags, staged rollout, and kill switches, especially after a faulty release reaches 50% of users?

    Asked once · last asked Oct 23 · Scenario · Senior

  4. How would you roll back a faulty Android release if the problematic code cannot be disabled with a server-side feature flag?

    Asked once · last asked Oct 23 · Scenario · Senior

  5. How do you handle Play Store policy changes or a forced target SDK upgrade across a large codebase?

    Asked once · last asked Oct 23 · Scenario · Senior

How this list is made

Every question here was asked by a real interviewer in a real job interview that a candidate ran MeetAssist in. After the call, the interviewer's questions are pulled from the transcript. Practice sessions, tests, exams and anything that was not a job interview are dropped.

Questions are rewritten so they make sense on their own: names of people, employers and clients are removed, and speech-to-text mistakes are fixed. Small talk, logistics and questions about one candidate's own résumé are left out. Rephrasings of the same question are merged, and the count is the number of different interviews it came up in.

The interviews come from candidates who use MeetAssist, so they lean towards software, data and AI roles: the shares describe these interviews, not every Android and Kotlin interview. Answers to the most asked questions are written and checked by an editor; a "common mistake" is shown only when reviews of real answers in these interviews show it, with the count.

30 interviews, 20 candidates, Feb 2026 to Oct 2026. Updated every month with new interviews.