Trong bài viết này, freeC đề cập đến các câu hỏi phỏng vấn Java thường gặp, cách trả lời kèm các ví dụ cụ thể.
Đây là những thông tin quan trọng dành cho người mới bắt đầu và ứng viên đã có kinh nghiệm. Nếu bạn sắp có buổi phỏng vấn, hãy đọc tiếp phần nội dung bên dưới ngay!
Các câu hỏi phỏng vấn Java phổ biến nhất
Đây là danh sách tổng hợp các câu hỏi phỏng vấn Java quan trọng và thường được hỏi nhất, kèm với các câu trả lời chi tiết.
1. JAVA là gì?
Trả lời: Java là một ngôn ngữ lập trình cấp cao và độc lập với nền tảng.
Java là một tập hợp các đối tượng. Sun Microsystems đã phát triển nó. Có rất nhiều ứng dụng, trang web và trò chơi được phát triển bằng ngôn ngữ lập trình Java.
2. Các tính năng của JAVA là gì?
Trả lời: JAVA có các tính năng như sau:
Khái niệm OOP
- Hướng đối tượng
- Kế thừa
- Đóng gói
- Đa hình
- trừu tượng
Nền tảng độc lập
Một chương trình duy nhất hoạt động trên các nền tảng khác nhau mà không cần bất kỳ sửa đổi nào.
Hiệu suất cao
JIT (trình biên dịch Just In Time) cho phép hiệu suất cao trong Java. JIT chuyển đổi mã bytecode thành ngôn ngữ máy và sau đó JVM bắt đầu thực thi.
Đa luồng (Multi-threaded)
Một luồng thực thi được gọi là Luồng (Thread). JVM tạo một luồng được gọi là luồng chính. Người dùng có thể tạo nhiều luồng bằng cách mở rộng lớp luồng hoặc triển khai giao diện Runnable.
3. Làm thế nào để Java kích hoạt hiệu suất cao?
Trả lời: Java sử dụng trình biên dịch Just In Time để kích hoạt hiệu suất cao. Nó được sử dụng để chuyển đổi các hướng dẫn (instructions) thành mã bytecodes.
4. Tên IDE của Java là gì?
Trả lời: Tên IDE của Java là Eclipse và NetBeans.
5. Class là gì?
Trả lời: Toàn bộ mã Java được định nghĩa trong một Lớp (Class). Nó có các biến (variables) và phương thức (methods).
Biến (variables) là thuộc tính xác định trạng thái của một lớp.
Các phương pháp (methods) là nơi thực hiện các logic nghiệp vụ chính xác. Nó chứa một tập hợp các câu lệnh (hoặc) hướng dẫn để đáp ứng một yêu cầu cụ thể.
Ví dụ:
public class Addition {// Khai báo tên lớp int a = 6; // Khai báo biến int b = 6; public void add () {// Khai báo phương thức int c = a + b; } }
6. Interface có nghĩa là gì?
Trả lời: Interface là một khuôn mẫu chỉ có khai báo method, không có triển khai method.
Ví dụ:
Public abstract interface IManupulation {// Khai báo giao diện Public abstract void add (); // khai báo phương thức public abstract void subtract (); }
- Tất cả các phương thức trong giao diện là public abstract voids (khoảng trống trừu tượng công khai).
- Tất cả các biến trong giao diện là nội bộ public static final, nghĩa là các hằng số.
- Các lớp (Classes) có thể triển khai giao diện và không mở rộng nó.
- Lớp (Class) triển khai giao diện phải cung cấp một implementation cho tất cả các phương thức (methods) được khai báo trong giao diện (interface).
public class Manipulation implements IManupulation {// Manipulation class sử dụng giao diện Public void add () { …………… } Public void subtract () { ……………. } }
7. Sự khác biệt giữa mảng (Array) và danh sách mảng (Array List)
Câu trả lời: Sự khác biệt giữa Mảng và Danh sách Mảng có thể được hiểu từ bảng dưới đây:
Array | Array List |
Phải cung cấp Kích thước (Size) tại thời điểm khai báo mảng. String [] name = new String [2] | Có thể không cần kích thước. Nó thay đổi kích thước động. ArrayList name = new ArrayList |
Để đưa một đối tượng vào một mảng, chúng ta cần chỉ định chỉ mục. name [1] = “book” | Không cần chỉ mục. name.add (“book”) |
Mảng không được tham số hóa kiểu (type parameterized) | ArrayList trong java 5.0 được tham số hóa. Ví dụ: Dấu ngoặc nhọn này là một tham số kiểu có nghĩa là một danh sách Chuỗi (String). |
8. Ý nghĩa của Collections trong Java?
Trả lời: Collection là một khung được thiết kế để lưu trữ các đối tượng và thao tác thiết kế để lưu trữ các đối tượng.
Collections được sử dụng để thực hiện các hoạt động sau:
- Tìm kiếm
- Sắp xếp
- Thao tác
- Chèn
- Xóa.
Một nhóm các đối tượng được gọi là một collection. Tất cả các lớp và giao diện để thu thập đều có sẵn trong gói sử dụng Java (Java util package).
9. Exception có nghĩa là gì?
Trả lời: Ngoại lệ (Exception) là một sự cố có thể xảy ra trong quá trình thực thi bình thường. Một phương thức (method) có thể ném ra một ngoại lệ khi có thứ gì đó kêu trong thời gian chạy. Nếu một ngoại lệ không thể xử lý nó, việc thực thi sẽ bị chấm dứt trước khi hoàn thành tác vụ.
Nếu chúng tôi xử lý ngoại lệ, thì quy trình bình thường sẽ tiếp tục. Ngoại lệ là một class con của java.lang.Exception.
Ví dụ để xử lý Exception:
try{ // Các mã rủi ro được bao quanh bởi khối này }catch(Exception e) { // Các ngoại lệ bị bắt trong khối catch }
10. Các từ khóa xử lý Exception trong Java là gì?
Trả lời: Dưới đây là hai Từ khoá Xử lý Ngoại lệ:
a) Try:
Khi một mã rủi ro được bao quanh bởi một khối Try. Một ngoại lệ xảy ra trong khối try bị chặn bởi khối catch. Try có thể được theo sau bởi Catch (hoặc) finally (hoặc) cả hai. Nhưng bất kỳ một trong các khối là bắt buộc.
b) Catch:
Tiếp theo là khối try. Các trường hợp ngoại lệ được bắt gặp ở đây.
c) Finally:
Tiếp theo là khối try (hoặc) khối catch. Khối này được thực thi bất kể ngoại lệ. Vì vậy, nói chung, mã làm sạch được cung cấp ở đây.
11. Từ khóa cuối cùng trong Java là gì?
Trả lời:
Biến cuối cùng (Final variable): Khi một biến được khai báo là biến cuối cùng, thì giá trị của biến đó không thể thay đổi được. Nó giống như một hằng số.
Ví dụ:
final int = 12;
Phương thức cuối cùng (Final method): Không thể ghi đè từ khóa cuối cùng trong một phương thức. Nếu một method được đánh dấu là cuối cùng, thì nó không thể bị lớp con (subclass) ghi đè.
Lớp cuối cùng (Final class): Nếu một lớp (class ) được khai báo là lớp cuối cùng, thì lớp đó không được phân lớp. Không có lớp nào có thể kéo dài lớp cuối cùng.
12. Luồng (Thread) là gì?
Trả lời: Trong Java, quá trình thực thi (the flow of execution) được gọi là Luồng. Mỗi chương trình java đều có ít nhất một luồng (thread) được gọi là luồng chính (mainthread); JVM tạo ra luồng chính. Người dùng có thể xác định các luồng của họ bằng cách mở rộng lớp Thread (hoặc) bằng cách triển khai giao diện Runnable. Các luồng được thực hiện cùng lúc.
Ví dụ:
public static void main (String [] args) {// luồng chính bắt đầu từ đây }
13. Bạn tạo một luồng trong Java như thế nào?
Trả lời: Có hai cách có sẵn để tạo một luồng.
a) Mở rộng lớp Thread: Mở rộng một lớp Thread và ghi đè phương thức run. Luồng này có sẵn trong java.lang.thread.
Ví dụ:
Public class Addition extends Thread { public void run () { } }
Nhược điểm của việc sử dụng lớp luồng là chúng ta không thể mở rộng bất kỳ lớp nào khác vì đã mở rộng nó. Chúng ta có thể nạp chồng phương thức run () trong lớp của mình.
b) Triển khai giao diện Runnable: Một cách khác là thực hiện giao diện runnable. Đối với điều đó, chúng ta nên cung cấp triển khai cho phương thức run (), được định nghĩa trong giao diện.
Ví dụ:
Public class Addition implements Runnable { public void run () { } }
14. Sự khác nhau giữa phương thức notify() và notifyAll() trong Java
Trả lời: Sự khác biệt giữa phương thức notify() và notifyAll() được liệt kê dưới đây:
notify() | notifyAll() |
Phương thức này được sử dụng để gửi tín hiệu đánh thức một luồng duy nhất trong nhóm chờ. | Phương thức này gửi tín hiệu để đánh thức tất cả các luồng trong một cuộn chờ. |
15. Làm thế nào để dừng một luồng trong java? Giải thích về phương thức sleep () trong một luồng
Câu trả lời: Chúng ta có thể dừng một luồng bằng cách sử dụng các phương thức luồng sau:
- Sleeping
- Waiting
- Blocked
Sleep: Phương thức Sleep () được sử dụng để ngủ luồng đang thực thi trong một khoảng thời gian nhất định. Khi luồng thức dậy, nó có thể chuyển sang trạng thái chạy được. Vì vậy, phương thức sleep () được sử dụng để trì hoãn việc thực thi trong một khoảng thời gian nào đó.
Nó là một phương thức tĩnh.
Ví dụ:
Thread. Sleep (2000)
Nó trì hoãn chuỗi để ngủ hai phần nghìn giây. Phương thức Sleep () ném ra một ngoại lệ không bị gián đoạn. Do đó, chúng ta cần bao quanh khối bằng try / catch.
public class ExampleThread implements Runnable{ public static void main (String[] args){ Thread t = new Thread (); t.start (); } public void run(){ try{ Thread.sleep(2000); }catch(InterruptedException e){ } }
16. Khi nào sử dụng giao diện Runnable với Lớp luồng trong Java?
Trả lời: Nếu chúng ta cần lớp của mình để mở rộng một số lớp khác ngoài luồng, thì chúng ta có thể sử dụng giao diện runnable. Trong java, chúng ta chỉ có thể mở rộng một lớp.
Nếu chúng ta không mở rộng bất kỳ lớp nào, thì chúng ta có thể mở rộng lớp luồng.
17. Giải thích vòng đời của luồng trong Java
Câu trả lời: Luồng có các trạng thái sau:
- New
- Runnable
- Running
- Non-runnable (Blocked)
- Terminated
- New: Trong trạng thái New, tạo ra Thread đã được tạo, nhưng chưa gọi Start (). Bây giờ thread không được coi là sống.
- Runnable: Thread ở trạng thái chạy được sau khi gọi phương thức start (), nhưng trước khi gọi run (). Nhưng một luồng cũng có thể trở lại trạng thái runnable từ chế độ waiting/sleeping. Ở trạng thái này, luồng được coi là còn sống.
- Running: Thread ở trạng thái đang chạy sau khi nó gọi phương thức run (). Bây giờ luồng bắt đầu thực hiện.
- Non-Runnable (Bị chặn): Thread vẫn còn tồn tại, nhưng nó không đủ điều kiện để chạy. Nó không ở trạng thái runnable, nhưng nó sẽ trở lại trạng thái runnable sau một khoảng thời gian. Ví dụ: wait, sleep, block.
- Terminated: Khi phương thức run được hoàn thành thì nó sẽ bị kết thúc. Bây giờ, Thread không còn sống.
18. Synchronization là gì?
Trả lời: Synchronization chỉ làm cho một thread truy cập một khối mã tại một thời điểm. Nếu nhiều thread truy cập vào khối mã, thì có thể cung cấp kết quả không chính xác ở cuối. Để tránh điều này, chúng tôi có thể cung cấp Synchronization cho khối mã nhạy cảm.
Từ khóa được đồng bộ hóa (synchronized) có nghĩa là một luồng (thread) cần một khóa để truy cập vào mã được đồng bộ.
Các ổ khóa dành cho mỗi đối tượng. Mọi đối tượng Java đều có một khóa. Một ổ khóa chỉ có một chìa khóa. Một luồng chỉ có thể truy cập vào một phương thức được Synchronization nếu luồng đó có thể nhận được chìa khóa cho các đối tượng để khóa.
Đối với điều này, chúng tôi sử dụng từ khóa “Synchronized”.
Ví dụ:
public class ExampleThread implements Runnable{ public static void main (String[] args){ Thread t = new Thread (); t.start (); } public void run(){ synchronized(object){ { } }
19. Serialization có nghĩa là gì?
Trả lời: Việc chuyển đổi một tệp thành một luồng byte được gọi là Serialization. Các đối tượng trong tệp được chuyển đổi thành byte cho mục đích bảo mật. Đối với điều này, chúng ta cần triển khai một giao diện java.io.Serializable. Nó không có method nào để xác định.
Các biến được đánh dấu là tạm thời sẽ không phải là một phần của tuần tự hóa (serialization). Vì vậy, chúng ta có thể bỏ qua tuần tự hóa cho các biến trong tệp bằng cách sử dụng từ khóa tạm thời (transient keyword).
20. Phương pháp nào được sử dụng trong quá trình Serialization và Deserialization?
Trả lời: Các lớp ObjectOutputStream và ObjectInputStream là java.io. package. Chúng tôi sẽ sử dụng chúng với các lớp cấp thấp hơn FileOutputStream và FileInputStream.
ObjectOutputStream.writeObject —-> Tuần tự hóa (Serialize) đối tượng và ghi đối tượng được vào một tệp.
ObjectInputStream.readObject -> Đọc tệp và giải mã hóa (deserializes) đối tượng.
Để được tuần tự hóa, một đối tượng phải triển khai giao diện có thể tuần tự hóa. Nếu lớp cha thực hiện Serializable, thì lớp con sẽ tự động có thể serializable.
21. Sự khác biệt giữa Serialization và Deserialization trong Java
Câu trả lời: Đây là những khác biệt giữa tuần tự hóa (serialization) và giải mã hóa (deserialization ) trong java:
Serialization | Deserialization |
Serializationlà quá trình được sử dụng để chuyển đổi các đối tượng thành một luồng byte. | Deserialization là quá trình ngược lại của tuần tự hóa, nơi chúng ta có thể lấy lại các đối tượng từ luồng byte. |
Một đối tượng được tuần tự hóa bằng cách viết nó dưới dạng ObjectOutputStream. | Một đối tượng được giải mã bằng cách đọc nó từ ObjectInputStream. |
Kết luận
Đây là một số câu hỏi phỏng vấn Java cốt lõi bao gồm cả khái niệm Java cơ bản và nâng cao. Blog.freeC.asia hy vọng bài hướng dẫn này đã cho bạn cái nhìn sâu sắc và chi tiết về các khái niệm cốt lõi JAVA. Những giải thích trên sẽ làm phong phú thêm kiến thức của bạn và tăng hiểu biết của bạn về lập trình JAVA.
Có thể bạn quan tâm: