Câu hỏi phỏng vấn Android Developer
Bộ câu hỏi phỏng vấn về thông tin cá nhân
Hãy giới thiệu qua về bản thân bạn?
Đây là dạng câu hỏi phổ biến mà khi đi phỏng vấn xin việc bạn sẽ được hỏi. Bạn hoàn toàn có thể chuẩn bị và luyện tập trước ở nhà. Câu trả lời cần ngắn gọn, khoảng 2-3 phút. Bên cạnh đó, cũng cần phải đầy đủ với các thông tin cần thiết nhất cho nhà tuyển dụng, đặc biệt là kinh nghiệm liên quan đến vị trí PHP.
Theo bạn, điểm mạnh điểm yếu của mình là gì?
Đây là phần mà các bạn sẽ tự đánh giá về bản thân mình để đưa điểm mạnh, điểm yếu. Dựa vào đó, nhà tuyển dụng sẽ có cái nhìn tổng quan nhất về con người, tính cách và có phù hợp với vị trí họ đang tuyển dụng cũng như văn hóa công ty hay không?
Bạn biết gì về công ty chúng tôi?
Nhà tuyển dụng rất quan tâm đến việc bạn biết về công ty của họ như thế nào? Hơn hết họ biết được ứng viên có thực sự hiểu rõ về công ty và tìm hiểu trước khi tham gia phỏng vấn hay không. Bởi vậy, bạn nên tìm hiểu kỹ lưỡng về công ty và trình bày một số vấn đề liên quan như lĩnh vực hoạt động, văn hoá, quy mô hoạt động của công ty như thế nào?,..
Bạn có kinh nghiệm làm việc với các dự án lớn không?
Tùy vào quy mô của doanh nghiệp sẽ yêu cầu kinh nghiệm làm việc của bạn với các dự án lớn, điều này sẽ giúp gây ấn tượng trong mắt nhà tuyển dụng. Dù bạn đã là việc với dự án quy mô lớn hay nhỏ cũng đều nên thể hiện kỹ năng quản lý của mình và đưa ra các con số cụ thể. Ví dụ: “Tôi đã đứng đầu dự án A, một hệ thống quản lý dữ liệu cho một doanh nghiệp lớn. Công việc này đòi hỏi tôi phải làm việc với một nhóm đa dạng và đảm bảo rằng dự án hoàn thành đúng tiến độ và đạt chất lượng mong muốn."
Bạn thường xuyên làm việc nhóm hay làm việc độc lập?
Công ty muốn tìm hiểu về tính sẵn sàng làm việc độc lập hay làm việc nhóm của bạn. Bạn có thể chia sẻ mình đã có cả hai trải nghiệm: thường làm việc trong nhóm để chia sẻ kiến thức và ý tưởng, đặc biệt trong các dự án lớn và cũng rất thoải mái làm việc độc lập, đặc biệt khi cần tập trung vào việc giải quyết các vấn đề kỹ thuật phức tạp.
Bạn làm thế nào để theo kịp xu hướng công nghệ mới?
Bạn hãy thoải mái chia sẻ những phương thức mà bạn cảm thấy hứng thú khi tìm hiểu về các công nghệ mới như dành thời gian hàng ngày để đọc sách, tham gia vào cộng đồng trực tuyến và thử nghiệm các công nghệ mới hoặc tham gia các khóa học trực tuyến và sự kiện công nghệ để cập nhật thông tin mới nhất và học từ các chuyên gia trong ngành.
Các câu hỏi phỏng vấn thường gặp
Câu 1: Android là gì?
Android là một hệ điều hành mã nguồn mở dựa trên Linux được sử dụng trong các thiết bị di động như điện thoại thông minh, máy tính bảng, tivi,… Được Google phát hành lần đầu vào năm 2008, sau nhiều lần cập nhật thường xuyên định kỳ hàng năm, Android hiện đang trở thành nền tảng hệ điều hành điện thoại thông minh (smartphone) phổ biến nhất thế giới.
Android có một hạt nhân dựa trên nhân Linux; middleware, thư viện và API được viết bằng C; còn phần mềm ứng dụng chạy trên một nền tảng ứng dụng gồm các thư viện tương thích với Java. Nó sử dụng máy ảo Dalvik với một trình biên dịch động thường được biên dịch sang Java bytecode.
Câu 2: Lập trình Android sử dụng ngôn ngữ gì?
Hiện nay có nhiều cách để tạo ra các ứng dụng Android, có thể là native app, cross-platform app hay hybrid app. Đối với Native App chỉ những ứng dụng được viết bằng công cụ và SDK mà Google cung cấp cho lập trình viên, chúng ta có thể sử dụng ngôn ngữ lập trình Kotlin, Java hoặc C/C++ cho việc viết source code và phát triển phần mềm. Ngoài ra thì trong lập trình Android, để dựng giao diện ứng dụng chúng ta sử dụng ngôn ngữ XML; thao tác với cơ sở dữ liệu bằng hệ quản trị CSDL quan hệ SQLite.
Android cung cấp công cụ phát triển chính thức dành cho lập trình viên bao gồm:
- Android SDK (Software Development Kit) bao gồm ADB (Android Debug Bridge), Fastboot và gói ứng dụng Android (APK)
- NDK (Native Development Kit): bộ công cụ giúp sử dụng code C/C++ trong Android
- ART (Android Runtime) – một sự thay thế cho Dalvik là môi trường chạy ứng dụng Android
- Android Studio: IDE môi trường phát triển tích hợp
Câu 3: Nêu vòng đời của một Activity trong Android
Activity là thành phần quan trọng nhất của ứng dụng Android, thông thường sẽ cung cấp một cửa sổ (window / frame) hiển thị các thành phần UI (giao diện người dùng) để tương tác. Mỗi Activity sẽ có một vòng đời cụ thể trong quá trình hoạt động tương ứng với những trạng thái cùng methods mà Android cung cấp:
- Launched: trạng thái mà Activity được kích hoạt, hệ thống đẩy vào stack. Lúc này lần lượt các callback methods sẽ được gọi: onCreate, onStart và onResume.
- Running: trạng thái Activity đang chạy, người dùng sẽ nhìn thấy UI của Activity và có thể tương tác với chúng. Trong lúc này, nếu có một Activity nào khác chiếm quyền hiển thị thì Activity của chúng ta sẽ callback method onPause. Lúc này nếu người dùng quay lại Activity thì method onResume sẽ được gọi, nếu Activity không được hiển thị lên nữa thì method onStop sẽ được gọi. Khi Actvity đã onStop, để mở lại Activity thì method onRestart sẽ được gọi.
- Process Killed: Trong trường hợp Activity đang ở không được Active, hệ thống thiếu bộ nhớ để hoạt động thì Activity sẽ bị thu hồi (xử lý hủy) để giải phóng tài nguyên. Khi Activity được gọi lại thì nó sẽ call lại method onCreate.
- Shutdown: Khi người dùng chủ động tắt ứng dụng thì Activity cũng kết thúc vòng đời của nó và call method onDestroy.
Câu 4: Fragment là gì? Khi nào sử dụng Fragment
Fragment là một thành phần độc lập trong Android, được sử dụng bởi một Activity, có thể hiểu như một sub-Activity. Fragment có vòng đời và UI riêng. Trong ứng dụng Android, tại một thời điểm thì chỉ có 1 Activity được hiển thị duy nhất lên màn hình; vì thế để đáp ứng cho các giao diện cần chia màn hình ra thành nhiều phần (ví dụ như dạng Tab) để sử dụng, chúng ta sử dụng Fragment cho bài toán này.
Nhiều fragment kết hợp với nhau trong một Activity để xây dựng giao diện đa cửa sổ và có thể tái sử dụng. Lợi ích khi sử dụng Fragment:
- Có tính module hóa cao hơn
- Quản lý tốt hơn cho vòng đời của một phần UI riêng biệt
- Có khả năng tái sử dụng trong các Activity
- Dễ dàng giải phóng dữ liệu, giảm chi phí bộ nhớ
- Khả năng xử lý logic linh hoạt hơn nhờ khả năng chia sẻ dữ liệu giữa các Fragment trong cùng một Activity
Câu 5: Nêu các thành phần cơ bản xây dựng UI trong Android
Trong Android, để xây dựng giao diện người dùng (UI) chúng ta sử dụng thành phần cơ bản bao gồm View, ViewGroup và Layout.
- View là lớp cơ sở (class) của tất cả các thành phần giao diện được Android cung cấp sẵn như Button, TextView, CheckBox, RadioButton, ImageView,…
- ViewGroup là một lớp trừu tượng (abstract) kế thừa từ View, nó cũng chính là View nhưng có khả năng chứa các View khác bên trong.
- Layout chính là các ViewGroup được xây dựng sẵn với mục đích chứa các View con cùng các điều khiển để sắp xếp vị trí cho các View đó hiển thị lên màn hình. Layout phổ biến sử dụng bao gồm: FrameLayout, ConstraintLayout, LinearLayout, RelativeLayout, GridLayout, TableLayout,…
Câu 6: Canvas là gì?
Canvas được xem như một bề mặt 2D để chúng ta có thể vẽ bất cứ thứ gì lên đó và hiển thị cho người dùng thấy. Chẳng hạn chúng ta có thể vẽ một điểm, một đường thẳng, một hình chữ nhật, đường tròn, elip hay thậm chí cả những hình ảnh phức tạp khác. Có rất nhiều bài toán mà chúng ta sử dụng đến Canvas khi mà nội dung chúng ta muốn hiển thị lên cho người dùng không thể biểu diễn được bằng các View sẵn có.
Android cung cấp cho chúng ta những method để vẽ các đối tượng trong Canvas như sau:
- Các đối tượng hình học cơ bản: Point, Line, Oval, React,…
- Vẽ hình ảnh: Bitmap, Drawable
- Vẽ tập hợp các điểm: Path
- Vẽ Text
Câu 7: Làm sao hiển thị các nội dung dạng danh sách trong Android
ListView và RecycleView là 2 ViewGroup phổ biến sử dụng để hiển thị các nội dung dạng danh sách. ListView giúp hiển thị các thành phần (elements) theo dạng một danh sách có thể cuộn được theo chiều thẳng đứng và được sử dụng như một class cơ bản trong Android từ những phiên bản đầu tiên. RecycleView mới được giới thiệu trong Android L (API level 21) với sự mạnh mẽ và bổ sung nhiều chức năng hơn so với ListView.
RecycleView hỗ trợ scroll theo cả chiều ngang (horizontal) và chiều dọc (vertical); ngoài ra RecycleView.LayoutManager cho phép layout các item trong list theo dạng grid hay staggered grid. RecycleView còn nhiều hỗ trợ bổ sung đáng giá như Animation khi thêm hay xóa 1 item trong danh sách; hỗ trợ draw divider tùy ý. Thêm một cải thiện nữa là RecycleView bắt buộc sử dụng ViewHolder khi tạo một Adapter nhằm cải thiện performance của danh sách tốt hơn.
Câu 8: Broadcast Receiver là gì?
Broadcast Receiver là một trong 4 components lớn trong Android với nhiệm vụ lắng nghe các sự kiện, trạng thái của hệ thống phát ra ví dụ như có tin nhắn đến, hành động rút / cắm sạc, hành động bật/ tắt mạng,… từ đó ứng dụng của chúng ta sẽ xử lý các hành động tương ứng bên trong. Broadcast Receiver có thể hoạt động cả khi ứng dụng đang ở background mode và hay được sử dụng với Service.
Để thực thi được Broadcast Receiver, chúng ta cần phải đăng ký Broadcast trong file Android Manifest hoặc trong file Java (source code) của ứng dụng thông qua lớp IntentFilter tương ứng với từng hành động, sự kiện cụ thể xảy ra trên thiết bị. Chúng ta cũng có thể tự định nghĩa các Custom Broadcast Receiver để truyền thông điệp trong và ngoài ứng dụng mà chúng ta mong muốn. Ngoài ra, Android cũng cung cấp component Local Broadcast Receiver cho việc gửi thông điệp gói gọn trong project, không thông qua hệ thống nhằm tránh bị rò rỉ thông tin ra ngoài các ứng dụng khác.
Câu 9: Có những loại Service nào trong Android
Service cũng là một thành phần chính trong ứng dụng Android giúp chúng ta thực hiện các tác vụ cần nhiều thời gian, không có giao diện người dùng (UI) và không bị tắt khi đóng ứng dụng; chẳng hạn như download file từ Internet, chạy nhạc, đồng bộ dữ liệu lên cloud,…
Service được chia thành 3 loại:
- Foreground Service: là những services mà người dùng chú ý và thấy rõ ràng như play music (người dùng có thể tương tác control nó). Một điều bắt buộc là Foreground Service phải hiển thị một Notification.
- Background Service: những services mà người dùng không chú ý trực tiếp như thu gom bộ nhớ của hệ thống.
- Bound Service: là những services được ràng buộc bởi một thành phần trong ứng dụng và khởi động nó bằng lời gọi bindService. Điều đó cũng có nghĩa là khi thành phần ràng buộc này tháo bỏ ràng buộc với service thì Service đó cũng bị destroy.
Câu 10: Hãy giải thích về kiến trúc MVP trong Android
MVP viết tắt bởi Model – View – Presenter là một kiến trúc phần mềm thường được đề xuất, khuyến nghị sử dụng trong các dự án Android. MVP được thiết kế để tạo điều kiện cho việc kiểm thử đơn vị tự động (Automated Unit Testing) và cải tiến Separation of Concerns (tách biệt thành phần) trong việc trình bày logic (presentation logic).
Với Android, MVP tách ứng dụng (cấu trúc source code) thành 3 tầng Model, View, Presenter và trong mỗi tầng đều được chia thành module nhỏ có vai trò riêng biệt. Tầng Presenter là nơi tập trung xử lý logic, cũng là cầu nối giữa Model và View. Đây là nơi theo dõi sự thay đổi của ứng dụng, các biến trạng thái và xử lý logic tương ứng. Presenter có phần giống với Controller trong mô hình MVC, dù vậy thì trong mô hình MVP, Model và View không hề liên kết với nhau mà tất cả phải qua Presenter.
Kinh nghiệm “đậu” phỏng vấn
Để buổi phỏng vấn diễn ra suôn sẻ và nắm chắc phần thành công, bạn cần chú trọng thêm các yếu tố:
Về trang phục
Trước khi đến buổi phỏng vấn, hãy tìm hiểu về văn hóa công ty và quy định về trang phục. Bất kể loại trang phục bạn chọn, hãy đảm bảo nó luôn gọn gàng và sạch sẽ. Quần áo không nứt rách, không bị nhăn, giày dép được làm sạch. Điều này thể hiện tôn trọng và sự chú ý đến chi tiết. Mặc dù quần áo nên trang nhã và chuyên nghiệp, nhưng bạn cũng cần cảm thấy thoải mái khi diện chúng. Mặc quần áo mà bạn cảm thấy tự tin và dễ chịu để bạn có thể tập trung vào buổi phỏng vấn.
Đối với nữ, áo sơ mi và váy hoặc quần âu là một sự lựa chọn tốt, bạn có thể kết hợp với kiểu tóc gọn gàng, trang điểm thanh lịch và phối hợp cùng các phụ kiện phù hợp với trang phục. Nam có thể lựa chọn áo sơ mi cùng quần âu với các màu sắc trung tính và hài hòa, hãy luôn nhớ cạo râu và để đầu tóc gọn gàng khi bước đi phỏng vấn.
Về tác phong
Nên đến sớm 10 - 15 phút, để tránh trường hợp xảy ra các sự cố trên đường hay sự cố về trang phục. Những nhà tuyển dụng cũng thích những người đến sớm và có chuẩn bị tốt.
Tác phong chuyên nghiệp, giữ bản thân ở trạng thái bình tĩnh, lắng nghe câu hỏi phỏng vấn và lời lưu loát, rõ ràng. Hạn chế nói lắp, trả lời không rõ ràng, thiếu logic, mạch lạc
Tự tin giao tiếp
Tự tin trong việc nói về kinh nghiệm và khả năng của bạn là quan trọng. Hãy trình bày một cách rõ ràng và dễ hiểu. Lắng nghe câu hỏi kỹ lưỡng và trả lời một cách chắc chắn. Đảm bảo bạn hiểu rõ về kiến thức và kỹ năng yêu cầu cho vị trí bạn đang ứng tuyển như ngôn ngữ lập trình, framework, công cụ phát triển và các khái niệm liên quan,... Như vậy bạn sẽ có tự tin và thể hiện cách bạn suy nghĩ logic, phân tích vấn đề và đưa ra giải pháp hợp lý.
Câu hỏi phỏng vấn Android Developer & Cách trả lời
Dưới đây là 3 câu hỏi phỏng vấn Android Developer hàng đầu và cách trả lời chúng:
Câu hỏi #1: Android là gì?
Android là một hệ điều hành mã nguồn mở dựa trên Linux được sử dụng trong các thiết bị di động như điện thoại thông minh, máy tính bảng, tivi,… Được Google phát hành lần đầu vào năm 2008, sau nhiều lần cập nhật thường xuyên định kỳ hàng năm, Android hiện đang trở thành nền tảng hệ điều hành điện thoại thông minh (smartphone) phổ biến nhất thế giới.
Android có một hạt nhân dựa trên nhân Linux; middleware, thư viện và API được viết bằng C; còn phần mềm ứng dụng chạy trên một nền tảng ứng dụng gồm các thư viện tương thích với Java. Nó sử dụng máy ảo Dalvik với một trình biên dịch động thường được biên dịch sang Java bytecode.
Câu hỏi #2: Trình bày Application là gì?
Application trong lập trình Android là lớp cơ sở trong ứng dụng chứa tất cả các yếu tố quan trọng hỗ trợ cho các hoạt động và dịch vụ của android. Trước khi quy trình cho ứng dụng của bạn được khởi tạo, lớp hoặc bất kỳ các lớp con nào của nó cũng sẽ được khởi tạo trước.
Câu hỏi #3: Nêu các thành phần cơ bản xây dựng UI trong Android
Trong Android, để xây dựng giao diện người dùng (UI) chúng ta sử dụng thành phần cơ bản bao gồm View, ViewGroup và Layout.
- View là lớp cơ sở (class) của tất cả các thành phần giao diện được Android cung cấp sẵn như Button, TextView, CheckBox, RadioButton, ImageView,…
- ViewGroup là một lớp trừu tượng (abstract) kế thừa từ View, nó cũng chính là View nhưng có khả năng chứa các View khác bên trong.
- Layout chính là các ViewGroup được xây dựng sẵn với mục đích chứa các View con cùng các điều khiển để sắp xếp vị trí cho các View đó hiển thị lên màn hình. Layout phổ biến sử dụng bao gồm: FrameLayout, ConstraintLayout, LinearLayout, RelativeLayout, GridLayout, TableLayout,…
Câu hỏi phỏng vấn
Android Interface Definition Language (AIDL) và Messenger Queue.
↳
Messenger Queue tạo cho ta một hàng đợi và các dữ liệu / thông điệp được truyền giữa 2 hoặc nhiều hơn các tiến trình một cách tuần tự. Trong trường hợp của AIDL thì các thông điệp được truyền đi một cách song song.AIDL sử dụng dành cho mục đích khi bạn phải giao tiếp ở mức ứng dụng để chia sẻ và kiểm soát dữ liệu.
Ví dụ: một ứng dụng yêu cầu danh sách tất cả các liên hệ từ ứng dụng Danh bạ và nó cũng muốn hiển thị thời lượng cuộc gọi và bạn có thể ngắt kết nối nó khỏi ứng dụng đó.Đối với trương hợp của Messenger Queue, bạn sẽ chủ yếu làm việc trên nhiều thread và process để quản lý hàng đợi chứa các thông điệp để không xuất hiện sự can thiệp của các dịch vụ bên ngoài tại đây.
Tóm tắt lại quá trình tạo một custom View.
Retained fragment là gì?
Sự khác nhau giữa margin & padding.
Sự khác nhau giữa hình ảnh .png thông thường và hình ảnh nine-patch là gì?
Tại sao ta nên truyền các tham số vào Fragment thông qua Bundle?
Sự khác biệt giữa việc add / replace fragment trong backstack?
Bạn sẽ cập nhật UI trên activity từ một background service như thế nào?
Sự khác biệt giữa Serializable và Parcelable?
Thread Pool là gì? Có hiệu quả hơn nếu sử dụng nó thay vì sử dụng nhiều Thread riêng biệt.
Sự khác nhau giữa Fragment Pager Adapter và Fragment State Pager Adapter?
Vui lòng mô tả về kinh nghiệm của bạn trong phát triển ứng dụng di động Android và các dự án Android quan trọng mà bạn đã tham gia.
Làm thế nào bạn quản lý vấn đề tương thích trên nhiều thiết bị và phiên bản Android khác nhau khi phát triển ứng dụng?
Hãy chia sẻ về việc bạn đã sử dụng các công nghệ, thư viện hoặc framework Android cụ thể trong các dự án trước đây và cách chúng đã giúp bạn giải quyết các thách thức phát triển ứng dụng Android.
Các thành tích đã đạt được với vị trí Android Developer?
Khả năng chịu áp lực trong công việc với vị trí Android Developer?
Nếu được tuyển dụng bạn sẽ làm gì với vị trí Android Developer?