Top 50 câu hỏi và trả lời phỏng vấn Java ( Phần 1)

Đăng bởi: Admin | Lượt xem: 3814 | Chuyên mục: Java

Hướng dẫn này bao gồm các chủ đề JAVA như định nghĩa Java cơ bản, khái niệm OOP,Access specifiers, Collections, Exceptions, Threads, Serialization,...với các ví dụ để bạn sẵn sàng đối mặt với bất kỳ cuộc phỏng vấn JAVA nào một cách tự tin.


Trong hướng dẫn này, chúng tôi đã trình bày gần 50+ câu hỏi phỏng vấn Java cốt lõi quan trọng cho những người mới và ứng viên có kinh nghiệm.

Bài đăng này trên Câu hỏi phỏng vấn JAVA được chuẩn bị để giúp bạn hiểu các khái niệm cơ bản về lập trình Java cho mục đích phỏng vấn. Tất cả các khái niệm JAVA quan trọng được giải thích ở đây với các ví dụ để bạn dễ hiểu.

Câu hỏi phỏng vấn Java phổ biến nhất

Dưới đây là danh sách đầy đủ các câu hỏi phỏng vấn lập trình Java cơ bản và nâng cao quan trọng nhất và thường được hỏi với các câu trả lời chi tiết.

Q # 1) JAVA là gì?

Trả lời: Java là ngôn ngữ lập trình cấp cao và không phụ thuộc vào nền tảng.

Java là một tập hợp các đối tượng. Nó được phát triển bởi Sun microsystems. Có rất nhiều ứng dụng, trang web và trò chơi được phát triển bằng Java.

Q # 2) Các tính năng trong JAVA là gì?

Trả lời: Các tính năng của Java như sau:

  • Tính chất OOP:
    • Kế thừa ( Inheritance)
    • Đóng gói (Encapsulation)
    • Đa hình (Polymorphism)
    • Trừu tượng (Abtraction)
  • Nền tảng độc lập: Một chương trình duy nhất hoạt động trên các nền tảng khác nhau mà không có bất kỳ sửa đổi nào.
  • Hiệu suất cao: JIT (trình biên dịch Just In Time) cho phép hiệu năng cao trong Java. JIT chuyển đổi mã byte thành ngôn ngữ máy và sau đó JVM bắt đầu thực thi.
  • Đa luồng: Một luồng thực thi được gọi là một luồng . JVM tạo ra một luồng được gọi là luồng chính. Người dùng có thể tạo nhiều luồng bằng cách mở rộng lớp luồng hoặc bằng cách thực hiện giao diện Runnable.

Q # 3) Làm thế nào để Java kích hoạt hiệu năng cao?

Trả lời: Java sử dụng trình biên dịch Just In Time để cho phép hiệu năng cao. Nó được sử dụng để chuyển đổi các hướng dẫn thành mã byte.

Q # 4) Tên của Java IDE?

Trả lời: Eclipse và NetBeans là IDE của JAVA.

Q # 5) Ý của Contructor là gì?

Trả lời: Contructor có thể được giải thích chi tiết với các điểm được liệt kê:

  • Khi một đối tượng mới được tạo trong một chương trình, hàm tạo( Contructor) sẽ được gọi tương ứng với lớp.
  • Hàm tạo là một phương thức có cùng tên với tên lớp.
  • Nếu người dùng không tạo hàm tạo thì ngầm định hàm tạo sẽ được tạo.
  • Các constructor có thể bị quá tải.
  • Nếu người dùng tạo một hàm tạo với một tham số thì nên tạo một hàm tạo khác một cách rõ ràng mà không cần một tham số.

Q # 6) Biến local và biến Instance có nghĩa là gì?

Câu trả lời:

Các biến local được định nghĩa trong phương thức và phạm vi của các biến tồn tại bên trong chính phương thức đó.

Biến instance được định nghĩa bên trong lớp và bên ngoài phương thức và phạm vi của các biến tồn tại trong toàn lớp.

Q # 7) Class là gì?

Trả lời: Tất cả các mã Java được định nghĩa trong một Lớp( Class). Nó có các biến và phương thức.

Các biến là các thuộc tính xác định trạng thái của một lớp.

Phương thức chứa một tập hợp các câu lệnh (hoặc) để đáp ứng yêu cầu cụ thể.

Thí dụ:

public class Addition{ //Class name declaration
   int a = 5; //Variable declaration
   int b= 5;
   public void add(){ //Method declaration
      int c = a+b;
   }
}

Q # 8) Object là gì?

Trả lời: Một thể hiện của một lớp được gọi là một đối tượng( Object). Đối tượng có trạng thái và hành vi.

Bất cứ khi nào JVM đọc từ khóa của  "new ()" thì nó sẽ tạo ra một đối tượng của Class đó

Thí dụ:

​
public class Addition{

    public static void main(String[] args){

        Addion add = new Addition();//Object creation
 
    }

}

​


Q # 9) Các tính chất OOP là gì?

Trả lời: Các tính chất OOP bao gồm:

  • Kế thừa (Inheritance)
  • Đóng gói (Encapsulation)
  • Đa hình (Polymorphism)
  • Trừu tượng (Abtraction)

Q # 10) Kế thừa (Inheritance) là gì?

Trả lời: Kế thừa có nghĩa là một lớp có thể mở rộng sang lớp khác. Vì vậy, các mã có thể được sử dụng lại từ lớp này sang lớp khác. Lớp hiện có được gọi là lớp cha trong khi lớp dẫn xuất được gọi là lớp con.

Thí dụ:

Super class:
public class Manupulation(){
}
Sub class:
public class Addition extends Manipulation(){
}

Kế thừa chỉ áp dụng cho các thành viên public và protected. Thành viên private không thể được thừa kế.

Q # 11) Đóng gói ( Encapsulation) là gì?

Trả lời: Mục đích của Đóng gói:

  • Bảo vệ code từ bên ngoài.
  • Bảo trì code.

Thí dụ:

Chúng tôi đang khai báo 'a' là một biến số nguyên và nó không nên âm.

Nếu ai đó thay đổi biến chính xác là tên a = -5 thì đó trở nên tồi tệ

Để khắc phục vấn đề chúng ta cần làm theo các bước dưới đây:

  • Chúng ta có thể thực hiện biến là riêng tư hoặc được bảo vệ.
  • Sử dụng các phương thức truy cập public, chẳng hạn như đặt <property> và get <property>.

Vì vậy, mã trên có thể được sửa đổi là:

public class Addition(){

    private int a = 5; //Here the variable is marked as private

}

Đoạn mã dưới đây cho thấy getter và setter.

Điều kiện có thể được cung cấp trong khi thiết lập biến.

​
get A(){

}

set A(int a){

    if(a>0){// Here condition is applied

    .........

    }

} 

​

Để đóng gói, chúng ta cần tạo tất cả các biến đối tượng là riêng tư và tạo setter và getter cho các biến đó. Khi đó nó sẽ buộc người khác gọi các setters thay vì truy cập trực tiếp vào dữ liệu.

Câu hỏi số 12) Đa hình (Polymorphism) là gì?

Trả lời: Đa hình có nghĩa là nhiều dạng.

Một đối tượng có thể tham chiếu đến lớp cha hoặc lớp con tùy thuộc vào loại tham chiếu được gọi là đa hình.

Thí dụ:

​
Public class Manipulation(){ //Super class

    public void add(){

    }

}

public class Addition extends Manipulation(){ // Sub class

    public void add(){

}

    public static void main(String args[]){

        Manipulation addition = new Addition();//Manipulation is reference type and Addition is 
        reference type

        addition.add();

    }

}

​

Sử dụng Manipulation tham chiếu , chúng ta có thể gọi phương thức Addition lớp Add (). Khả năng này được gọi là đa hình. Đa hình được áp dụng để overriding và không dùng cho overloading.

Q # 13) Phương pháp overiding( ghi đè) có nghĩa là gì?

Trả lời: Ghi đè phương thức xảy ra nếu phương thức lớp con thỏa mãn các điều kiện dưới đây với phương thức lớp cha: 

  • Tên phương thức phải giống nhau
  • Đối số nên giống nhau
  • Kiểu trả về cũng phải giống nhau

Lợi ích chính của việc ghi đè là Lớp con có thể cung cấp một số thông tin cụ thể về loại lớp con đó so với lớp cha.

Thí dụ:

​
public class Manipulation{ //Super class
    public void add(String name){ //String parameter
    ………………
    }
}
 
Public class Addition extends Manipulation(){
    Public void add(){//No Parameter
    ………..
    }
    Public void add(int a){ //integer parameter
 
    }
    Public static void main(String args[]){
        Addition addition = new Addition();
        addition.add();
    }
}

​

Phương thức addition.add () gọi phương thức add () trong lớp con chứ không phải lớp cha. Vì vậy, nó ghi đè phương thức lớp cha và được gọi là Phương thức ghi đè.

Q # 14) Overloading( nạp chồng) có nghĩa là gì?

Trả lời: Nạp chồng phương thức xảy ra cho các lớp khác nhau hoặc trong cùng một lớp.

Đối với nạp chồng phương thức, phương thức lớp con phải thỏa mãn các điều kiện dưới đây với phương thức lớp cha (hoặc) trong cùng một lớp:

  • Tên phương thức giống nhau
  • Loại đối số khác nhau
  • Có thể có kiểu trả về khác nhau

Thí dụ:

public class Manipulation{ //Super class
    public void add(String name){ //String parameter
        ………………
    }
}
 
Public class Addition extends Manipulation(){
    Public void add(){//No Parameter
    ………..
}
    Public void add(int a){ //integer parameter
 
}
    Public static void main(String args[]){
        Addition addition = new Addition();
        addition.add();
    }
}

Ở đây, phương thức add () có các tham số khác nhau trong lớp Addition được overloading trong cùng một lớp cũng như lớp cha.

Lưu ý: Đa hình không được áp dụng cho phương thức overloading.

Q # 15) Interface là gì?

Trả lời: Không thể đa kế thừa trong java. Để khắc phục vấn đề này Khái niệm interface được giới thiệu.

Interface là một mẫu chỉ có khai báo phương thức và không thực hiện phương thức.

Thí dụ:

Public abstract interface IManupulation{ //Interface declaration
    Public abstract void add();//method declaration
    public abstract void subtract();
}
  • Tất cả các phương thức trong interface là public abstract void. .
  • Tất cả các biến trong interface là public static final.
  • Các lớp có thể implement interface và không extends.
  • Lớp implement interface sẽ cung cấp một triển khai cho tất cả các phương thức được khai báo trong interface.
public class Manupulation implements IManupulation{ //Manupulation class uses the interface
    Public void add(){
    ……………
    }
    Public void subtract(){
    …………….
    }
}

Q # 16) Abstract Class ( Lớp trừu tượng) là gì?

Trả lời: Chúng ta có thể tạo lớp Trừu tượng bằng cách sử dụng từ khóa "Abstract"  trước tên lớp. Một lớp trừu tượng có thể có cả các phương thức Abstract và các phương thức Non-Abstract .

Phương pháp trừu tượng (Abstract Method):

Phương thức chỉ có khai báo và không triển khai được gọi là phương thức trừu tượng và nó có từ khóa "Abstract" . Phương thức kết thúc với một dấu chấm phẩy.

Thí dụ:

public abstract class Manupulation{
    public abstract void add();//Abstract method declaration
    Public void subtract(){
    }
}
  • Một lớp trừu tượng cũng có thể có một phương thức không trừu tượng.
  • Lớp con cụ thể mở rộng lớp Trừu tượng sẽ cung cấp việc triển khai cho các phương thức trừu tượng.

Q # 17) Sự khác biệt giữa ArrayList và Array.

Trả lời: Có thể hiểu sự khác biệt giữa Mảng và Danh sách Mảng từ bảng dưới đây:

                        Array                                      

 

                 ArrayList

Kích thước mảng được đưa ra tại thời điểm khai báo mảng.
 

String[] name = new String[2]

 

Kích thước có thể không được yêu cầu. Nó thay đổi kích thước một cách linh hoạt.

ArrayList name = new ArrayList

Để đặt một đối tượng vào mảng, chúng ta cần chỉ định chỉ mục.
name[1] = “book”
 

 

Không có chỉ số cần thiết.

name.add(“book”)

Mảng không được tham số hóa    

 ArrayList trong java 5.0 được tham số hóa.

                      

Q # 18) Sự khác biệt giữa String, StringBuilder và String Buffer.

Câu trả lời:

String: Các biến String được lưu trữ trong một "constant string pool" ( Chuỗi hằng số liên tục). Một khi tham chiếu string thay đổi, giá trị cũ tồn tại trong nhóm chuỗi hằng số liên tục thì nó không thể bị xóa.

Thí dụ:

Tên chuỗi = cuốn sách khác;

constant string pool

Nhóm chuỗi liên tục.

Nếu giá trị tên đã thay đổi từ sách book thành pen.

constant string pool

Nhóm chuỗi không đổi

Sau đó, giá trị cũ giữ lại trong constant string pool

String Bufer:

  • Ở đây các giá trị string được lưu trữ trong một ngăn xếp. Nếu các giá trị được thay đổi thì giá trị mới sẽ thay thế giá trị cũ.
  • String Buffer được đồng bộ hóa là thread- safe.
  • Hiệu suất chậm hơn StringBuilder.

Thí dụ:

StringBuffer name =”book”;

Cây rơm

Khi giá trị tên đã được thay đổi thành pen thì book đã bị xóa trong ngăn xếp.

Chồng1

StringBuilder:

Điều này giống như StringBuffer ngoại trừ StringBulder không phải thread-safe vì nó  không được đồng bộ hóa. Vì vậy, rõ ràng hiệu suất là nhanh chóng

Còn tiếp!!!

vncoder logo

Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!



Khóa học liên quan

Khóa học: Java

Tổng hợp Bài tập Java có lời giải
Số bài học:
Lượt xem: 13887
Đăng bởi: Admin
Chuyên mục: Java

Lập trình Java cơ bản
Số bài học:
Lượt xem: 31376
Đăng bởi: Admin
Chuyên mục: Java