100+ Câu hỏi phỏng vấn Java (Phần 1) - Basic Java

23 tháng 11, 2021 - 17594 lượt xem

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ì?

JDKJREJVM
Java Development KitJava Runtime EnvironmentJava 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 JavaJRE đề cập đến môi trường runtime trong đó Java bytecode có thể được thực thiLà 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 JRENó 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ới static thì trình biên dịch sẽ ném ra một lỗi vì hàm main() đượ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ức main()

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

ArrayListVector
ArrayList không được đồng bộ hóaVector được đồng bộ hóa
ArrayList nhanh hơn do không phải đồng bộ hóaVector 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ăngvector xác định kích thước gia tăng
ArrayList chỉ sử dụng Iterator để duyệtVector sử dụng cả Enumeration và Iterator để duyệt

9, Khác biệt giữa equals()== trong Java

  • equals() là phương thức được định nghĩa trong class Object, đượ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ểmStackHeap
MemoryBộ nhớ stack chỉ được sử dụng bởi một luồng thực thiBộ nhớ Heap được sử dụng bởi tất cả các phần của ứng dụng
Accesscác luồng khác không thể truy cập vào bộ nhớ stackcác đối tượng được lưu trữ trong heap có thể được truy cập ở mọi nơi
Memory ManagementSử dụng LIFO để giải phóng bộ nhớPhải giải phóng thông qua lập trình viên
LifetimeTồn tại cho đến khi kết thúc quá trình thực thi luồngTồn tại từ khi bắt đầu cho đến khi kết thúc quá trình thực thi ứng dụng
UsageStack chỉ chứa các biến local primitive và tham chiếu đến các đối tượng trong heap spaceBấ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, protectedprivate

  • Đối tượng sử dụng:

image

  • Phạm vi truy cập

image

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

MethodsConstructor
Sử dụng để thể hiện hành vi của một đối tượngSử 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ịchConstructor 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 classTê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 breakcontinue

breakcontinue
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 thiNó 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

ArrayArrayList
Không thể chứa các giá trị của các kiểu dữ liêu khác nhauCó 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áoKí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 parameterArrayList 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ượngAratList 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

FactorStringStringBuilderStringBuffer
Storage AreaPoolBộ nhớ HeapBộ nhớ Heap
MutabilityBất biếnCó thể thay đổiCó thể thay đổi
Thread safetyKhông
PerformanceNhanhHiệu quả hơnKé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:

image

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

avatar
Trịnh Minh Cường 2021-11-24 10:00:37.15073 +0000 UTC

Rất hữu ích.

Avatar
avatar
Trần Đăng Khoa 2022-09-19 07:43:31.986247 +0000 UTC

rất tuyệt vời 

Avatar
* Vui lòng trước khi bình luận.
Ảnh đại diện
  +4 Thích
+4