Skip to main content

Command Palette

Search for a command to run...

Java core

Updated
3 min readView as Markdown

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:

  1. Xác định chậm ở đâu? API nào chậm? Tất cả hay chỉ 1 vài?

  2. Xác định user nào bị? Tất cả user hay chỉ 1 vài user?

  3. Bắt đầu từ khi nào? Gần đây có deploy code mới hay sửa config gì không?

Monitor:

  1. 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?

  2. 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:

  1. Nếu database chậm, check metric của datase lúc đó, sau đó check performance của câu query.

  2. Nếu service chậm, check log.