Skip to content
tezvyn:

📱Mobile Dev

Mobile app development across platforms

330 bites

Test yourself: Top 30 intermediate Mobile Dev interview questionsMultiple choice, with the correct answer and why it is correct on every question. Free, no sign-in.

Intermediate interview questions in Mobile Dev, page 7

intermediate1 min read

Axios interceptors for auth headers

Interceptors are hooks that run before requests or after responses, centralizing concerns like auth, logging, and token refresh.

Which side-effect handler for a one-time coroutine on composition entry?
intermediate2 min read

Which side-effect handler for a one-time coroutine on composition entry?

Tests Compose side-effect API boundaries. Answer: LaunchedEffect(Unit); it runs once and auto-cancels on exit. Contrast with rememberCoroutineScope for user-triggered callbacks. Red flag: picking SideEffect or rememberCoroutineScope and missing cancellation.

Which Compose side-effect for a one-time coroutine action?
intermediate2 min read

Which Compose side-effect for a one-time coroutine action?

Tests if you can choose the right Compose side-effect for a one-time coroutine. A great answer names LaunchedEffect(Unit), explains it runs once and cancels on exit. A red flag is suggesting rememberCoroutineScope directly in the composable body.

Which side-effect handler for a one-time coroutine action in Compose?
intermediate2 min read

Which side-effect handler for a one-time coroutine action in Compose?

This tests your understanding of Compose lifecycles and side-effect handlers. A good answer names LaunchedEffect(Unit), explaining the constant key ensures the effect runs only once. A red flag is suggesting launching coroutines on every recomposition.

intermediate1 min read

Cancelling fetch with AbortController

Pass an AbortController signal to fetch and call abort() on unmount to avoid wasted work, race conditions, and state updates on gone components.

How do you display a large list efficiently in Jetpack Compose?
intermediate2 min read

How do you display a large list efficiently in Jetpack Compose?

This tests understanding of Compose lazy versus eager layout. A strong answer names LazyColumn or LazyRow, notes visible-only composition, and contrasts Column which lays out everything upfront.

How to implement efficient large lists in Jetpack Compose?
intermediate2 min read

How to implement efficient large lists in Jetpack Compose?

This tests your grasp of Compose performance. Use LazyColumn to compose only visible items, unlike a Column which renders all items at once. A red flag is suggesting a scrollable Column, which has severe performance costs for large lists.

Implement an efficient list in Jetpack Compose
intermediate2 min read

Implement an efficient list in Jetpack Compose

Tests your grasp of UI virtualization in Compose. Answer: Use LazyColumn as it only composes visible items. Contrast this with Column, which composes all items at once, causing poor performance. Mention the items DSL.

intermediate1 min read

GraphQL versus REST data fetching

One endpoint, client-specified fields avoid over- and under-fetching; Apollo's useQuery returns loading, error, and data while caching results.

intermediate1 min read

Why store auth tokens in Keychain, not UserDefaults?

UserDefaults is an unencrypted plist readable from backups and on jailbroken devices; use Keychain Services, which stores encrypted items with access control; save with SecItemAdd and read with…

Describe a pattern for background Core Data fetches and UI updates
intermediate2 min read

Describe a pattern for background Core Data fetches and UI updates

This tests NSManagedObjectContext concurrency and queue confinement. Strong answer: create a background context, fetch, pass objectIDs or structs to main, then main context fetches by ID to update UI. Red flag: passing NSManagedObjects across threads.

intermediate2 min read

Explain the core responsibilities of RouterDelegate, RouteInformationParser, and Router in Flutter

Tests Navigator 2.0 architecture split. RouteInformationParser converts URLs to typed config; RouterDelegate owns state and builds the Navigator; Router wires them together and handles engine intents. Red flag: conflating parsing and state or omitting Router.

Describe lightweight vs heavyweight Core Data migration and a heavyweight example
intermediate2 min read

Describe lightweight vs heavyweight Core Data migration and a heavyweight example

This tests inferred versus manual Core Data migrations. Contrast lightweight additive changes with heavyweight transforms like entity splits, citing promoting a string to a new entity. A red flag is claiming renames always need custom mapping.

intermediate2 min read

Implement a GoRouter path parameter route and access userId in a widget

This tests GoRouter declarative routing and GoRouterState. Define a GoRoute with path '/users/:userId', read state.params['userId'] in the builder, and handle null-safety. A red flag is parsing the URI manually or using ModalRoute.of instead of state.params.

intermediate1 min read

Per-tab navigation stacks with StatefulShellRoute

StatefulShellRoute keeps a separate Navigator and preserved state per branch, with a shared shell scaffold.

Why is LiveData<Boolean> problematic for one-time ViewModel events?
intermediate2 min read

Why is LiveData<Boolean> problematic for one-time ViewModel events?

State is not events; suggest an Event wrapper with a consumed flag, or SharedFlow or Channel with no replay.

Why is LiveData<Boolean> bad for one-time ViewModel events?
intermediate2 min read

Why is LiveData<Boolean> bad for one-time ViewModel events?

Tests if you know LiveData holds state, not events. A good answer explains that LiveData re-emits on configuration changes, causing repeated events. The solution is to model events as part of the UI state and consume them.

Why is `LiveData<Boolean>` bad for one-time ViewModel events?
intermediate2 min read

Why is `LiveData<Boolean>` bad for one-time ViewModel events?

This tests your grasp of state vs. events. A LiveData<Boolean> is state; it re-triggers on rotation. Instead, expose events via a StateFlow and have the UI call an eventConsumed() function on the ViewModel to maintain unidirectional data flow.

intermediate1 min read

Platform files versus Platform.OS checks

Use platform files for large divergence and platform-only deps, use Platform.OS for small inline tweaks.

How would you use a nested navigation graph for a login flow?
intermediate2 min read

How would you use a nested navigation graph for a login flow?

Tests modular navigation scoping. Strong answers group the three screens under a nested graph with its own start destination, noting encapsulation and reusability.

We are hiring for this. Every open role lists the topics its interview covers, so you can prepare for the real thing rather than guessing.

See open roles