Trong top những ngôn ngữ lập trình phổ biến thì Java luôn luôn có một vị trí vững chắc; cũng vì thế mà nhu cầu tuyển dụng Java Developer luôn cao cho bất cứ lĩnh vực nào. Để chuẩn bị cho một buổi phỏng vấn vị trí lập trình viên Java, bài viết hôm nay mình cùng các bạn liệt kê ra top 10 câu hỏi phỏng vấn Java Developer thường gặp nhất cùng cách trả lời cụ thể nhé.
Câu 1: Bạn có thể nói gì về Java?
Java là một ngôn ngữ lập trình bậc cao, hướng đối tượng, dựa trên class (lớp); được phát triển bởi Sun Microsystems từ những năm 1995, hiện nay thuộc sở hữu của Oracle. Đặc điểm nổi bật nhất của Java là khả năng cho phép các nhà phát triển ứng dụng viết code một lần và có thể chạy ở mọi nơi. Để làm được điều này thì các ứng dụng Java sẽ được biên dịch thành bytecode, sau đó chạy trên nền máy ảo JVM đã được cài sẵn trên nền tảng hệ điều hành.
Cú pháp của Java tương tự như C và C++; phiên bản mới nhất hiện nay là Java 19 phát hành tháng 9/2022. Java được sử dụng trong đa dạng các lĩnh vực:
- Desktop Application
- Web Application
- Enterprise Application (phổ biến như các nghiệp vụ ngân hàng)
- Mobile Application
- Hệ thống nhúng
- Robotic, Smarthome
- Game
Câu 2: Các tính năng nổi trội của Java
Những tính năng nổi trội của ngôn ngữ lập trình Java:
- Hướng đối tượng: tất cả trong Java đều là Object nên có thể dễ dàng mở rộng
- Nền tảng độc lập: Java biên dịch source code thành bytecode chạy trên nền tảng máy ảo JVM và không phụ thuộc vào nền tảng hệ điều hành
- Đa luồng: Java hỗ trợ đa luồng, tức là chương trình viết ra có thể thực hiện nhiều tác vụ cùng lúc
- Dễ học, dễ hiểu: Java có cú pháp dựa trên C/C++, đồng thời loại bỏ các tính năng phức tạp và hiếm sử dụng; có tính năng tự động hủy cấp phát bộ nhớ,… giúp người học dễ đọc, dễ hiểu code.
- Bảo mật cao: việc chạy bên trong một máy ảo JVM giúp các chương trình Java khó bị can thiệp tác động, ngoài ra Java có sẵn các lớp giúp chương trình của bạn bảo mật tốt hơn: Classloader, Bytecode Verifier, Security Manager
- Tính phân tán: Java tạo điều kiện cho người dùng tạo những ứng dụng phân tán bằng RMI và EJB, nó giúp chúng ta có thể truy cập đến các tệp bằng cách gọi phương thức từ bất kỳ máy nào trên Internet
Câu 3: Phân biệt JVM, JDK, JRE
JVM: Java Virtual Machine là máy ảo để thực thi các Java bytecode. Để chạy chương trình Java thì bắt buộc bạn phải cài đặt JVM trên máy của bạn (mỗi hệ điều hành sẽ có phiên bản khác nhau); sau đó source code Java được biên dịch thành bytecode và chuyển vào chạy trên nền JVM
JRE: Java Runtime Environment là môi trường thực thi Java, nó chính là trình triển khai JVM cùng với các plugins, thư viện cần thiết để thực thi chương trình
JDK: Java Development Kit là bộ công cụ phát triển ứng dụng Java. Nó chứa JRE, trình biên dịch bytecode cùng các công cụ hỗ trợ khác về debug, doc. Để lập trình Java chúng ta cần cài đặt JDK
Nói tóm lại:
JDK = JRE + Development Tool
JRE = JVM + Library Classes
Câu 4: Lập trình hướng đối tượng là gì?
Lập trình hướng đối tượng (OOP – Object Oriented Programming) là một phương pháp lập trình dựa trên khái niệm về lớp và đối tượng. Đối tượng ở đây là thể hiện của 1 lớp, bao gồm các thuộc tính và phương thức. OOP bao gồm 4 tính chất:
- Tính đóng gói: che giấu thông tin quan trọng của 1 lớp
- Tính đa hình: 1 hành động có thể thực hiện theo nhiều cách khác nhau
- Tính trừu tượng: ẩn các triển khai chi tiết và chỉ hiển thị tính năng với người dùng
- Tính kế thừa: khả năng tái sử dụng thuộc tính và phương thức của lớp
Java là một ngôn ngữ lập trình hướng đối tượng, mọi thứ trong Java đều là một đối tượng; vì thế trong hầu hết các bài giảng, khóa học về OOP thì luôn dùng Java làm ngôn ngữ thực hành.
Câu 5: Phạm vi truy cập trong Java gồm những gì?
Trong Java, có 4 từ khóa xác định phạm vi truy cập (access specifiers) gồm:
- Public (công khai): cho phép truy cập vào bất kỳ lớp nào hoặc thông qua bất kỳ phương thức nào thông qua tên của chúng
- Private (riêng tư): chỉ cho phép truy cập trong chính lớp mà chúng chỉ định.
- Protected (bảo vệ): cho phép truy cập từ trong lớp, từ một lớp con hoặc từ lớp chung gói
- Default (mặc định): phạm vi tiêu chuẩn, chỉ cho phep truy cập từ cùng một gói
Câu 6: Có những kiểu dữ liệu nào trong Java. Autoboxing và Unboxing là gì?
Trong Java có 8 kiểu dữ liệu cơ bản (Primitive Type):
- byte
- short
- int
- long
- float
- double
- boolean
- char
Trong Java, tất cả đều là Object; vì thế trong quá trình biên dịch, Java sẽ tự động chuyển đổi giữa kiểu dữ liệu cơ bản (Primitive Type) về đối tượng tương ứng với lớp (Wrapper class) của kiểu dữ liệu đó. Chẳng hạn int chuyển sang lớp Integer, kiểu double chuyển sang Double, … Quá trình này gọi là Autoboxing. Và ngược lại để chuyển từ Integer về int, gọi là Unboxing.
Câu 7: Thread trong Java là gì?
Trong Java, quá trình thực thi một chương trình gọi là Process; một Process có thể có nhiều thực thi đơn bên trong gọi là Thread (luồng).
Một Thread có thể có những trạng thái sau:
- New: khi tạo 1 lớp instance của lớp Thread và chưa gọi phương thức start
- Runnable: trạng thái Thread sẵn sàng thực thi
- Running: đang xử lý code trong Thread
- Non-Runable (Blocked): trạng thái khi Thread vẫn còn tồn tại nhưng không thể chạy do không đủ điều kiện. Nó bao gồm việc bị blocked trên I/O và blocked trên Synchronization.
- Terminated: Thread kết thúc
Câu 8: Deadlock là gì? Làm sao để tránh nó.
Deadlock là một trạng thái xảy ra khi có 2 process A và B cùng thực hiện, trong đó A cần chờ B thực hiện xong để chạy tiếp và đồng thời B cũng chờ A thực hiện xong mới có thể chạy tiếp. Kết quả là cả 2 process A và B đều không thể chạy được, chờ nhau vô thời hạn.
Để tránh deadlock, có 1 số cách xử lý như sau:
- Tránh Nested Locks: không cấp khóa cho nhiều thread
- Tránh cấp khóa không cần thiết
- Sử dụng Thread.join set timeout cho Thread
Câu 9: Các interface cơ bản của Collections
Java Collections framework sử dụng để thao tác dữ liệu dạng tập hợp các objects. Có gồm các interface sau:
- Collection: lớp cơ bản nhất chứa các phương thức làm việc với tập hợp objects như duyệt qua các phần tử
- Set: mỗi phần tử trong tập hợp chỉ xuất hiện một lần duy nhất
- List: danh sách tuyến tính sắp xếp theo một thứ tự nhất định
- Queue: hàng đợi, kiểu dữ liệu FIFO (first-in first-out) vào trước ra trước
- Map: đồ thị, ánh xạ lưu trữ dạng key-value
Lưu ý là Set, Lis, Queue đều kế thừa Collection; riêng Map thì là một interface độc lập với chỉ những phương thức riêng nó.
Câu 10: Garbage Collectors là gì?
Bộ thu gom rác Garbage Collectors là một quá trình thụ động thực thi nhiệm vụ quản lý bộ nhớ trong Java. Trong quá trình chạy chương trình Java, các đối tượng được tạo ra ở vùng nhớ heap (một phần bộ nhớ dành cho chương trình), sau đó nếu đối tượng không được sử dụng đến nữa thì garbage collectors sẽ truy tìm và xóa bỏ để thu hồi dung lượng bộ nhớ.
Nếu một object được set reference null thì đối tượng đó sẽ được đánh dấu là sẵn sàng cho viện thu gom rác trong chu kỳ hoạt động tiếp theo của Garbage Collectors. Để khởi động việc dọn rác, chúng ta có thể sử dụng các methods System.gc hoặc Runtime.gc
Kết bài
Trên đây là 10 câu hỏi thường gặp nhất trong một cuộc phỏng vấn vị trí Java Developer, hy vọng bài viết này mang lại cho bạn sự chuẩn bị tốt nhất, sẵn sàng đáp ứng yêu cầu của công ty tuyển dụng. Cảm ơn các bạn đã đọc bài, hẹn gặp lại trong các bài viết tiếp theo của mình.
Bài viết đăng trên blog TopDev: https://topdev.vn/blog/top-10-cau-hoi-phong-van-java-developer-thuong-gap/