Câu hỏi phỏng vấn JavaCore phần 4
Để giúp bạn có thể chuẩn bị tốt nhất, hôm nay freetuts sẽ tiếp tục series các câu hỏi phỏng vấn JavaCore. Dưới đây là những câu hỏi thường gặp khi bạn đi phỏng vấn JavaCore.
Java có những tính năng nào?
Ở đây, Freetuts nêu lên 10 tính năng chính của ngôn ngữ lập trình Java, các bạn tham khảo thêm.
Java là một ngôn ngữ lập trình phổ biến, được sử dụng rộng rãi trên nhiều nền tảng và ứng dụng. Dưới đây là một số tính năng nổi bật của Java:
- Hướng đối tượng: Java là một ngôn ngữ hướng đối tượng, cho phép lập trình viên tạo ra các đối tượng và tương tác giữa chúng.
- Quản lý bộ nhớ: Java có một bộ thu gom rác tự động, giúp quản lý bộ nhớ của chương trình, giảm thiểu khả năng xảy ra lỗi trong việc quản lý bộ nhớ.
- Độc lập nền tảng: Java được thiết kế để chạy trên nhiều nền tảng khác nhau, bao gồm cả Windows, Mac OS, Linux và các thiết bị di động.
- Cú pháp đơn giản: Java có cú pháp đơn giản, dễ đọc và dễ hiểu, giúp lập trình viên tập trung vào việc phát triển ứng dụng mà không phải lo lắng về cú pháp.
- Thư viện lớn: Java đi kèm với một thư viện phong phú, bao gồm các lớp tiện ích để thực hiện nhiều chức năng khác nhau, giúp tiết kiệm thời gian phát triển ứng dụng.
- Tính đa luồng: Java hỗ trợ đa luồng, cho phép chạy nhiều nhiệm vụ đồng thời trên cùng một chương trình.
- Bảo mật: Java được thiết kế với nhiều tính năng bảo mật, bao gồm mô hình cấp độ quyền (permission) và các công cụ kiểm tra mã độc (code verification).
- Độ tin cậy cao: Java được thiết kế để có tính độ tin cậy cao, bao gồm kiểm tra kiểu dữ liệu và các cơ chế kiểm soát lỗi.
- Tính mở rộng: Java có thể được mở rộng thông qua các API và framework, giúp cho lập trình viên phát triển các ứng dụng phức tạp.
- Tính di động: Java có thể sử dụng để phát triển các ứng dụng di động, bao gồm các ứng dụng cho Android và các thiết bị di động khác.
Bạn hãy cho biết, trong Java có những Access Modifier nào?
Trong Java, có 4 Access Modifier để quy định mức độ truy cập của các thành phần của lớp, đó là:
- public : Các thành phần được đánh dấu là public có thể được truy cập từ bất kỳ đâu, bao gồm các lớp khác cùng package hoặc các lớp khác ở ngoài package.
- protected : Các thành phần được đánh dấu là protected chỉ có thể truy cập từ các lớp con hoặc từ cùng package.
- default : Nếu không có bất kỳ Access Modifier nào được đánh dấu, các thành phần của lớp được coi là có mức truy cập mặc định. Các thành phần mặc định chỉ có thể truy cập từ cùng package.
- private : Các thành phần được đánh dấu là private chỉ có thể truy cập từ bên trong cùng lớp, không thể truy cập từ bên ngoài.
Các Access Modifier này được sử dụng để quản lý việc truy cập đến các thành phần của lớp, giúp tăng tính bảo mật và kiểm soát các phương thức, biến, lớp trong chương trình.
Bài viết này được đăng tại [free tuts .net]
Từ khóa “super” trong Java?
Từ khóa “super” trong Java là một biến tham chiếu được sử dụng để tham chiếu trực tiếp đến đối tượng của của lớp cha.
- super có thể được sử dụng để chỉ biến thể hiện của lớp cha.
- super có thể được sử dụng để gọi phương thức của lớp cha.
- super() có thể được sử dụng để gọi hàm tạo của lớp cha.
Ví dụ:
//Học lập trình tại Freetuts.net //Lớp cha Person class Person{ private String name; private int age; public Person(String name, int age){ this.name = name; this.age = age; } public void displayInfor(){ System.out.println("Name: " + name); System.out.println("Age: " + age); } } //Lớp con Student kế thừa từ lớp cha Person class Student extends Person{ private int id; public Student(String name, int age, int id){ super(name, age);//Gọi constructor của lớp cha Person this.id = id; } public void displayStudentInfo(){ super.displayInfor(); //Gọi phương thức displayInfo() của lớp cha Person System.out.println("ID: " + id); } } //Học lập trình tại Freetuts.net //Sử dụng lớp Student public class Main{ public static void main(String[] args) { Student student = new Student("Freetuts", 22, 22022023); student.displayStudentInfo(); //Gọi phương thức displayInfo() của lớp Student } }
Kết quả khi chạy chương trình:
Name: Freetuts Age: 22 ID: 22022023
Trong ví dụ trên, phương thức displayStudentInfo() trong lớp Student gọi phương thức displayInfo() của lớp cha Person thông qua từ khóa super. Từ đó, nó truy cập và hiển thị thông tin của đối tượng Person được tạo bởi constructor của lớp con Student.
Hãy nêu những hiểu biết về tính Kế Thừa trong java?
Khái niệm:
- Kế thừa là một trong 4 phương pháp trong lập trình hướng đối tượng, theo đó đối tượng có thể có được tất cả các thuộc tính và hành vi của một đối tượng khác.
- Kế thừa đại diện cho mối quan hệ IS-A trong Java.
Các loại kế thừa:
- Đơn Kế Thừa
- Đa Kế Thừa triển khai qua interface (không được hỗ trợ trong java thông qua lớp)
- Kế Thừa Đa Cấp
- Kế Thừa Phân Cấp
Tại sao trong Java lại không hỗ trợ Đa Kế Thừa?
Java không hỗ trợ Đa Kế Thừa nhằm giảm độ phức tạp và đơn giản hóa ngôn ngữ lập trình
Hãy cùng Freetuts xem xét ví dụ sau để hiểu hơn vấn đề này:
//Học lập trình tại Freetuts.net class America{ void say(){ System.out.println("Hello"); } } class Germany{ void say(){ System.out.println("Hallo"); } } class Hybrid extends America, Germany{ static void main(String[] args){ Hybrid hybrid = new Hybrid(); hybrid.say(); } }
Bài toán có 3 class và Hybrid extends America và Germany. Khi Hybrid gọi phương thức say() thì chương trình sẽ không biết tham chiếu đến phương thức của class nào.
Và nếu có đoạn mã trên thì Java sẽ hiện compile-time errors vì nó tốt hơn runtime errors.
Đồng bộ hóa là gì ?
Khái niệm: Đồng bộ hóa (synchronization) trong Java là quá trình đảm bảo rằng chỉ có một luồng (thread) được phép truy cập vào một phần của mã (code) cùng một lúc. Nó giúp tránh được các xung đột dữ liệu (data race) khi nhiều luồng truy cập vào cùng một tài nguyên dữ liệu.
Cách để triển khai đồng bộ hóa: sử dụng từ khóa synchronized hoặc sử dụng đối tượng Lock.
Ví dụ: Giả sử chúng ta có một lớp Counter, trong đó một phương thức được sử dụng để tăng giá trị của một biến đếm mỗi khi nó được gọi. Nếu chúng ta không sử dụng đồng bộ hóa, khi nhiều luồng cùng truy cập vào phương thức này, có thể dẫn đến việc giá trị đếm không chính xác.
//Học lập trình cùng Freetuts class Counter{ private int count = 0; public void increment(){ count++; // tăng giá trị đếm lên 1 System.out.println(Thread.currentThread().getName() + ": " + count); //hiển thị giá trị đếm } }
Để đảm bảo rằng chỉ có một luồng được phép truy cập vào phương thức increment() cùng một lúc, chúng ta có thể sử dụng từ khóa synchronized.
//Học lập trình cùng Freetuts class Counter{ private int count = 0; public synchronized void increment(){ count++; // tăng giá trị đếm lên 1 System.out.println(Thread.currentThread().getName() + ": " + count); //hiển thị giá trị đếm } }
Trong đoạn mã trên, từ khóa synchronized được sử dụng trên phương thức increment(). Khi một luồng truy cập vào phương thức này, các luồng khác sẽ bị chặn và đợi cho đến khi luồng đó kết thúc trước khi được phép truy cập vào phương thức này.
Phân biệt List và Set trong Java?
List và Set là hai kiểu dữ liệu collection trong Java để lưu trữ các phần tử. Tuy nhiên, chúng có những điểm khác nhau về cách thức hoạt động và tính năng cung cấp.
Bảng so sánh sự khác nhau giữa List và Set:
Tính chất |
List |
Set |
Thứ tự |
Các phần tử được lưu trữ theo thứ tự chèn vào |
Không đảm bảo được thứ tự lưu trữ phần tử |
Dữ liệu trùng lặp |
Có thể chứa các phần tử trùng lặp |
Không chứa các phần tử trùng lặp |
Tìm kiếm |
Tìm kiếm phần tử nhanh hơn khi sử dụng index |
Tìm kiếm phần tử chậm hơn, không sử dụng index |
Thao tác |
Hỗ trợ các thao tác như thêm, xóa, sửa phần tử, lấy phần tử theo index |
Hỗ trợ các thao tác như thêm xóa, kiểm tra phần tử có tồn tại hay không |
Sử dụng |
Sử dụng khi cần duy trì thứ tự của các phần tử hoặc cần phần tử có thể trùng lặp |
Sử dụng khi cần duy trì tập hợp các phần tử duy nhất |
Như vậy, Freetuts đã đưa ra những ưu điểm và hạn chế riêng của List và Set. Tùy vào nhu cầu sử dụng, người lập trình có thể lựa chọn kiểu dữ liệu phù hợp để lưu trữ và xử lý dữ liệu.
TreeMap là gì? Khi sử dụng TreeMap cần lưu ý những gì?
Khái niệm: TreeMap là một class implement của interface Map. Nó được sử dụng để lưu trữ các phần tử theo cặp key-value và sắp xếp các key theo thứ tự tăng dần.
Một số đặc điểm của TreeMap:
- Các key trong TreeMap được sắp xếp theo thứ tự tăng dần.
- TreeMap có thể lưu trữ các phần tử null, nhưng chỉ có 1 phần tử null duy nhất được phép.
- Sử dụng các phương thức của TreeMap để truy xuất và thay đổi các phần tử trong TreeMap, chú ý đến cách sắp xếp và duy trì các phần tử trong TreeMap.
- TreeMap không đồng bộ (non-synchronized), nếu sử dụng trong môi trường đa luồng (multithreading), cần sử dụng các phương thức đồng bộ hóa để đảm bảo tính toàn vẹn của dữ liệu.
Lưu ý:
Nên sử dụng TreeMap khi cần lưu trữ các phần tử theo thứ tự tăng dần của key. TreeMap được sử dụng phổ biến trong các ứng dụng yêu cầu việc truy xuất dữ liệu theo thứ tự tăng dần của key, ví dụ như trang web thương mại điện tử hiển thị danh sách sản phẩm theo giá cả tăng dần.
Ví dụ:
// Cùng Freetuts học lập trình import java.util.TreeMap; public class TreeMapExample { public static void main(String[] args) { TreeMap<String, Integer> treeMap = new TreeMap<String, Integer>(); // Thêm các phần tử vào TreeMap treeMap.put("A", 1); treeMap.put("C", 3); treeMap.put("B", 2); treeMap.put("D", 4); // Sử dụng synchronized để đồng bộ hóa TreeMap synchronized (treeMap) { // Truy xuất và thay đổi các phần tử trong TreeMap for (String key : treeMap.keySet()) { int value = treeMap.get(key); treeMap.put(key, value * 2); } } // In các phần tử trong TreeMap System.out.println("Cùng Freetuts học lập trình"); for (String key : treeMap.keySet()) { System.out.println("Key: " + key + ", Value: " + treeMap.get(key)); } } }
Kết quả khi chạy chương trình:
Cùng Freetuts học lập trình Key: A, Value: 2 Key: B, Value: 4 Key: C, Value: 6 Key: D, Value: 8
Trong ví dụ trên, phương thức synchronized được sử dụng để đồng bộ hóa việc truy xuất và thay đổi các phần tử trong TreeMap khi sử dụng trong môi trường đa luồng.
Trên đây là một số câu hỏi tiêu biểu mà Freetuts sưu tầm trong quá trình interview Java, các bạn có thể tham khảo và tìm hiểu thêm để có một tâm lý tốt nhất khi đi phỏng vấn.