Top 10 câu hỏi phỏng vấn Java thường gặp
Gần đây, tôi có ý tưởng muốn chia sẻ kinh nghiệm với tất cả các bạn, những người đang gặp khó khăn trong việc tìm kiếm công việc lập trình về Java. Tôi hy vọng rằng mình có thể giúp đỡ bằng cách chia sẻ 10 câu hỏi Java thường gặp khi đi phỏng vấn 1. Trên thang điểm 10 – Bạn đánh ...
Gần đây, tôi có ý tưởng muốn chia sẻ kinh nghiệm với tất cả các bạn, những người đang gặp khó khăn trong việc tìm kiếm công việc lập trình về Java. Tôi hy vọng rằng mình có thể giúp đỡ bằng cách chia sẻ 10 câu hỏi Java thường gặp khi đi phỏng vấn
1. Trên thang điểm 10 – Bạn đánh giá mình được bao nhiêu điểm?
Đây là một điều rất khó nếu bạn không chắc chắn về bản thân hoặc trình độ thông thạo của bạn trong Java. Hãy hạ thấp số điểm của bạn xuống một chút. Sau này, bạn có thể sẽ nhận được câu hỏi theo mức độ bạn tự đánh giá. Do đó, bạn sẽ tránh được những câu hỏi quá khó mà rất có thể sẽ không thể trả lời được.
2. Bạn biết về những loại Collection nào?
Ở đây bạn nên biết về những cái quan trọng nhất:
- ArrayList
- LinkedList
- HashMap
- HashSet
Hãy tìm hiểu về các collection này càng nhiều càng tốt, bởi vì bạn sẽ bị hỏi nhiều câu hỏi về chúng
3. Liệt kê 5 đặc điểm bất kỳ của Java?
Một số đặc điểm của Java là Hướng đối tượng, Độc lập nền tảng, Thông dịch, Đa luồng (Multi-thread), Robust (mạnh mẽ), Portable (khả chuyển).
4. Object Class có những Method nào?
Đây là một câu hỏi rất phổ biến được yêu cầu để xác định mức độ nắm vững của bạn với các khái niệm cơ bản. Đây là những method mà mọi object đều có:
Object class, trong java.lang package, được xếp hạng gần như top thứ hạng trong class. Mỗi class sẽ là một hậu duệ, trực tiếp hoặc gián tiếp, của Object class. Mỗi class bạn sử dụng hoặc kế thừa các instance method của Object. Bạn vốn không cần sử dụng bất kỳ phương pháp nào trong số này, nhưng nếu bạn chọn làm như vậy thì sẽ cần ghi đè chúng bằng các code cụ thể cho class của bạn. Các phương thức được kế thừa từ Object.được thảo luận trong phần này là:
- protected Object clone() throws CloneNotSupportedException
Tạo và trả về một bản sao của object này. - public boolean equals(Object obj)
Cho biết một số object khác có “bằng” với object này hay không - protected void finalize() throws Throwable
Được gọi bởi garbage collector trên một object khi garbagecollection xác định rằng không có thêm reference đến object.
- public final Class getClass()
Returns the runtime class của 1 object. - public int hashCode()
Return một giá trị hash code value cho object - public String toString()
Return một chuỗi đại diện của object.
Các phương thức notify, notifyAll,và wait của Object đều đóng vai trò đồng bộ hóa các hoạt động của các luồng chạy độc lập của thread trong một chương trình. Có năm method sau:
- public final void notify()
- public final void notifyAll()
- public final void wait()
- public final void wait(long timeout)
- public final void wait(long timeout, int nanos)
5. Tại sao String Object không thể thay đổi (Immutable) trong Java?
- String pool là có thể bởi vì String là bất biến trong Java. Bằng cách này, Java Runtime tiết kiệm rất nhiều khoảng trống trong Java heap space, bởi vì các String variable khác nhau có thể tham chiếu đến cùng một biến String variable trong string pool. Nếu String không phải là bất biến, thì việc thực hiện chuỗi sẽ không diễn ra được, bởi vì nếu bất kỳ variable nào thay đổi giá trị, nó sẽ cũng gây ảnh hưởng lên các variable khác.
- Nếu String không phải là bất biến, thì nó sẽ gây ra một mối đe dọa bảo mật nghiêm trọng cho ứng dụng. Ví dụ, tên người dùng và mật khẩu cơ sở dữ liệu được chuyển thành String để có được kết nối cơ sở dữ liệu, máy chủ lập trình trong socket và các chi tiết của portal được chuyển thành String. Vì Chuỗi không thể thay đổi nên không thể thay đổi các giá trị này. Nếu không, bất kỳ tin tặc nào cũng có thể thay đổi giá trị được tham chiếu để gây ra các vấn đề bảo mật trong ứng dụng.
- Vì String là bất biến, nó cũng an toàn cho multithreading, và một cá thể String đơn có thể được chia sẻ qua các thread khác nhau. Điều này giúp tránh việc sử dụng đồng bộ hóa cho thread safety.
- Các chuỗi được sử dụng trong Java classloader, và tính bất biến bảo đảm rằng class đúng sẽ được load bởi Classloader..
- Vì String là bất biến, nên hashcode của nó được lưu vào bộ nhớ cache tại thời điểm tạo và không cần phải tính lại. Điều này làm cho nó trở thành một ứng cử viên tuyệt vời để làm key trong map, và quá trình xử lý của nó cũng nhanh hơn các HashMap key object khác. Đây là lý do tại sao String là object được sử dụng nhiều nhất của các HashMap key
6. Sự khác biệt giữa Final, Finally, và Finalize là gì?
Đây là câu hỏi yêu thích của tôi.
final keyword được sử dụng trong một số ngữ cảnh để xác định một thực thể chỉ có thể được gán một lần.
The Java finally block là một khối được sử dụng để thực thi mã quan trọng, chẳng hạn như đóng kết nối, luồng, vv The Java finally block luôn được thực thi, cho dù là có ngoại lệ hay không.
Đây là một method mà GarbageCollector luôn gọi ngay trước khi xóa / hủy object, nó đủ điều kiện để Garbage Collection thực hiện hoạt động dọn dẹp.
7. Vấn đề Diamond Problem là gì?
Vấn đề Diamond Problem phản ánh tại sao chúng ta không được phép làm nhiều inheritance trong Java. Nếu hai class có cùng một superclass được chia sẻ với một phương thức cụ thể, nó sẽ ghi đè lên cả hai lớp con. Sau đó, nếu bạn quyết định kế thừa từ hai subClasses đó, thì ngôn ngữ đó không thể quyết định cái nào bạn muốn gọi.
Chúng tôi gọi vấn đề này là Diamond Problem. Nó được đặt tên từ hình trên.
8. Làm thế nào bạn có thể làm cho một class không thể thay đổi?
Tôi nghĩ đây là một câu hỏi khá khó. Bạn cần phải thực hiện một số sửa đổi trên class của mình để đạt được tính không thay đổi:
- Khai báo lớp học là final để không thể mở rộng.
- Đặt tất cả các trường ở chế độ riêng tư để không cho phép truy cập trực tiếp.
- Không cung cấp phương thức setter cho biến
- Đặt tất cả các trường có thể thay đổi final để giá trị của nó chỉ có thể được gán một lần.
- Khởi tạo tất cả các trường thông qua một hàm constructor.
- Thực hiện clone các object trong các phương thức getter để trả về một bản sao thay vì trả về object reference.
9. Singleton có nghĩa là gì?
Một singleton là một class chỉ cho phép một instance riêng của nó được tạo ra và cho phép truy cập vào instance được tạo ra đó. Nó chứa các static variable có thể chứa các instance duy nhất và riêng tư của chính nó. Nó được sử dụng trong các trường hợp khi người dùng muốn hạn chế sự instantiation (khởi tạo) của một class với chỉ một object. Điều này là hữu ích khi một object duy nhất được yêu cầu để phối hợp các hành động trên một hệ thống.
10. Dependency Injection là gì?
Đây là câu hỏi quan trọng nhất mà bạn phải biết nếu làm về Java EE hoặc Spring. Bạn có thể xem thêm tại bài viết khác của tôi: Dependency Injection là gì?
Techtalk via dzone