Ở thời đại 4.0 hiện nay, thiết bị di động đã trở thành một phần không thể thiếu trong cuộc sống của con người. Từ đó nhu cầu tuyển dụng Mobile App Developer ngày càng trở nên nhiều hơn. Vì vậy, để chuẩn bị tốt nhất cho buổi phỏng vấn của vị trí này, VietnamWorks inTECH sẽ mang đến 10 câu hỏi mà các Mobile App Developer thường gặp trong các buổi phỏng vấn technical nhất.

1. Làm cách nào để bạn có thể lưu trữ dữ liệu trong Android và iOS? Những cơ sở dữ liệu và native solution nào hiện có?

Giải pháp lưu trữ dữ liệu gốc dành cho Android là SharedPreferences. Giải pháp này nhằm mục đích lưu trữ một lượng nhỏ dữ liệu, như tùy chọn hoặc cài đặt của người dùng. Dữ liệu được lưu trữ trong một tệp XML.

Có một giải pháp tương tự dành cho iOS được gọi là UserDefaults (trước đây NSUserDefaults). Dữ liệu được lưu trữ trong một tập tin .plist.

Cả hai nền tảng đều có khả năng sử dụng SQLite và cung cấp các framework & thư viện để hoạt động trên dữ liệu (mặc dù có thể sử dụng cơ sở dữ liệu theo cách thủ công):

  • iOS có Core Data, một framework để quản lý đồ thị object. Nó có thể sử dụng SQLite nhưng cũng có thể lưu dữ liệu trong binary store hoặc trong bộ nhớ.

  • Android có thư viện lưu trữ Room, giúp đơn giản hóa việc quản lý cơ sở dữ liệu SQLite và giảm bớt boilerplate xung quanh việc sử dụng cơ sở dữ liệu.

Giải pháp còn lại là Realm, một hệ thống cơ sở dữ liệu phi quan hệ được thiết kế cho thiết bị di động. Nó cũng available cho các giải pháp kết hợp như Xamarin hoặc React Native và hiệu quả hơn SQLite.

2. Quốc tế hóa (internationalization) và địa phương hóa (localization) là gì?

Đây là hai thuật ngữ liên quan đến việc cung cấp ứng dụng thân thiện với người dùng bằng các ngôn ngữ khác ngoài ngôn ngữ mặc định.

Quốc tế hóa (“i18n”) là quá trình thiết kế một ứng dụng phần mềm để nó có thể được điều chỉnh cho nhiều ngôn ngữ và khu vực mà không có sự thay đổi về kỹ thuật.

Mặt khác, địa phương hóa (“l10n”) là quá trình đáp ứng một phần mềm đã quốc tế hóa cho một vùng hoặc ngôn ngữ cụ thể bằng cách bổ sung các thành phần của ngôn ngữ đang hướng đến, cũng như dịch các đoạn văn bản trong phần mềm qua ngôn ngữ đó.

3. Cách tốt nhất để server thông báo cho ứng dụng rằng có một số dữ liệu mới là gì?

Để nhận thông tin từ server mà không cần kiểm tra thông qua một loạt yêu cầu, ứng dụng di động có thể sử dụng thông báo đẩy. Đây là giải pháp tốt hơn so với việc liên tục yêu cầu dữ liệu mới, vì nó sẽ không làm hao pin và sử dụng ít dữ liệu mạng hơn.

Android và iOS đều có giải pháp riêng:

  • Apple Push Notifications: chỉ gửi thông báo đẩy tới thiết bị iOS. 

  • Firebase Cloud Messaging là cơ chế gửi thông báo đẩy tới thiết bị của Google và đã thay thế Google Cloud Messaging (GCM). Đây là một ứng dụng “đa nền tảng”, nghĩa là nó cũng hỗ trợ các thiết bị iOS, bằng cách chuyển tiếp thông qua dịch vụ Apple Push Notification (APN).

4. Làm cách nào để có thể debug ứng dụng khi nó đã được released?

Có rất nhiều công cụ cung cấp report sự cố và mức sử dụng từ ứng dụng dành cho thiết bị di động.

Một trong những ứng dụng phổ biến nhất (và miễn phí) là Firebase Crashlytics, hỗ trợ cả iOS và Android. Nó cung cấp nhiều thông tin hữu ích về các sự cố ứng dụng như full-stack trace, phiên bản operating system, device manufacturer và ngôn ngữ người dùng.

Một số công cụ khác là Sentry, Appsee, Raygun và Instabug. Chúng khác nhau ở chỗ cung cấp thông tin chi tiết về sự cố, cách sử dụng và giá cả.

5. Làm cách nào để bảo mật dữ liệu nhạy cảm như danh bạ hoặc quyền truy cập vào máy ảnh (hoặc các cảm biến khác) trong ứng dụng di động?

Quyền truy cập vào dữ liệu hoặc cảm biến của người dùng bị hạn chế bởi quyền truy cập của hệ thống. Điều đó có nghĩa là khi ứng dụng muốn sử dụng một tính năng như GPS, ứng dụng phải xin phép người dùng và giải thích lý do tại sao quyền này lại cần thiết.

Người dùng có thể đồng ý hoặc từ chối yêu cầu. Lập trình viên phải thấy trước việc từ chối và đưa ra giải pháp để một số tính năng của ứng dụng có thể hoạt động mà không cần cảm biến hoặc dữ liệu bị từ chối. Các quyền có thể được cấp hoặc từ chối không chỉ khi ứng dụng đang chạy mà còn từ cài đặt của người dùng, vì vậy ứng dụng phải luôn kiểm tra quyền đó.

Cơ chế cấp phép có thể thay đổi giữa các phiên bản hệ điều hành nên lập trình viên phải lưu ý điều đó.

6. Sự khác biệt giữa ứng dụng native và ứng dụng hybird là gì? Ưu điểm và nhược điểm của ứng dụng hybrid là gì?

Ứng dụng native là ứng dụng được phát triển cho một nền tảng cụ thể như Android hoặc iOS, sử dụng ngôn ngữ lập trình và công cụ phát triển chính thức của nền tảng đó. Ứng dụng hybrid là ứng dụng kết hợp giữa ứng dụng native và ứng dụng web, thường được xây dựng bằng HTML, CSS và JavaScript.

Ưu điểm của ứng dụng hybrid bao gồm:

  • Phát triển nhanh: Chỉ cần viết một lần, có thể chạy trên nhiều nền tảng.

  • Tiết kiệm chi phí: Chia sẻ mã nguồn giữa các nền tảng, giảm thiểu công việc lập trình.

  • Dễ dàng cập nhật: Cập nhật ứng dụng một lần duy nhất và áp dụng cho cả hai nền tảng.

  • Truy cập phần cứng: ứng dụng hybrid có thể truy cập vào các chức năng phần cứng của điện thoại thông minh như máy ảnh, GPS, v.v.

7. Những điều cần phải thận trọng khi viết cho thiết bị di động là gì?

Tối ưu hóa hiệu năng: Thiết bị di động có tài nguyên hạn chế, vì vậy tối ưu hóa hiệu năng của ứng dụng là rất quan trọng. Hạn chế việc sử dụng tài nguyên như bộ nhớ và CPU, và sử dụng các phương pháp tối ưu hóa mã nguồn để đảm bảo ứng dụng chạy mượt mà và không gây tiêu hao pin quá nhanh.

Đảm bảo tương thích với nhiều phiên bản hệ điều hành: Thiết bị di động chạy nhiều phiên bản hệ điều hành khác nhau, vì vậy cần đảm bảo ứng dụng tương thích với các phiên bản khác nhau. Kiểm tra và thử nghiệm ứng dụng trên các phiên bản khác nhau của hệ điều hành để đảm bảo tính tương thích.

Bảo mật: Bảo mật là một yếu tố quan trọng khi lập trình cho thiết bị di động. Đảm bảo rằng ứng dụng được mã hóa an toàn và không có lỗ hổng bảo mật. Sử dụng các phương pháp mã hóa và cơ chế xác thực để đảm bảo rằng dữ liệu người dùng được bảo vệ.

Kiểm tra và sửa lỗi: Kiểm tra và sửa lỗi là một phần quan trọng trong quá trình phát triển ứng dụng di động. Đảm bảo rằng phải kiểm tra kỹ lưỡng ứng dụng để phát hiện và sửa chữa các lỗi có thể gây ra sự cố hoặc gây ảnh hưởng đến trải nghiệm người dùng.

Tương thích với nhiều loại thiết bị: Thiết bị di động có nhiều kích thước và độ phân giải màn hình khác nhau, vì vậy bạn cần đảm bảo rằng giao diện người dùng tương thích với nhiều loại thiết bị. Sử dụng các kỹ thuật linh hoạt để điều chỉnh giao diện người dùng cho các kích thước và độ phân giải khác nhau.

Thử nghiệm trên thiết bị thật: Thử nghiệm ứng dụng trên thiết bị di động thực là rất quan trọng để kiểm tra tính tương thích và hiệu suất của ứng dụng trên các thiết bị khác nhau. Sử dụng các thiết bị di động thật để kiểm tra và sửa chữa các lỗi có thể xảy ra.

8. Mô tả quá trình release ứng dụng trên Google Play và App Store của Apple. Điều kiện cần có để release một ứng dụng trên các cửa hàng đó là gì?

Cả Google Play và App Store đều yêu cầu hình ảnh, mô tả ứng dụng và mã nhận dạng duy nhất.

Đối với Google Play

  • Đầu tiên là chúng ta cần phải có tài khoản developer để release ứng dụng.

  • Khi ứng dụng đã sẵn sàng, ứng dụng đó sẽ được tích hợp vào tệp APK.

  • APK phải được xác nhận để chứng minh rằng nó đến từ một công ty cụ thể. Việc xác nhận được thực hiện bằng cách sử dụng key store, đây là một tệp chứa một hoặc nhiều private key thuộc về công ty/developer. (Nếu tệp này bị mất thì không thể thực hiện cập nhật nào cho ứng dụng.)

  • Google cũng đã giới thiệu một hệ thống release mới có tên Android App Bundles, cung cấp kích thước APK nhỏ hơn và quản lý việc xác nhận, nhưng hiện hệ thống này không hỗ trợ các phiên bản Android 3.2 trở xuống.

  • Sau khi gửi tệp, có thể mất vài giờ để ứng dụng có mặt trong cửa hàng.

Đối với app store

  • Apple yêu cầu tài khoản developer được kết nối với Apple Developer Program để xuất bản ứng dụng tại đây.

  • Đầu tiên, ứng dụng phải được thiết lập profile trong iTunes Connect.

  • Ứng dụng đã hoàn thiện được tích hợp vào tệp IPA, tệp này phải được xác nhận bởi một số certificate. Xcode giúp thực hiện tất cả một cách tự động bằng cách sử dụng Distribution Certificate (DC) và Provisioning Profile, kết nối DC với ID ứng dụng.

  • Sau khi gửi, ứng dụng sẽ được kiểm tra bởi Apple. Có thể mất vài ngày cho đến khi ứng dụng được phê duyệt (hoặc bị từ chối) để release.

9. Làm thế nào bạn có thể xử lý với vô số độ phân giải màn hình và kích thước màn hình khác nhau? Apple và Google sử dụng đơn vị nào để đơn giản hóa các vị trí và kích cỡ các phần tử? 

Khi xử lý với vô số độ phân giải và kích thước màn hình khác nhau, có một số kỹ thuật và phương pháp có thể được sử dụng:

  • Sử dụng các đơn vị linh hoạt: Trong CSS, ta có thể sử dụng các đơn vị linh hoạt như %, vw, vh, em, rem để xác định kích thước và vị trí của các phần tử trên trang web. Các đơn vị này cho phép điều chỉnh kích thước và vị trí của các phần tử dựa trên kích thước màn hình hiện tại.

  • Sử dụng media queries: Media queries cho phép áp dụng các kiểu CSS khác nhau dựa trên các điều kiện như độ rộng màn hình, tỷ lệ khung hình, v.v. Bằng cách sử dụng media queries, ta có thể tùy chỉnh giao diện người dùng để phù hợp với từng loại màn hình.

  • Responsive images: Để xử lý hình ảnh, ta có thể sử dụng các kỹ thuật như background-image, object-fit, padding hack, và srcset. Các kỹ thuật này cho phép điều chỉnh kích thước và hiển thị hình ảnh một cách linh hoạt trên các loại màn hình khác nhau.

  • CSS frameworks: Có nhiều framework CSS như Bootstrap, Foundation, và Bulma cung cấp các công cụ và lớp CSS đã được tối ưu hóa để xây dựng giao diện người dùng linh hoạt trên nhiều loại thiết bị.

Cả Apple và Google đều đã giới thiệu đơn vị riêng của họ để giúp developer xử lý các độ phân giải màn hình khác nhau. Đối với Apple, họ đã tái sử dụng (hoặc có lẽ đã hiện đại hóa?) thuật ngữ “point” (pt) để không còn là 1/72 inch nữa mà là gấp đôi so với màn hình retina hoặc gấp 3 lần trên màn hình retina lớn hơn. Còn đối với Google, họ sử dụng một thuật ngữ tương đối mới, “density-independent pixel” (DIP hoặc “dp”).

10. Sandbox là gì và công dụng của nó?

Sandbox là một cơ chế bảo mật giúp cô lập các ứng dụng ở cấp kernel. Mỗi ứng dụng được chạy trong sandbox, điều đó có nghĩa là ứng dụng đó có quyền truy cập dữ liệu rất hạn chế. VÌ thế ứng dụng chỉ có thể truy cập dữ liệu và tệp của riêng mình và không ứng dụng nào khác có thể đọc hoặc ghi chúng.

Điều này nhằm bảo vệ dữ liệu người dùng khỏi phần mềm độc hại có thể được cài đặt vô tình hoặc cố ý trên thiết bị. Các ứng dụng vẫn có thể chia sẻ một số dữ liệu nhưng chỉ những dữ liệu họ muốn, sử dụng các cơ chế do hệ thống cung cấp (ví dụ: ContentProvider trên Android).

VietnamWorks inTECH