Tìm kiếm việc làm ở vị trí lập trình viên Java không phải là quá khó. Tuy nhiên, nếu không có sự chuẩn bị tốt dù bạn là người mới vào nghề hay là một lập trình viên có nhiều kinh nghiệm, việc vượt qua vòng phỏng vấn về lập trình Java cũng không hề dễ dàng.
Dưới đây là danh sách hơn 100 câu hỏi phòng vấn Java bạn nên tham khảo trước khi các cuộc phỏng vấn để chắc chắn bạn không bị bỏ lại phía sau so với những ứng viên khác.
Trong phần 1 này, chúng ta hãy bắt đầu bằng cách xem qua một số câu hỏi phỏng vấn Java thường gặp nhất
1, JDK, JRE và JVM là gì?
JDK | JRE | JVM |
---|---|---|
Java Development Kit | Java Runtime Environment | Java Virtual Machine |
Là công cụ cần thiết để compile (biên dịch), document và đóng gói các chương trình Java | JRE đề cập đến môi trường runtime trong đó Java bytecode có thể được thực thi | Là một cỗ máy trừu tượng. Nó cung cấp môi trường trong đó Java bytevode có thể thực thi |
Nó chứa JRE | Nó là một triển khai của JVM tồn tại trên thực tế | JVM tuân theo 3 quy ước: Đặc tả, Triển khai và runtime instace |
2, Giải thích phương thức main() trong chương trình Java
main()
trong java là điểm đầu vào cho bất kỳ chương trình Java nào. Nó luôn được viết làpublic static void main()
.public
: là phạm vi truy cập, được sử dụng để chỉ định ai có thể truy cập vào phương thức này.public
có nghĩa là phương thức này có thể được truy cập bởi bất kỳ class nào.static
: một phương thức được khai báo làstatic
thì phương thức đó được gọi là phương thức tĩnh,phương thức đó có thể được truy cập mà không cần tạo đối tượng. Trong trường hợp,main()
không được khai báo vớistatic
thì trình biên dịch sẽ ném ra một lỗi vì hàmmain()
được gọi bởi JVM trước khi bất kỳ đối tượng nào được thực hiện.void
: Là kiểu trả về của phương thức. Voi định nghĩa phương thức sẽ không trả về bất kỳ giá trị nào.main
: Là tên của phương thức được JVM tìm kiếm như một điểm khởi đầu cho ứng dụng.String args[]
: Là tham số truyền cho phương thứcmain()
3, Tại sao Java lại độc lập nền tảng?
Java được gọi là độc lập nền tảng vì các bytecode của nó có thể chạy trên bất kỳ hệ thống nào bất kể hệ điều hành cơ bản của nó
4, Tại sao Java Không phải là hướng đối tượng 100%?
Java không phải hướng đối tượng 100% vì nó sử dụng 8 kiểu dữ liệu nguyên thủy là byte, short, int, long, float, double, char, boolean không phải là object
5, Các lớp wrapper trong Java là gì?
Các lớp wrapper trong Java cung cấp cơ chế chuyển đổi kiểu dữ liệu nguyên thủy thành kiểu đối tượng và ngược lại.
6, Constructors trong Java là gì?
Trong Java, constructor đề cập đến khối lệnh được sử dụng để khởi tạo đối tượng. Nó phải có cùng tên với tên lớp. Ngoài ra, nó không có kiểu trả về và nó được tự động gọi khi một đối tượng được tạo.
Có hai loại constructor:
- Constructor mặc định: Trong Java, một constructor mặc định là constructor không có tham số nào. Mục đích chính của nó là khởi taon biến instance với giá trị mặc định. Ngoài ra nó được sử dụng chủ yếu để tạo đối tượng.
- Constructor có tham số: constructor được tham số hóa có khả năng khởi tạo các biến instance với các giá trị được cung cấp.
7, Lớp Singleton trong Java là gì? Làm thế nào để một lớp Singleton
Singleton là 1 trong 6 Design Pattern của nhóm Creational Design Pattern, đảm bảo chỉ duy nhất một thể hiện (instance) được tạo ra và nó sẽ cung cấp cho bạn một method để có thể truy xuất được thể hiện duy nhất đó mọi lúc mọi nơi trong chương trình.
Một lớp có thể được tạo singleton bằng cách đặt constructor của nó là private.
8, So sánh ArrayList và Vector trong Java
ArrayList | Vector |
---|---|
ArrayList không được đồng bộ hóa | Vector được đồng bộ hóa |
ArrayList nhanh hơn do không phải đồng bộ hóa | Vector chậm hơn nhưng với luồng an toàn |
Nếu một phần tử được chèn vào ArrayList, nó sẽ tăng kích thước Array lên 50% | Vector mặc định tăng gấp đôi kích thước mảng |
ArrayList không xác định kích thước gia tăng | vector xác định kích thước gia tăng |
ArrayList chỉ sử dụng Iterator để duyệt | Vector sử dụng cả Enumeration và Iterator để duyệt |
9, Khác biệt giữa equals()
và ==
trong Java
equals()
là phương thức được định nghĩa trong classObject
, được sử dụng giá trị của hai đối tượng==
là một toán tử được sử dụng để so sánh kiểu nguyên thuy hoặc địa chỉ của hai đối tượng
package vn.techmaster;
public class Main {
public static void main(String[] args) {
String str1 = "Java";
String str2 = new String("Java");
System.out.println(str1.equals(str2));
System.out.println(str1 == str2);
}
}
Kết quả trả về:
true
false
10, Khác biệt giữa bộ nhớ Stack và Heap
Đặc điểm | Stack | Heap |
---|---|---|
Memory | Bộ nhớ stack chỉ được sử dụng bởi một luồng thực thi | Bộ nhớ Heap được sử dụng bởi tất cả các phần của ứng dụng |
Access | các luồng khác không thể truy cập vào bộ nhớ stack | các đối tượng được lưu trữ trong heap có thể được truy cập ở mọi nơi |
Memory Management | Sử dụng LIFO để giải phóng bộ nhớ | Phải giải phóng thông qua lập trình viên |
Lifetime | Tồn tại cho đến khi kết thúc quá trình thực thi luồng | Tồn tại từ khi bắt đầu cho đến khi kết thúc quá trình thực thi ứng dụng |
Usage | Stack chỉ chứa các biến local primitive và tham chiếu đến các đối tượng trong heap space | Bất cứ khi nào đối tượng được tạo, nó luôn được lưu trữ trong heap space |
11, Package trong Java là gì? Liệt kê các các ưu điểm của các package
Package trong Java tương tự như thư mục, nó tập hợp các class, interface liên quan với nhau. Bằng cách sử dụng package, developers có thể dễ dàng tái sử dụng nó. Ngoài ra, package còn có thể được import bởi các class khác và sử dụng lại.
Một số cưu điểm của package:
- Tránh đụng độ tên
- Cung cấp khả năng truy cập dễ dàng
- Có thể chứa các lớp ẩn, không hiển thị đối với lớp bên ngoài và chỉ sử dụng trong package
- Tạo cấu trúc phân cấp thích hợp giúp xác định vị trí các lớp liên quan dễ dàng hơn.
12, Tại sao không sử dụng con trỏ trong Java
Java không sử dụng con trổ vì chúng không an toàn và làm tăng độ phức tạp của chương trình. Hơn nữa, vì JVM chịu trách nhiệm cấp phát bộ nhớ ngầm, do đó để tránh người dùng truy cập trực tiếp vào bộ nhớ, con trở không được khuyến khích sử dụng trong Java
13, Trình biên dịch JIT trong Java
JIT là viết tắt của từ Just-In-Time. Nó là một chương trình giúp chuyển đổi mã bytecode của Java thành cách lệnh được gửi trực tiếp đến bộ xử lý. Thông thường, trình biên dịch JIT được kích hoạt bất cứ khi nào một phương thức được gọi. Sau đó, trình biên dịch mã bytecode của phương thức được gọi thành mã máy, biên dịch nó đúng lúc để thực thi. Khi phương thức đã được biên dịch, JVM triệu hồi mã đã biên dịch của phương thức đó trực tiếp thay vì diễn giải nó. Đây là lý do vì sao nó thường chịu trách nhiệm cho việc tối ưu hóa hiệu suất của các ứng dụng Java lúc runtime.
14, Các loại phạm vi truy cập trong Java
Trong Java, phạm vi truy cập là các từ khóa đặc biệt được sử dụng để hạn chế quyền truy cập của một lớp, constructor, thành viên dữ liệu và phương thức trong một lớp khác. Có 4 loại phạm vi truy cập là: public
, default
, protected
và private
- Đối tượng sử dụng:
- Phạm vi truy cập
15, Định nghĩa một class
Một class trong Java giống như nột bản thỉết kế bao gồm các dữ liệu của bạn. Một class chứa các biến và các phương thức để mô tả hành vi của một đối tượng. Cú pháp tạo một class:
<Phạm vi truy cập> class <Tên class>{
//member variables
//methods
}
16, Đối tượng trong Java là gì, làm thế nào để tạo ra nó?
Đối tượng là một thực thể trong thế giới thực, nó có trạng thái, hành vi. Một đối tượng có 3 đặc điểm:
- Danh tính
- Trạng thái
- Hành vi
Đối tượng được tạo bằng cách sử dụng từ khóa new
:
<Tên class> <Tên biến tham chiếu> = new <Tên class>();
17, Lập trình hướng đối tượng là gì?
Lập trình hướng đối tượng (OOP - Object Oriented Programming) là một phương pháp lập trình trong đó các chương trình được tổ chức xoay quanh các đối tượng hơn là logic và các chức năng.
Khi viết chương trình theo phương pháp OOP ta cần phải trả lời cho các câu hỏi:
- Chương trình liên quan đến các đối tượng nào?
- Một đối tượng cần có những dữ liệu và thao tác nào?
- Các đối tượng quan hệ với nhau như thế nào trong một chương trình?
18, Các nguyên lý cơ bản của lập trình hướng đối tượng
Có 4 nguyên lý cơ bản trong OOP là:
- Tính kế thừa
- Tính đóng gói
- Tính trừu tượng
- Tính đa hình
19, Khác biệt giữa biến local và biên instance
Trong Java, một biến cục bộ thường được sử dụng bên trong một phương thức, constructor hoặc một khối và chỉ có phạm vi cục bộ.
Biên instance trong Java là một biến được liên kết với chính đối tượng của nó. các biến này được khia báo bên trong một class, nhưng bên ngoài phương thức. Mọi đối tượng của lớp đó sẽ tạo ra bản sao của biến đó trong khi sử dụng nó. Do đó, bất kỳ thay đổi nào được thực hiện đối với biến sẽ không phản ánh trong bất kỳ trường hợp khác của lớp đó và sẽ chỉ bị ràng buộc với trường hợp cụ thể đó
20, Khác biệt giữa constructor và phương thức trong Java
Methods | Constructor |
---|---|
Sử dụng để thể hiện hành vi của một đối tượng | Sử dụng để khởi tạo trạng thái của một đối tượng |
cần phải có kiểu dữ liệu trả về | Không cần kiểu trả về |
Cần được gọi một cách rõ ràng | Được gọi ngay khi đối tượng được khởi tạo (Gọi ngầm) |
Không có phương thức mặc định nào được cung cấp bởi trình biên dịch | Constructor mặc định được cung cấp bởi trình biên dịch nếu lớp không có |
Tên phương thức có thể giống hoặc không giống với tên class | Tên constructor luôn có cùng tên với tên class |
21, Từ khóa final trong Java
final
được sử dụng để hạn chế thao tác người dùng. Nó có thể được sử dụng trong nhiều ngữ cảnh khác nhau như:
- Biến final: Để tạo biến có giá trị không đổi (Hằng số)
- Phương thức final: Ngăn chặn ghi đè phương thức
- Lớp final: Ngăn chặn sự kế thừa
22, Sự khác biệt giữa từ khóa break
và continue
break | continue |
---|---|
Có thể sử dụng trong switch và vòng lặp (for, while, do while) | Chỉ có thể sử dụng trong vòng lặp |
Làm cho câu kệnh chuyển đổi hoặc kết thúc vòng lặp tại thời điểm nó được thực thi | Nó không kết thúc vòng lặp nhưng làm cho vòng lặp chuyển sang lần lặp tiếp theo |
Ví dụ về break
:
for (int i = 0; i < 5; i++)
{
if (i == 3) break;
System.out.println(i);
}
Ví dụ về continue
:
for (int i = 0; i < 5; i++)
{
if (i == 2) continue;
System.out.println(i);
}
23, Sự khác biệt giữa mảng vả ArrayList
Array | ArrayList |
---|---|
Không thể chứa các giá trị của các kiểu dữ liêu khác nhau | Có thể chứa các giá trị của các kiểu dữ liệu khác nhau |
Kích thước phải xác định tại thời điểm khai báo | Kích thước có thể thay đổi |
Cần chỉ định chỉ mục để thêm phần tử | Không cần chỉ định chỉ mục khi thêm phần tử |
Mảng không phải là type parameter | ArrayList là type parameter |
Mảng có thể chứa các kiểu dữ liệu nguyên thủy cũng như các đối tượng | AratList có thể chứa đối tượng, nhưng không hỗ trợ kiểu dữ liệu nguyên nguyên thủy |
24, 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 lớp cha gần nhất. Có thể sử dụng super
để:
- Tham chiếu đến biến instance của lớp cha
- Gọi các phương thức của lớp cha
- Gọi các constructor của lớp cha
25, Từ khóa static
trong Java
Từ khóa static
được sử dụng để quản lý bộ nhớ. Chúng ta có thể áp dụng từ khóa với biến, phương thức, các khối hoặc các lớp lồng nhau. Từ khóa static thuộc về lớp chứ không thuộc về instance của lớp
- Biến static: một biến được khai báo là static biến đó được gọi là biến static hoặc biến static. Biến này được sử dụng để tham chiếu các thuộc tính chung của tất cả các đối tượng
- Phương thức static: một phương thức được khai báo là static thì phương thức đó được gọi là phương thức static. Nó là phương thức thuộc lớp chứ không thuộc đối tượng của lớp và có thể truy cập mà không cần tạo đối tượng. Ta có thể sử dụng phương thức static để truy cập biến static và thay đổi giá trị của biến đó.
- Khối static: Được sử dụng để khởi tạo thành viên dữ liệu static. Nó được thực thi trước phương thức main tại lúc tải lớp
26, Khác biệt giữa String, StringBuilder và StringBuffer
Factor | String | StringBuilder | StringBuffer |
---|---|---|---|
Storage Area | Pool | Bộ nhớ Heap | Bộ nhớ Heap |
Mutability | Bất biến | Có thể thay đổi | Có thể thay đổi |
Thread safety | Có | Không | Có |
Performance | Nhanh | Hiệu quả hơn | Kém hiệu quả |
27, Collection trong Java là gì, liệt kê các interface và class của nó.
Trong java, Collection là một framework hoạt động như một kiến trúc lưu trữ và thao tác một nhóm đối tượng. Sử dụng collection, bạn có thể thực hiện các thao tác khác nhau như: thêm, sửa, xóa các phần tử trong collection.
Collection framework bao gồm:
Tham gia ngay lớp Lộ trình Java FullStack cho người mới bắt đầu
Chi tiết khoá học : Tại đây
🌞👉Đặc biệt, GIẢM HỌC PHÍ 10% cho học viên Nữ/Bộ đội xuất ngũ (đã hoàn thành và có giấy xác nhận). GIẢM NGAY 1 TRIỆU cho nhóm đăng ký 2 người trở lên.
Bình luận
Rất hữu ích.
rất tuyệt vời