Câu hỏi phỏng vấn iOS Developer
IOS Developer là người xây dựng, phát triển các ứng dụng cho các thiết bị di động và tương thích với hệ điều hành iOS. Với sự lớn mạnh của Apple hiện nay, nhu cầu tuyển dụng iOS Developer trở nên lớn hơn bao giờ hết. Để chuẩn bị cho một buổi phỏng vấn vị trí này, dưới đây là những câu hỏi phỏng vấn iOS Developer bạn tham khảo nhé.
Câu hỏi phỏng vấn IOS Developer về chuyên môn
Mô tả vòng đời View Controller trong ứng dụng iOS
View Controller có nhiệm vụ tương tác với View và hệ thống, quản lý thay đổi từ View và thực hiện các cập nhật lên View. Vòng đời của View Controller bao gồm:
- Load View: gọi khi khởi tạo 1 view controller
- ViewDidLoad: Sau khi view controller được tạo và nạp vào bộ nhớ xong thì hàm này sẽ được gọi. Trong hàm này sẽ xử lý việc chuẩn bị data hay khởi tạo các giá trị trên màn hình
- ViewDidAppear: được gọi khi view đã được hiển thị lên màn hình
- ViewDidDisappear: gọi khi view được ẩn khỏi màn hình, chuyển sang màn hình khác
Các trạng thái thông thường của một ứng dụng iOS
Thông thường có 5 trạng thái mà một ứng dụng iOS có thể có:
- Not Running: ứng dụng đang hoàn toàn không được chạy
- Inactive: ứng dụng đang ở trạng thái mở nhưng có 1 ứng dụng khác đang chạy ưu tiên active bên trên như cuộc gọi, tin nhắn, ….
- Active: ứng dụng đang mở hoạt động và người dùng có thể tương tác
- Background: ứng dụng đang ở trạng thái chạy nền, thông thường là ứng dụng được mở từ trước đó, người dùng thoát ra sử dụng ứng dụng khác nhưng không tắt ứng dụng đi
- Suspended: ứng dụng khi ở trạng thái nền một thời gian nếu bộ nhớ của thiết bị không đủ để duy trì việc chạy nền thì sẽ không thể xử lý thêm tác vụ nào từ ứng dụng và đưa nó về trạng thái treo
Swift là gì? Ưu điểm của nó với Objective-C
Swift là một ngôn ngữ lập trình hướng đối tượng được Apple phát triển cho iOS, macOS và một số nền tảng khác. Swift được phát hành từ năm 2014, nó có nhiều tính năng ưu việt hơn các ngôn ngữ khác nhờ việc chọn ra những ý tưởng nổi bật của các ngôn ngữ đã phát triển trước đó. So với Objective-C (ngôn ngữ ban đầu được Apple sử dụng cho lập trình iOS) thì:
- Code trong Swift ngắn gọn và dễ đọc, dễ viết, dễ bảo trì hơn
- Rút ngắn được thời gian phát triển
- Có khả năng tương thích với Objective-C
- Có các tính năng hiện đại hơn như kiểm tra kiểu dữ liệu, quản lý bộ nhớ tự động
- Hỗ trợ lập trình hàm
Nêu sự khác biệt giữa 2 biến Strong và Weak?
Các biến là yếu tố không thể thiếu trong hoạt động lập trình các ứng dụng. Vì vậy câu hỏi so sánh và phân biệt các biến cũng sẽ thường bắt gặp trong quá trình phỏng vấn vị trí iOS developer.
Biến Strong khi trỏ đến đối tượng sẽ sở hữu đối tượng đó và làm retainCount của nó tăng thêm 1. Còn biến Weak khi trỏ đến đối tượng sẽ tham chiếu giá trị đó và không làm tăng retainCount của nó. Khi giá trị retainCount về 0 thì đối tượng sẽ bị hủy và biến Weak được reset về giá trị null.
Vậy biến Weak sử dụng trong trường hợp nào?
Sau khi bạn đã phân biệt 2 biến Strong và Weak, rất có thể nhà tuyển dụng sẽ muốn đào sâu về những trường hợp ứng dụng 2 biến này. Qua đó họ sẽ xác định được iOS developer hiểu biết tường tận hay chỉ tìm hiểu sơ bộ về những vấn đề này.
Có 2 trường hợp lập trình viên nên sử dụng biến Weak là: 2 class có các đối tượng reference đến nhau và 2 class có quan hệ cha con. Lúc này, lập trình viên sẽ dùng biến weak với 1 class để tránh leak memory.
So sánh các collection Array, Set và Dictionary trong Swift
Collection là những kiểu dữ liệu tập hợp, trong Swift có 3 dạng chính là Arrays, Sets và Dictionary.
- Array (Mảng) : sử dụng để lưu trữ dữ liệu cùng kiểu và sắp xếp có thứ tự. Do cần có thứ tự nên các phần tử trong mảng có thể trùng lặp nhau.
- Set (Bộ): cũng được sử dụng để lưu trữ các dữ liệu có cùng kiểu nhưng không quan tâm đến thứ tự sắp xếp trong đó. Khác với Array, các phần tử trong Set không được phép trùng lặp
- Dictionary (Từ điển): lưu trữ dữ liệu bằng cặp key – value, các key bắt buộc không trùng lặp nhau, tuy nhiên value thì có thể trùng lặp.
Các bước để phát hành ứng dụng iOS trên AppStore
Bước đầu tiên, bạn cần đăng ký chương trình nhà phát triển của Apple (Apple Developer Program) để có thể phát hành ứng dụng lên chợ Appstore
Sau khi có tài khoản, bạn cần tạo các file và thiết lập cho tài khoản và ứng dụng của mình, bao gồm:
- AppID: xác minh ứng dụng của bạn, nó là duy nhất
- Các thông tin cơ bản về ứng dụng: từ tên, mô tả, các ảnh chụp màn hình, các thông tin để phía Apple kiểm duyệt, … bạn cần cung cấp để mọi người biết đến ứng dụng của bạn
- Certificate: chứng chỉ được cấp bởi Apple đảm bảo việc ứng dụng của bạn được chấp nhận bởi các thiết bị sử dụng iOS
- Provisioning: như một hồ sơ đăng ký giúp ứng dụng của bạn xác định danh tính, bảo mật thông tin và giúp bạn có thể build được ứng dụng lên Appstore
ARC là gì?
Với câu hỏi này, nhà tuyển dụng muốn kiểm tra xem lập trình viên IOS có thực sự am hiểu về phương pháp lập trình trong iOS không. Bạn chỉ cần trả lời ngắn gọn và chính xác về khái niệm này là được.
ARC là từ viết tắt của Automatic Reference Counting, nghĩa là “Tự động đếm số lượng tham chiếu”. Đây là một hệ thống quản lý tự động được tích hợp sẵn trong ngôn ngữ lập trình Swift. Nó có vai trò tự động chèn thêm các đoạn code được chỉ định vào đối tượng và đưa ra quyết định khi nào đối tượng không cần thiết sử dụng các đoạn code nữa.
Bạn đã làm việc với các framework iOS nào?
Tôi đã làm việc với các framework như UIKit, Core Data, Core Animation và Alamofire. Tôi cũng có kiến thức về SwiftUI và Combine và đã sử dụng chúng trong các dự án nhỏ.
Kinh nghiệm “ đậu" phỏng vấn vị trí IOS Developer
Kiến thức là phần quan trọng trong buổi phỏng vấn mà bạn cần chuẩn bị kỹ càng, tuy nhiên đó chưa phải là tất cả để bạn vượt qua buổi phỏng vấn với số điểm tuyệt đối. Trong buổi phỏng vấn đôi khi còn phụ thuộc vào nhiều yếu tố khác nữa, hãy xem bạn cần chú ý những điều gì để có sự hoàn hảo trong buổi phỏng vấn sắp tới.
Sự tự tin
Có một câu nói rất hay và nổi tiếng về sự tự tin là : “Tự tin là điều kiện đầu tiên để làm được những điều lớn lao". Câu nói này quả thực không sai, chỉ cần bạn có sự tự tin với những gì bạn có, với những gì bạn làm chẳng có khó khăn nào cản trở được ý chí của bạn cả. Việc chuẩn bị tâm lý trước phỏng vấn cũng giúp bạn tự tin nhiều hơn, điều này rất có lợi đến việc trả lời câu hỏi.
Lựa chọn trang phục phù hợp
Một trang phục đẹp sẽ gây được chú ý của hà tuyển dụng, có khi còn giúp bạn lọt top những ứng viên ấn tượng trong mắt nhà tuyển dụng ý chứ. Còn gì tuyệt vời hơn nếu như bạn kết hợp những bộ trang phục với vị trí mà mình ứng tuyển. Với một chiếc áo sơ mi voi9ứ một chiếc quần jean cá tính mang phong cách mạnh mẽ rất phù hợp với một lập trình viên.
Chú ý cách giao tiếp
Giao tiếp thể hiện sự tôn trọng của bạn với nhà tuyển dụng, vậy nên hãy cố gắng đưa ra những câu trả lời cho đúng mực nhất. Hãy thể hiện mình là một người trưởng thành để nâng cao sự chuyên nghiệp của bản thân hơn
Câu hỏi phỏng vấn iOS Developer & Cách trả lời
Dưới đây là 3 câu hỏi phỏng vấn iOS Developer hàng đầu và cách trả lời chúng:
Câu hỏi #1: Lập trình iOS là gì? Ngôn ngữ, công cụ sử dụng
Lập trình iOS là việc xây dựng và phát triển các ứng dụng có thể chạy trên các thiết bị sử dụng hệ điều hành iOS, cụ thể là iPhone, iPad, iPod. Apple cung cấp IDE Xcode và iOS SDK cho việc lập trình iOS bằng ngôn ngữ Objective-C hay Swift; ngoài ra chúng ta cũng có thể phát triển ứng dụng iOS bằng các nền tảng cross-platform khác như React Native hay Flutter. iOS SDK được Apple phát hành miễn phí cho lập trình viên, mặc dù vậy nó chỉ hỗ trợ chạy trên nền MacOS cũng thuộc hệ sinh thái Apple.
Để ứng dụng iOS đến được với người dùng, các nhà phát hành cần đăng ký tài khoản Apple Developer và publish nó lên kho chợ ứng dụng AppStore. Tính đến nay có khoảng 2 triệu ứng dụng được phát hành trên nền tảng chợ ứng dụng này.
Câu hỏi #2: Swift là gì? Ưu điểm của nó với Objective-C
Swift là một ngôn ngữ lập trình hướng đối tượng được Apple phát triển cho iOS, macOS và một số nền tảng khác. Swift được phát hành từ năm 2014, nó có nhiều tính năng ưu việt hơn các ngôn ngữ khác nhờ việc chọn ra những ý tưởng nổi bật của các ngôn ngữ đã phát triển trước đó. So với Objective-C (ngôn ngữ ban đầu được Apple sử dụng cho lập trình iOS) thì:
- Code trong Swift ngắn gọn và dễ đọc, dễ viết, dễ bảo trì hơn
- Rút ngắn được thời gian phát triển
- Có khả năng tương thích với Objective-C
- Có các tính năng hiện đại hơn như kiểm tra kiểu dữ liệu, quản lý bộ nhớ tự động
- Hỗ trợ lập trình hàm
Câu hỏi #3: Các bước để phát hành ứng dụng iOS trên AppStore
Bước đầu tiên, bạn cần đăng ký chương trình nhà phát triển của Apple (Apple Developer Program) để có thể phát hành ứng dụng lên chợ Appstore
Sau khi có tài khoản, bạn cần tạo các file và thiết lập cho tài khoản và ứng dụng của mình, bao gồm:
- AppID: xác minh ứng dụng của bạn, nó là duy nhất
- Các thông tin cơ bản về ứng dụng: từ tên, mô tả, các ảnh chụp màn hình, các thông tin để phía Apple kiểm duyệt, … bạn cần cung cấp để mọi người biết đến ứng dụng của bạn
- Certificate: chứng chỉ được cấp bởi Apple đảm bảo việc ứng dụng của bạn được chấp nhận bởi các thiết bị sử dụng iOS
- Provisioning: như một hồ sơ đăng ký giúp ứng dụng của bạn xác định danh tính, bảo mật thông tin và giúp bạn có thể build được ứng dụng lên Appstore
Sau khi chuẩn bị hết các thứ ở trên, chúng ta tiến hành build và phát hành ứng dụng thông qua AppStore. Apple cũng cung cấp sẵn các tính năng giúp nhà phát hành kiểm thử ứng dụng nội bộ (trên một nhóm các testers được chỉ định) hoặc phát hành các bản dùng thử alpha, beta,…
Câu hỏi phỏng vấn
NSNotificationCenter là gì và nó hoạt động như thế nào?
↳
NSNotificationCenter là một cơ chế nghe-gọi mà Apple phát triển từ Observer Pattern trong thư viện Cocoa . Ý tưởng ở đây là Bên A từ một thao tác sẽ gửi thông điệp tới bên B qua một protocol, từ đố dữ liệu sẽ được truyền qua thông điệp tới bên B và bên B sẽ xử lý.
Sự khác biệt giữa 'let' và 'var' trong Swift là gì?
Sự khác biệt giữa Upcast và Downcast trong Swift là gì?
Serial Queue là gì?
Sự khác biệt giữa '==' và '===' là gì?
Các Extension được sử dụng để làm gì trong Swift?
Type Inference (Kiểu suy luận) là gì?
Protocols là gì?
Tuples là gì?
Điều gì về tính đột biến (Mutability) trong Swift?
Supscripts là gì?
Optional là gì?
Unwrap Optional bằng những cách nào?
Loại cấp phát bộ nhớ nào diễn ra trong Swift?
Sự khác biệt giữa ngăn xếp và bộ nhớ heap là gì?
Khái niệm của Optional trong Swift ?
Trong Swift thì Switch có những đặc tính gì?
Trong Swift có những loại Integer nào?
Phân biệt Atomic và Nonatomic
Category là gì? Nêu cách sử dụng?