Java core
JDK-JRE-JVM
JVM: là nơi chạy Java bytecode. JVM chịu trách nhiệm load class, quản lý memory, Garbage collection,... Sẽ có Windows JVM, Linux JVM,...
JRE: là môi trường cần thiết để chạy Java application. JRE bao gồm: JVM và Java Class Libraries (String, ArrayList, HashMap,...)
JDK: dành cho developer, là bộ công cụ dùng để phát triển các ứng dụng Java. Ví dụ javac, dùng để compile .java thành .class
Vì sao String là immutable? Trade-off ?
Java có String pool để tái sử dụng các String giống nhau. Việc immutable giúp String không bị thay đổi, an toàn chia sẻ cùng 1 string.
Immutability giúp String làm key trong hashmap.
Immutability giúp thread-safe
Phải tạo 1 giá trị mới mỗi lần thay đổi.
String pool giúp tránh việc tạo quá nhiều String object giống hệt nhau, từ đó tiết kiệm memory và cho phép JVM tái sử dụng.
String, StringBuilder, StringBuffer
String: immutable → mỗi lần thay đổi → object mới
StringBuilder: mutable → sửa buffer hiện tại → nhanh
StringBuffer: mutable + synchronized → thread-safe → chậm hơn Builder
Checked exception Và Unchecked exception
Khác nhau cơ bản giữa Checked và Unchecked exception là compiler có bắt buộc phải xử lý exception đó hay không?
Throwable
└── Error
└── Exception
└── RuntimeException -> unchecked
|
└── NullPointerException
└── IllegalArgumentException
|
└── Other Exception
|
└── IOException
└── SQLException
Checked exception là exception mà compiler bắt buộc developer phải xử lý hoặc throws ra cho caller xử lý. Ý tưởng ban đầu của Checked exception là: "Đây là 1 failure mà caller có khả năng biết và xử lý. Hãy quyết định xem muốn làm gì?"
Unchecked exception thường là các exception kế thừa từ RuntimeException, và compiler không bắt buộc developer phải xử lý.
Dùng checked exception khi caller thực sự có 1 cách nào đó để recover ở fail case, và việc failure đó là 1 phần có thể dự đoán.
Dùng unchecked exception progamming error, invalid input,...
API Java bị chậm đột ngột
Scope:
Xác định chậm ở đâu? API nào chậm? Tất cả hay chỉ 1 vài?
Xác định user nào bị? Tất cả user hay chỉ 1 vài user?
Bắt đầu từ khi nào? Gần đây có deploy code mới hay sửa config gì không?
Monitor:
Nếu hệ thống có các dịch vụ monitor, sẽ xem thử có bất kỳ service nào down hay không?
Nếu hệ thống có distributed tracing, thì sẽ xem request đã đi qua những service nào, mất bao nhiêu thời gian?
Resolve:
Nếu database chậm, check metric của datase lúc đó, sau đó check performance của câu query.
Nếu service chậm, check log.