Develop in mobile development and create user-centric applications.
Interview Preparation
Algorithms and Data Structures
- Refresh your knowledge of algorithms and data structures: arrays, hash tables, trees, graphs, sorting, searching, and graph traversals.
- Solve Easy and Medium level problems, learn to complete solutions and find edge cases.
- Learn to test code independently and find errors without running it.
General Recommendations and Materials
It is recommended to study CodeRun materials, Yandex algorithm training, algorithm complexity analysis, algorithm lectures and courses, as well as materials on passing algorithmic sections at Yandex.
Android Development
To successfully pass the interview for an Android developer, you need to know Kotlin, collections, coroutines, Android SDK, architecture, and UI lifecycle.
Kotlin, Classes, Collections, and OOP
- Inline, noinline, and crossinline.
- Reified type parameters and JVM type erasure limitations.
- ArrayList, LinkedList, HashSet, LinkedHashSet, TreeSet, HashMap, LinkedHashMap, and TreeMap.
- Operation complexities, equals/hashCode, iteration order, capacity, and growth.
- Differences between Sequence and collections.
- Immutable data structures and persistent collections.
Multithreading and Coroutines
- Parallel data loading using coroutineScope, async, and awaitAll.
- supervisorScope, retry, timeout, and error handling.
- Coroutine cancellation and structured concurrency.
- Using Mutex and Semaphore.
- Prohibition of blocking calls and GlobalScope in UI.
- Using suspend API and passing scope from ViewModel.
Android SDK, Architecture, and Lifecycle
- Clean Architecture: Presentation, Domain, and Data.
- ViewModel, use cases, repositories, and data sources.
- Dependency injection with Hilt or Koin.
- Android View pipeline: measure, layout, and draw.
- requestLayout, invalidate, onMeasure, onLayout, and onDraw.
- RecyclerView, ListAdapter, DiffUtil, ViewHolder, and payloads.
- Jetpack Compose, state, recomposition, remember, rememberSaveable, derivedStateOf, and stable keys in Lazy components.
Practical Preparation
During the week, it is recommended to study inline and reified type parameters, the internal workings of collections, parallel data loading using coroutines, Clean Architecture, Android SDK, View lifecycle, Compose, and recomposition optimization. You also need to prepare a demo application with a list in Compose, parallel data loading, state management, UseCase, Repository, error handling, and retries.
iOS Development
Swift: Syntax Basics, Optionals, and Value/Reference Semantics
- Value and reference types.
- Copy-on-Write for collections.
- Optionals, if let, guard let, optional chaining, and nil-coalescing operator.
- Closures, escaping and non-escaping.
Memory Management
- ARC, strong, weak, and unowned references.
- Object lifecycle and retain cycles.
- Capturing self in closures.
- Finding retain cycles using the Memory Graph Debugger in Xcode.
UIKit and UI
- UIViewController lifecycle.
- Differences between UIView and UIViewController.
- View hierarchy and lazy loading.
- Cell reuse through register and dequeueReusableCell.
- Working with UI only from the main thread.
- DispatchQueue.main.async.
- Differences between frame and bounds.
- setNeedsLayout, layoutIfNeeded, and layoutSubviews.
Video Materials and Additional Resources
It is recommended to study lectures from the School of Mobile Development, materials on Android and Swift, official documentation for Kotlin, Android Developers, and Swift, as well as materials on ARC, coroutines, structured concurrency, Compose state, View rendering pipeline, and application performance.