Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
Dù Flutter và React Native phổ biến, nhiều công ty vẫn tuyển lập trình viên native cho Android (Kotlin) và iOS (Swift). Các câu hỏi phỏng vấn thường xoay quanh vòng đời thành phần giao diện, quản lý bộ nhớ, xử lý bất đồng bộ và lưu trữ dữ liệu. Dưới đây là phần tổng quan cho cả hai nền tảng.
Các hàm chính của Activity theo thứ tự: onCreate, onStart, onResume, rồi khi rời đi là onPause, onStop, onDestroy. Khi xoay màn hình, Activity bị hủy và tạo lại, nên trạng thái giao diện cần được lưu bằng ViewModel hoặc onSaveInstanceState. Fragment có vòng đời riêng, và view của nó có vòng đời tách biệt với bản thân Fragment, một chi tiết hay bị hỏi.
Các hàm quen thuộc: viewDidLoad (nạp một lần), viewWillAppear, viewDidAppear, viewWillDisappear, viewDidDisappear. Với SwiftUI, vòng đời thể hiện qua cách view được mô tả và các modifier như onAppear, task.
Swift dùng Automatic Reference Counting: đối tượng được giải phóng khi không còn tham chiếu mạnh. Vấn đề kinh điển là retain cycle, khi hai đối tượng giữ tham chiếu mạnh lẫn nhau hoặc closure giữ self. Cách xử lý là dùng weak hoặc unowned.
class Loader { var onDone: (() -> Void)? func start() { onDone = { [weak self] in guard let self = self else { return } self.finish() } } func finish() { print("Xong") }}Java và Kotlin dùng bộ thu gom rác, nhưng rò rỉ vẫn xảy ra khi giữ tham chiếu tới Context hoặc Activity trong đối tượng sống lâu như singleton hoặc luồng nền. Hãy dùng Application context khi cần, hủy đăng ký listener, và theo dõi rò rỉ bằng công cụ phân tích bộ nhớ.
Không được thực hiện thao tác nặng như mạng, đọc ghi file trên luồng chính vì làm giao diện giật hoặc treo.
viewModelScope và lifecycleScope tự hủy theo vòng đời.async/await, Task, actor; ngoài ra còn có Grand Central Dispatch và Combine.// KotlinviewModelScope.launch { val user = withContext(Dispatchers.IO) { repository.loadUser() } _state.value = user}Cả hai hệ sinh thái đều khuyến khích tách giao diện và logic. Các mô hình phổ biến là MVVM (View, ViewModel, Model), MVI và Clean Architecture. Điều quan trọng là bạn giải thích được vì sao tách lớp giúp kiểm thử dễ hơn, trạng thái ổn định qua xoay màn hình và dễ mở rộng. Hãy nói về dependency injection: Hilt hoặc Koin trên Android, khởi tạo qua constructor hoặc các container trên iOS.
Danh sách dài cần tái sử dụng ô: RecyclerView (hoặc LazyColumn của Jetpack Compose) trên Android, UITableView/UICollectionView (hoặc List của SwiftUI) trên iOS. Giải thích được cơ chế tái sử dụng, vai trò của ViewHolder hay dequeueReusableCell, và cách tránh công việc nặng khi cuộn sẽ là điểm cộng.
Hãy biết quy trình cơ bản: ký ứng dụng bằng khóa hoặc chứng chỉ, tạo bản build phát hành, kiểm thử nội bộ, đẩy lên Google Play Console hoặc App Store Connect, tuân thủ chính sách và hướng dẫn của từng cửa hàng. Nếu bạn từng phát hành một ứng dụng thật, đây là câu chuyện rất đáng kể.
Dù chọn Android hay iOS, hãy hiểu chắc vòng đời, bộ nhớ, bất đồng bộ và kiến trúc. Hãy sẵn sàng trình diễn một ứng dụng thật và giải thích các quyết định kỹ thuật phía sau.
Nếu bạn muốn học lập trình di động theo lộ trình, hãy xem các khóa phù hợp tại codebem.com.
Nguyễn Đình Cường
0 comment