1.What are the trade-offs between native, React Native, and Flutter development?
mediumHow to approach thisNative (Swift/Kotlin) gives best performance and platform access but requires two codebases. React Native shares logic with web teams (JavaScript) but bridge overhead can affect performance for complex UIs. Flutter uses its own rendering engine (Skia) for consistent UI across platforms but requires Dart knowledge. Choose based on team skills, performance needs, and platform-specific feature requirements.
2.Explain the mobile app lifecycle on iOS and Android.
mediumHow to approach thisiOS: Not Running, Inactive, Active, Background, Suspended. Key callbacks: didFinishLaunching, willResignActive, didEnterBackground. Android: Created, Started, Resumed, Paused, Stopped, Destroyed. Key callbacks: onCreate, onResume, onPause, onDestroy. Understanding the lifecycle is critical for: saving state, releasing resources, handling interruptions (calls, notifications), and managing background tasks.
3.How would you implement offline support in a mobile app?
hardHow to approach thisStore data locally (SQLite, Realm, Core Data, or room). Queue mutations when offline and sync when connectivity returns. Use a conflict resolution strategy (last-write-wins, merge, or user-resolution). Show clear UI indicators for offline state and pending sync. Handle partial connectivity gracefully. Test with airplane mode and flaky network conditions.
4.What is the difference between a RecyclerView (Android) and a UICollectionView (iOS)?
mediumHow to approach thisBoth efficiently display scrollable lists by recycling off-screen cells. RecyclerView uses ViewHolder pattern and LayoutManagers (linear, grid, staggered). UICollectionView uses UICollectionViewLayout (flow, compositional). Both support cell reuse to minimize memory usage. The key concept: only visible cells plus a small buffer are in memory; cells are recycled as the user scrolls.
5.How do you handle push notifications in a mobile app?
mediumHow to approach thisRegister for notifications (APNs for iOS, FCM for Android). Store the device token on your server. Send notifications via the respective platform's API. Handle foreground, background, and killed-state delivery differently. Implement notification channels (Android) and notification categories (iOS) for user control. Always handle the case where the user denies notification permission.
6.What strategies would you use to reduce mobile app startup time?
mediumHow to approach thisDefer non-essential initialization (analytics, remote config, secondary features). Reduce the main binary size (remove unused code, compress assets). Use lazy loading for screens the user may not visit. Optimize the splash screen to mask initialization. Profile with platform tools (Instruments on iOS, Android Profiler). Target under 1 second for perceived launch time.
7.Explain the difference between a deep link and a universal link / app link.
mediumHow to approach thisDeep links (custom scheme: myapp://path) open the app directly but fail if the app is not installed. Universal links (iOS) and App Links (Android) use regular HTTPS URLs. If the app is installed, they open the app; if not, they open the website. They require server-side verification (apple-app-site-association file, assetlinks.json). Prefer universal/app links for better user experience.
8.How would you handle memory management in a mobile app?
hardHow to approach thisiOS uses ARC (Automatic Reference Counting): use weak/unowned references to break retain cycles, especially in closures and delegate patterns. Android uses garbage collection: watch for context leaks (holding Activity references in singletons), bitmap memory, and cursor leaks. Use profiling tools (Xcode Memory Graph, Android LeakCanary) to detect leaks. Monitor memory usage in production.
9.What is the MVVM pattern, and why is it popular in mobile development?
easyHow to approach thisMVVM (Model-View-ViewModel) separates the view (UI) from business logic (ViewModel) and data (Model). The ViewModel exposes data via observable properties; the View subscribes and updates automatically. Benefits: testable business logic (test the ViewModel without UI), clean separation, and compatibility with reactive frameworks (SwiftUI, Compose, RxJS). Compare with MVC and MVP.
10.How do you test mobile applications effectively?
mediumHow to approach thisUnit tests for business logic and ViewModels (fast, no device needed). UI tests for critical user flows (XCUITest, Espresso). Screenshot tests for visual regression. Integration tests for API communication. Test on real devices for performance (not just simulators). Use CI/CD to run tests on every PR (Bitrise, Fastlane, GitHub Actions with device farms).
11.What are the security considerations specific to mobile apps?
hardHow to approach thisDo not store secrets in the app binary (can be decompiled). Use certificate pinning for API calls to prevent MITM attacks. Store sensitive data in Keychain (iOS) or Encrypted SharedPreferences (Android). Implement app transport security (ATS on iOS). Obfuscate code (ProGuard/R8 on Android). Detect jailbroken/rooted devices if handling sensitive data. Validate all server responses.
12.How would you implement a smooth scrolling experience with images in a list?
easyHow to approach thisUse an image loading library (Kingfisher/SDWebImage on iOS, Glide/Coil on Android) that handles: async downloading, in-memory and disk caching, automatic cancellation when cells are recycled, image resizing to match the display size, and placeholder/error images. Decode images on a background thread. Use fixed-size image containers to prevent layout shifts during loading.