Câu 1: Các tạo thành 1 immutable object vào Java? tiện ích của câu hỏi này là gì?

Immutable nghĩa là không ráng đổi. Vậy immutable object có nghĩa là object có mức giá trị không biến đổi khi sẽ được chế tác ra.

Bạn đang xem: Câu hỏi phỏng vấn java core

*


*

- Các cách để tạo ra 1 immutable object

Khai báo field là private, final cùng không viếtsetter.Không được cho phép các subclass override. Cách đơn giản và dễ dàng nhất là khai báo final đến class do class final thì sẽ không bị ghi đè.

- ích lợi của immutable class:

Sử dụng solo giản, dễ dàng test.Thread safe, kị được các lỗi vày bất đồng hóa gây yêu cầu (có biến đổi giá trị éo đâu chả an toàn :rofl: )Không cần hàm tạo ra sao chép, ko cần xào nấu object (dùng luôn)cho phép hashCode sử dụng lazy initialization với cache để trả về giá chỉ trị.là một key "hịn" của maps và set (do ko bao giờ thay đổi => key xịn)

Thật ra nhưng mà nói, concept immutable object khá ít sử dụng trong thực tế. Tớ đưa câu hỏi này vào vì... Tớ đọc được. Cần chỉ mang ý nghĩa chất tham khảo thêm bạn nhé ;)

Bài viết này được đăng trên

Câu 2: Java là tham chiếu (pass-by-reference) xuất xắc tham trị (pass-by-value)?


Hỏi mang lại là tham chiếu giỏi tham trị thì ý nói ở đây là khi chúng ta truyền biến đổi vào 1 hàm; vào hàm đó bạn thay đổi giá trị của biến; sau khi ra ngoài hàm thì quý giá của biến hóa có biến hóa hay không.

Nhiều bạn lầm tưởng rằng java bao gồm kiểu tham chiếu. Cũng chính vì nếu đối vào hàm của người tiêu dùng là mẫu mã object (hay mẫu mã Wrapper) thì khi đổi khác giá trị của biến này trong hàm, ra khỏi hàm thì giá trị của trở nên cũng biến đổi theo.

Cùng xét ví dụ nhỏ tuổi sau:

Tạo 1 object có tên là hutgiammo.comObject


hutgiammo.comObject.java
package review;public class hutgiammo.comObject private String data; public void printMe() System.out.println(data); public String getData() return data; public void setData(String name) this.data = name;

Class đựng hàm main


PassByWhat.java
package review;public class PassByWhat public static void hutgiammo.com1(hutgiammo.comObject param) param.setData("Tôi bị biến đổi trong hàm hutgiammo.com1"); public static void hutgiammo.com2(hutgiammo.comObject param) param = new hutgiammo.comObject(); param.setData("Tôi đang bị biến hóa trong method hutgiammo.com2"); public static void main(String<> args) hutgiammo.comObject origin = new hutgiammo.comObject(); origin.setData("Tôi là chuỗi gốc"); origin.printMe(); hutgiammo.com1(origin); origin.printMe(); hutgiammo.com2(origin); origin.printMe();

Khi chạy chương trình, ta được công dụng xuất ra bên ngoài màn trong khi sau:


đầu ra
Tôi là chuỗi gốcTôi bị chuyển đổi trong hàm hutgiammo.com1Tôi bị biến hóa trong hàm hutgiammo.com1

Rõ ràng, object origin qua hàm hutgiammo.com1 sẽ bị chuyển đổi giá trị, nhưng mà qua hàm hutgiammo.com2 thì lại không. Do sao vậy? bạn hãy nhìn hình bên dưới đây

Như các bạn thấy sinh sống trên, những instance param là 1 đối tượng kháccùng trỏ mang đến vùng lưu giữ của instance origin.

Vậy nguyên nhân method hutgiammo.com1 biến đổi giá trị của origin còn hutgiammo.com2 thì không?

Nếu bạn chú ý 1 chút, các bạn sẽ thấy sinh hoạt method hutgiammo.com2 gồm thêm đoạn code khởi chế tác lại object

param = new hutgiammo.comObject();

Điều này vẫn làm đổi thay param được khởi tạo ra mới, khởi tạo thành 1 vùng lưu giữ khác, không còn tham chiếu cho vùng lưu giữ của origin nữa. Vì thế mà param không thể liên quan gì cho tới origin, suy ra param biến hóa giá trị cũng chẳng tương quan gì cho tới origin nữa :D

Vậy, bạn nhớ nhé: Java không tồn tại kiểu tham chiếu, chỉ có kiểu tham trị nhưng mà thôi.

Câu 3: trình diễn về finally? bao giờ finally được gọi, khi nào không?

finally lộ diện khi bao gồm khốitry...catch. Mục đích của finally là làm cho một khối code luôn luôn được thực hiện, dù là lỗi xuất xắc không. Finally luôn được thực hiện, chỉ trừ ngôi trường hợp lịch trình bị crash giữa chừng.

Câu 4: Sự khác biệt giữa java.sql.Date cùng java.util.Date ?

- java.sql.Date kế thừa java.util.Date

- java.sql.Date chỉ có ngày/tháng/năm, java.util.Date gồm ngày/tháng/năm và thời hạn giờ/phút/giây

Câu 5: bạn biết gì về MarkerInterface?

Marker interface pattern là một design pattern của kỹ thuật máy tính, dùng để đưa tin của những object trên run-time. Marker interface y hệt như một phương tiện để link metadata với cùng 1 class. Trong java thì Marker interface được miêu tả qua việc sử dụng interface trống (không có khai báo bất kể phương thức nào)

Một ví dụ điển hình đó là interface Serializable. Serializable không tồn tại bất kì thủ tục nào. Lúc 1 object nào kia implements lớp Serializable này thì JVM sẽ hiểu là object này có thể chuyển thành byte chuyển vào nơi nào đó (ghi ra file, trình lên server), với tại kia (1 lịch trình java khác, server ) sẽ gửi lại tự byte ra chính object mà ta đang gửi.

Một điểm yếu của Marker Interface là cần yếu "un-implements". Ví dụ chúng ta có class Tomcat extends Cat. Lớp Cat của bạn implements Serializable cần Tomcat cũng sẽ là Serializable. Không có cách như thế nào huỷ tính chất Serizlizable của lớp con Tomcat cả.

Câu 6: vì sao phương thức main lại là public static void?

public: để có thể truy cập từ hầu hết nơi nhằm khởi động áp dụng (thực ra tất cả private thì java vẫn điện thoại tư vấn được vị java thực hiện Java Native Interface nhằm invoke các phương thức, chắc hẳn rằng Java ao ước để public để người dùng dễ đọc hơn)

static: để có thể gọi trực tiếp mà không đề nghị tạo instance.

void: bởi hàm main không yêu cầu return giá trị nào về mang lại JVM. Nếu hàm main trả về quý hiếm khác 0 thì chứng minh có lỗi xẩy ra hoặc người dùng chủ rượu cồn shutdown ứng dụng áp dụng phương thức System.exit(int)

Câu 7: trình bày về 2 cách làm hashCode() với equals()

hashCode() cùng equals() là hai thủ tục được có mang trong class Object. Cơ mà Object lại là class phụ vương của toàn bộ các class trong Java nên toàn bộ các object mọi mặc định có hai thủ tục này.

Phương thức hashCode() trả về 1 số nguyên, chủ yếu là showroom vùng nhớ nhưng mà Object đó đang rất được lưu

Phương thức equals() được áp dụng để đánh giá xem 2 object có bằng nhau hay không. Mặc định thì phương thức equals() sẽ kiểm tra xem 2 Object này có cùng tham chiếu mang đến một vùng nhớ tuyệt không. Nếu tất cả thì 2 Object này bằng nhau. Nếu không thì 2 Object này không bằng nhau.

Xem thêm: Giải Thuật Toán Tìm Kiếm Tuyến Tính, Tìm Kiếm Tuyến Tính

Phương thức equals() sử dụng hashCode() để đối chiếu 2 Object này còn có cùng tham chiếu mang lại một vùng nhớ tốt không.

Tham khảo

https://howtodoinjava.com/interview-questions/core-java-interview-questions-series-part-1/