Rozmowa techniczna (interview techniczne) — proces oceny umiejętności programisty poprzez serię rozmów i zadań praktycznych. W rozwoju aplikacji mobilnych obejmuje sprawdzenie znajomości platformy (Android SDK, UIKit, SwiftUI), algorytmów i struktur danych, wzorców architektonicznych (MVVM, Clean Architecture, MVI) oraz projektowania systemowego aplikacji mobilnych. Duże firmy przeprowadzają od 3 do 5 rund, średni czas rekrutacji to 4-6 tygodni. Według danych LinkedIn Talent Report 2025, zapotrzebowanie na inżynierów iOS i Android wzrosło o 34% w ciągu dwóch lat.
Najważniejsze
Rozmowa techniczna (interview techniczne) — ustrukturyzowany proces oceny kompetencji zawodowych programisty, obejmujący sprawdzenie hard skills (wiedza techniczna) i soft skills (komunikacja, praca w zespole). Standardowy cykl rozmowy kwalifikacyjnej programisty mobilnego trwa 3-5 rund o łącznym czasie 4-6 godzin. Odsetek pomyślnych przejść od liczby wstępnych odpowiedzi wynosi 2-5% w dużych firmach technologicznych.
Proces rekrutacji w rozwoju aplikacji mobilnych różni się od tworzenia stron internetowych: dodawane są pytania dotyczące specyfiki platformy — cykl życia Activity/Fragment, ARC i zarządzanie pamięcią w Swift, modele wielowątkowości (Main Thread, Dispatch Queue, Coroutines), praca z żądaniami sieciowymi i buforowaniem danych. Android developer musi znać Jetpack Compose, Room, WorkManager, Dagger/Hilt. iOS developer — SwiftUI, Core Data, Combine, URLSession. Różnica w wymaganiach rośnie z doświadczeniem: dla stanowisk Senior dodawane jest projektowanie systemowe i architektura całej aplikacji.
Struktura rozmowy zależy od poziomu. Dla pozycji Junior wystarcza podstawowa znajomość języka i platformy (1-2 rundy). Middle developer przechodzi 2-3 rundy z blokiem algorytmów. Senior interview obejmuje 4-5 rund: algorytmy, architekturę aplikacji mobilnej, projektowanie systemowe, rozmowę behawioralną i finałową rozmowę z VPE (Vice President of Engineering) lub CTO.
Screening HR — pierwszy etap trwający 20-30 minut. Rekruter sprawdza zgodność doświadczenia z wymaganiami oferty pracy, omawia warunki pracy, oczekiwania płacowe i motywację kandydata. Na tym etapie ważne jest jasne sformułowanie swojego doświadczenia: projekty, stos technologiczny, osiągnięcia w metrykach (skrócenie czasu ładowania, zmniejszenie crash rate, przyspieszenie kompilacji). Screening HR nie sprawdza wiedzy technicznej, ale odsiewa do 40% kandydatów z powodu niespełnienia formalnych wymagań.
Po screeningu następuje interview algorytmiczne — kluczowy etap dla większości firm. Czas trwania — 45-90 minut. Kandydat otrzymuje 1-2 zadania z algorytmów i struktur danych. Rozwiązanie pisze się na tablicy online (Codility, HackerRank, CoderPad) lub na papierze. Oceniana jest nie tylko poprawność, ale także szybkość myślenia, umiejętność zadawania pytań wyjaśniających i optymalizowania rozwiązań. Według danych interviewing.io (2025), 73% kandydatów odpada właśnie na etapie algorytmicznym.
Runda architektoniczna sprawdza umiejętność projektowania aplikacji mobilnych. Kandydat ma za zadanie zaprojektować aplikację (listę TODO, komunikator, agregator wiadomości, serwis streamingowy). Oceniany jest wybór wzorca architektonicznego (MVP, MVVM, MVI, VIPER), organizacja warstw (Presentation, Domain, Data), praca z DI (Dagger, Hilt, Swinject) i nawigacja. Dla Androida — znajomość Jetpack Navigation, dla iOS — wzorzec Coordinator i SwiftUI NavigationStack.
Na rozmowie behawioralnej oceniane są soft skills: umiejętność pracy w zespole, rozwiązywania konfliktów, argumentowania decyzji. Stosuje się metodę STAR (Situation, Task, Action, Result) — kandydat opisuje konkretną sytuację z doświadczenia. Przykładowe pytanie: „Opowiedz o najtrudniejszym bugu, który znalazłeś i naprawiłeś”. Runda finałowa z liderem zespołu lub VPE sprawdza myślenie strategiczne i dopasowanie kulturowe do firmy.
Zadania algorytmiczne — obowiązkowy komponent rozmów w dużych firmach technologicznych (Google, Meta, Yandex, Tinkoff, Avito). Głównym celem jest ocena ability to solve (zdolność rozwiązywania problemów), a nie znajomości języka. Kandydat może użyć dowolnego języka programowania — preferowany jest Kotlin dla Androida i Swift dla iOS. Typowe tematy: tablice, tablice haszujące, grafy, programowanie dynamiczne, drzewa (Binary Tree, Trie, Segment Tree).
Według danych LeetCode (2025), do pewnego przejścia rozmowy algorytmicznej należy rozwiązać 250-400 zadań. Kluczowe tematy według częstotliwości występowania: Two Pointers (12%), Sliding Window (10%), DFS/BFS na grafach (14%), Binary Search (8%), Dynamic Programming (18%), Hash Map / Set (15%). Notacja Big O — obowiązkowy element: kandydat musi wyjaśnić złożoność czasową i pamięciową swojego rozwiązania oraz zaproponować optymalizację.
// LeetCode 1: Two Sum — klasyczny problem z HashMap
fun twoSum(nums: IntArray, target: Int): IntArray {
// Przechowaj complement = target - nums[i] i jego indeks
val map = mutableMapOf<Int, Int>()
for (i in nums.indices) {
val complement = target - nums[i]
// Jeśli complement znaleziony — para znaleziona
if (complement in map) {
return intArrayOf(map[complement]!!, i)
}
map[nums[i]] = i
}
throw IllegalArgumentException("No two sum solution")
}
// Czas: O(n), Pamięć: O(n)Zadanie Two Sum — najpopularniejsze zadanie na rozmowach (według LeetCode, ponad 20 mln przesłań). Rozwiązanie w O(n) wykorzystuje HashMap: dla każdego elementu sprawdzamy, czy różnica target - nums[i] już wystąpiła. Jeśli tak — zwracamy indeksy. Jeśli nie — zapisujemy bieżący element w HashMap. Rozwiązanie naiwne w O(n²) z dwiema zagnieżdżonymi pętlami jest uznawane za nieprzechodzące dla pozycji Senior.
Pytania platformowe na rozmowie programisty mobilnego dzielą się na trzy bloki: podstawowa wiedza o platformie, praca z UI i wielowątkowością, żądania sieciowe i przechowywanie danych. Dla Androida obowiązkowe: cykl życia Activity i Fragment, różnice Fragment v1 vs Fragment v2, ActivityResult API (zamiennik onActivityResult), ViewModel + StateFlow, Compose lifecycle. Dla iOS: cykl życia UIViewController, ARC (Automatic Reference Counting), DispatchQueue i OperationQueue, SwiftUI lifecycle (View — @State — @Binding — @ObservedObject).
Typowe pytanie: „Jakie callbacki cyklu życia Activity są wywoływane przy obrocie ekranu?”. Prawidłowa odpowiedź: onPause → onStop → onDestroy → onCreate → onStart → onResume. Dodatkowe pytanie: „Jak zachować stan przy obrocie?” — przez SavedStateHandle w ViewModel, onSaveInstanceState Bundle lub rememberSaveable w Jetpack Compose. Dla iOS: „Co dzieje się z UIViewController przy przejściu do tła?” — viewWillDisappear → viewDidDisappear → didEnterBackground (AppDelegate).
| Komponent | Android | iOS |
|---|---|---|
| Cykl życia | Activity: onCreate → onStart → onResume → onPause → onStop → onDestroy | UIViewController: viewDidLoad → viewWillAppear → viewDidAppear → viewWillDisappear → viewDidDisappear |
| Zapisywanie stanu | SavedStateHandle, onSaveInstanceState, rememberSaveable | Codable + UserDefaults, Core Data, @SceneStorage |
| Wielowątkowość | Coroutines (Dispatchers.Main, IO, Default) | GCD (DispatchQueue.main, .global, .background) |
| Budowa UI | Jetpack Compose (Modifier, @Composable) | SwiftUI (View, @ViewBuilder, Modifier) |
| Nawigacja | Jetpack Navigation Component, Cicerone, Decompose | NavigationStack, Coordinator, Router (RIBs) |
System Design Interview dla programisty mobilnego sprawdza umiejętność zaprojektowania architektury aplikacji klienckiej i jej interakcji z serwerem. Standardowe zadania: zaprojektować kanał wiadomości (jak Instagram/TikTok), czat (jak Telegram), odtwarzacz wideo (jak YouTube), pamięć podręczną pierwszego poziomu (L1 — in-memory, L2 — dysk). Czas trwania — 60 minut. Oceniana jest strukturalność myślenia, a nie liczba szczegółów.
Szablon odpowiedzi na System Design: 1) Clarify requirements — doprecyzować wymagania funkcjonalne (kanał, polubienia, komentarze, ładowanie zdjęć) i niefunkcjonalne (offline, szybkość ładowania, zużycie baterii). 2) High-level design — narysować schemat warstw: UI Layer → ViewModel → Repository → Network / Cache / DB. 3) Deep dive — uszczegółowić kluczowe komponenty, np. mechanizm paginacji (Paging 3 dla Androida, Offset-based vs Cursor-based dla iOS). 4) Trade-offs — omówić kompromisy: pamięć podręczna vs świeżość danych, offline-first vs online-only.
Kluczowe tematy System Design dla aplikacji mobilnych: buforowanie (LRU Cache, Disk Cache z limitem), praca z obrazami (Coil, Glide, SDWebImage — ładowanie, pamięć podręczna, placeholder, postęp), optymalizacja ruchu (protobuf zamiast JSON, kompresja, Differ/GraphQL), praca offline (Room + Sync Adapter, Core Data + iCloud, WorkManager do synchronizacji w tle). Offline-first — jeden z najczęstszych tematów na stanowiska Senior.
Dla iOS dodawane są pytania o App Thinning, Slicing, On-Demand Resources i optymalizację buildu. Dla Androida — o R8/ProGuard, App Bundles (AAB vs APK), Dynamic Delivery i Minification. Pytanie architektoniczne „Jak zaimplementować pamięć podręczną obrazów z ograniczeniem pamięci?” sprawdza zrozumienie LRU Cache (LinkedHashMap z access order), Disk LRU Cache (DiskLruCache Jake'a Whartona) i Coil/Glide memory cache layer.
Przygotowanie do rozmowy wymaga systematycznego podejścia na 4-8 tygodni przed planowanym interview. Podstawowa strategia: 2 tygodnie na powtórkę teorii (język, platforma, algorytmy), 2-4 tygodnie na rozwiązywanie zadań algorytmicznych (100-300 zadań na LeetCode), 1-2 tygodnie na mock interview (Pramp, interview.io, ze znajomymi). Dla pozycji Senior dodawane jest przygotowanie System Design (2-3 tygodnie). Plan daje 70-80% pomyślnego przejścia na docelowy poziom.
Dla programistów mobilnych specyficzne przygotowanie obejmuje: czytanie Android Developers Guide / iOS Developer Library, analizę kodu źródłowego popularnych bibliotek (Retrofit, OkHttp, Coil, Koin, Alamofire, Kingfisher), napisanie pet-projektu z Clean Architecture i CI/CD (GitHub Actions, Fastlane). Napiszcie aplikację przykładową na GitHubie z architekturą modułową, DI, testami (Unit + UI + Snapshot) — to pokaże głębokie zrozumienie i stanie się argumentem na rozmowie.
| Tydzień | Co robić | Rezultat |
|---|---|---|
| 1-2 | Powtórka teorii: język (Kotlin/Swift), platforma (Android/iOS), algorytmy (big O, podstawowe struktury) | Notatki z kluczowych tematów |
| 3-4 | LeetCode: 100-150 zadań, tematy: Arrays, Hash Maps, Trees, DFS/BFS, DP | Pewne rozwiązywanie zadań Medium |
| 5-6 | System Design: czytanie „Designing Data-Intensive Applications”, praktyka 5-7 projektów | Gotowy szablon odpowiedzi na System Design |
| 7-8 | Mock interview (5-10 rozmów), powtórka pytań platformowych, pytania behawioralne | Pełna gotowość do prawdziwej rozmowy |
Błąd 1: ciche rozwiązywanie. Kandydat pisze kod w milczeniu, nie komentując toku myślenia. Prowadzący rozmowę nie może ocenić procesu rozwiązywania. Prawidłowo: omawiać każdy krok na głos — „Widzę, że zadanie sprowadza się do przeszukiwania grafu. Proponuję użyć BFS, ponieważ trzeba znaleźć najkrótszą ścieżkę”. Taka komunikacja daje prowadzącemu możliwość ukierunkowania kandydata w razie błędu, co jest oceniane pozytywnie.
Błąd 2: od razu pisanie kodu. Rozpoczynanie kodowania bez doprecyzowania wymagań i omówienia podejść — jeden z głównych powodów niepowodzenia. Przed napisaniem kodu należy: doprecyzować dane wejściowe/wyjściowe, omówić przypadki brzegowe, porównać 2-3 podejścia z oceną Big O i dopiero po uzgodnieniu z prowadzącym pisać optymalne rozwiązanie. Prawidłowy wzorzec: Clarify → High-level approach → Big O → Write code → Test with examples → Discuss trade-offs.
Błąd 3: nieznajomość platformy. Kandydat świetnie rozwiązuje algorytmy, ale nie potrafi wyjaśnić różnicy między Activity i Fragment lub między weak/unowned w Swift. W przypadku ofert mobilnych wiedza platformowa jest oceniana na równi z algorytmami. Przestudiujcie: różnice wersji SDK (compileSdk vs minSdk vs targetSdk), reguły ProGuard/R8 dla popularnych bibliotek, Swift Concurrency (async/await, actors) i MainActor. Co trzeci kandydat na stanowisko iOS odpada na pytaniach o ARC.
Często zadawane pytania
Standardowa liczba rund to 3-5: screening HR (30 minut), algorytmy (60 minut), architektura/projektowanie systemowe (60 minut), rozmowa behawioralna (45 minut), runda finałowa z liderem zespołu (60 minut). W startupach może być 2-3 rundy, w dużych firmach (Google, Meta) — do 6 rund. Całkowity czas trwania cyklu rozmów — od 2 do 6 tygodni w zależności od firmy.
Top 5 tematów na rozmowę algorytmiczną: programowanie dynamiczne (18% zadań), DFS/BFS na grafach (14%), Two Pointers (12%), Sliding Window (10%), Binary Search (8%). Do przejścia rozmowy w FAANG zaleca się rozwiązanie 250-400 zadań na LeetCode. Poziom Medium — obowiązkowe minimum. Dla pozycji Senior dodawane są zadania na drzewach i kolejkach priorytetowych.
Plan na miesiąc: tydzień 1 — powtórka języka i platformy (język Kotlin/Swift, podstawowe biblioteki, cykle życia). Tydzień 2 — LeetCode Medium (100 zadań, tematy: Arrays, Hash Maps, Trees). Tydzień 3 — System Design dla aplikacji mobilnych (pamięć podręczna, paginacja, offline-first). Tydzień 4 — mock interview (minimum 3 na Pramp lub z kolegą). Kluczowa rada: przechodźcie mock interview w warunkach zbliżonych do rzeczywistych — deadline, nieznany prowadzący, tablica online.
Junior: 1-2 rundy, podstawowe algorytmy (reverse string, fizzbuzz, basic tree traversal), pytania o język i podstawy platformy. Middle: 2-3 rundy, algorytmy Medium, pytania o architekturę (MVP/MVVM), praca z siecią i pamięcią podręczną. Senior: 4-5 rund, algorytmy Hard, System Design, architektura całej aplikacji, CI/CD, code review, pytania behawioralne o przywództwo i mentoring. Oczekuje się, że Senior sam zadaje pytania i prowadzi dyskusję.
Przykładowe pytania: „Opowiedz o konflikcie w zespole i jak go rozwiązałeś”, „Która funkcja była najtrudniejsza i dlaczego”, „Dlaczego chcesz pracować właśnie u nas”, „Co robiłeś, aby ulepszyć procesy w zespole”. Użyjcie metody STAR (Situation, Task, Action, Result) dla ustrukturyzowanej odpowiedzi. Przygotujcie 3-4 historie z doświadczenia z wyprzedzeniem — to pokrywa 80% pytań behawioralnych.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również