Cốt lõi Java cho Phỏng vấn: Kiến thức Cơ bản

Các Khái niệm Trọng tâm về Cú pháp Java

Phân loại Kiểu Dữ liệu

Java định nghĩa 8 kiểu nguyên thủy với đặc điểm lưu trữ và giá trị mặc định riêng:

Kiểu Giá trị mặc định Kích thước
boolean false Không xác định
char '\u0000' 2 byte
byte 0 1 byte
short 0 2 byte
int 0 4 byte
long 0L 8 byte
float 0.0f 4 byte
double 0.0 8 byte

Quản lý Bộ nhớ: Bit và Byte

  • Bit (b) là đơn vị nhỏ nhất, biểu diễn giá trị nhị phân 0/1
  • Byte (B) = 8 bit, dùng lưu trữ ký tự Latinh (1 byte) hoặc tiếng Trung (2 byte)
  • Hệ thống đơn vị: 1KB = 1024 byte, 1MB = 1024KB, v.v.

Đối tượng String và Kiểu Nguyên thủy

String không thuộc nhóm 8 kiểu nguyên thủy, mà là lớp đối tượng. Các kiểu nguyên thủy bao gồm: byte, short, int, long, float, double, char, boolean.

Cơ chế Cache cho Lớp Wrapper

Các lớp bọc (Byte, Short, Integer, Long, Character, Boolean) sử dụng cache để tối ưu hiệu năng. Giá trị cache mặc định:

Lớp Phạm vi Cache
Byte -128 đến 127
Short -128 đến 127
Integer -128 đến 127
Character U+0000 đến U+007F
Boolean true/false

Tham số JVM -XX:AutoBoxCacheMax cho phép mở rộng phạm vi cache.

Xử lý Mảng trong Java

Khởi tạo Mảng

// Khai báo và cấp phát bộ nhớ
int[] numbers = new int[5];
numbers[0] = 10;

// Khởi tạo trực tiếp
String[] fruits = {"Táo", "Chuối", "Dứa"};

// Cách tường minh
double[] measurements = new double[]{3.14, 2.718, 1.618};

In Mảng Đa chiều

// In mảng 1 chiều
System.out.println(Arrays.toString(fruits)); 
// Kết quả: [Táo, Chuối, Dứa]

// In mảng 2 chiều
String[][] matrix = {{"A", "B"}, {"C", "D"}};
System.out.println(Arrays.deepToString(matrix)); 
// Kết quả: [[A, B], [C, D]]

Đặc điểm của Chuỗi Ký tự

Phân biệt String và Đối tượng

Khi khởi tạo:

String text1 = "Java"; // Chỉ tạo 1 đối tượng trong pool
String text2 = new String("Java"); // Tạo 2 đối tượng (pool + heap)

Nên dùng cách thứ nhất để tối ưu hiệu năng.

So sánh 3 Lớp Xử lý Chuỗi

  • String: Bất biến, dùng cho dữ liệu nhỏ
  • StringBuilder: Biến đổi được, không an toàn đa luồng, hiệu suất cao
  • StringBuffer: Biến đổi được, an toàn đa luồng, hiệu suất thấp hơn

Thay đổi Vị trí String Pool qua Phiên bản

  • Trước Java 7: Pool nằm trong vùng PermGen (thuộc heap)
  • Java 7: Di chuyển pool vào heap chính để tránh lỗi OutOfMemory
  • Java 8+: Thay PermGen bằng Metaspace (sử dụng bộ nhớ hệ thống), loại bỏ giới hạn kích thước

Metaspace giúp giảm thiểu Full GC và quản lý bộ nhớ hiệu quả hơn.

Thẻ: Java-8 String-intern primitive-types wrapper-classes metaspace

Đăng vào ngày 8 tháng 6 lúc 00:23