CodeGym /Blog Java /Ngẫu nhiên /21 câu hỏi phỏng vấn Java hàng đầu

21 câu hỏi phỏng vấn Java hàng đầu

Xuất bản trong nhóm
Có vô số câu hỏi phỏng vấn Java và chúng tôi không thể tập hợp tất cả chúng trong một bài viết. Tuy nhiên, ở đây bạn có thể tìm thấy một số câu hỏi phỏng vấn Java rất phổ biến, theo các nhà quản lý nhân sự của các công ty CNTT. Top 21 câu hỏi phỏng vấn Java - 1
  1. “Tháo rời” public static void main(String args[]).

    Một trong những câu hỏi phỏng vấn java phổ biến dành cho người mới bắt đầu và rất dễ.

    • publiclà một công cụ sửa đổi truy cập. Chúng tôi sử dụng nó để chỉ định quyền truy cập vào phương pháp này. Công cụ sửa đổi ở đây là “công khai”, vì vậy bất kỳ Lớp nào cũng có quyền truy cập vào phương thức này.

    • static. Từ khóa Java này có nghĩa là chúng ta sử dụng phương thức này mà không cần tạo Đối tượng mới của Lớp.

    • Voidlà kiểu trả về của phương thức. Điều đó có nghĩa là phương thức không trả về bất kỳ giá trị nào.

    • mainlà tên của phương thức. JVM “biết” nó như một điểm vào của một ứng dụng (nó phải có một chữ ký cụ thể). Mainlà một phương pháp mà thực thi chính xảy ra.

    • String args[]. Đây là tham số được truyền cho phương thức chính. Ở đây chúng ta có các đối số kiểu String mà ứng dụng Java của bạn chấp nhận khi bạn chạy nó. Bạn có thể gõ chúng trên thiết bị đầu cuối.

  2. Đâu là sự khác biệt giữa equals()==?

    Đầu tiên, “ ==” là một toán tử trong khi đó equals()là một phương thức. Chúng tôi sử dụng ==toán tử để so sánh tham chiếu (hoặc so sánh địa chỉ) và equals()phương pháp so sánh nội dung. Điều đó có nghĩa là ==kiểm tra xem cả hai đối tượng có trỏ đến cùng một vị trí bộ nhớ hay không trong khi equals()so sánh các giá trị trong các đối tượng.

  3. Chúng ta có thể thực hiện một chương trình mà không có main()phương thức không?

    Nhiều câu hỏi phỏng vấn java cơ bản thực sự dễ dàng. Giống cái này. Vì vậy, câu trả lời ngắn gọn là: có, chúng tôi có thể. Ví dụ, chúng ta có thể làm điều đó bằng cách sử dụng khối tĩnh.

    Bạn có thể sử dụng khối tĩnh để khởi tạo thành viên dữ liệu tĩnh. Nó được thực thi trước mainphương thức, tại thời điểm tải lớp.

    
    class Example{  
     Static{
    System.out.println("static block is invoked");
    }  
      public static void main(String args[]){  
       System.out.println("Now main method");  
      }  
    }
    

    Đầu ra là:

    
    static block is invoked
    Now main method
    
  4. Điều gì về sự vắng mặt hoàn toàn của phương thức chính? Nếu bạn cố gắng chạy một lớp thông thường mà không có phương thức chính, bạn sẽ gặp lỗi tiếp theo: Không tìm thấy phương thức chính trong Kiểm tra lớp, vui lòng xác định phương thức chính là: public static void main (String [] args) hoặc ứng dụng JavaFX lớp phải mở rộng javafx.application.Application. Bản thân lỗi nói rằng nếu đây là ứng dụng JavaFX và lớp được kế thừa từ javafx.application.Application thì có thể xảy ra.
  5. Đối tượng là gì immutable? Bạn có thể tạo immutableđối tượng không?

    Bạn không thể sửa đổi các đối tượng của một immutablelớp sau khi chúng được tạo. Vì vậy, một khi bạn tạo chúng, bạn không thể thay đổi chúng. Nếu bạn cố sửa đổi Immutableđối tượng, bạn sẽ nhận được một đối tượng mới (bản sao) và thay đổi bản sao này trong khi tạo.

    Một ví dụ điển hình là String, nó có immutabletrong Java. Điều đó có nghĩa là bạn không thể thay đổi chính đối tượng, nhưng bạn có thể thay đổi tham chiếu đến đối tượng.

  6. Có bao nhiêu đối tượng được tạo trong đoạn mã sau?

    Một trong những câu hỏi phỏng vấn kỹ thuật java thay thế #4.

    
    String s1="Hello";  
    String s2="Hello";  
    String s3="Hello";  
    

    Câu trả lời là “chỉ một” bởi vì Java có một String Pool. Khi chúng ta tạo một đối tượng Chuỗi bằng toán tử new(), nó sẽ tạo một đối tượng mới trong bộ nhớ heap. Nếu chúng ta sử dụng cú pháp ký tự Chuỗi, như trong ví dụ của chúng ta, thì nó có thể trả về một đối tượng hiện có từ nhóm Chuỗi, nếu nó đã tồn tại.

  7. Có bao nhiêu đối tượng được tạo trong đoạn mã sau?

    
    String s = new String("Hello");
    

    Có 2 đối tượng. Một cái nằm trong nhóm hằng số chuỗi (nếu chưa có) và cái còn lại nằm trong đống.

  8. StringSự khác biệt giữa StringBuilderStringBuffercác lớp trong Java là gì ?

    Có một trong những người dẫn đầu trong các câu hỏi phỏng vấn java hàng đầu.

    Trước hết Stringlà một lớp Immutable. Điều đó có nghĩa là bạn không thể sửa đổi nội dung của nó sau khi được tạo. Trong khi StringBufferStringBuilderlà các lớp có thể thay đổi, vì vậy bạn có thể thay đổi chúng sau này. Nếu chúng ta thay đổi nội dung của Stringđối tượng, nó sẽ tạo ra một chuỗi mới do đó nó không sửa đổi chuỗi gốc. Đó là lý do tại sao hiệu suất với StringBuffertốt hơn so với String.

    Sự khác biệt chính giữa các phương thức của StringBufferStringBuilderthat StringBufferđược đồng bộ hóa trong khi StringBuildercác phương thức của thì không.

  9. Có sự khác biệt nào trong Stringđó đã được tạo bằng chữ và với new()toán tử không?

    Có. Nếu chúng ta tạo một Chuỗi bằng new()toán tử, nó sẽ xuất hiện trong heap và trong nhóm chuỗi (nếu chưa có). Nếu bạn tạo một Stringbằng cách sử dụng một chữ, nó sẽ được tạo trong nhóm chuỗi (nếu chưa có). Nhóm chuỗi là một vùng lưu trữ trong heap, nơi lưu trữ các chuỗi ký tự.

  10. Bạn có thể ghi đè privatehoặc staticphương thức trong Java không?

    Một trong những câu hỏi phỏng vấn khó về java dành cho tân binh. Bạn thực sự không thể ghi đè privatehoặc staticphương thức trong Java.

    Bạn không thể ghi đè privatecác phương thức vì phạm vi của bộ xác định quyền truy cập riêng tư chỉ nằm trong lớp. Khi bạn định ghi đè lên một thứ gì đó, chúng ta nên có lớp cha và lớp con. Nếu phương thức của lớp cha là private, thì lớp con không thể sử dụng nó và các phương thức trong lớp con sẽ được coi là phương thức mới (không bị ghi đè).

    Staticcác phương thức cũng không thể bị ghi đè, bởi vì staticcác phương thức là một phần của chính Lớp và không phải là một phần của bất kỳ đối tượng nào của lớp. Chắc chắn bạn có thể khai báo cùng một staticphương thức với cùng một chữ ký trong các lớp con, nhưng một lần nữa, chúng sẽ được coi là các phương thức mới.

  11. Sự khác biệt giữa Abstract ClassInterface

    Một trong những câu hỏi phỏng vấn nhà phát triển java phổ biến dựa trên nguyên tắc OOP. Trước hết, trong Java interfaceđịnh nghĩa một hành vi và abstract classtạo hệ thống phân cấp.

    lớp trừu tượng giao diện
    Có thể có một thân phương thức (các phương thức không trừu tượng) trong lớp trừu tượng Giao diện chỉ có thể có các phương thức trừu tượng. Trong Java 8 hoặc mới hơn, có thể xác định các phương thức mặc định và triển khai chúng trực tiếp trong giao diện. Ngoài ra, Giao diện trong Java 8 có thể có các phương thức tĩnh.
    Các biến thể hiện có thể ở trong lớp trừu tượng Một giao diện không thể có các biến thể hiện.
    Các nhà xây dựng được phép Giao diện không thể có bất kỳ hàm tạo nào.
    Các phương thức tĩnh được cho phép Phương pháp tĩnh không được phép
    Lớp chỉ có thể có một phụ huynh trừu tượng Một giao diện có thể thực hiện các lớp khác nhau
    Lớp trừu tượng có thể cung cấp việc triển khai giao diện. Giao diện không thể cung cấp việc triển khai lớp trừu tượng.
    Một lớp trừu tượng được phép mở rộng lớp Java khác và triển khai nhiều giao diện Java. Một giao diện chỉ được phép mở rộng giao diện Java khác.
    Một lớp trừu tượng Java có thể có các thành viên lớp riêng tư và được bảo vệ Các thành viên của giao diện Java được mặc định là công khai
  12. Chúng ta có thể khai báo staticcác biến và phương thức trong một abstractlớp không?

    Có, có thể khai báo staticcác biến và phương thức trong abstractphương thức. Không có yêu cầu tạo đối tượng để truy cập ngữ cảnh tĩnh. Vì vậy, chúng tôi được phép truy cập ngữ cảnh tĩnh được khai báo bên trong abstractlớp bằng cách sử dụng tên của abstractlớp.

  13. Những loại vùng bộ nhớ nào được phân bổ bởi JVM?

    Khu vực lớp lưu trữ các cấu trúc perclass, ví dụ: nhóm hằng số thời gian chạy, các trường, dữ liệu phương thức và tất cả mã cho các phương thức.

    Heap là vùng dữ liệu thời gian chạy nơi bộ nhớ được cấp phát cho các đối tượng.

    Ngăn xếp lưu trữ khung. Nó chứa các biến cục bộ và một phần kết quả, đồng thời tham gia vào việc gọi và trả về phương thức. Mỗi luồng có một ngăn xếp JVM riêng, được tạo cùng lúc với luồng. Một khung mới được tạo mỗi khi một phương thức được gọi. Một khung bị hủy khi lời gọi phương thức của nó hoàn thành.

    Thanh ghi bộ đếm chương trình chứa địa chỉ của lệnh máy ảo Java hiện đang được thực thi.

    Ngăn xếp phương thức bản địa chứa tất cả các phương thức bản địa được sử dụng trong ứng dụng.

  14. Tại sao đa thừa kế không được phép trong java?

    Nó sẽ thực sự phức tạp. Hãy tưởng tượng ba lớp A, B, CCkế thừa AB. Bây giờ, Acác Blớp có cùng một phương thức và bạn gọi nó từ một đối tượng lớp con... Cái nào? A's hay B's? Ở đây chúng ta có sự mơ hồ.

    nếu bạn cố kế thừa hai lớp Java sẽ hiển thị lỗi thời gian biên dịch.

  15. Chúng ta có thể quá tải main()phương thức không?

    Chắc chắn rồi, chúng ta được phép có nhiều mainphương thức trong một chương trình Java bằng cách sử dụng nạp chồng phương thức. Hãy thử nó ra!

  16. Chúng ta có thể khai báo một hàm tạo là không final?

    Không. Hàm tạo không thể được khai báo là finalvì nó không thể được kế thừa. Vì vậy, thật vô nghĩa khi khai báo các hàm tạo là final. Tuy nhiên, nếu bạn cố gắng làm điều đó, trình biên dịch Java sẽ báo lỗi cho bạn.

  17. Chúng ta có thể khai báo một giao diện là final?

    Không, chúng ta không thể làm điều này. Một giao diện không thể finalvì giao diện phải được thực hiện bởi một số lớp theo định nghĩa của nó. Do đó, không có ý nghĩa gì khi tạo một giao diện final. Tuy nhiên, nếu bạn cố làm như vậy, trình biên dịch sẽ báo lỗi.

  18. Đâu là sự khác biệt giữa static bindingdynamic binding?

    Cái bindingcó thể được giải quyết tại thời điểm biên dịch bởi trình biên dịch được gọi statichoặc ràng buộc sớm. Bindingcủa tất cả các phương thức staticprivatephương finalthức được thực hiện tại thời điểm biên dịch.

    Trong Dynamic bindingtrình biên dịch không thể chọn một phương thức được gọi. Ghi đè là một ví dụ hoàn hảo về dynamic binding. Khi ghi đè cả lớp cha và lớp con đều có cùng một phương thức.

    
    Static Binding
    class Cat{  
     private void talk()
    {System.out.println("cat is mewing...");
    }  
      
     public static void main(String args[]){  
      Cat cat=new Cat();  
      cat.talk();  
     }  
    }  
    Dynamic Binding
    class Animal{  
     void talk(){
    System.out.println("animal is talking...");
    }  
    }  
      
    class Cat extends Animal{  
     void talk(){
    System.out.println("cat is talking...");
    }    
     public static void main(String args[]){  
      Animal animal=new Cat();  
      animal.talk();  
     }  
    }
    
  19. Làm cách nào để tạo một lớp chỉ đọc trong Java?

    Bạn có thể làm điều đó bằng cách đặt tất cả các trường của lớp ở chế độ riêng tư. Lớp chỉ đọc chỉ có các phương thức getter trả về thuộc tính riêng của lớp cho mainphương thức. Bạn không thể sửa đổi thuộc tính này, lý do là thiếu phương thức setters.

    
    public class HockeyPlayer{    
    private String team ="Maple leaf";    
    public String getTeam(){    
    return team;    
    }    
    }
    
  20. Làm cách nào để tạo một lớp chỉ ghi trong Java?

    Một lần nữa, bạn nên tạo tất cả các trường của lớp private. Bây giờ, lớp chỉ ghi của bạn chỉ nên có các phương thức setter và không có getters. Do đó, chúng ta không thể đọc các thuộc tính của lớp.

    
    public class HockeyPlayer{       
    private String team;    
    public void setTeam(String college){    
    this.team = team;    
    }    
    }    
    
  21. Mỗi trykhối phải được theo sau bởi một catchkhối, phải không?

    Không. Nó không phải là một điều cần thiết. Mỗi trykhối có thể không có catchkhối. Nó có thể được theo sau bởi một khối bắt hoặc một khối cuối cùng hoặc thậm chí không có chúng.

    
    public class Main{  
         public static void main(String []args){  
            try{  
                int variable = 1;   
                System.out.println(variable/0);  
            }  
            finally  
            {  
                System.out.println("the other part of the program...");  
            }  
         }  
    }
    

    Đầu ra:

    
    Exception in thread main java.lang.ArithmeticException:/ by zero
    the other part of the program...
    

    Một ví dụ nữa:
    
    class Main {
            public static void main(String[] args) throws IOException {
                try(InputStreamReader inputStreamReader = new InputStreamReader(System.in);
                    BufferedReader reader = new BufferedReader(inputStreamReader)){
                    System.out.println("test");
                }
            }
        }
    

    Đầu ra:

    
    test
    

    Tái bút: Trước khi các phương thức Java 8 trong giao diện chỉ có thể là trừu tượng. Trong Java 8 trở lên, có thể xác định các phương thức mặc định và triển khai chúng trực tiếp trong giao diện.
  22. Sự khác biệt giữa throwthrowstừ khóa là gì?

    Throwsđược sử dụng để khai báo một ngoại lệ, vì vậy nó hoạt động tương tự như try-catchkhối. Throwtừ khóa được sử dụng để đưa ra một ngoại lệ rõ ràng từ một phương thức hoặc bất kỳ khối mã nào khác.

    Throwđược theo sau bởi một thể hiện của Exceptionlớp và ném được theo sau bởi tên lớp ngoại lệ.

    Throwđược sử dụng trong phần thân phương thức để đưa ra một ngoại lệ. Throwsđược sử dụng trong chữ ký phương thức để khai báo các ngoại lệ có thể xảy ra trong các câu lệnh có trong phương thức.

    Được phép đưa ra một ngoại lệ tại một thời điểm nhưng bạn có thể xử lý nhiều ngoại lệ bằng cách khai báo chúng bằng cách sử dụng throwtừ khóa. Bạn có thể khai báo nhiều ngoại lệ, ví dụ: public void method()throws IOException, SQLException.

Ở đây chúng tôi chỉ có một số câu hỏi và câu trả lời phỏng vấn java. Bài báo này là bài đầu tiên trong loạt bài phỏng vấn. Phần tiếp theo (sắp ra mắt) là về các câu hỏi về cấu trúc dữ liệu.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION