50+ Câu hỏi phỏng vấn lập trình Mobile thường gặp cùng gợi ý trả lời phù hợp
Thị trường tuyển dụng Mobile Developer tại Việt Nam đang tăng trưởng mạnh, kéo theo đó là các buổi phỏng vấn ngày càng có yêu cầu cao hơn. Nhà tuyển dụng không còn chỉ hỏi về cú pháp hay định nghĩa, họ muốn thấy ứng viên có tư duy kiến trúc rõ ràng, hiểu được trade-off giữa các lựa chọn công nghệ và có khả năng giải quyết bài toán thực tế trên thiết bị di động. Bộ câu hỏi dưới đây được tổng hợp từ nhiều nguồn trong và ngoài nước, phản ánh đúng những gì nhà tuyển dụng tại các công ty công nghệ Việt Nam và quốc tế đang thực sự hỏi trong phòng phỏng vấn.
Phỏng vấn Mobile Developer đang được đánh giá như thế nào
Giai đoạn 2024 đến 2025 chứng kiến sự dịch chuyển rõ rệt trong cách các công ty đánh giá ứng viên Mobile Developer. Trước đây, phần lớn câu hỏi xoay quanh kiến thức cú pháp và API của từng nền tảng. Hiện tại, các vòng phỏng vấn kỹ thuật tại nhiều công ty đã bổ sung thêm phần đánh giá tư duy kiến trúc ứng dụng, khả năng tối ưu hiệu suất và hiểu biết về quy trình phát hành sản phẩm thực tế.
Một xu hướng đáng chú ý là Flutter và React Native ngày càng chiếm tỷ trọng lớn trong các tin tuyển dụng Mobile tại Việt Nam. Nhiều công ty, đặc biệt là startup và các đơn vị phát triển sản phẩm vừa và nhỏ, ưu tiên tuyển developer thành thạo cross-platform để tối ưu chi phí mà vẫn đảm bảo chất lượng sản phẩm trên cả hai nền tảng. Điều đó có nghĩa là dù bạn xuất phát từ Android hay iOS thuần, hiểu biết về cross-platform đang trở thành lợi thế cạnh tranh rõ ràng.
Điều nhà tuyển dụng thực sự tìm kiếm không phải là ứng viên biết nhiều thứ nhất, mà là ứng viên có thể lý luận rõ ràng khi đưa ra quyết định kỹ thuật, thành thật về giới hạn hiểu biết của mình và thể hiện được khả năng học hỏi liên tục. Đây cũng là lý do mỗi câu hỏi trong bộ tài liệu này đều đi kèm định hướng trả lời thay vì đáp án cứng nhắc.
Bộ 50+ câu hỏi phỏng vấn Mobile Developer
Bộ câu hỏi dưới đây được chia thành sáu nhóm chủ đề, phản ánh đúng cấu trúc mà hầu hết buổi phỏng vấn Mobile Developer tại các công ty công nghệ đang áp dụng. Tùy vào vị trí và công ty, mỗi buổi phỏng vấn có thể tập trung sâu hơn vào một hoặc hai nhóm, nhưng nắm vững cả sáu nhóm sẽ giúp bạn tự tin ứng phó với bất kỳ tình huống nào.

Câu hỏi về kiến thức nền tảng Mobile
Đây là nhóm câu hỏi xuất hiện ở hầu hết mọi buổi phỏng vấn Mobile bất kể nền tảng hay framework, vì chúng kiểm tra nền tảng tư duy của ứng viên về cách ứng dụng di động hoạt động. Nắm vững nhóm này giúp bạn trả lời tốt các câu hỏi chuyên sâu hơn ở các phần sau.
1. Native app, hybrid app và cross-platform app khác nhau như thế nào? Khi nào nên chọn loại nào?
Câu hỏi nền tảng này xuất hiện hầu hết trong các buổi phỏng vấn Mobile, interviewer muốn thấy bạn hiểu trade-off thực tế chứ không chỉ biết định nghĩa.
- Native app dùng ngôn ngữ riêng của từng nền tảng (Swift/Kotlin), cho hiệu suất tốt nhất nhưng chi phí cao vì phải maintain hai codebase.
- Cross-platform (Flutter, React Native) dùng một codebase chạy trên cả iOS lẫn Android, phù hợp khi cần ra sản phẩm nhanh và tiết kiệm chi phí.
- Hybrid là web app đóng gói trong native shell (Ionic, Cordova), hiệu suất thấp hơn hai loại trên, phù hợp với ứng dụng đơn giản.
- Nêu ví dụ thực tế từ dự án của bạn để minh hoạ lý do lựa chọn.
2. Vòng đời ứng dụng (App Lifecycle) trên Android và iOS hoạt động như thế nào?
Câu này kiểm tra xem bạn có hiểu cách hệ điều hành quản lý ứng dụng hay không, điều ảnh hưởng trực tiếp đến trải nghiệm người dùng và cách xử lý dữ liệu.
- Trên Android, trình bày được các trạng thái Activity như onCreate, onStart, onResume, onPause, onStop, onDestroy và khi nào mỗi trạng thái được gọi.
- Trên iOS, giải thích các trạng thái Not Running, Inactive, Active, Background và Suspended cùng với cách ứng dụng chuyển đổi giữa chúng.
- Nêu ứng dụng thực tế như lưu dữ liệu khi ứng dụng vào background hay giải phóng tài nguyên khi nhận cảnh báo bộ nhớ.
3. Sự khác biệt giữa process và thread trong lập trình mobile là gì?
Interviewer dùng câu này để đánh giá hiểu biết về concurrency, nền tảng quan trọng để viết ứng dụng mượt mà và tránh lỗi ANR hay frozen UI.
- Giải thích process là đơn vị tài nguyên độc lập, thread là đơn vị thực thi nằm trong process và chia sẻ tài nguyên với nhau.
- Nêu rõ UI thread (main thread) chỉ nên xử lý giao diện, các tác vụ nặng như network hay đọc file phải chạy trên background thread.
- Đề cập đến cơ chế xử lý đa luồng tương ứng với nền tảng bạn quen như Coroutines trên Android hay GCD trên iOS.
4. Cách quản lý bộ nhớ trong lập trình mobile hoạt động như thế nào?
Câu này phân loại ứng viên hiểu bản chất của nền tảng với người chỉ biết dùng framework mà không hiểu cơ chế bên dưới.
- Trên iOS, giải thích ARC (Automatic Reference Counting) tự động quản lý vòng đời object và lý do tại sao strong reference cycle gây memory leak.
- Trên Android, trình bày cách Garbage Collector hoạt động và tại sao vẫn có thể xảy ra memory leak nếu giữ reference không cần thiết.
- Nêu các dấu hiệu nhận biết memory leak và cách dùng công cụ profiling để phát hiện.
5. Các kiến trúc phổ biến trong lập trình mobile là gì và khi nào nên dùng loại nào?
Kiến trúc là chủ đề phân hóa rõ nhất giữa junior và mid-level, interviewer muốn thấy bạn hiểu lý do tồn tại của từng pattern chứ không chỉ biết tên.
- Trình bày được sự khác biệt cốt lõi giữa MVC, MVP, MVVM và Clean Architecture về cách phân chia trách nhiệm giữa các tầng.
- Giải thích MVVM phổ biến trong Android với LiveData và trong iOS với Combine vì tích hợp tốt với data binding.
- Nêu Clean Architecture phù hợp với dự án lớn cần testability cao và nhiều developer làm việc song song.
6. Deep link và universal link là gì và chúng hoạt động như thế nào?
Câu này kiểm tra hiểu biết thực tế về tích hợp giữa ứng dụng và web, thường gặp trong các dự án thương mại điện tử hay marketing.
- Giải thích deep link cho phép mở một màn hình cụ thể trong ứng dụng từ URL bên ngoài, ví dụ từ email hay banner quảng cáo.
- Phân biệt universal link (iOS) và app link (Android) với custom scheme: hai loại đầu dùng HTTPS nên an toàn và fallback được về web khi chưa cài app.
- Nêu cách cấu hình và các lưu ý về xử lý trạng thái khi app được mở từ deep link.
7. Push notification hoạt động như thế nào trên iOS và Android?
Câu này đánh giá hiểu biết về cơ chế giao tiếp giữa server, hạ tầng của nền tảng và ứng dụng, một tính năng gần như ứng dụng nào cũng cần.
- Trình bày luồng cơ bản: server gửi notification đến APNs (iOS) hoặc FCM (Android), hệ thống chuyển đến thiết bị và ứng dụng nhận xử lý.
- Phân biệt foreground notification (ứng dụng đang mở) và background notification (ứng dụng ở nền) với cách xử lý khác nhau.
- Đề cập đến việc xin permission trên iOS và các loại notification channel trên Android 8 trở lên.
8. Foreground state và background state khác nhau như thế nào và ảnh hưởng gì đến ứng dụng?
Interviewer muốn thấy bạn hiểu cách hệ điều hành ưu tiên tài nguyên và ảnh hưởng của nó đến thiết kế ứng dụng.
- Giải thích foreground app được ưu tiên CPU và bộ nhớ, background app bị hạn chế nghiêm ngặt đặc biệt trên iOS để tiết kiệm pin.
- Nêu các tác vụ được phép chạy ở background như location update, audio playback hay background fetch với điều kiện tương ứng.
- Trình bày cách thiết kế ứng dụng để lưu trạng thái đúng cách khi chuyển giữa hai trạng thái tránh mất dữ liệu người dùng.
9. Cách xử lý permission trên iOS và Android khác nhau như thế nào?
Câu này phổ biến vì permission ảnh hưởng trực tiếp đến trải nghiệm người dùng và tỷ lệ chấp nhận của ứng dụng.
- Trên iOS, permission chỉ được hỏi một lần và nếu người dùng từ chối thì chỉ có thể vào Settings để thay đổi, vì vậy cần giải thích lý do trước khi xin.
- Trên Android, phân biệt install-time permission và runtime permission, từ Android 11 trở lên có thêm one-time permission và auto-reset cho app không dùng lâu.
- Nêu cách thiết kế flow xin permission thân thiện với người dùng, bao gồm xử lý trường hợp bị từ chối.
10. Responsive layout và adaptive layout trong mobile khác nhau như thế nào?
Câu này đánh giá tư duy về UI khi ứng dụng cần chạy tốt trên nhiều kích thước màn hình khác nhau.
- Giải thích responsive layout co giãn linh hoạt dựa trên kích thước màn hình hiện tại, adaptive layout có các phiên bản layout riêng biệt cho từng ngưỡng kích thước.
- Nêu responsive phù hợp cho hầu hết trường hợp, adaptive cần thiết khi UX trên tablet cần khác biệt đáng kể so với phone.
- Đề cập đến các công cụ hỗ trợ như ConstraintLayout trên Android, Auto Layout trên iOS hay MediaQuery trong Flutter.

Câu hỏi về Android và Kotlin
Nhóm câu hỏi này dành riêng cho ứng viên ứng tuyển vị trí Android Developer hoặc các vị trí yêu cầu kinh nghiệm native Android. Các câu hỏi tập trung vào hệ sinh thái Jetpack hiện đại và Kotlin, phản ánh đúng stack công nghệ mà hầu hết dự án Android mới đang sử dụng.
11. Activity và Fragment khác nhau như thế nào và khi nào dùng cái nào?
Câu hỏi kinh điển trong phỏng vấn Android, interviewer muốn thấy bạn hiểu rõ vòng đời và quan hệ giữa hai thành phần này.
- Giải thích Activity là màn hình độc lập với vòng đời riêng, Fragment là thành phần UI tái sử dụng được đặt trong Activity.
- Nêu xu hướng hiện đại là Single Activity Architecture với nhiều Fragment, giúp điều hướng linh hoạt hơn với Jetpack Navigation.
- Trình bày cách Fragment communicate với Activity và với nhau thông qua shared ViewModel thay vì direct reference.
12. Jetpack Compose và View System (XML) khác nhau như thế nào?
Câu này đánh giá mức độ cập nhật của ứng viên với hệ sinh thái Android hiện đại, vì Compose đang dần trở thành tiêu chuẩn mới.
- Giải thích View System dùng XML để mô tả UI tách biệt với logic, Compose dùng Kotlin thuần với declarative approach viết UI trực tiếp trong code.
- Nêu Compose giúp giảm boilerplate, preview real-time và tích hợp tốt hơn với state management hiện đại.
- Đề cập đến khả năng interop để dùng Compose trong project View System hiện tại mà không cần rewrite toàn bộ.
13. ViewModel và LiveData trong Android hoạt động như thế nào và tại sao cần dùng?
Câu này kiểm tra hiểu biết về cách Android xử lý lifecycle-aware component, nền tảng của kiến trúc hiện đại.
- Giải thích ViewModel lưu trữ UI state và survive configuration change như xoay màn hình, tránh mất dữ liệu và gọi lại API không cần thiết.
- Trình bày LiveData là observable data holder tự động cập nhật UI khi data thay đổi và chỉ emit khi observer ở active state.
- Nêu Flow đang dần thay thế LiveData trong các project mới nhờ tích hợp tốt hơn với Coroutines và nhiều operator hơn.
14. Coroutines trong Android giải quyết vấn đề gì và hoạt động như thế nào?
Đây là câu hỏi phân hóa rõ ứng viên hiểu Coroutines thực sự hay chỉ dùng theo mẫu có sẵn.
- Giải thích Coroutines giúp viết code bất đồng bộ theo phong cách tuần tự, dễ đọc hơn so với callback lồng nhau hay RxJava.
- Trình bày các scope quan trọng như viewModelScope và lifecycleScope tự động cancel coroutine khi lifecycle kết thúc.
- Nêu sự khác biệt giữa suspend function, launch và async, cùng cách xử lý exception trong Coroutines đúng cách.
15. Room Database là gì và tại sao được khuyến nghị thay vì dùng SQLite trực tiếp?
Câu này đánh giá hiểu biết về local data persistence, một phần quan trọng trong hầu hết ứng dụng thực tế.
- Giải thích Room là abstraction layer trên SQLite, cung cấp compile-time verification cho SQL query và tích hợp tốt với Coroutines và Flow.
- Trình bày ba thành phần chính là Entity (data class ánh xạ với table), DAO (interface định nghĩa query) và Database (điểm truy cập).
- Nêu Room tự động handle migration với Migration class và hỗ trợ testing dễ dàng hơn SQLite thuần.
16. WorkManager được dùng để làm gì và khác gì so với Coroutines hay Service?
Câu này kiểm tra hiểu biết về background processing trên Android, chủ đề phức tạp do các giới hạn ngày càng chặt của hệ điều hành.
- Giải thích WorkManager dùng cho tác vụ cần đảm bảo thực thi kể cả khi app bị kill hay thiết bị khởi động lại, ví dụ như upload ảnh hay sync dữ liệu.
- Phân biệt với Coroutines phù hợp cho tác vụ bất đồng bộ trong phạm vi lifecycle của app, Service cho tác vụ foreground cần thông báo cho người dùng.
- Nêu khả năng cấu hình constraint như chỉ chạy khi có WiFi hoặc khi đang sạc pin.
17. Cách xử lý configuration change trong Android như thế nào?
Câu này phổ biến vì xoay màn hình hay thay đổi ngôn ngữ là nguồn gốc của nhiều bug khó chịu trong ứng dụng Android.
- Giải thích mặc định Android destroy và recreate Activity khi có configuration change, gây mất state nếu không xử lý đúng.
- Nêu ViewModel là giải pháp chính thống để lưu UI state qua configuration change, còn onSaveInstanceState phù hợp cho dữ liệu nhỏ cần persist khi process bị kill.
- Đề cập đến cách khai báo configChanges trong Manifest khi muốn tự xử lý thay vì để hệ thống recreate Activity.
18. Gradle trong Android đóng vai trò gì và bạn đã tùy chỉnh build script như thế nào?
Câu này đánh giá mức độ quen thuộc với quy trình build thực tế, thường gặp với ứng viên mid-level trở lên.
- Giải thích Gradle là build system quản lý dependency, build variant, signing config và quá trình đóng gói APK hay AAB.
- Nêu các khái niệm quan trọng như build type (debug/release), product flavor để tạo nhiều phiên bản app từ cùng codebase.
- Đề cập đến cách tối ưu build time bằng cách bật Gradle cache, parallel build hay dùng dependency version catalog.

Câu hỏi về iOS và Swift
Nhóm câu hỏi này dành cho ứng viên vị trí iOS Developer. Hệ sinh thái Apple có những đặc thù riêng về quản lý bộ nhớ, thiết kế UI và quy trình phát hành, và đây cũng là những điểm mà interviewer thường khai thác sâu nhất.
19. UIKit và SwiftUI khác nhau như thế nào và khi nào dùng cái nào?
Câu này đánh giá mức độ cập nhật với hệ sinh thái iOS hiện đại và khả năng phân tích trade-off của ứng viên.
- Giải thích UIKit là framework imperative ra đời từ iOS 2, SwiftUI là framework declarative ra mắt từ iOS 13 với cú pháp ngắn gọn và preview real-time.
- Nêu SwiftUI phù hợp cho project mới nhắm iOS 15 trở lên, UIKit vẫn cần thiết khi cần fine-grained control hoặc khi maintain codebase cũ.
- Trình bày cả hai có thể kết hợp qua UIHostingController và UIViewRepresentable để tích hợp dần SwiftUI vào project UIKit.
20. ARC hoạt động như thế nào và làm thế nào để tránh retain cycle?
Đây là câu hỏi kỹ thuật quan trọng trong iOS vì hiểu sai ARC là nguyên nhân phổ biến gây memory leak trong ứng dụng Swift.
- Giải thích ARC tự động đếm số strong reference đến một object và giải phóng bộ nhớ khi count về 0.
- Trình bày retain cycle xảy ra khi hai object giữ strong reference lẫn nhau khiến count không bao giờ về 0.
- Nêu cách phá retain cycle bằng weak hoặc unowned reference và ví dụ thực tế như closure capture list trong delegate pattern.
21. Grand Central Dispatch và async/await trong Swift khác nhau như thế nào?
Câu này đánh giá hiểu biết về concurrency trong iOS, từ API truyền thống đến cách tiếp cận hiện đại với Swift Concurrency.
- Giải thích GCD dùng queue và closure để quản lý concurrency, async/await là cú pháp mới từ Swift 5.5 giúp viết code bất đồng bộ tuần tự và dễ đọc hơn.
- Nêu Swift Concurrency với Actor giúp tránh data race tốt hơn so với GCD, và Task thay thế DispatchWorkItem.
- Trình bày vẫn cần hiểu GCD khi làm việc với codebase cũ hoặc tích hợp với Objective-C API chưa hỗ trợ async/await.
22. Core Data là gì và khi nào nên dùng thay vì UserDefaults hay file storage?
Câu này kiểm tra hiểu biết về các lựa chọn lưu trữ dữ liệu cục bộ trong iOS và khi nào dùng loại nào phù hợp.
- Giải thích Core Data là framework quản lý object graph và persistence, phù hợp với dữ liệu có cấu trúc phức tạp và cần query linh hoạt.
- Phân biệt UserDefaults chỉ phù hợp cho preference đơn giản, file storage cho binary data như ảnh hay video.
- Nêu SwiftData là thay thế hiện đại cho Core Data từ iOS 17 với cú pháp declarative và tích hợp tốt với SwiftUI.
23. Delegate, closure và notification khác nhau như thế nào trong iOS?
Câu này đánh giá hiểu biết về các pattern giao tiếp giữa các thành phần trong iOS, phổ biến trong mọi buổi phỏng vấn.
- Giải thích delegate phù hợp cho quan hệ một-một và có thể nhận phản hồi, closure phù hợp cho callback đơn giản và completion handler.
- Nêu NotificationCenter phù hợp cho quan hệ một-nhiều khi sender không cần biết receiver là ai.
- Trình bày Combine và async/await đang dần thay thế một số use case của delegate và closure trong code hiện đại.
24. Auto Layout trong iOS hoạt động như thế nào và các lỗi constraint phổ biến là gì?
Câu này kiểm tra kỹ năng xây dựng UI responsive trên nhiều kích thước màn hình, kỹ năng thực tế quan trọng với mọi iOS developer.
- Giải thích Auto Layout dùng constraint để định nghĩa quan hệ giữa các view, hệ thống tự tính toán frame dựa trên các ràng buộc đó.
- Nêu các lỗi phổ biến như conflicting constraint, missing constraint gây ambiguous layout hoặc constraint priority chưa được thiết lập đúng.
- Đề cập đến UIStackView giúp giảm số constraint cần viết tay và cách debug bằng view hierarchy debugger trong Xcode.
25. Những điểm quan trọng trong App Store Review Guideline mà developer cần lưu ý là gì?
Câu này đánh giá kinh nghiệm thực tế với quy trình phát hành iOS, không phải chỉ là biết code.
- Nêu một số nhóm guideline quan trọng như privacy (yêu cầu khai báo rõ data usage), in-app purchase (bắt buộc dùng Apple IAP cho digital goods) và content policy.
- Trình bày các lý do reject phổ biến như crash khi review, metadata không khớp với nội dung app, hay thiếu privacy policy.
- Chia sẻ kinh nghiệm thực tế nếu đã từng submit app và xử lý rejection như thế nào.
26. TestFlight được dùng để làm gì trong quy trình phát triển iOS?
Câu này đánh giá hiểu biết về quy trình phát hành và beta testing trên iOS, thường gặp khi phỏng vấn vị trí có kinh nghiệm.
- Giải thích TestFlight là nền tảng của Apple cho phép phân phối bản beta đến tối đa 10.000 tester bên ngoài trước khi submit lên App Store.
- Nêu sự khác biệt giữa internal testing (chỉ thành viên trong team Apple Developer account) và external testing (cần review sơ bộ từ Apple).
- Trình bày TestFlight tích hợp trong quy trình CI/CD giúp tự động hóa việc upload build và thông báo tester mỗi khi có phiên bản mới.

Câu hỏi về Flutter và Dart
Flutter đang là framework cross-platform được tuyển dụng nhiều nhất tại Việt Nam trong giai đoạn hiện tại. Nhóm câu hỏi này tập trung vào những khái niệm cốt lõi mà bất kỳ Flutter developer nào cũng cần nắm vững, từ cơ chế render cho đến quản lý state và tích hợp native code.
27. Widget tree trong Flutter hoạt động như thế nào và Flutter render UI ra sao?
Câu này đánh giá hiểu biết về cơ chế bên dưới của Flutter, nền tảng để giải thích nhiều quyết định kỹ thuật quan trọng hơn.
- Giải thích Flutter dùng Skia (hoặc Impeller từ Flutter 3.10) để tự render UI thay vì dùng native component, giúp giao diện nhất quán trên mọi nền tảng.
- Trình bày ba loại tree là Widget tree (blueprint), Element tree (instance quản lý lifecycle) và RenderObject tree (xử lý layout và paint).
- Nêu tại sao Flutter có thể đạt 60fps hoặc 120fps và cách build method được gọi lại hiệu quả thông qua cơ chế reconciliation.
28. StatefulWidget và StatelessWidget khác nhau như thế nào?
Câu hỏi cơ bản nhưng interviewer muốn thấy bạn giải thích được cơ chế bên dưới chứ không chỉ nêu định nghĩa.
- Giải thích StatelessWidget không có state nội tại và chỉ rebuild khi parent rebuild, phù hợp với UI thuần hiển thị.
- Trình bày StatefulWidget có State object tách biệt tồn tại qua nhiều lần rebuild, gọi setState để trigger rebuild khi state thay đổi.
- Nêu sai lầm phổ biến là dùng StatefulWidget quá nhiều khi không cần thiết, làm tăng độ phức tạp và ảnh hưởng hiệu suất.
29. Các giải pháp State Management phổ biến trong Flutter là gì và khi nào dùng loại nào?
Đây là câu hỏi hay gây tranh luận trong cộng đồng Flutter, interviewer muốn thấy bạn có quan điểm rõ ràng và có thể lý luận được.
- Trình bày Provider là giải pháp đơn giản được Flutter team khuyến nghị cho dự án vừa và nhỏ, Bloc phù hợp cho dự án lớn cần tách biệt rõ business logic và UI.
- Nêu Riverpod là evolution của Provider với API linh hoạt hơn và không phụ thuộc vào BuildContext, đang được cộng đồng đón nhận tích cực.
- Trình bày GetX phổ biến ở Việt Nam vì đơn giản và ít boilerplate nhưng có trade-off về testability và separation of concerns.
30. Dart Isolate là gì và khi nào cần dùng?
Câu này đánh giá hiểu biết về concurrency trong Dart, khác biệt đáng kể so với thread model truyền thống.
- Giải thích Dart chạy single-threaded theo mặc định, Isolate là đơn vị concurrency riêng biệt với memory heap độc lập, giao tiếp qua message passing thay vì shared memory.
- Nêu Isolate phù hợp cho các tác vụ CPU-intensive như xử lý ảnh, parse JSON lớn hay thuật toán phức tạp để tránh block main isolate.
- Trình bày Flutter cung cấp compute() function như cách đơn giản hóa việc tạo isolate cho các tác vụ đơn lẻ.
31. Hot reload và hot restart trong Flutter khác nhau như thế nào?
Câu hỏi nhẹ nhàng nhưng phản ánh mức độ quen thuộc với workflow phát triển Flutter hàng ngày.
- Giải thích hot reload inject code mới vào Dart VM đang chạy và rebuild widget tree, giữ nguyên app state nên rất nhanh.
- Nêu hot restart khởi động lại Dart VM hoàn toàn, reset toàn bộ state về ban đầu nhưng không cần recompile native code.
- Trình bày trường hợp hot reload không phản ánh thay đổi như sửa initState, global variable hay native code cần phải hot restart hoặc full restart.
32. Platform channel trong Flutter hoạt động như thế nào?
Câu này kiểm tra hiểu biết về cách Flutter giao tiếp với native code, kỹ năng quan trọng khi cần tích hợp tính năng không có plugin sẵn.
- Giải thích platform channel là cầu nối giao tiếp giữa Flutter (Dart) và native code (Swift/Kotlin) thông qua message passing bất đồng bộ.
- Trình bày ba loại channel là MethodChannel cho gọi hàm một lần, EventChannel cho stream dữ liệu liên tục và BasicMessageChannel cho message hai chiều.
- Nêu khi nào nên tự viết platform channel thay vì tìm plugin có sẵn trên pub.dev và những lưu ý về type conversion giữa Dart và native.
33. Các best practice để tối ưu hiệu suất Flutter app là gì?
Câu này đánh giá kinh nghiệm thực tế và tư duy tối ưu, thường gặp với ứng viên mid-level trở lên.
- Nêu việc tránh rebuild không cần thiết bằng cách dùng const constructor, tách widget nhỏ và đặt đúng vị trí setState hoặc state update.
- Trình bày dùng ListView.builder thay vì ListView cho danh sách dài, lazy load image bằng cached_network_image, và tránh build widget phức tạp trong build method.
- Đề cập đến công cụ Flutter DevTools để phát hiện jank, memory leak và rebuild không cần thiết trong quá trình phát triển.
34. Cách tích hợp native code vào Flutter project như thế nào?
Câu này kiểm tra khả năng làm việc ở tầng giao tiếp giữa Flutter và native, kỹ năng thực tế quan trọng trong các dự án phức tạp.
- Trình bày hai hướng chính là tạo Flutter plugin đóng gói native code để tái sử dụng, hoặc dùng platform channel trực tiếp trong app cho tính năng đặc thù.
- Nêu cách thêm Android module (Kotlin/Java) và iOS module (Swift/Objective-C) vào cùng một Flutter plugin project.
- Đề cập đến FFI (Foreign Function Interface) cho phép gọi trực tiếp C/C++ code từ Dart mà không qua platform channel, phù hợp cho tác vụ hiệu suất cao.

Câu hỏi về hiệu suất và tối ưu hóa
Hiệu suất là yếu tố trực tiếp ảnh hưởng đến trải nghiệm người dùng và tỷ lệ giữ chân. Nhóm câu hỏi này đánh giá khả năng nhận diện vấn đề hiệu suất, sử dụng đúng công cụ phân tích và áp dụng giải pháp phù hợp thay vì tối ưu ngẫu nhiên theo cảm tính.
35. Làm thế nào để nhận biết và xử lý memory leak trong ứng dụng mobile?
Câu này đánh giá khả năng debug vấn đề khó phát hiện, thường chỉ lộ ra sau khi ứng dụng chạy lâu hoặc có nhiều người dùng.
- Nêu dấu hiệu nhận biết: ứng dụng chậm dần theo thời gian, bộ nhớ tăng liên tục không giảm, cuối cùng bị crash với OOM error.
- Trình bày cách dùng Android Profiler hoặc Xcode Instruments Memory Graph để xác định object nào không được giải phóng.
- Đề cập đến các nguyên nhân phổ biến như static reference, callback chưa unregister, hay strong reference trong closure trên iOS.
36. Tối ưu cold start time của ứng dụng như thế nào?
Câu này thường gặp khi phỏng vấn vị trí senior hoặc khi công ty đang có vấn đề về thời gian khởi động app.
- Giải thích cold start là lần chạy đầu tiên khi process chưa tồn tại, bao gồm thời gian khởi tạo runtime, load resource và render màn hình đầu tiên.
- Nêu các hướng tối ưu như lazy initialization cho các module không cần thiết ngay lúc đầu, giảm work trong Application.onCreate (Android) hay applicationDidFinishLaunching (iOS).
- Trình bày cách đo cold start time chính xác bằng công cụ profiling thay vì ước lượng chủ quan.
37. Jank là gì và làm thế nào để giảm thiểu dropped frame?
Câu này kiểm tra hiểu biết về rendering pipeline và cách giữ cho UI luôn mượt mà ở 60fps hoặc 120fps.
- Giải thích jank xảy ra khi một frame mất hơn 16ms (60fps) hoặc 8ms (120fps) để render, khiến người dùng cảm thấy giật lag.
- Nêu nguyên nhân phổ biến: tác vụ nặng trên main thread, layout quá phức tạp, overdraw nhiều lớp hay decode ảnh đồng bộ.
- Trình bày cách dùng GPU profiler, Systrace (Android) hay Core Animation Instrument (iOS) để xác định đúng nguyên nhân.
38. Network optimization trong mobile app được thực hiện như thế nào?
Câu này đánh giá tư duy về hiệu suất ở tầng network, ảnh hưởng lớn đến tốc độ và độ tin cậy của ứng dụng trong điều kiện mạng thực tế.
- Nêu các kỹ thuật cơ bản như HTTP caching với ETag và Cache-Control, request batching để giảm số lượng round trip và compression với gzip.
- Trình bày offline-first architecture giúp ứng dụng vẫn hoạt động khi mất kết nối và sync dữ liệu khi có mạng trở lại.
- Đề cập đến exponential backoff khi retry request thất bại và cancel request không còn cần thiết khi người dùng rời màn hình.
39. Image caching và lazy loading được triển khai như thế nào trong mobile?
Câu thực tế này kiểm tra kiến thức về một trong những vấn đề hiệu suất phổ biến nhất khi hiển thị danh sách ảnh.
- Giải thích image caching lưu ảnh đã tải vào memory cache và disk cache, tránh tải lại từ network mỗi lần hiển thị.
- Nêu các thư viện phổ biến như Glide và Coil (Android), SDWebImage và Kingfisher (iOS), cached_network_image (Flutter) đã xử lý sẵn phần lớn các trường hợp.
- Trình bày lazy loading chỉ tải ảnh khi item thực sự xuất hiện trong viewport, kết hợp với placeholder và progressive loading để trải nghiệm tốt hơn.
40. Battery optimization trong mobile app được thực hiện như thế nào?
Câu này đánh giá ý thức về tài nguyên thiết bị, thường gặp khi ứng dụng có tính năng background hoặc location.
- Nêu các nguyên nhân tiêu hao pin phổ biến: location update tần suất cao, wake lock không cần thiết, network request dày đặc trong background.
- Trình bày cách dùng Doze mode (Android) và Background App Refresh policy (iOS) để tuân thủ giới hạn của hệ điều hành.
- Đề cập đến Battery Historian (Android) hay Energy Impact trong Xcode để phân tích mức độ tiêu thụ pin của ứng dụng.
41. Cách giảm kích thước file APK hoặc IPA để tối ưu quá trình tải xuống?
Câu này thực tế và thường gặp trong các dự án sản phẩm, nơi kích thước app ảnh hưởng đến tỷ lệ cài đặt.
- Nêu các kỹ thuật cho Android như bật ProGuard/R8 để shrink và obfuscate code, dùng Android App Bundle thay APK để Google Play tự tạo APK tối ưu cho từng thiết bị.
- Trình bày giảm kích thước resource bằng cách dùng vector drawable thay bitmap, nén ảnh và âm thanh, xóa resource không dùng với lint.
- Đề cập đến on-demand delivery với Dynamic Feature Module cho các tính năng không cần thiết ngay khi cài đặt.
42. Profiling tools nào bạn thường dùng và trong tình huống nào?
Câu này đánh giá thói quen làm việc thực tế, ứng viên có kinh nghiệm thường có câu trả lời cụ thể từ dự án thực tế.
- Nêu Android Profiler trong Android Studio với các module CPU, Memory, Network và Energy phù hợp với việc phát hiện hầu hết vấn đề hiệu suất Android.
- Trình bày Xcode Instruments với các template như Time Profiler, Allocations và Leaks cho iOS, Flutter DevTools với Performance và Memory tab cho Flutter.
- Chia sẻ kinh nghiệm cụ thể về lần dùng profiling tool để phát hiện và giải quyết vấn đề thực tế trong dự án.

Câu hỏi về bảo mật, kiểm thử và phát hành
Đây là nhóm câu hỏi phản ánh sự trưởng thành trong tư duy nghề nghiệp của một Mobile Developer. Viết code chạy đúng mới chỉ là một nửa công việc, phần còn lại là đảm bảo code đó an toàn, có thể kiểm thử được và sẵn sàng đến tay người dùng cuối một cách ổn định.
43. Làm thế nào để bảo mật dữ liệu nhạy cảm được lưu trữ trên thiết bị?
Câu này kiểm tra ý thức bảo mật ở tầng local storage, nơi nhiều developer bỏ qua hoặc xử lý sai.
- Nêu không được lưu thông tin nhạy cảm như token hay password vào SharedPreferences (Android) hay UserDefaults (iOS) vì không được mã hóa.
- Trình bày dùng Android Keystore System hoặc iOS Keychain để lưu credential an toàn, hai cơ chế này được hệ điều hành bảo vệ ở tầng phần cứng.
- Đề cập đến mã hóa database với SQLCipher hoặc tùy chọn mã hóa sẵn có của Room và Core Data khi cần lưu nhiều dữ liệu nhạy cảm.
44. Certificate pinning là gì và khi nào nên áp dụng?
Câu này đánh giá hiểu biết về bảo mật network communication, thường gặp trong ứng dụng tài chính hay y tế.
- Giải thích certificate pinning giúp ứng dụng chỉ tin tưởng certificate cụ thể thay vì tin tưởng mọi certificate được ký bởi CA hợp lệ, ngăn chặn MITM attack ngay cả khi CA bị xâm phạm.
- Nêu trade-off quan trọng: nếu certificate hết hạn mà không kịp update app, toàn bộ người dùng sẽ mất kết nối, vì vậy cần có backup pin và rotation strategy.
- Trình bày cách implement bằng OkHttp CertificatePinner (Android) hoặc URLSession với custom TrustEvaluator (iOS).
45. Các loại testing trong mobile app bao gồm những gì và vai trò của mỗi loại là gì?
Câu này đánh giá hiểu biết về testing pyramid và chiến lược kiểm thử trong thực tế, không chỉ biết viết một loại test.
- Trình bày unit test kiểm tra logic nghiệp vụ độc lập, nhanh và không phụ thuộc vào UI hay database thực.
- Nêu integration test kiểm tra sự tương tác giữa nhiều component, widget test (Flutter) hay view test (Android/iOS) kiểm tra UI component riêng lẻ.
- Đề cập đến end-to-end test mô phỏng hành vi người dùng thực với Espresso (Android), XCUITest (iOS) hay integration test của Flutter, chạy chậm hơn nhưng bao phủ toàn bộ luồng.
46. CI/CD cho mobile app được thiết lập như thế nào?
Câu này đánh giá hiểu biết về automation trong quy trình phát triển, ngày càng được coi trọng trong các team chuyên nghiệp.
- Nêu Fastlane là công cụ phổ biến nhất giúp tự động hóa build, test, signing và deploy lên TestFlight hay Google Play Internal Track.
- Trình bày các CI platform phổ biến như GitHub Actions, Bitrise hay Codemagic được thiết kế riêng cho mobile với build environment sẵn có.
- Đề cập đến tầm quan trọng của code signing automation vì quản lý certificate và provisioning profile thủ công là nguồn gốc của nhiều vấn đề trong team lớn.
47. Quy trình release lên App Store và Google Play có những điểm gì cần lưu ý?
Câu này thực tế và phân biệt ứng viên đã có kinh nghiệm ship sản phẩm thật với người chỉ làm project nội bộ.
- Nêu sự khác biệt quan trọng: Google Play review thường nhanh hơn (vài giờ đến một ngày), App Store review thường mất 1 đến 3 ngày và có thể bị reject vì nhiều lý do hơn.
- Trình bày cần chuẩn bị screenshot đúng kích thước, mô tả rõ ràng, privacy policy và khai báo đầy đủ data usage trước khi submit.
- Đề cập đến staged rollout trên Google Play giúp release dần dần cho một tỷ lệ người dùng để phát hiện vấn đề trước khi rollout toàn bộ.
48. Crash reporting và analytics được tích hợp vào ứng dụng mobile như thế nào?
Câu này đánh giá tư duy về observability sau khi app được phát hành, thứ cần thiết để duy trì chất lượng sản phẩm dài hạn.
- Nêu Firebase Crashlytics là lựa chọn phổ biến nhất cho crash reporting, cung cấp stack trace chi tiết, số lượng người bị ảnh hưởng và khả năng tìm kiếm theo issue.
- Trình bày analytics giúp hiểu hành vi người dùng thực tế, từ đó đưa ra quyết định sản phẩm dựa trên dữ liệu thay vì phỏng đoán.
- Đề cập đến tầm quan trọng của non-fatal error logging bên cạnh crash, vì nhiều vấn đề không gây crash nhưng vẫn ảnh hưởng đến trải nghiệm người dùng.
49. App versioning và force update được xử lý như thế nào trong thực tế?
Câu này kiểm tra hiểu biết về lifecycle management của ứng dụng sau khi phát hành, đặc biệt khi cần đảm bảo người dùng dùng phiên bản đủ mới.
- Giải thích semantic versioning với major.minor.patch và tầm quan trọng của version code riêng biệt dùng để compare phiên bản.
- Trình bày force update thường được thực hiện bằng cách check phiên bản tối thiểu từ remote config (Firebase Remote Config) khi app khởi động và chặn người dùng tiếp tục nếu phiên bản quá cũ.
- Nêu cần có thông báo rõ ràng và không gây khó chịu, cho người dùng biết lý do cần update và chuyển thẳng đến store.
50. A/B testing trong mobile app được triển khai như thế nào?
Câu này đánh giá hiểu biết về data-driven development, ngày càng phổ biến trong các công ty sản phẩm.
- Giải thích A/B testing cho phép chạy hai phiên bản khác nhau của một tính năng với hai nhóm người dùng để đo lường tác động thực tế.
- Nêu Firebase A/B Testing tích hợp với Remote Config giúp thay đổi giá trị cấu hình mà không cần update app, phổ biến trong các team mobile hiện đại.
- Trình bày cần xác định rõ metric thành công trước khi chạy test và đảm bảo sample size đủ lớn để kết quả có ý nghĩa thống kê.
Cách sử dụng bộ câu hỏi hiệu quả
Cách tiếp cận tốt nhất không phải là đọc từ đầu đến cuối rồi cố gắng ghi nhớ tất cả. Thay vào đó, hãy đọc từng câu hỏi, tự thử trả lời bằng lời của mình trước khi đọc phần gợi ý, sau đó so sánh xem bạn đã chạm đến những điểm mấu chốt hay chưa.
Với những câu bạn trả lời được nhưng chưa chắc chắn, hãy tìm hiểu sâu hơn về chủ đề đó thay vì chỉ đọc lại gợi ý. Mục tiêu là hiểu bản chất để có thể diễn đạt theo cách tự nhiên của mình trong buổi phỏng vấn thực tế. Ngoài ra, hãy chuẩn bị ít nhất một ví dụ thực tế từ dự án đã làm cho mỗi chủ đề, vì ví dụ cụ thể luôn tạo ấn tượng tốt hơn nhiều so với câu trả lời lý thuyết.
Tự tin chinh phục nhà tuyển dụng cùng Onschool Bootcamp
Chuẩn bị câu hỏi phỏng vấn là bước quan trọng, nhưng nền tảng thực sự để trả lời tốt các câu hỏi này đến từ việc đã thực sự xây dựng và ship sản phẩm thực tế. Chương trình Cross-Platform Mobile App Development tại Onschool Bootcamp được thiết kế để giúp bạn đạt được điều đó trong 120 ngày.
Học viên sẽ được đào tạo từ nền tảng lập trình di động đến xây dựng ứng dụng cross-platform hoàn chỉnh với Flutter, thực hành trên hơn 10 dự án thực tế tăng dần độ phức tạp trong môi trường Lab Online từ 8h đến 23h mỗi ngày với mentor hỗ trợ 1-1 xuyên suốt. Toàn bộ quá trình học được thiết kế theo mô hình Learning by Doing, nghĩa là bạn học cách kiến trúc ứng dụng, tối ưu hiệu suất và xử lý các tình huống thực tế ngay trong lúc xây dựng sản phẩm, không phải chỉ qua lý thuyết. Sau khi hoàn thành, học viên được hỗ trợ xây dựng portfolio, tối ưu CV, luyện tập phỏng vấn và kết nối với mạng lưới doanh nghiệp đối tác.
Kết luận
Phỏng vấn Mobile Developer là cơ hội để bạn thể hiện không chỉ kiến thức kỹ thuật mà còn tư duy giải quyết vấn đề và khả năng làm việc trong môi trường thực tế. Hầu hết các câu hỏi trong bộ tài liệu này đều có thể gặp ở nhiều dạng khác nhau tùy vào cách interviewer đặt vấn đề, vì vậy điều quan trọng là hiểu đủ sâu để linh hoạt ứng phó thay vì học thuộc câu trả lời cố định. Bắt đầu từ những nhóm câu hỏi phù hợp nhất với vị trí bạn đang ứng tuyển, luyện tập thường xuyên và tiếp tục xây dựng kinh nghiệm thực tế qua các dự án, đó là con đường ngắn nhất để tự tin bước vào bất kỳ buổi phỏng vấn nào.
Bạn đã sẵn sàng đổi thay sự nghiệp chưa?
Onschool Bootcamp tự hào chỉ trong 120 ngày, đào tạo thế hệ lập trình viên kiến tạo thế giới số - bắt đầu từ con số 0
Đừng quên chia sẻ bài viết này!
