Phỏng vấn kỹ thuật là quá trình đánh giá kỹ năng của nhà phát triển thông qua một loạt các buổi phỏng vấn và bài tập thực hành. Trong phát triển mobile, nó bao gồm kiểm tra kiến thức nền tảng (Android SDK, UIKit, SwiftUI), thuật toán và cấu trúc dữ liệu, mô hình kiến trúc (MVVM, Clean Architecture, MVI) và thiết kế hệ thống ứng dụng mobile. Các công ty lớn tổ chức từ 3 đến 5 vòng, thời gian tuyển dụng trung bình là 4-6 tuần. Theo LinkedIn Talent Report 2025, nhu cầu về kỹ sư iOS và Android đã tăng 34% trong hai năm.
Điểm chính
Phỏng vấn kỹ thuật là quá trình đánh giá năng lực chuyên môn có cấu trúc, bao gồm kiểm tra kỹ năng cứng (kiến thức kỹ thuật) và kỹ năng mềm (giao tiếp, làm việc nhóm). Chu kỳ phỏng vấn tiêu chuẩn cho nhà phát triển mobile có 3-5 vòng với tổng thời gian 4-6 giờ. Tỷ lệ đậu thành công so với số lượng đơn đăng ký ban đầu là 2-5% ở các công ty công nghệ lớn.
Quy trình tuyển dụng trong phát triển mobile khác với phát triển web: có thêm các câu hỏi về đặc thù nền tảng — vòng đời Activity/Fragment, ARC và quản lý bộ nhớ trong Swift, mô hình luồng (Main Thread, Dispatch Queue, Coroutines), yêu cầu mạng và lưu trữ dữ liệu. Nhà phát triển Android cần biết Jetpack Compose, Room, WorkManager, Dagger/Hilt. Nhà phát triển iOS — SwiftUI, Core Data, Combine, URLSession. Sự khác biệt về yêu cầu tăng dần theo kinh nghiệm: Đối với vị trí Senior, thiết kế hệ thống và kiến trúc toàn bộ ứng dụng được bổ sung.
Cấu trúc phỏng vấn phụ thuộc vào cấp bậc. Đối với vị trí Junior, kiến thức cơ bản về ngôn ngữ và nền tảng là đủ (1-2 vòng). Nhà phát triển Middle trải qua 2-3 vòng với phần thuật toán. Phỏng vấn Senior bao gồm 4-5 vòng: thuật toán, kiến trúc ứng dụng mobile, thiết kế hệ thống, phỏng vấn hành vi và phỏng vấn cuối cùng với VPE (Phó Chủ tịch Kỹ thuật) hoặc CTO.
Sàng lọc HR — giai đoạn đầu tiên kéo dài 20-30 phút. Nhân viên tuyển dụng kiểm tra sự phù hợp của kinh nghiệm với yêu cầu công việc, thảo luận về điều kiện làm việc, kỳ vọng lương và động lực của ứng viên. Ở giai đoạn này, điều quan trọng là trình bày rõ ràng kinh nghiệm của bạn: dự án, công nghệ sử dụng, thành tích về chỉ số (giảm thời gian tải, giảm tỷ lệ crash, tăng tốc độ build). Sàng lọc HR không kiểm tra kiến thức kỹ thuật, nhưng loại bỏ tới 40% ứng viên do không đáp ứng yêu cầu hình thức.
Sau khi sàng lọc là phỏng vấn thuật toán — giai đoạn quan trọng đối với hầu hết các công ty. Thời gian — 45-90 phút. Ứng viên được giao 1-2 bài toán về thuật toán và cấu trúc dữ liệu. Giải pháp được viết trên bảng trực tuyến (Codility, HackerRank, CoderPad) hoặc trên giấy. Không chỉ tính đúng mà còn tốc độ tư duy, khả năng đặt câu hỏi làm rõ và tối ưu hóa giải pháp cũng được đánh giá. Theo interviewing.io (2025), 73% ứng viên thất bại ngay ở giai đoạn thuật toán.
Vòng kiến trúc kiểm tra khả năng thiết kế ứng dụng mobile. Ứng viên được yêu cầu thiết kế một ứng dụng (danh sách công việc, trình nhắn tin, trình tổng hợp tin tức, dịch vụ phát trực tuyến). Việc lựa chọn mô hình kiến trúc (MVP, MVVM, MVI, VIPER), tổ chức các lớp (Presentation, Domain, Data), làm việc với DI (Dagger, Hilt, Swinject) và điều hướng được đánh giá. Đối với Android — kiến thức về Jetpack Navigation, đối với iOS — mô hình Coordinator và SwiftUI NavigationStack.
Phỏng vấn hành vi đánh giá kỹ năng mềm: khả năng làm việc nhóm, giải quyết xung đột, lập luận quyết định. Phương pháp STAR (Situation, Task, Action, Result) được sử dụng — ứng viên mô tả một tình huống cụ thể từ kinh nghiệm. Ví dụ câu hỏi: “Hãy kể về lỗi khó nhất mà bạn đã tìm thấy và sửa.” Vòng cuối cùng với trưởng nhóm hoặc VPE kiểm tra tư duy chiến lược và sự phù hợp văn hóa với công ty.
Các bài toán thuật toán là thành phần bắt buộc trong các buổi phỏng vấn tại các công ty công nghệ lớn (Google, Meta, Yandex, Tinkoff, Avito). Mục tiêu chính là đánh giá khả năng giải quyết vấn đề, không phải kiến thức ngôn ngữ. Ứng viên được phép sử dụng bất kỳ ngôn ngữ lập trình nào — ưu tiên Kotlin cho Android và Swift cho iOS. Các chủ đề điển hình: mảng, bảng băm, đồ thị, lập trình động, cây (Binary Tree, Trie, Segment Tree).
Theo LeetCode (2025), để vượt qua phỏng vấn thuật toán một cách tự tin, cần giải 250-400 bài toán. Các chủ đề chính theo tần suất: Two Pointers (12%), Sliding Window (10%), DFS/BFS trên đồ thị (14%), Binary Search (8%), Dynamic Programming (18%), Hash Map / Set (15%). Ký hiệu Big O là yếu tố bắt buộc: ứng viên phải giải thích độ phức tạp thời gian và không gian của giải pháp và đề xuất tối ưu hóa.
// LeetCode 1: Two Sum — bài toán HashMap kinh điển
fun twoSum(nums: IntArray, target: Int): IntArray {
// Lưu phần bù = target - nums[i] và chỉ mục của nó
val map = mutableMapOf<Int, Int>()
for (i in nums.indices) {
val complement = target - nums[i]
// Nếu tìm thấy phần bù — đã tìm thấy cặp
if (complement in map) {
return intArrayOf(map[complement]!!, i)
}
map[nums[i]] = i
}
throw IllegalArgumentException("No two sum solution")
}
// Thời gian: O(n), Không gian: O(n)Bài toán Two Sum là bài toán phổ biến nhất trong các buổi phỏng vấn (theo LeetCode, hơn 20 triệu lượt gửi). Giải pháp O(n) sử dụng HashMap: với mỗi phần tử, kiểm tra xem hiệu target - nums[i] đã xuất hiện chưa. Nếu có — trả về chỉ mục. Nếu không — lưu phần tử hiện tại vào HashMap. Giải pháp đơn giản O(n²) với hai vòng lặp lồng nhau được coi là không đạt yêu cầu cho vị trí Senior.
Câu hỏi nền tảng trong phỏng vấn nhà phát triển mobile được chia thành ba khối: kiến thức nền tảng cơ bản, làm việc với UI và đa luồng, yêu cầu mạng và lưu trữ dữ liệu. Đối với Android bắt buộc: vòng đời Activity và Fragment, sự khác biệt Fragment v1 và Fragment v2, ActivityResult API (thay thế onActivityResult), ViewModel + StateFlow, Compose lifecycle. Đối với iOS: vòng đời UIViewController, ARC (Đếm tham chiếu tự động), DispatchQueue và OperationQueue, SwiftUI lifecycle (View — @State — @Binding — @ObservedObject).
Câu hỏi điển hình: “Những callback nào của vòng đời Activity được gọi khi xoay màn hình?” Câu trả lời đúng: onPause → onStop → onDestroy → onCreate → onStart → onResume. Câu hỏi bổ sung: “Làm thế nào để lưu trạng thái khi xoay?” — thông qua SavedStateHandle trong ViewModel, onSaveInstanceState Bundle hoặc rememberSaveable trong Jetpack Compose. Đối với iOS: “Điều gì xảy ra với UIViewController khi vào nền?” — viewWillDisappear → viewDidDisappear → didEnterBackground (AppDelegate).
| Thành phần | Android | iOS |
|---|---|---|
| Vòng đời | Activity: onCreate → onStart → onResume → onPause → onStop → onDestroy | UIViewController: viewDidLoad → viewWillAppear → viewDidAppear → viewWillDisappear → viewDidDisappear |
| Lưu trạng thái | SavedStateHandle, onSaveInstanceState, rememberSaveable | Codable + UserDefaults, Core Data, @SceneStorage |
| Đa luồng | Coroutines (Dispatchers.Main, IO, Default) | GCD (DispatchQueue.main, .global, .background) |
| Giao diện UI | Jetpack Compose (Modifier, @Composable) | SwiftUI (View, @ViewBuilder, Modifier) |
| Điều hướng | Jetpack Navigation Component, Cicerone, Decompose | NavigationStack, Coordinator, Router (RIBs) |
System Design Interview dành cho nhà phát triển mobile kiểm tra khả năng thiết kế kiến trúc ứng dụng client và sự tương tác của nó với máy chủ. Các bài toán tiêu chuẩn: thiết kế bảng tin (như Instagram/TikTok), trò chuyện (như Telegram), trình phát video (như YouTube), bộ nhớ đệm cấp một (L1 — trong bộ nhớ, L2 — đĩa). Thời gian — 60 phút. Tư duy có cấu trúc được đánh giá, không phải số lượng chi tiết.
Mẫu câu trả lời cho System Design: 1) Clarify requirements — làm rõ yêu cầu chức năng (bảng tin, thích, bình luận, tải ảnh) và phi chức năng (ngoại tuyến, tốc độ tải, mức tiêu thụ pin). 2) High-level design — vẽ sơ đồ các lớp: UI Layer → ViewModel → Repository → Network / Cache / DB. 3) Deep dive — mô tả chi tiết các thành phần chính, ví dụ cơ chế phân trang (Paging 3 cho Android, Offset-based vs Cursor-based cho iOS). 4) Trade-offs — thảo luận các đánh đổi: bộ nhớ đệm so với độ mới của dữ liệu, offline-first so với online-only.
Các chủ đề System Design chính cho mobile: lưu trữ đệm (LRU Cache, Disk Cache có giới hạn), xử lý hình ảnh (Coil, Glide, SDWebImage — tải, bộ nhớ đệm, hình nền, tiến trình), tối ưu hóa lưu lượng (protobuf thay vì JSON, nén, Differ/GraphQL), làm việc ngoại tuyến (Room + Sync Adapter, Core Data + iCloud, WorkManager cho đồng bộ nền). Offline-first là một trong những chủ đề thường gặp nhất cho các vị trí Senior.
Đối với iOS, các câu hỏi về App Thinning, Slicing, On-Demand Resources và tối ưu hóa bản dựng được bổ sung. Đối với Android — về R8/ProGuard, App Bundles (AAB so với APK), Dynamic Delivery và Minification. Câu hỏi kiến trúc “Làm thế nào để triển khai bộ nhớ đệm hình ảnh với giới hạn bộ nhớ?” kiểm tra sự hiểu biết về LRU Cache (LinkedHashMap với thứ tự truy cập), Disk LRU Cache (DiskLruCache của Jake Wharton) và lớp bộ nhớ đệm Coil/Glide.
Chuẩn bị phỏng vấn đòi hỏi một cách tiếp cận hệ thống trong 4-8 tuần trước buổi phỏng vấn dự kiến. Chiến lược cơ bản: 2 tuần ôn tập lý thuyết (ngôn ngữ, nền tảng, thuật toán), 2-4 tuần giải các bài toán thuật toán (100-300 bài trên LeetCode), 1-2 tuần phỏng vấn thử (Pramp, interview.io, với bạn bè). Đối với vị trí Senior, việc chuẩn bị System Design được bổ sung (2-3 tuần). Kế hoạch này mang lại 70-80% tỷ lệ đậu thành công ở cấp độ mục tiêu.
Đối với nhà phát triển mobile, việc chuẩn bị cụ thể bao gồm: đọc Hướng dẫn nhà phát triển Android / Thư viện nhà phát triển iOS, phân tích mã nguồn của các thư viện phổ biến (Retrofit, OkHttp, Coil, Koin, Alamofire, Kingfisher), viết dự án cá nhân với Clean Architecture và CI/CD (GitHub Actions, Fastlane). Hãy viết một ứng dụng mẫu trên GitHub với kiến trúc mô-đun, DI, kiểm thử (Unit + UI + Ảnh chụp màn hình) — điều này sẽ thể hiện sự hiểu biết sâu sắc và trở thành một lập luận trong buổi phỏng vấn.
| Tuần | Việc cần làm | Kết quả |
|---|---|---|
| 1-2 | Ôn tập lý thuyết: ngôn ngữ (Kotlin/Swift), nền tảng (Android/iOS), thuật toán (Big O, cấu trúc cơ bản) | Ghi chép các chủ đề chính |
| 3-4 | LeetCode: 100-150 bài, chủ đề: Arrays, Hash Maps, Trees, DFS/BFS, DP | Giải tự tin các bài Medium |
| 5-6 | System Design: đọc “Designing Data-Intensive Applications”, thực hành 5-7 bản thiết kế | Mẫu câu trả lời System Design hoàn chỉnh |
| 7-8 | Phỏng vấn thử (5-10 buổi), ôn tập câu hỏi nền tảng, câu hỏi hành vi | Sẵn sàng hoàn toàn cho phỏng vấn thực tế |
Lỗi 1: Giải trong im lặng. Ứng viên viết mã trong im lặng, không nhận xét về quá trình suy nghĩ. Người phỏng vấn không thể đánh giá quá trình giải quyết. Đúng: nói to từng bước — “Tôi thấy bài toán này quy về tìm kiếm trên đồ thị. Tôi đề xuất sử dụng BFS vì chúng ta cần tìm đường đi ngắn nhất.” Sự giao tiếp này cho phép người phỏng vấn hướng dẫn ứng viên khi có lỗi, điều này được đánh giá tích cực.
Lỗi 2: Viết mã ngay lập tức. Bắt đầu viết mã mà không làm rõ yêu cầu và thảo luận phương pháp là một trong những nguyên nhân chính dẫn đến thất bại. Trước khi viết mã: làm rõ dữ liệu đầu vào/đầu ra, thảo luận các trường hợp đặc biệt, so sánh 2-3 phương pháp với đánh giá Big O và chỉ viết giải pháp tối ưu sau khi thỏa thuận với người phỏng vấn. Mô hình đúng: Clarify → High-level approach → Big O → Write code → Test with examples → Discuss trade-offs.
Lỗi 3: Thiếu kiến thức nền tảng. Ứng viên giải thuật toán tốt nhưng không thể giải thích sự khác biệt giữa Activity và Fragment hoặc giữa weak/unowned trong Swift. Đối với các vị trí mobile, kiến thức nền tảng được đánh giá ngang bằng với thuật toán. Hãy học: sự khác biệt về phiên bản SDK (compileSdk so với minSdk so với targetSdk), quy tắc ProGuard/R8 cho các thư viện phổ biến, Swift Concurrency (async/await, actors) và MainActor. Cứ ba ứng viên cho vị trí iOS thì một người thất bại ở các câu hỏi về ARC.
Các câu hỏi thường gặp
Số vòng tiêu chuẩn là 3-5: Sàng lọc HR (30 phút), thuật toán (60 phút), kiến trúc/thiết kế hệ thống (60 phút), phỏng vấn hành vi (45 phút), vòng cuối cùng với trưởng nhóm (60 phút). Ở startup có thể có 2-3 vòng, ở các công ty lớn (Google, Meta) — lên tới 6 vòng. Tổng thời gian của chu kỳ phỏng vấn — từ 2 đến 6 tuần tùy theo công ty.
5 chủ đề hàng đầu cho phỏng vấn thuật toán: lập trình động (18% bài toán), DFS/BFS trên đồ thị (14%), Two Pointers (12%), Sliding Window (10%), Binary Search (8%). Để vượt qua phỏng vấn FAANG, nên giải 250-400 bài toán trên LeetCode. Cấp độ Medium là mức tối thiểu bắt buộc. Đối với vị trí Senior, các bài toán về cây và hàng đợi ưu tiên được bổ sung.
Kế hoạch một tháng: tuần 1 — ôn tập ngôn ngữ và nền tảng (Kotlin/Swift, các thư viện chính, vòng đời). Tuần 2 — LeetCode Medium (100 bài, chủ đề: Arrays, Hash Maps, Trees). Tuần 3 — System Design cho mobile (bộ nhớ đệm, phân trang, offline-first). Tuần 4 — phỏng vấn thử (tối thiểu 3 trên Pramp hoặc với đồng nghiệp). Lời khuyên chính: thực hiện phỏng vấn thử trong điều kiện gần với thực tế — thời hạn, người phỏng vấn lạ, bảng trực tuyến.
Junior: 1-2 vòng, thuật toán cơ bản (reverse string, fizzbuzz, duyệt cây cơ bản), câu hỏi về ngôn ngữ và kiến thức cơ bản nền tảng. Middle: 2-3 vòng, thuật toán Medium, câu hỏi về kiến trúc (MVP/MVVM), làm việc với mạng và bộ nhớ đệm. Senior: 4-5 vòng, thuật toán Hard, System Design, kiến trúc toàn bộ ứng dụng, CI/CD, xem xét mã, câu hỏi hành vi về lãnh đạo và cố vấn. Senior được kỳ vọng tự đặt câu hỏi và dẫn dắt cuộc thảo luận.
Ví dụ câu hỏi: “Hãy kể về một xung đột trong nhóm và cách bạn giải quyết nó,” “Tính năng nào khó nhất và tại sao,” “Tại sao bạn muốn làm việc tại công ty chúng tôi,” “Bạn đã làm gì để cải thiện quy trình trong nhóm.” Sử dụng phương pháp STAR (Situation, Task, Action, Result) cho câu trả lời có cấu trúc. Chuẩn bị trước 3-4 câu chuyện từ kinh nghiệm — điều này bao phủ 80% các câu hỏi hành vi.
Tổng kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm