Câu hỏi phỏng vấn iOS Developer

64 Các câu hỏi phỏng vấn iOS Developer được chia sẻ bởi các ứng viên

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

iOS Developer được hỏi... 03/06/2023

Quản lý bộ nhớ là gì?

1 câu trả lời

Quản lý bộ nhớ là quy tắc lập trình để quản lý vòng đời của các đối tượng và giải phóng chúng khi không còn dùng.

ARC (Automatic Reference Counting) là một tính năng quản lý bộ nhớ của trình biên dịch cung cấp các tham chiếu tự động cho Objective-C và Swift.

Phân biệt Value Type/ Reference Type

  • Value Type - mỗi thể hiện giữ một bản sao duy nhất của dữ liệu như: Struct, Enum, Tuple.
  • Reference Type - mỗi thể hiện chia sẻ cùng một vùng nhớ của dữ liệu, thường được định nghĩa là một lớp.

Memory Leak là một phần của bộ nhớ bị chiếm giữ và không còn được sử dụng lại. Và thế là bộ nhớ tăng lên đến một lúc nào đó sẽ gây ra tình trạng hết bộ nhớ.

iOS Developer được hỏi... 03/06/2023

GCD là gì?

1 câu trả lời

GCD là một tính năng quan trọng được giới thiệu ở iOS 4. Nó dùng để phân phối tính toán trên nhiều lỗi ở bất kỳ luồng nào và nó được tối ưu hoá để sử dụng cho các thiết bị chạy đa lõi.

Dispatch Queue là một lớp trừu tượng trên hàng đợi GCD cho phép thực hiện các tác vụ không đồng bộ và đồng thời trong ứng dụng.

Serial Queue và Concurent Queue:

  • Serial Queue: chỉ thực hiện nhiệm vụ tại một thời điểm.
  • Concurent Queue: cho phép thực hiện nhiều vụ cùng một lúc.
iOS Developer được hỏi... 03/06/2023

Unit Testing là gì?

1 câu trả lời

Unit testing là một kỹ thuật kiểm thử sử dụng module riêng lẻ để kiểm tra các vấn đề gặp phải của chính các nhà phát triển. Nó liên quan đến tính chính xác của module chức năng.

Các điểm thuận lợi khi dùng unit testing:

  • Giảm khiếm khuyết trong các tính năng mới được phát triển hoặc giảm lỗi khi thay đổi chức năng hiện có.
  • Giảm chi phí phát triển vì đã phát hiện sớm.
  • Cải thiện thiết kế và cho phép tái cấu trúc mã tốt hơn.

XCTest và XCUITest là một framework để viết kiểm thử đơn vị, kiểm thử hiệu năng, kiểm thử giao diện người dùng trong dự án Xcode hoặc iOS.

iOS Developer được hỏi... 03/06/2023

ARC là gì?

1 câu trả lời

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.

iOS Developer được hỏi... 03/06/2023

Khi nào ARC được sử dụng và không được sử dụng?

1 câu trả lời

ARC thường được được sử dụng cho phiên bản iOS 5 trở lên. Còn với các phiên bản từ iOS 4 trở xuống, lập trình viên vẫn cần tự code mã để quản lý bộ nhớ.

Riêng với các dự án dùng ARC nhưng có sử dụng thêm các code quản lý bộ nhớ thủ công như retain, release,.. thì lập trình viên có thể điều chỉnh về cơ chế non-arc và sử dụng code đó.

iOS Developer được hỏi... 03/06/2023

Biến Weak sử dụng trong trường hợp nào?

1 câu trả lời

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 
  • 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. 

iOS Developer được hỏi... 03/06/2023

Hãy nêu ý nghĩa của từ khóa @synthesize

1 câu trả lời

Từ khóa @synthesize dùng cho 1 biến giúp nó có thể trình biên dịch tự động để tạo 2 hàm về getter và setter. Còn nếu lập trình viên đã tự viết thì khi dùng từ khóa này sẽ không tạo thêm hai hàm này nữa.

iOS Developer được hỏi... 06/06/2023

Trong Objective-C lập trình viên có thể khai báo Public Static không?

1 câu trả lời

Có thể. Để khai báo Public Static ta đồng thời sử dụng từ khóa static và dấu + cho các function.

iOS Developer được hỏi... 07/06/2023

Sự khác nhau giữa Swift và Objective-C?

1 câu trả lời

Swift Objective-C
  • Biến và hằng số được khai báo trước khi sử dụng.
  • Phải dùng từ khóa 'let' để khai báo hằng số và 'var' để khai báo biến.
  • Không cần dùng dấu chấm phẩy để kết thúc đoạn code.
  • Trong swift, bạn có thể dễ dàng ghép nối chuỗi nhanh chóng và tạo chuỗi mới từ sự kết hợp các hằng số, chữ, biến và biểu thức.
  • Swift không yêu cầu tạo 1 interface riêng biệt như Objective-C. Bạn có thể định nghĩa các lớp trong 1 file (.swift)
  • Swift cho phép bạn định nghĩa các method trong class, structure hoặc enumeration.
  • Trong Swift, bạn có thể dùng toán tử "+=" để thêm 1 item.
  • Trong objective-c, bạn phải khai báo biến là NSString và hằng số là int.
  • Đoạn code phải kết thúc bằng dấu chấm phẩy.
  • Trong objective-c, bạn phải chọn giữa NSMutableString và NSString cho string cần chỉnh sửa.
  • Đối với các class, bạn phải tạo interface riêng (.h) và file thực thi riêng (.m)
  • Objective-C không cho phép khai báo các method tương tự như trong swift.
  • Bạn phải dùng methd 'addObject'  của NSMutable để thêm 1 item vào 1 mảng
iOS Developer được hỏi... 05/06/2023

Liệt kê ra các Control Transfer Statements (lệnh chuyển điều khiển) được dùng trong Swift?

1 câu trả lời

  • Continue
  • Break
  • Fallthrough
  • Return
iOS Developer được hỏi... 06/06/2023

Có bao nhiêu loại Collection trong Swift?

1 câu trả lời

Trong swift, có 2 loại: ArrayDictionary.

  • Array: bạn có thể tạo 1 Array của 1 loại dữ liệu hoặc 1 Array của nhiều loại dữ liệu

//Example for single type array is,

Var cardName : [String] = [ “Robert” , “Lisa” , “Kevin”]

// Swift can infer [String] so we can also write it as:

Var cardNames = [ “Robert”, “Lisa”, “Kevin”] // inferred as [String]

  • Dictionary: gần giống như Hash trong các ngôn ngữ lập trình khác, 1 Dictionary cho phép bạn lưu các cặp key-value và truy xuất value bằng key.

var cards = [ “Robert”: 22, “Lisa” : 24, and “Kevin”: 26]

 

iOS Developer được hỏi... 05/06/2023

Các tính năng chính của Swift?

1 câu trả lời

Các tính năng chính của Swift là:

  • Loại bỏ toàn bộ các class không an toàn (classes of unsafe code)
  • Các biến luôn được khởi tạo trước khi dùng.
  • Array và Integer được kiểm tra cho vấn đề overflow.
  • Memory được quản lý tự động.
  • Swift sử dụng 'switch' thay cho câu điều kiện 'if'
iOS Developer được hỏi... 05/06/2023

Xem xét đoạn code bên dưới " var array1 = [1, 2, 3, 4, 5]... " và cho biết kết quả?

1 câu trả lời

var array1 = [1, 2, 3, 4, 5]

var array2 = array1

array2.append(6)

var len = array1.count

Giá trị của 'len' là bao nhiêu? Giải thích?

len = 5, bởi vì mảng trong swift là loại giá trị ( như structs ) chứ không phải là loại tham chiếu ( như classes). Các loại giá trị trong swift:

  • structs (incl. arrays và dictionaries)
  • enumerations
  • loại dữ liệu (boolean, integer, float, etc.)
iOS Developer được hỏi... 05/06/2023

Hiện tượng Memory leak là gì?

1 câu trả lời

Memory leak là quá trình thâm hụt dần dần của bộ nhớ khả dụng của hệ thống, nó xảy ra khi một chương trình lặp đi lặp lại không trả lại bộ nhớ nó đã chiếm dụng trong quá trình sử dụng. Trong lập trình hướng đối tượng, Memory leak xảy ra khi một đối tượng được lưu trong bộ nhớ nhưng không truy cập được bởi code hiện tại.

iOS Developer được hỏi... 05/06/2023

 Định nghĩa App Thining

1 câu trả lời

Đây là tính năng mà người dùng các thiết bị có bộ nhớ 8 hay 16 GB được hưởng lợi nhiều nhất. App Thinning giúp tự động tối ưu dung lượng các ứng dụng tải về và bỏ qua các phần thừa nhằm tiết kiệm bộ nhớ. 
Chẳng hạn, bạn đang sở hữu iPhone 5, mỗi khi tải ứng dụng từ App Store, vốn được thiết kế để chạy trên nhiều dòng máy khác nhau, App Thinning sẽ phát hiện và chọn tải những thành phần đủ để phần mềm chạy, từ đó tiết kiệm đáng kể không gian lưu trữ.

iOS Developer được hỏi... 05/06/2023

Auto-layout là gì?

1 câu trả lời

Auto Layout là cơ chế tự động tính toán size và vị trí của tất các view nằm trong ứng dụng của bạn, nó dựa trên một hệ thống điều kiện gọi là constraint đặt trên từng view.

iOS Developer được hỏi... 05/06/2023

Định nghĩa GCD(Grand Central Dispatch) và cách sử dụng?

1 câu trả lời

GCD là một API phổ biến của Apple được sử dụng để hỗ trợ việc xử lý tác vụ đồng thời trên các phần cứng đa lõi của iOS và OSx. Ví dụ như khi ứng dụng lấy dữ liệu từ một API, thao tác này sẽ được thực thi tại một thread "ngầm" (background thread), nhằm giảm tải công việc cho thread "chính" (main thread). Qua đó làm tăng performance của ứng dụng và làm nó trở nên mượt hơn.

iOS Developer được hỏi... 05/06/2023

Phân biệt Synchronous và Asynchronous trong GCD

1 câu trả lời

2 thuật ngữ này mô tả việc 1 function khi hoàn tất công việc của nó thì liên quan đến các task khác - mà nó yêu cầu GCD xử lý - như thế nào. 1 function đồng bộ chủ trả về khi task mà nó yêu cầu đã đuược hoàn thành. Còn function ko đồng bộ thì trả về ngay lập tức, nó vẫn yêu cầu task phải được thực hiện nhưng ko chờ đợi task đó làm xong. Vì vậy, function bất đồng bộ sẽ không block thread hiện tại.

iOS Developer được hỏi... 05/06/2023

Tại sao lại phải tạo một weak reference khi sử dụng self trong block?

1 câu trả lời

Để tránh hiện tượng retain cycles và memory leak.

iOS Developer được hỏi... 05/06/2023

Delegate là gì ?

1 câu trả lời

Delegate là một pattern rất phổ biến trong công việc truyển dữ liệu giữa các View. Cơ chế hoạt động của nó là View B ủy quyền cho View A thực thi một hành động nào đó, View A sau khi nhận dữ liệu View.B trả về, sẽ dismiss View B và thực thi hành động mà view B đã ủy quyền trước đó

Đang xem 21 - 40 trong 64 câu hỏi phỏng vấn