Intermediate interview questions in Mobile Dev, page 13
Copy-on-write and implementing it for a custom struct
CoW shares a buffer until mutation, deep-copying only when the buffer is non-unique; Array, Dictionary, Set, String use it; implement with a class storage box and isKnownUniquelyReferenced.
Explain 'constraints go down, sizes go up, parent sets position.'
Tests Flutter layout protocol and unbounded width errors. Strong answers trace how a child gets infinite width from a scrolling parent and fix it with a bounded wrapper. Red flag: blaming the child without tracing parent constraints.

Google Play App Signing: upload key versus app signing key
Tests Android signing infrastructure and key escrow knowledge. A strong answer states Google holds the app signing key while you retain an upload key, protecting critical signing material. Red flag: claiming both keys sign the final install artifact.
Debouncing a Search TextInput with Hooks
Keep input in state, in an effect set a timer that fires the search after a delay, clear the timer on each change so only the final pause triggers the call.
View identity in SwiftUI and the .id() modifier
Identity links a view to its persistent state and transitions; structural identity comes from position, explicit identity from .id(); changing the id resets state and forces a new view.
Describe staged rollout on Google Play Console, benefits, and metrics to monitor
Tests release engineering and risk mitigation. Covers: set percentage and countries, manually ramp, halt on bad signals; benefits are blast-radius reduction and real-world validation. Flag: auto-ramping claims or ignoring halted users keep the bad build.
Why react-native-gesture-handler Replaces the Responder System
The JS responder system runs on the JS thread so gestures lag under load; gesture-handler runs recognition natively for smooth, reliable gestures.
Faulting in Core Data
A fault is a placeholder object whose property data is not yet loaded; accessing a property fires the fault and fetches from the store, saving memory.
Fetching REST Data with Loading and Error State
Track loading, data, and error; fetch in an effect, check response.ok, parse JSON, handle catch and finally.
Minimizing Storyboard merge conflicts
Split into many small storyboards or xibs, or move to programmatic or SwiftUI layout; process-wise coordinate ownership and merge often.
Draggable Snap-Back Card with Gesture Handler and Reanimated
Shared values track offset, a Pan gesture updates them on the UI thread, an animated style applies translation, onEnd springs back to zero.
Decoding a heterogeneous JSON array by a type field
Peek the type field with a partial decode, switch on it, and decode the concrete type, wrapping each in an enum or boxed protocol value.
How would you implement debounce for a search input using Streams?
This tests Stream transformation and event throttling. A strong answer outlines a resetting timer that only emits after 300ms of silence, referencing debounceTime or DebounceStreamTransformer. Red flag: manual Timer juggling without Stream composition.
Returning a Promise from a Native Module Method
The exported method takes resolve and reject as its last parameters; do the async work off the main thread, then settle exactly once with a result or an error.
Retain cycles and how to break them
A cycle is two objects (or a closure and its owner) holding mutual strong references so neither deallocates; break it with a [weak] or [unowned] capture list.

What are RecyclerView.Adapter and ViewHolder, and why do they improve scrolling?
This tests RecyclerView's data-to-view separation. A strong answer says Adapter binds data while ViewHolder caches findViewById results, avoiding hierarchy scans on scroll. A red flag is calling ViewHolder a memory saver instead of a lookup cache.
What is a Dart Completer and when should you use it?
This tests bridging callback APIs into Dart's Future ecosystem. An answer defines Completer as a manual Future producer, explains completing with value or error from callbacks, preferring Future() when possible. A red flag is using Completer for simple async.
ViewManager and Exposing Native Component Props
The ViewManager creates the native view and maps it to a JS component; you expose props with a prop-setter that receives the value when the prop changes.
Purpose of the guard statement
Guard requires its condition to hold or else exits the scope, and unwrapped optionals stay in scope afterward; this flattens nesting versus if.

How do include, merge, and ViewStub optimize deep layout nesting?
This tests Android view inflation and hierarchy flattening. A strong answer covers include for reuse, merge to strip redundant parents during inflation, and ViewStub for lazy-loading heavy views. A red flag is conflating them or citing XML brevity alone.
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