Tổng hợp các câu hỏi khi phỏng vấn lập trình viên java và android

Danh sách một số câu hỏi khi tham gia phỏng vấn về android.

  1. Vòng đời của một Activity, khi nào onResume() được gọi?
  2. Có mấy cách truyền dữ liệu trong fragment.
  3. Thread là gì ?
  4. So sánh thread và asynctask?
  5. Thread hoạt động ntn ?
  6. Xử lý dữ liệu giữa 2 thread như thế nào?
  7. Static và final ?
  8. Access modifier ?
  9. fragment và activity là gì ?
  10. 2 fragment trong 1 activity trao đổi data ntn ?
  11. Khi nào sử dụng fragment ?
  12. override, overload, final ?
  13. final cotructor có thay đổi giá trị gì ?
  14. Có mấy loại dialog ?
  15. Asynsctask là gì – phương thức nào bắt buộc ?
  16. Intent là gì? có mấy loại ?
  17. Service là gì ? có mấy loại ?
  18. Em hay sử dụng những loại Collections nào và một chút đặc điểm: Có 4 loại là Lists (lưu một danh sách các đối tượng), Sets (một danh sách các đối tượng không trùng nhau), Maps (một danh sách các đối tượng có ID), Queues (một danh sách các đối tượng được xắp sếp theo thứ tự). Mỗi loại này có nhiều lớp con.
  19. Dùng gì để truy cập CSDL và thiết kế như thế nào: JDBC, Hibernate… sau đó sử dụng DAO pattern (CRUD: creat, read, insert, update, delete)
  20. Mô hình n-tier: view, bussiness logic, data
  21. Một vài loại pattern thông dụng: singleton, factory, proxy, adapter, observer …
  22. Một vài loại frameworks: Struts: MVC+ Front Controller pattern. Hibernate: object relational mapping.
  23. Nêu OOP
  24. Phân biệt overload overriding
  25. Kế thừa là gì
  26. Đa hình là gì
  27. Viết câu update
  28. Viết câu delete
  29. Phân biệt delete với drop
  30. Cú pháp drop
  31. Cấu trúc của DB gồm gì
  32. Nếu xóa file log thì có chạy k
  33. Biết gì về PL/SQL
  34. Từng làm web hay app nào chưa? Miêu tả

Một số câu hỏi về java có đáp án.

1. Chúng ta có thể truy cập một biến không tĩnh(non-static) trong một ngữ cảnh static được không?
Một biến static phụ thuộc vào lớp của nó và giá trị của nó sẽ tồn tại (giữ) cho tất cả các thực thể của lớp đó. Biến static được tạo ra khi lớp chứa đó được tải (load) bởi JVM. Nếu cố gắng truy cập vào một biến non-static (trong hàm static) mà không có trong thực thể nào, thì trình biên dịch sẽ báo lỗi, bởi vì những biến đó(non-static) chưa được khởi tạo và chúng không có ràng buộc với bất kỳ thực thể nào.

2. Thế nào là phương thức nạp chồng (Overloading) và ghi đè (Overriding) trong Java?
Nạp chồng phương thức (method overrloading) xảy ra khi trong cùng một lớp có nhiều hơn hai phương thức có cùng tên, nhưng khác tham số (số lượng hoặc kiểu). Mặt khác, ghi đè phương thức (method overriding) được dùng trong trường hợp một lớp con muốn định nghĩa lại phương thức đã có ở  lớp cha. Phương thức ghi đè (Overridden methods) phải có tên, số lượng tham số, và kiểu trả về giống với lớp cha. Overriding method cũng không giới hạn việc truy cập vào phương thức nó đã ghi đè.
3. Hàm tạo (Constructor) là gì, Nạp chồng hàm tạo(Constructor Overloading) và sao chép hàm tạo (Copy-Constructor)?
Constructor được gọi khi một đối tượng được tạo ra. Mỗi lớp đều có một constructor. Trong trường hợp người lập trình không khai báo constructor cho lớp, trình biên dịch sẽ tạo một constructor mặc định cho lớp đó. Nạp chồng hàm tạo (Constructor overloading) cũng khá giống với nạp chồng phương thức (method overrloading). Các constructor khác nhau được tạo ra cho mỗi lớp đơn lẽ. Cuối cùng, Java không hỗ trợ sao chép hàm tạo như trong C++, nhưng khác biệt ở chỗ Java sẽ không tạo ra hàm tạo sao chép nếu bạn không tạo ra nó ( chơi chữ chỗ này, Java không hỗ trợ nhưng bạn có thể tự viết cái).
4. Có phải Java hỗ trợ đa thừa kế?
Không, Java không hỗ trợ đa thừa kế. Mỗi lớp có thể extend(kế thừa) chỉ được một lớp, nhưng có thể cài đặt nhiều interface.
5. Sự khác nhau giữa Interface và lớp Abstract (lớp trừu tượng)?
Java cung cấp và hỗ trợ cả abstract class và interface. Cả 2 sự cài đặt đều có chung một số đặc tính, nhưng chúng khác nhau một vài điểm:

  • Tất cả phương thức trong interface là abstract (trừu tượng). Nhưng, trong lớp abstract có thể chứa cả phương thức abstract hoặc không abstract (non-abstract)
  • Một lớp có thể cài đặt (implement) nhiều interface, nhưng chỉ được kế thừa (extend) một lớp abstract.
  • Để cài đặt một interface, lớp đó phải cài đặt tất cả các hàm được định nghĩa trong interface. Tuy nhiên, một lớp có thể không cài đặt tất cả các hàm đã định nghĩa trong lớp abstract. Mặc dù, trong trường hợp này, lớp con cũng phải định nghĩa là lớp abstract.
  • Lớp abstract có thể cài đặt một interface mà không cần cài đặt bất kỳ hàm nào của interface đó.
  • Các biến được định nghĩa trong interface mặc định là final, còn lớp abstract thì có thể không final (non-final).
  • Các thành phần trong interface mặc định là public, còn trong lớp abstract có thể là public, private hoặc protected (tuỳ vào người định nghĩa).
  • Interface là thuần trừu tượng, không thể tạo thực thể cho nó. Một lớp abstract cũng không thể tạo thực thể, nhưng nó có thể được gọi nếu chứa hàm main.

LUỒNG TRONG JAVA (JAVA THREADS)

7. Khác biệt giữa tiến trình và luồng là gì?
Một tiến trình (process) là sự thực thi của chương trình, trong khi một luồng(thread) là một sự thực thi đơn lẻ có tuần tự bên trong tiến trình. Một tiến trình có thể chứa nhiều luồng. Một luồng đôi khi được xem như một tiến trình nhỏ (tiểu trình, lightweight process).
8. Giải thích sự khác nhau giữa các cách tạo luồng(thread). Cái nào bạn hay dùng hơn (prefer) và tại sao?
Có 3 cách để tạo ra một thread:

  • Một lớp kế thừa (extends) từ lớp Thread
  • Một lớp cài đặt interface Runnable
  • Một chương trình có thể sử dụng framwork Executor, để tạo là một thread pool (giống như cái hố chứa một đống luồng).

Cách hay được sử dụng và được yêu thích là dùng interface Runnable, bởi vì nó không yêu cầu phải tạo một lớp kế thừa từ lớp Thread. Trong trường hợp ứng dụng thiết kế yêu cầu sử dụng đa kế thừa, chỉ có interface mới có thể giúp giải quyết vấn đề. Ngoài ra, thread pool rất hiểu quả và có thể được cài đặt, sử dụng rất hơn giản.
9. Giải thích các trạng thái khả dụng (available) của thread trong high-level (cấp độ cao)
Trong suốt quá trình thực thi của nó, một thread có thể giữ một trong những trạng thái:

  • Runnable: Một thread sẵn sàng để chạy, nhưng không cần thiết chạy ngay lập tức.
  • Running: Tiến trình đang chạy mã lệnh trong luồng.
  • Waiting: Một thread trong trạng thái dừng(nghẽn, blocked) để chờ một tiến trình khác chạy chấm dứt.
  • Sleeping: Một thread đang ngủ (dừng hoạt động, sleeping).
  • Blocked on I/O: Chờ một thao tác I/O(xuất nhập) hoàn thành.
  • Blocked on Synchronization: Đang chờ trong trạng thái bị khoá.
  • Dead: Một thread thực thi xong các dòng lệnh của nó.

10. Sự khác biệt giữa phương thức đồng bộ (synchronized method) và khối đồng bộ (synchronized block)?
Trong lập trình Java, mỗi đối tượng đều có một khoá (chốt, lock). Một thread có thể chốt (khoá) được đối tượng bằng cách sử dụng từ khóa  synchronized. Từ khoá synchronized có thể được áp dụng trong phương thức (method, cách khoá dở ẹt (coarse) ) và khối lệnh (block, cách khoá tốt (fine)).

Nguồn tổng hợp từ: 2dev4u  || giaotrinhcntt || internet

Nguyễn Linh

Chia sẻ để cùng tiến bộ...