12/08/2018, 15:08

Những câu hỏi cơ bản về iOS

Nội dung Giới thiệu Những câu hỏi cơ bản về iOS Kết Luận Giới thiệu Bạn đang bận làm dự án, đã lâu rồi bạn không mài kiếm (đọc lại kiến thức) về ngôn ngữ bạn đang sử dụng để làm dự án. Vậy hãy cùng chúng tôi review lại những kiến thức cơ bản về iOS thông qua những câu hỏi cơ bản này ...

Nội dung

  • Giới thiệu
  • Những câu hỏi cơ bản về iOS
  • Kết Luận

Giới thiệu

Bạn đang bận làm dự án, đã lâu rồi bạn không mài kiếm (đọc lại kiến thức) về ngôn ngữ bạn đang sử dụng để làm dự án. Vậy hãy cùng chúng tôi review lại những kiến thức cơ bản về iOS thông qua những câu hỏi cơ bản này nhé!

Nào chúng ta bắt đầu

Những câu hỏi cơ bản về iOS

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

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.

2 )   Auto-layout là gì?

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.

3 )   GCD(Grand Central Dispatch) là gì, cách sử dụng ntn?

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.

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

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.

  • function đồng bộ chỉ trả về khi task mà nó yêu cầu đã đuược hoàn thành.
  • 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

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

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

6 ) MVC là gì ?

MVC là viết tắt của Model – View – Controller. Là một kiến trúc phần mềm hay mô hình thiết kế được sử dụng trong kỹ thuật phần mềm. Nói cho dễ hiểu, nó là mô hình phân bố source code thành 3 phần, gồm Model-View-Controller, mỗi thành phần có một nhiệm vụ riêng biệt và độc lập với các thành phần khác.

  • Controller: Giữ nhiệm vụ nhận điều hướng các yêu cầu từ người dùng và gọi đúng những phương thức xử lý chúng… Chẳng hạn thành phần này sẽ nhận request từ url và form để thao tác trực tiếp với Model.

  • Model: Đây là thành phần chứa tất cả các nghiệp vụ logic, phương thức xử lý, truy xuất database, đối tượng mô tả dữ liệu như các Class, hàm xử lý…

  • View: Đảm nhận việc hiển thị thông tin, tương tác với người dùng, nơi chứa tất cả các đối tượng GUI như textbox, images… Hiểu một cách đơn giản, nó là tập hợp các form hoặc các file HTML.

7 ) Delegate là gì ?

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 đó

8 )  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ý.

9 ) Phân biệt giữa frame và bounds

  • Frame là tọa độ và kích thước của view trong View cha của nó

  • Bounds là tọa độ và kích thước của view trong hệ tọa độ của chính nó

10 ) Mục đích sử dụng của khái niệm "reuseIdentifier" ?

Dùng để tái sử dụng một đối tượng đã được khởi tạo và cấp phát trước đó. Ví dụ: tableView.dequeuereuseablecellwithIdentifier => UITableView sẽ khởi tạo một số lượng object Cell vừa đủ để hiển thị trên màn hình của thiết bị. Và với cơ chế reuseIdentifier, UITableView sẽ không tạo thêm Cell nào cả, mà sẽ tái sử dụng các đối tượng sẵn có để tránh tình trạng giật, lag máy.

1 1) Định nghĩa atomic và nonatomic.

Khi bạn có nhiều hơn một thread (luồng), nó có thể cho các setter và getter được gọi cùng một lúc. Điều này có nghĩa rằng getter / setter có thể bị gián đoạn bởi hoạt động khác, có thể dẫn đến dữ liệu bị hỏng.

Thuộc tính Atomic sẽ ngăn chặn điều này xảy ra, đảm bảo rằng các hoạt động được, hoặc thiết lập đang làm việc với một giá trị đầy đủ. Tuy nhiên, điều quan trọng là phải hiểu rằng đây chỉ là một khía cạnh của thread-safe-using (luồng an thoàn) và thuộc tính Atomic không đảm bảo là mã của bạn là thread-safe.

1 2) Sự khác nhau giữa weak và strong ?

Strong pointer là một con trỏ, trỏ đến một đối tượng và sở hữu (own) đối tượng đó. Weak pointer là một con trỏ, trỏ đến một đối tượng nhưng không sở hữu (own) đối tượng đó.

Khi tạo ra một reference strong đến một đối tượng, retainCount của đối tượng đó tăng lên 1

  • Khi release một tham chiếu strong đến một đối tượng, retainCount của đối tượng giảm đi 1 Nghĩa là: tham chiếu strong sở hữu đối tượng mà nó tham chiếu đến, nó quyết định đến sự tồn tại của đối tượng.
  • Khi retainCount của đối tượng về 0 thì đối tượng được giải phóng hoàn toàn khỏi bộ nhớ
  • Khi retainCount > 0 và gán object = nil thì đối tượng cũng được giải phóng hoàn toàn khỏi bộ nhớ
  • Khi tạo ra một tham chiếu "weak" đến một đối tượng, retainCount của đối tượng đó không tăng lên 1.
  • Khi release một tham chiếu "weak" đến một đối tượng, retainCount của đối tượng đó không bị giảm đi 1. weak được sử dụng chủ yếu trong kết nối IBOutlet và sử dụng để tránh trường hợp retain cycle

1 3)  Liệt kê 5 trạng thái của 1 ứng dụng iOs

  • Not running: Ứng dụng chưa được mở hoặc đang mở thì bị đóng bởi hệ thống.
  • Inactive: Ứng dụng đang chạy trên màn hình nhưng không nhận được thao tác nào của người dùng. Trạng thái này diễn ra khi ứng dụng đang trong giai đoạn chuyển từ màn hình này sang màn hình khác.
  • Active: Đây là chế độ bình thường của ứng dụng, ứng dụng chạy trên mà hình và nhận được đầy đủ các thao tác của người dùng.
  • Background: Ở trạng thái này, ứng dụng sẽ chạy ở dưới background, khi app đang chạy bình thường mà chúng ta ấn nút Home thì ứng dụng sẽ chuyển vào trạng thái này.
  • Suspended: Ứng dụng nằm ở dưới background nhưng code sẽ không chạy.

1 4)Category là gì và cách sử dụng ?

Để thêm một phương thức vào trong class mà không muốn mở rộng nó, chúng ta sử dụng Category. Categories là cách để chúng ta phân chia một lớp khởi tạo ra nhiều file khác nhau. Mục đích của việc này là để giảm bớt gánh nặng của việc duy trì các đoạn cơ sở code lớn bằng việc modul hóa thành một lớp. Điều này giúp bạn tránh khỏi việc viết các tập tin với hơn 10000 dòng code mà không thể ứng dụng, di chuyển đến chỗ khác.

#### 1 5)Duyệt phần tử ở đâu thì nhanh hơn? NSSet hay NSArray?

Khi thứ tự của các phần tử không quan trọng thì quá trình duyệt phần tử tại NSSet sẽ nhanh hơn vì NSSet sử dụng hash value để tìm phần tử, giống như từ điển. Còn NSArray sẽ duyệt qua nội dung của từng phần tử một.

Kết Luận

"Giá trị bản thân" là giá trị của chính bản thân mỗi người trong chúng ta. Hằng ngày chúng ta đến công ty làm việc, chúng ta sử dụng nó để làm việc và công ty cũng trả lương cho chúng ta dựa trên sự ghi nhận về giá trị đó cùng sự đóng góp của bạn cho công ty. Lần cuối cùng bạn mài giũa kỹ năng của mình là lúc nào? Hay là chỉ cật lực làm việc mà bạn quên mất là mình phải dừng lại, phát triển kỹ năng cho hiệu quả hơn? Xin cảm ơn bạn đã dành chút thời gian đọc bài viết!

Nguồn:

https://www.codementor.io/mattgoldspink/ios-interview-tips-questions-answers-objective-c-du1088nfb https://www.raywenderlich.com/53962/ios-interview-questions

0