100 câu hỏi phỏng vấn java hàng đầu năm 2022

Chắc hẳn ứng viên nào khi tham gia phỏng vấn đều rất lo lắng về các câu hỏi mà nhà tuyển dụng có thể đưa ra. Đặc biệt là trong các ngành đặc thù như Marketing, IT, khi mà các câu hỏi của nhà tuyển dụng có thể biến hóa khôn lường. Bài viết hôm nay TopCVsẽ đưa ra 20 câu hỏi phỏng vấn lập trình viên Java thường gặp, phân theo thứ tự từ cơ bản đến nâng cao giúp bạn dễ nắm bắt hơn. Nếu bạn đang có ý định ứng tuyển cho vị trí này thì đừng nên bỏ qua bài viết hữu ích này nhé.

Show

Câu hỏi phỏng vấn lập trình viên Java cơ bản

Ở phần này chúng tôi sẽ đưa ra các câu hỏi phỏng vấn lập trình viên Java cơ bản mà nhà tuyển dụng thường đưa ra. Các câu hỏi này sẽ giúp đánh giá nền tảng kiến thức về Java của ứng viên. Vì vậy bạn nên chuẩn bị câu trả lời chuẩn - chỉnh cho phần này để khẳng định nền tảng vững chắc của mình.

Câu 1: Java là gì?

Đây là câu hỏi lý thuyết khá đơn giản, ứng viên chỉ cần trả lời rõ ràng và thẳng thắn là được.

Java là ngôn ngữ lập trình cao cấp, hướng đối tượng và độc lập với nền tảng, là ngôn ngữ lập trình di động, hiệu suất cao. Nó được sáng tạo và phát triển bởi James Gosling vào năm 1991 với Slogan “Một lần viết, chạy ở bất cứ nơi nào”. 

Câu 2: Java có hoàn toàn hướng đối tượng không?

Tiếp tục là một câu hỏi phỏng vấn lập trình viên Java khá lý thuyết. Thực tế Java không hướng đối tượng hoàn toàn. Thay vào đó nó có sử dụng các loại dữ liệu như char, byte, float,.. đều không phải là đối tượng.

Câu 3: Tính năng nổi bật của Java là gì?

Ở câu hỏi này, ứng viên cần nếu được ít nhất 3 tính năng nổi bật của ngôn ngữ lập trình này. Đó là sự đơn giản, an toàn và tính di động.

Về sự đơn giản, có thể nói Java là ngôn ngữ lập trình dễ tiếp cận và học tập nhất so với các ngôn ngữ lập trình khác hiện nay. Vì vậy các lập trình viên, nhà phát triển ứng dụng đều có thể sử dụng nó để xây dựng phần mềm.

Java an toàn và bảo mật nhờ có trình thông dịch JVM. Sau khi được cài đặt chung với Java, JVM sẽ liên tục cập nhật chương trình bảo mật mới nhất từ Internet.

Cuối cùng, Java có tính di động bởi nó được sáng tạo dựa trên nguyên tắc “Viết một lần, chạy được ở bất cứ đâu”. Lập trình viên có thể sử dụng Java để code ở bất cứ máy tính nào theo ý thích.

Câu 4: Đặc điểm nổi bật của Java 8 là gì?

Đây là câu hỏi phỏng vấn lập trình viên Java kiểu so sánh. Loại câu hỏi này giúp nhà tuyển dụng đánh giá mức độ cập nhật thông tin và kiến thức của ứng viên. Với câu hỏi này bạn cần trả lời được một số tính năng mới của bản cập nhật Java 8 như sau:

  • Phần hỗ trợ ngôn ngữ cho Atring
  • Cải tiến tính năng cung cấp API Ngày/ Giờ
  • Phát triển và cập nhật hệ thống JVM

Nhìn chung, bản cập nhật Java 8 mang lại sự cải tiến lớn về hiệu năng và tính bảo mật cho ngôn ngữ lập trình này. Java 8 cũng giúp ngôn ngữ lập trình trở nên hiện đại và dễ tiếp cận hơn.

Câu 5: “ Access Specifiers” gồm những gì?

Access Specifiers là xác định phạm vi truy cập. Trong Java tổng cộng có 4 Access Specifiers là: public (công khai), private (riêng tư), protected (bảo vệ), default (mặc định).

Với mỗi trạng thái, quyền truy cập được xác định như sau:

  • Public specifier: bất cứ truy cập vào bất cứ lớp nào và bằng phương thức gì cũng được cho phép.
  • Private specifier: chỉ được truy cập vào lớp chỉ định bằng phương thức chỉ định.
  • Protected specifier: cho phép truy cập bằng các lớp tương quan hoặc từ trong một lớp, một lớp con hoặc trong cùng một gói.
  • Default specifier: chỉ được truy cập trong phạm vi mặc định cho phép và trong cùng một gói.

Câu 6: Sự khác nhau giữa JDK, JVM và JRE là gì? 

JDK (Java Development Kit) là công cụ được sử dụng trong Java để biên dịch các chương trình. Bộ công cụ này chứa tất cả các công cụ cần thiết để phục vụ cho quá trình trên.

JVM (Java Virtual Machine) là máy ảo Java được dùng để tạo ra môi trường lý tưởng cho Java bytecode hoạt động chính xác nhất.

JRE (Java Runtime Environment) là môi trường do JVM tạo ra, nơi mà Java bytecode có thể hoạt động hiệu quả nhất.

Câu 7: Phân biệt lớp trừu tượng với giao diện bằng cách nào?

Đây là câu hỏi phỏng vấn lập trình viên Java khá đơn giản. Sự khác biệt giữa lớp trừu tượng và giao diện gồm các điểm chính sau:

  • Lớp trừu tượng có thể triển khai bằng các phương thức khác nhau còn giao diện thì không.
  • Một lớp con chỉ có thể mở rộng một lớp trừu tượng hoặc cụ thể duy nhất. Còn một giao diện thì có thể mở rộng hoặc thực hiện nhiều giao diện khác.
  • Lớp trừu tượng gồm các thành phần hằng số, thành viên, sơ khai phương thức, phương thức được xác định. Còn giao diện chỉ có thể chứa hằng số và sơ đồ phương thức.
  • Ở lớp trừu tượng, phương thức và thành viên được định nghĩa với bất cứ mức độ hiển thị nào. Còn ở giao diện, phương thức được định nghĩa là công khai theo mặc định.

Câu 8: Sự khác nhau giữa Path và Classpath Variables 

Path là là một biến được dùng để định vị các tệp thực thi. Vì vậy khi cài đặt Java ta cần thêm vị trí thư mục vào Path variable. Điều này cũng giúp hệ điều hành kiểm soát bất cứ thực thi nào.

Classpath Variables được dùng để định vị vị trí của các tệp lớn trong thư mục. Nó có thể là một thư mục, tệp Zip hoặc Jar được cài đặt trong ứng dụng Java.

Câu 9: “Garbage Collection” được dùng để làm gì?

Câu hỏi phỏng vấn lập trình viên Java này khá đơn giản. Công dụng chính của tính năng Garbage Collection là xác định và loại bỏ các đối tượng (rác) không cần thiết để giải phóng bộ nhớ, tạo không gian để các tính năng khác hoạt động.

Câu 10: Cách đạt được Luồng an toàn trong Java

Để đạt được điều này bằng các cách sau:

  • Triển khai giao diện khóa đồng thời
  • Sử dụng một từ khóa dễ biến mất
  • Sử dụng các lớp bất biến
  • Các lớp an toàn luồng
  • Câu hỏi phỏng vấn lập trình viên Java nâng cao

Sau các câu hỏi cơ bản thì bạn nên tham khảo thêm các câu hỏi phỏng vấn lập trình viên Java nâng cao để gia tăng sự ấn tượng đối với nhà tuyển dụng. Dưới đây là hướng dẫn trả lời 10 câu hỏi phỏng vấn nâng cao thường gặp ở vị trí lập trình viên Java.

Câu 11:  Sự khác biệt giữa ‘method overloading’ và ‘method overriding’?

Với phương thức nạp chồng Method Overloading, các phương thức trong một lớp sẽ có cùng tên nhưng khác biệt về tham số. Còn với phương thức ghi đè Method Overriding, các lớp con sẽ có cùng cả tên và tham số. 

Câu 12: “Inheritance” là gì?

Khi một đối tượng có được các thuộc tính của một đối tượng thuộc lớp khác thì đó chính là Inheritance - Tính kế thừa. Có 5 loại kế thừa, tuy nhiên Java chỉ hỗ trợ 4 loại (trừ tính đa kế thừa). Nguyên nhân chủ yếu là để đơn giản hóa các chương trình. Đây là mục đích chính khi tạo lập ra ngôn ngữ lập trình Java.

Câu 13: “Super” là gì?

Super được sử dụng như một biến tham chiếu dùng để tham chiếu trực tiếp tới đối tượng của một lớp cha liền kề. Bất cứ một Instance của một lớp con cũng có một Instance tương ứng của lớp ta ngầm định, tức là được tham chiếu bởi biến Super.

Câu 14: “Object Cloning” là gì?

Object Cloning là nhân bản đối tượng, lệnh này được sử dụng để tạo các bản sao giống hệt với đối tượng gốc. Bạn thực hiện lệnh này bằng cách sử dụng phương thức Clone().

Câu 15: “Association’ trong Java là gì?

Đây là câu hỏi phỏng vấn lập trình viên Java khá thông dụng nên nhiều người sẽ không nghĩ đây là một câu hỏi nâng cao. Tuy nhiên vì association là khởi nguồn của các thuật ngữ phức tạp như aggregation (tập hợp) và composition (thành phần). Vì vậy việc hiểu và nắm rõ thuật ngữ này rất quan trọng.

Cụ thể, Association (sự liên kết) hình thành khi tất cả các đối tượng có vòng đời và không được sở hữu bởi bất cứ chủ thế nào.

Câu 16: Sự khác biệt giữa Jar và WAR là gì?

Đây là câu hỏi phỏng vấn lập trình viên Java khá độc đáo và hiếm gặp. Bạn có thể tham khảo câu trả lời như sau:

JAR gần giống như là cái hũ bao gồm:

  • Bản đầy đủ của các file Java
  • Nhiều file Java được lưu trữ trong một JAR
  • JAR dùng để lưu trữ Library.
  • Còn về WAR:
  • Bản đầy đủ của WAR là Web Archive Files
  • WAR chứa nhiều thứ: XML, Java Servlet page,..
  • Dùng cho các ứng dụng web.

Câu 17: Từ khóa Volatile là gì? Tại sao cần sử dụng từ khóa này?

Nếu câu hỏi phỏng vấn lập trình viên Java này được đặt ra, nghĩa là bạn đã đạt tới cấp độ Senior. Với câu hỏi này, bạn cần hiểu từ khóa Volatile sẽ được sử dụng trong trường hợp nào.

Trong Java, mỗi Thread sẽ có các Stack riêng chứa bản sao của các biến. Khi khởi tạo Thread, tất cả các biến được cấp quyền truy cập vào luồng này sẽ được sao chép. Lúc này sẽ cần sử dụng tới từ khóa Volatile. Từ khóa này sẽ đảm bảo rằng giá trị của biến được cập nhật mới nhất và là global ở mỗi lần đọc và ghi biến.

Câu 18: Method reference là gì? Sự tiện lợi của nó?

Đây là câu hỏi phỏng vấn lập trình viên Java khá hay sau khi phiên bản Java 8 được phát hành. Có thể tính năng này đã được nhiều người sử dụng nhưng nếu chưa chắc bạn đã trả lời được câu hỏi này. 

Tính năng method reference cho phép người dùng khởi tạo Constructors và các Methods. Điều đặc biệt là chúng có thể được sử dụng như là lambdas.

Câu 19: Kể tên Superclass dành cho tất cả các lớp trong Java

Câu hỏi phỏng vấn lập trình viên Java thoạt nhìn khá dễ nhưng bạn cần hiểu về cốt lõi của ngôn ngữ lập trình này. Superclass trong Java chính là lớp đối tượng (Object Class).

Câu 20: Các câu hỏi về một chương trình cụ thể

Dạng câu hỏi phỏng vấn lập trình viên Java này bạn sẽ phải ứng biến linh hoạt theo yêu cầu đề bài. Các dạng câu hỏi thường gặp sẽ là tìm đầu ra, tìm lỗi trong chương trình hoặc thậm chí là một bài test. Để trả lời suôn sẻ các câu hỏi này không có cách nào khác ngoài việc bạn phải lập trình nhiều bằng ngôn ngữ Java để quen thuộc với nó.

Tìm việc làm Lập trình viên Java tại TopCV:

>> Có thể bạn quan tâm: Tìm hiểu về lập trình Java – Cơ hội việc làm lập trình viên Java

Trên đây là 20 câu hỏi phỏng vấn lập trình viên Java từ cơ bản tới nâng cao mà bạn nên tham khảo nếu muốn ứng tuyển vào vị trí này. Hiện nay vị trí lập trình viên Java trên TopCV đang được nhiều doanh nghiệp tuyển chọn và săn đón. Đừng quên sử dụng tính năng tạo CV có sẵn trên nền tảng để nhanh chóng ứng tuyển vào các vị trí nghề nghiệp hấp dẫn ngay trên TopCV.

Nguồn ảnh: Sưu tầm

Bản quyền nội dung thuộc về TopCV.vn, được bảo vệ bởi Luật bảo vệ bản quyền tác giả DMCA.
Vui lòng không trích dẫn nội dung trang web khi chưa được sự cho phép của TopCV.

Bạn có những gì cần thiết để phỏng vấn Java không? Chúng tôi ở đây để giúp bạn củng cố kiến ​​thức và khái niệm của bạn trong Java. Trước khi chúng ta bắt đầu, chúng ta hãy hiểu Java là gì.Java. Before we begin, let's understand what Java is all about.

Java là gì? & NBSP;

Java là ngôn ngữ lập trình cấp cao được phát triển bởi James Gosling vào năm 1982. Nó dựa trên các nguyên tắc của lập trình hướng đối tượng và có thể được sử dụng để phát triển các ứng dụng quy mô lớn. Tìm hiểu thêm.Learn More.

Bài viết sau đây sẽ bao gồm tất cả các câu hỏi phỏng vấn Java cốt lõi phổ biến, Câu hỏi phỏng vấn xử lý chuỗi, Câu hỏi phỏng vấn Java 8, Câu hỏi phỏng vấn nhiều luồng Java, Câu hỏi phỏng vấn Java OOPS, Java ngoại lệ xử lý các câu hỏi phỏng vấn, câu hỏi phỏng vấn bộ sưu tập và một số câu hỏi thường gặp câu hỏi.

Đi qua tất cả các câu hỏi để tăng cường cơ hội thực hiện tốt trong các cuộc phỏng vấn. Các câu hỏi sẽ xoay quanh các nguyên tắc cơ bản cơ bản, cốt lõi và tiên tiến của Java.

Vì vậy, hãy để Lặn đi sâu vào rất nhiều câu hỏi và câu trả lời phỏng vấn Java hữu ích cho các ứng cử viên mới và kinh nghiệm theo chiều sâu.Java Interview questions and answers for freshers and experienced candidates in depth.

1. Tại sao Java là một ngôn ngữ độc lập nền tảng?

Ngôn ngữ Java được phát triển theo cách mà nó không phụ thuộc vào bất kỳ phần cứng hoặc phần mềm nào do thực tế là trình biên dịch biên dịch mã và sau đó chuyển đổi nó thành mã byte độc ​​lập với nền tảng có thể chạy trên nhiều hệ thống. was developed in such a way that it does not depend on any hardware or software due to the fact that the compiler compiles the code and then converts it to platform-independent byte code which can be run on multiple systems.

  • Điều kiện duy nhất để chạy mã byte đó là để máy có môi trường thời gian chạy (JRE) được cài đặt trong đó

2. Tại sao Java không phải là một ngôn ngữ định hướng đối tượng thuần túy?

Java hỗ trợ các loại dữ liệu nguyên thủy - byte, boolean, char, short, int, float, dài và gấp đôi và do đó nó không phải là ngôn ngữ định hướng đối tượng thuần túy.object oriented language.

3. Sự khác biệt giữa bộ nhớ HEAP và ngăn xếp trong Java. Và Java sử dụng điều này như thế nào.

Bộ nhớ ngăn xếp là một phần của bộ nhớ được gán cho mọi chương trình riêng lẻ. Và nó đã được sửa. Mặt khác, bộ nhớ Heap là phần không được phân bổ cho chương trình Java nhưng nó sẽ có sẵn để sử dụng chương trình Java khi cần thiết, chủ yếu là trong thời gian chạy của chương trình.

Java sử dụng bộ nhớ này là -& nbsp;

  • Khi chúng tôi viết một chương trình Java thì tất cả các biến, phương thức, vv được lưu trữ trong bộ nhớ ngăn xếp.
  • Và khi chúng ta tạo bất kỳ đối tượng nào trong chương trình Java thì đối tượng đó đã được tạo trong bộ nhớ heap. Và nó được tham chiếu từ bộ nhớ ngăn xếp.

Ví dụ- Xem xét chương trình Java dưới đây:Consider the below java program:

class Main {
   public void printArray(int[] array){
       for(int i : array)
           System.out.println(i);
   }
   public static void main(String args[]) {
       int[] array = new int[10];
       printArray(array);
   }
}

Đối với chương trình Java này. Bộ nhớ ngăn xếp và heap chiếm bởi Java là -

100 câu hỏi phỏng vấn java hàng đầu năm 2022

Main và PrintArray là phương pháp sẽ có sẵn trong khu vực ngăn xếp và cũng như các biến được tuyên bố cũng sẽ nằm trong khu vực ngăn xếp. & NBSP;

Và đối tượng (mảng số nguyên có kích thước 10) mà chúng tôi đã tạo, sẽ có sẵn trong khu vực Heap vì không gian đó sẽ được phân bổ cho chương trình trong thời gian chạy. & NBSP;

4. Java có thể được cho là ngôn ngữ lập trình hướng đối tượng hoàn chỉnh không?

Sẽ không sai nếu chúng ta tuyên bố rằng Java là ngôn ngữ lập trình hướng đối tượng hoàn chỉnh. Bởi vì mọi thứ trong Java đều thuộc các lớp học. Và chúng ta có thể truy cập điều đó bằng cách tạo các đối tượng.

Nhưng nếu chúng ta nói rằng Java không phải là ngôn ngữ lập trình hoàn toàn theo định hướng đối tượng vì nó có sự hỗ trợ của các loại dữ liệu nguyên thủy như Int, Float, Char, Boolean, Double, v.v.

Bây giờ cho câu hỏi: Java có phải là ngôn ngữ lập trình hoàn toàn đối tượng không? Chúng ta có thể nói rằng - Java không phải là ngôn ngữ lập trình hướng đối tượng thuần túy, bởi vì nó có quyền truy cập trực tiếp vào các loại dữ liệu nguyên thủy. Và các loại dữ liệu nguyên thủy này không trực tiếp thuộc về các lớp số nguyên.Is java a completely object-oriented programming language? We can say that - Java is not a pure object-oriented programming language, because it has direct access to primitive data types. And these primitive data types don't directly belong to the Integer classes.

5. Java khác với C ++ như thế nào?

  • C ++ chỉ là A & NBSP; ngôn ngữ được biên dịch, trong khi Java được biên dịch cũng như một ngôn ngữ được giải thích.
  • Các chương trình Java là độc lập với máy trong khi chương trình C ++ chỉ có thể chạy trong máy mà nó được biên dịch. & NBSP;
  • C ++ cho phép người dùng sử dụng con trỏ trong chương trình. Trong khi Java không cho phép nó. Java nội bộ sử dụng con trỏ. & NBSP;
  • C ++ hỗ trợ khái niệm nhiều kế thừa trong khi Java không hỗ trợ điều này. Và đó là do tránh sự phức tạp của sự mơ hồ về tên gây ra vấn đề kim cương.

6. Con trỏ được sử dụng trong C/ C ++. Tại sao Java không sử dụng con trỏ?

Con trỏ khá phức tạp và không an toàn để sử dụng bởi các lập trình viên mới bắt đầu. Java tập trung vào sự đơn giản của mã và việc sử dụng các con trỏ có thể khiến nó trở nên khó khăn. Việc sử dụng con trỏ cũng có thể gây ra lỗi tiềm năng. Hơn nữa, bảo mật cũng bị xâm phạm nếu con trỏ được sử dụng vì người dùng có thể truy cập trực tiếp bộ nhớ với sự trợ giúp của con trỏ.

Do đó, một mức độ trừu tượng nhất định được cung cấp bởi không bao gồm các con trỏ trong Java. Hơn nữa, việc sử dụng các con trỏ có thể làm cho thủ tục thu gom rác khá chậm và sai. Java sử dụng các tài liệu tham khảo vì những điều này không thể bị thao túng, không giống như con trỏ.

7. Bạn hiểu gì bởi một biến thể hiện và một biến cục bộ?

Các biến thể hiện là các biến có thể truy cập bằng tất cả các phương thức trong lớp. Chúng được tuyên bố bên ngoài các phương pháp và bên trong lớp. Các biến này mô tả các thuộc tính của một đối tượng và vẫn bị ràng buộc với nó bằng bất cứ giá nào. are those variables that are accessible by all the methods in the class. They are declared outside the methods and inside the class. These variables describe the properties of an object and remain bound to it at any cost.

Tất cả các đối tượng của lớp sẽ có bản sao của các biến để sử dụng. Nếu bất kỳ sửa đổi nào được thực hiện trên các biến này, thì chỉ có trường hợp đó sẽ bị ảnh hưởng bởi nó và tất cả các trường hợp lớp khác tiếp tục không bị ảnh hưởng.

Example:

class Athlete {
public String athleteName;
public double athleteSpeed;
public int athleteAge;
}

Các biến cục bộ là các biến có trong một khối, hàm hoặc hàm tạo và chỉ có thể được truy cập bên trong chúng. Việc sử dụng biến được giới hạn trong phạm vi khối. Bất cứ khi nào một biến cục bộ được khai báo bên trong một phương thức, các phương thức lớp khác không có bất kỳ kiến ​​thức nào về biến cục bộ. are those variables present within a block, function, or constructor and can be accessed only inside them. The utilization of the variable is restricted to the block scope. Whenever a local variable is declared inside a method, the other class methods don’t have any knowledge about the local variable.

Example:

public void athlete() {
String athleteName;
double athleteSpeed;
int athleteAge;
}
100 câu hỏi phỏng vấn java hàng đầu năm 2022

8. Các giá trị mặc định được gán cho các biến và phiên bản trong Java là gì?

  • Không có giá trị mặc định được gán cho các biến trong Java. Chúng ta cần khởi tạo giá trị trước khi sử dụng nó. Mặt khác, nó sẽ ném một lỗi biên dịch của (biến có thể không được khởi tạo). & Nbsp;Variable might not be initialized). 
  • Nhưng ví dụ, nếu chúng ta tạo đối tượng, thì giá trị mặc định sẽ được khởi tạo bởi hàm tạo mặc định tùy thuộc vào kiểu dữ liệu. & NBSP;
  • Nếu đó là một tài liệu tham khảo, thì nó sẽ được gán cho null. & Nbsp;
  • Nếu nó là số, thì nó sẽ gán cho 0.
  • Nếu đó là một boolean, thì nó sẽ được gán cho sai. Vân vân.

9. Ý bạn là gì khi đóng gói dữ liệu?

  • Đóng gói dữ liệu là một khái niệm lập trình hướng đối tượng về việc ẩn các thuộc tính dữ liệu và hành vi của chúng trong một đơn vị.
  • Nó giúp các nhà phát triển tuân theo mô -đun trong khi phát triển phần mềm bằng cách đảm bảo rằng mỗi đối tượng độc lập với các đối tượng khác bằng cách có các phương thức, thuộc tính và chức năng riêng của nó.
  • Nó được sử dụng để bảo mật các thuộc tính riêng của một đối tượng và do đó phục vụ mục đích ẩn dữ liệu.
100 câu hỏi phỏng vấn java hàng đầu năm 2022

10. Hãy cho chúng tôi biết điều gì đó về trình biên dịch JIT.

  • JIT là viết tắt của đúng lúc và nó được sử dụng để cải thiện hiệu suất trong thời gian chạy. Nó thực hiện nhiệm vụ biên dịch các phần của mã byte có chức năng tương tự đồng thời do đó giảm lượng thời gian biên dịch để mã chạy.
  • Trình biên dịch không có gì ngoài một dịch giả mã nguồn sang mã có thể điều khiển bằng máy. Nhưng điều gì đặc biệt về trình biên dịch JIT? Hãy cho chúng tôi xem nó hoạt động như thế nào:
    • Đầu tiên, chuyển đổi mã nguồn Java (.java) sang mã byte (.Class) xảy ra với sự trợ giúp của trình biên dịch Javac.
    • Sau đó, các tệp .Class được tải theo thời gian chạy bởi JVM và với sự trợ giúp của trình thông dịch, chúng được chuyển đổi thành mã dễ hiểu.
    • Trình biên dịch JIT là một phần của JVM. Khi trình biên dịch JIT được bật, JVM phân tích phương thức gọi trong các tệp .class và biên dịch chúng để có được mã gốc và hiệu quả hơn. Nó cũng đảm bảo rằng các cuộc gọi phương thức ưu tiên được tối ưu hóa.
    • Khi bước trên được thực hiện, JVM thực hiện trực tiếp mã được tối ưu hóa thay vì diễn giải lại mã. Điều này làm tăng hiệu suất và tốc độ của việc thực hiện.
100 câu hỏi phỏng vấn java hàng đầu năm 2022

11. Bạn có thể cho biết sự khác biệt giữa phương thức bằng () và toán tử bình đẳng (==) trong java không?

Chúng tôi đã nhận thức được toán tử (==) bằng. Rằng chúng tôi đã sử dụng điều này để so sánh sự bình đẳng của các giá trị. Nhưng khi chúng ta nói về các điều khoản của lập trình hướng đối tượng, chúng ta đối phó với các giá trị dưới dạng các đối tượng. Và đối tượng này có thể chứa nhiều loại dữ liệu. Vì vậy, sử dụng toán tử (==) không hoạt động với trường hợp này. Vì vậy, chúng ta cần phải đi với phương thức .equals ().(==) equals operator. That we have used this to compare the equality of the values. But when we talk about the terms of object-oriented programming, we deal with the values in the form of objects. And this object may contain multiple types of data. So using the (==) operator does not work with this case. So we need to go with the .equals() method.

Cả hai chức năng chính [(==) và .euqals ()] là so sánh các giá trị, nhưng chức năng thứ cấp là khác nhau. & NBSP;[(==) and .euqals()] primary functionalities are to compare the values, but the secondary functionality is different. 

Vì vậy, để hiểu điều này tốt hơn, hãy để xem xét điều này với ví dụ -

String str1 = "InterviewBit";
String str2 = "InterviewBit";
 
System.out.println(str1 == str2);

Mã này sẽ in đúng. Chúng tôi biết rằng cả hai chuỗi đều bằng nên nó sẽ in đúng. Nhưng ở đây (==) Các toán tử don lồng so sánh từng nhân vật trong trường hợp này. Nó so sánh vị trí bộ nhớ. Và vì chuỗi sử dụng nhóm không đổi để lưu trữ các giá trị trong bộ nhớ, cả STR1 và STR2 đều được lưu trữ tại cùng một vị trí bộ nhớ. Xem giải thích chi tiết trong câu hỏi số 73: Liên kết.(==) Operators don’t compare each character in this case. It compares the memory location. And because the string uses the constant pool for storing the values in the memory, both str1 and str2 are stored at the same memory location. See the detailed Explanation in Question no 73: Link.

100 câu hỏi phỏng vấn java hàng đầu năm 2022

Bây giờ, nếu chúng ta sửa đổi chương trình một chút với -

String str1 = new String("InterviewBit");
String str2 = "InterviewBit";
 
System.out.println(str1 == str2);
trong trường hợp này, nó sẽ in sai. Bởi vì ở đây không còn các khái niệm nhóm liên tục được sử dụng. Ở đây, bộ nhớ mới được phân bổ. Vì vậy, ở đây địa chỉ bộ nhớ là khác nhau, do đó (==) toán tử trả về sai. Nhưng xoắn là các giá trị giống nhau trong cả hai chuỗi. Vậy làm thế nào để so sánh các giá trị? Ở đây phương thức .equals () được sử dụng.
100 câu hỏi phỏng vấn java hàng đầu năm 2022

Then in this case, it will print false. Because here no longer the constant pool concepts are used. Here, new memory is allocated. So here the memory address is different, therefore ( == ) Operator returns false. But the twist is that the values are the same in both strings. So how to compare the values? Here the .equals() method is used.

Phương thức .equals () so sánh các giá trị và trả về kết quả tương ứng. & nbsp; nếu chúng tôi sửa đổi mã trên với -& nbsp; method compares the values and returns the result accordingly.  If we modify the above code with - 

System.out.println(str1.equals(str2));

Sau đó, nó trả về đúng.

equals() ==
Đây là một phương thức được xác định trong lớp đối tượng. & NBSP;Nó là một nhà điều hành nhị phân ở Java.
Phương thức .equals () có mặt trong lớp đối tượng, vì vậy chúng ta có thể ghi đè phương thức .equals () tùy chỉnh của chúng ta trong lớp tùy chỉnh, để so sánh các đối tượng.Nó không thể được sửa đổi. Các hashcode luôn luôn so sánh.
Phương pháp này được sử dụng để kiểm tra sự bình đẳng của nội dung giữa hai đối tượng theo logic kinh doanh được chỉ định.Toán tử này được sử dụng để so sánh địa chỉ (hoặc tài liệu tham khảo), tức là kiểm tra xem cả hai đối tượng đều chỉ vào cùng một vị trí bộ nhớ.

Note:

  • Trong các trường hợp phương thức bằng không được ghi đè trong một lớp, thì lớp sử dụng việc triển khai mặc định của phương thức bằng gần nhất với lớp cha.
  • Lớp đối tượng được coi là lớp cha của tất cả các lớp Java. Việc triển khai phương thức bằng trong lớp đối tượng sử dụng toán tử == để so sánh hai đối tượng. Việc thực hiện mặc định này có thể được ghi đè theo logic kinh doanh.

12. Làm thế nào một vòng lặp vô hạn được tuyên bố trong Java?

Vòng lặp vô hạn là những vòng lặp chạy vô hạn mà không có bất kỳ điều kiện phá vỡ nào. Một số ví dụ về việc tuyên bố một cách có ý thức Vòng lặp vô hạn là:

  • Sử dụng cho vòng lặp:
for (;;)
{
   // Business logic
   // Any break logic
}
  • Sử dụng trong khi vòng lặp:
while(true){
   // Business logic
   // Any break logic
}
  • Sử dụng vòng lặp trong khi
do{
   // Business logic
   // Any break logic
}while(true);

13. Giải thích ngắn gọn về khái niệm quá tải hàm tạo

Quá tải hàm tạo là quá trình tạo nhiều hàm tạo trong lớp bao gồm cùng tên với sự khác biệt trong các tham số hàm tạo. Tùy thuộc vào số lượng tham số và các loại tương ứng của chúng, phân biệt các loại cấu trúc khác nhau được thực hiện bởi trình biên dịch.

Các hàm tạo
class Hospital {
int variable1, variable2;
double variable3;
public Hospital(int doctors, int nurses) {
 variable1 = doctors;
 variable2 = nurses;
}
public Hospital(int doctors) {
 variable1 = doctors;
}
public Hospital(double salaries) {
 variable3 = salaries
}
}
three được xác định ở đây nhưng chúng khác nhau trên cơ sở loại tham số và số của chúng.
100 câu hỏi phỏng vấn java hàng đầu năm 2022

Three constructors are defined here but they differ on the basis of parameter type and their numbers.

14. Xác định hàm tạo bản sao trong Java.

Sao chép Constructor là hàm tạo được sử dụng khi chúng ta muốn khởi tạo giá trị thành đối tượng mới từ đối tượng cũ của cùng một lớp. & NBSP;

class Athlete {
public String athleteName;
public double athleteSpeed;
public int athleteAge;
}
0

Ở đây chúng tôi đang khởi tạo giá trị đối tượng mới từ giá trị đối tượng cũ trong hàm tạo. Mặc dù, điều này cũng có thể đạt được với sự trợ giúp của nhân bản đối tượng.

15. Phương pháp chính có thể bị quá tải không?

Có, có thể làm quá tải phương pháp chính. Chúng ta có thể tạo ra nhiều phương pháp chính quá tải mà chúng ta muốn. Tuy nhiên, JVM có một phương thức gọi được xác định trước mà JVM sẽ chỉ gọi phương thức chính với định nghĩa của -& nbsp;

class Athlete {
public String athleteName;
public double athleteSpeed;
public int athleteAge;
}
1

Hãy xem xét các đoạn mã dưới đây: & nbsp;

class Athlete {
public String athleteName;
public double athleteSpeed;
public int athleteAge;
}
2

16. Nhận xét về quá tải phương pháp và ghi đè bằng cách trích dẫn các ví dụ có liên quan.

Trong Java, quá tải phương thức được thực hiện bằng cách giới thiệu các phương thức khác nhau trong cùng một lớp bao gồm cùng một tên. Tuy nhiên, tất cả các hàm khác nhau về số lượng hoặc loại tham số. Nó diễn ra bên trong một lớp và tăng cường khả năng đọc chương trình.method overloading is made possible by introducing different methods in the same class consisting of the same name. Still, all the functions differ in the number or type of parameters. It takes place inside a class and enhances program readability.

Sự khác biệt duy nhất trong loại trả về của phương thức không thúc đẩy quá tải phương thức. Ví dụ sau đây sẽ cung cấp cho bạn một bức tranh rõ ràng về nó.

class Athlete {
public String athleteName;
public double athleteSpeed;
public int athleteAge;
}
3Both Các chức năng có cùng tên nhưng khác nhau về số lượng đối số. Phương pháp đầu tiên tính toán diện tích của hình chữ nhật, trong khi phương pháp thứ hai tính toán diện tích của một hình khối.
100 câu hỏi phỏng vấn java hàng đầu năm 2022

Both the functions have the same name but differ in the number of arguments. The first method calculates the area of the rectangle, whereas the second method calculates the area of a cuboid.

Ghi đè phương thức là khái niệm trong đó hai phương pháp có cùng một chữ ký phương thức có mặt trong hai lớp khác nhau trong đó có mối quan hệ thừa kế. Một triển khai phương thức cụ thể (đã có trong lớp cơ sở) có thể cho lớp dẫn xuất bằng cách sử dụng phương thức ghi đè. Hãy xem xét ví dụ này: is the concept in which two methods having the same method signature are present in two different classes in which an inheritance relationship is present. A particular method implementation (already present in the base class) is possible for the derived class by using method overriding.
Let’s give a look at this example:

Các phương thức lớp
class Athlete {
public String athleteName;
public double athleteSpeed;
public int athleteAge;
}
4Both có tên đi bộ và cùng tham số, khoảng cách và thời gian. Nếu phương thức lớp dẫn xuất được gọi, thì phương thức cơ sở đi bộ được ghi đè bởi phương pháp của lớp dẫn xuất.
100 câu hỏi phỏng vấn java hàng đầu năm 2022

Both class methods have the name walk and the same parameters, distance, and time. If the derived class method is called, then the base class method walk gets overridden by that of the derived class.

17. Một khối thử duy nhất và nhiều khối bắt có thể cùng tồn tại trong chương trình Java. Giải thích.

Có, nhiều khối bắt có thể tồn tại nhưng các cách tiếp cận cụ thể sẽ đến trước cách tiếp cận chung vì chỉ khối bắt đầu tiên thỏa mãn điều kiện bắt được thực hiện. Mã đã cho minh họa giống nhau:

class Athlete {
public String athleteName;
public double athleteSpeed;
public int athleteAge;
}
5

Ở đây, khối đánh bắt thứ hai sẽ được thực thi vì phân chia 0 (i / x). Trong trường hợp X lớn hơn 0 thì khối đánh bắt đầu tiên sẽ thực thi vì đối với các vòng chạy cho đến khi I = N và chỉ số mảng cho đến N-1.

18. Giải thích việc sử dụng từ khóa cuối cùng trong biến, phương thức và lớp.

Trong Java, từ khóa cuối cùng được sử dụng như xác định một cái gì đó là hằng số /cuối cùng và đại diện cho công cụ sửa đổi không truy cập.

  • Biến cuối cùng:
    • Khi một biến được khai báo là cuối cùng trong Java, giá trị có thể được sửa đổi sau khi nó được gán.
    • Nếu bất kỳ giá trị nào chưa được gán cho biến đó, thì nó chỉ có thể được gán bởi hàm tạo của lớp.
  • Phương pháp cuối cùng:
    • Một phương pháp được tuyên bố là cuối cùng không thể được ghi đè bởi các lớp học của trẻ em.
    • Một hàm tạo không thể được đánh dấu là cuối cùng vì bất cứ khi nào một lớp được kế thừa, các hàm tạo không được thừa hưởng. Do đó, đánh dấu nó cuối cùng không có ý nghĩa. Java ném lỗi biên dịch nói -
      System.out.println(str1.equals(str2));
      7
  • Lớp học cuối cùng:
    • Không có lớp nào có thể được kế thừa từ lớp được tuyên bố là cuối cùng. Nhưng lớp cuối cùng đó có thể mở rộng các lớp khác để sử dụng.

19. Làm cuối cùng, cuối cùng và hoàn thiện các từ khóa có cùng chức năng?

Tất cả ba từ khóa đều có tiện ích riêng trong khi lập trình.

Cuối cùng: Nếu có bất kỳ hạn chế nào được yêu cầu cho các lớp, biến hoặc phương thức, từ khóa cuối cùng có ích. Kế thừa của một lớp cuối cùng và ghi đè một phương pháp cuối cùng bị hạn chế bởi việc sử dụng từ khóa cuối cùng. Giá trị biến trở nên cố định sau khi kết hợp từ khóa cuối cùng. Thí dụ: If any restriction is required for classes, variables, or methods, the final keyword comes in handy. Inheritance of a final class and overriding of a final method is restricted by the use of the final keyword. The variable value becomes fixed after incorporating the final keyword. Example:

class Athlete {
public String athleteName;
public double athleteSpeed;
public int athleteAge;
}
6

Tuyên bố thứ hai sẽ ném lỗi.

Cuối cùng: Đó là khối có mặt trong một chương trình trong đó tất cả các mã được viết bên trong, nó được thực thi không phân biệt việc xử lý các ngoại lệ. Thí dụ: It is the block present in a program where all the codes written inside it get executed irrespective of handling of exceptions. Example:

class Athlete {
public String athleteName;
public double athleteSpeed;
public int athleteAge;
}
7

Hoàn thiện: Trước khi thu thập rác của một đối tượng, phương pháp hoàn thiện được gọi là để hoạt động dọn dẹp được thực hiện. Thí dụ: Prior to the garbage collection of an object, the finalize method is called so that the clean-up activity is implemented. Example:

class Athlete {
public String athleteName;
public double athleteSpeed;
public int athleteAge;
}
8

20. Có thể là khối ‘cuối cùng sẽ không được thực thi? Nếu có thì hãy liệt kê trường hợp.

& nbsp; vâng. Có thể là khối ‘cuối cùng sẽ không được thực thi. Các trường hợp là-

  • Giả sử chúng ta sử dụng System.exit () trong câu lệnh trên.System.exit() in the above statement.
  • Nếu có các lỗi nghiêm trọng như Overflow Stack, lỗi truy cập bộ nhớ, v.v.

21. Xác định đầu ra của chương trình Java và nêu lý do.

class Athlete {
public String athleteName;
public double athleteSpeed;
public int athleteAge;
}
9

Mã trên sẽ tạo ra lỗi thời gian biên dịch tại dòng 7 nói - [Lỗi: Biến tôi có thể đã được khởi tạo]. Đó là bởi vì biến ’i, là biến cuối cùng. Và các biến cuối cùng chỉ được phép khởi tạo một lần và điều đó đã được thực hiện trên dòng số 5.[error: variable i might already have been initialized]. It is because variable ‘i’ is the final variable. And final variables are allowed to be initialized only once, and that was already done on line no 5.

22. Khi nào bạn có thể sử dụng Super Keyword?

  • Từ khóa siêu được sử dụng để truy cập các trường ẩn và các phương thức hoặc thuộc tính được ghi đè của lớp cha.
  • Sau đây là các trường hợp khi từ khóa này có thể được sử dụng:
    • Truy cập các thành viên dữ liệu của lớp cha khi tên thành viên của lớp và các lớp con của nó giống nhau.
    • Để gọi hàm xây dựng mặc định và tham số hóa của lớp cha trong lớp con.
    • Truy cập các phương thức lớp cha khi các lớp con đã ghi đè lên chúng.
  • Ví dụ sau đây cho thấy cả 3 trường hợp khi sử dụng từ khóa siêu.
public void athlete() {
String athleteName;
double athleteSpeed;
int athleteAge;
}
0

23. Các phương pháp tĩnh có thể bị quá tải không?

Đúng! Có thể có hai hoặc nhiều phương thức tĩnh trong một lớp có cùng tên nhưng các tham số đầu vào khác nhau.

24. Tại sao phương pháp chính là tĩnh trong java?

Phương pháp chính luôn là tĩnh vì các thành viên tĩnh là những phương pháp thuộc về các lớp, không phải đối với một đối tượng riêng lẻ. Vì vậy, nếu phương pháp chính sẽ không tĩnh thì đối với mọi đối tượng, nó có sẵn. Và điều đó không được JVM chấp nhận. JVM gọi phương thức chính dựa trên chính tên lớp. Không phải bằng cách tạo đối tượng.

Bởi vì chỉ phải có 1 phương pháp chính trong chương trình Java khi việc thực hiện bắt đầu từ phương thức chính. Vì vậy, vì lý do này, phương pháp chính là tĩnh. & Nbsp;

25. Các phương thức tĩnh có thể được ghi đè không?

  • Không! Tuyên bố các phương pháp tĩnh có cùng chữ ký có thể được thực hiện trong lớp con nhưng tính đa hình thời gian chạy không thể diễn ra trong những trường hợp như vậy.
  • Ghi đè hoặc đa hình động xảy ra trong thời gian chạy, nhưng các phương thức tĩnh được tải và tra cứu thời gian biên dịch tĩnh. Do đó, các phương pháp này không thể bị ghi đè.

26. Sự khác biệt giữa các phương pháp tĩnh, các biến tĩnh và các lớp tĩnh trong Java.

  • Các phương thức tĩnh và biến tĩnh là các phương pháp và biến thuộc nhóm của chương trình Java, không phải đối tượng của lớp. Điều này nhận được bộ nhớ nơi lớp được tải. Và những thứ này có thể được gọi trực tiếp với sự trợ giúp của tên lớp. are those methods and variables that belong to the class of the java program, not to the object of the class. This gets memory where the class is loaded. And these can directly be called with the help of class names.
    • Ví dụ: Chúng tôi đã sử dụng các hàm toán học trong chương trình Java như - Max (), min (), sqrt (), pow (), v.v. và nếu chúng tôi nhận thấy rằng, chúng tôi sẽ thấy rằng chúng tôi gọi nó trực tiếp với lớp với lớp Tên. Giống như - math.max (), math.min (), v.v. để đó là phương pháp tĩnh. & nbsp; và các biến tĩnh tương tự chúng tôi đã sử dụng như (độ dài) cho mảng để có độ dài. Vì vậy, đó là phương pháp tĩnh.
  • Các lớp tĩnh - Một lớp trong chương trình Java không thể là tĩnh trừ khi đó là lớp bên trong. Nếu đó là một lớp tĩnh bên trong, thì nó chính xác hoạt động như các thành viên tĩnh khác của lớp.- A class in the java program cannot be static except if it is the inner class. If it is an inner static class, then it exactly works like other static members of the class.

27. Mục tiêu chính của bộ sưu tập rác là gì?

Mục tiêu chính của quá trình này là giải phóng không gian bộ nhớ bị chiếm bởi các đối tượng không cần thiết và không thể truy cập trong quá trình thực hiện chương trình Java bằng cách xóa các đối tượng không thể truy cập đó.

  • Điều này đảm bảo rằng tài nguyên bộ nhớ được sử dụng hiệu quả, nhưng nó không đảm bảo rằng sẽ có đủ bộ nhớ để thực hiện chương trình.

28. Trình tải lớp là gì?

  • Java Classloader là chương trình thuộc về JRE (Môi trường thời gian chạy Java). Nhiệm vụ của trình tải lớp là tải các lớp và giao diện cần thiết cho JVM khi được yêu cầu. & NBSP;
  • Ví dụ- Để nhận đầu vào từ bảng điều khiển, chúng tôi yêu cầu lớp máy quét. Và lớp máy quét được tải bởi trình tải lớp. To get input from the console, we require the scanner class. And the Scanner class is loaded by the ClassLoader.

29. Phần nào của bộ nhớ - Stack hoặc Heap - được làm sạch trong quy trình thu gom rác?

Heap.

30. Bản sao nông và bản sao sâu trong Java là gì?

Để sao chép dữ liệu của đối tượng, chúng tôi có một số phương thức như bản sao sâu và bản sao nông. & NBSP;

Ví dụ -& nbsp;

public void athlete() {
String athleteName;
double athleteSpeed;
int athleteAge;
}
1

Đối tượng cho lớp hình chữ nhật này - hình chữ nhật obj1 = hình chữ nhật mới ();Rectangle obj1 = new Rectangle();

  • Bản sao nông - Bản sao nông chỉ tạo ra một tham chiếu mới và trỏ đến cùng một đối tượng. Ví dụ - Đối với bản sao nông, chúng ta có thể làm điều này bằng cách - - The shallow copy only creates a new reference and points to the same object. Example - For Shallow copy, we can do this by -
public void athlete() {
String athleteName;
double athleteSpeed;
int athleteAge;
}
2

Bây giờ bằng cách này, những gì sẽ xảy ra là tài liệu tham khảo mới được tạo với tên OBJ2 và điều đó sẽ chỉ vào cùng một vị trí bộ nhớ.

  • Sao chép sâu - Trong một bản sao sâu, chúng tôi tạo một đối tượng mới và sao chép giá trị đối tượng cũ vào đối tượng mới. Thí dụ - - In a deep copy, we create a new object and copy the old object value to the new object. Example -
public void athlete() {
String athleteName;
double athleteSpeed;
int athleteAge;
}
3

Cả hai đối tượng này sẽ trỏ đến vị trí bộ nhớ như đã nêu dưới đây -

100 câu hỏi phỏng vấn java hàng đầu năm 2022

Bây giờ, nếu chúng ta thay đổi các giá trị trong bản sao nông thì chúng cũng ảnh hưởng đến tài liệu tham khảo khác. Hãy xem với sự trợ giúp của một ví dụ -& nbsp;

public void athlete() {
String athleteName;
double athleteSpeed;
int athleteAge;
}
4

Đầu ra -

public void athlete() {
String athleteName;
double athleteSpeed;
int athleteAge;
}
5

Chúng ta có thể thấy rằng trong mã trên, nếu chúng ta thay đổi các giá trị của Object1, thì các giá trị Object2 cũng bị thay đổi. Đó là vì tài liệu tham khảo.

Bây giờ, nếu chúng ta thay đổi mã thành bản sao sâu, thì sẽ không có ảnh hưởng đến Object2 nếu nó thuộc loại Deep Sao chép. Hãy xem xét một số đoạn trích được thêm vào trong mã trên.

public void athlete() {
String athleteName;
double athleteSpeed;
int athleteAge;
}
6

Đoạn trích trên sẽ không ảnh hưởng đến các giá trị đối tượng2. Nó có các giá trị riêng biệt của nó. Đầu ra sẽ là

public void athlete() {
String athleteName;
double athleteSpeed;
int athleteAge;
}
7

Bây giờ chúng ta thấy rằng chúng ta cần viết số lượng mã cho bản sao sâu này. Vì vậy, để giảm điều này, trong Java, có một phương thức gọi là clone (). & Nbsp;clone(). 

Bản sao () sẽ thực hiện bản sao sâu này trong nội bộ và trả về một đối tượng mới. Và để làm điều này, chúng ta chỉ cần viết 1 dòng mã. Đó là - hình chữ nhật obj2 = obj1.clone ();clone() will do this deep copy internally and return a new object. And to do this we need to write only 1 line of code. That is - Rectangle obj2 = obj1.clone();

Câu hỏi phỏng vấn nâng cao Java

70. Mặc dù kế thừa là một khái niệm OOPS phổ biến, nhưng nó ít thuận lợi hơn so với thành phần. Giải thích.

Kế thừa tụt lại phía sau thành phần trong các kịch bản sau:

  • Nhiều khả năng tự nhiên là không thể trong Java. Các lớp chỉ có thể mở rộng từ một siêu lớp. Trong trường hợp yêu cầu nhiều chức năng, ví dụ - để đọc và ghi thông tin vào tệp, mô hình thành phần được ưa thích. Người viết, cũng như các chức năng của người đọc, có thể được sử dụng bằng cách coi chúng là thành viên tư nhân.
  • Thành phần hỗ trợ trong việc đạt được tính linh hoạt cao và ngăn chặn sự phá vỡ đóng gói.
  • Kiểm tra đơn vị là có thể với thành phần và không kế thừa. Khi một nhà phát triển muốn kiểm tra một lớp sáng tác một lớp khác, thì đối tượng giả có thể được tạo để biểu thị lớp sáng tác để tạo điều kiện kiểm tra. Kỹ thuật này là không thể với sự trợ giúp của sự kế thừa vì lớp dẫn xuất không thể được kiểm tra mà không có sự trợ giúp của siêu lớp trong kế thừa.
  • Bản chất kết hợp lỏng lẻo của thành phần là thích hợp hơn bản chất kết hợp chặt chẽ của thừa kế.

Hãy lấy một ví dụ:

public void athlete() {
String athleteName;
double athleteSpeed;
int athleteAge;
}
8

Trong ví dụ trên, kế thừa được tuân theo. Bây giờ, một số sửa đổi được thực hiện cho lớp hàng đầu như thế này:

public void athlete() {
String athleteName;
double athleteSpeed;
int athleteAge;
}
9

Nếu việc triển khai mới của lớp hàng đầu được tuân thủ, một lỗi thời gian biên dịch sẽ xảy ra trong lớp dưới cùng. Loại trả về không tương thích là có chức năng Top.Stop (). Các thay đổi phải được thực hiện cho lớp trên cùng hoặc lớp dưới cùng để đảm bảo khả năng tương thích. Tuy nhiên, kỹ thuật thành phần có thể được sử dụng để giải quyết vấn đề đã cho:

String str1 = "InterviewBit";
String str2 = "InterviewBit";
 
System.out.println(str1 == str2);
0

71. Sự khác biệt giữa các nhà khai thác ‘>> và‘ >>> trong Java là gì?

2 này là các toán tử thay đổi bên phải bitwise. Mặc dù cả hai nhà khai thác trông giống nhau. Nhưng có một sự khác biệt tối thiểu giữa hai toán tử thay đổi bên phải này.

  • ‘>> Toán tử thay đổi bên phải bitwise- toán tử này chuyển từng bit sang vị trí bên phải của nó. Và điều này duy trì bit đã ký.- This operator shifts each bit to its right position. And this maintains the signed bit.
  • ‘>>> Toán tử thay đổi bên phải bitwise với số không- toán tử này cũng thay đổi từng bit sang phải. Nhưng điều này không duy trì bit đã ký. Toán tử này làm cho bit quan trọng nhất là 0.- This operator also shifts each bit to its right. But this doesn’t maintain the signed bit. This operator makes the Most significant bit to 0.

Ví dụ- num1 = 8, num2 = -8. Num1 = 8, Num2 = -8.

Vì vậy, dạng nhị phân của các số này là -& nbsp;

Num1 = 00000000 00000000 00000000 00001000 & nbsp; num2 = 11111111 11111111 11111111 & nbsp; 11111000
Num2 = 11111111 11111111 11111111  11111000

‘>> toán tử của người khác: 8 >> 1 (dịch chuyển theo một bit): & nbsp; : 8 >> 1 (Shift by one bit) : 

Num1 = 00000000 00000000 00000000 00000100Num2 = 111111 11111111 11111111 & NBSP; 11111100
Num2 = 11111111 11111111 11111111  11111100

: 8 >>> 1 (Shift by one bit) = 

Num1 = 00000000 00000000 00000000 00000100Num2 = 01111111 11111111 111111 1111111100
Num2 = 01111111 11111111 11111111 11111100

72. Thành phần và tập hợp là gì? Nêu sự khác biệt.

Thành phần và tập hợp giúp xây dựng (có - mối quan hệ) giữa các lớp và đối tượng. Nhưng cả hai không giống nhau cuối cùng. Hãy cùng hiểu với sự trợ giúp của một ví dụ. & NBSP;Let’s understand with the help of an example. 

  • Hãy coi trường đại học là một lớp có một số khoa trong đó. Vì vậy, trường đại học sẽ là đối tượng container. Và các bộ phận trong đó sẽ chứa các đối tượng. Bây giờ trong trường hợp này, nếu đối tượng container phá hủy thì các đối tượng chứa cũng sẽ bị phá hủy tự động. & nbsp; vì vậy ở đây chúng ta có thể nói rằng có một mối liên hệ mạnh mẽ giữa các đối tượng. Vì vậy, sự liên kết mạnh mẽ này được gọi là sáng tác.Composition.
  • Bây giờ hãy xem xét thêm một ví dụ. Giả sử chúng ta có một bộ phận lớp học và có một số đối tượng của giáo sư ở đó trong bộ phận. Bây giờ nếu lớp bộ bị phá hủy thì đối tượng của giáo sư sẽ trở nên tự do liên kết với các đối tượng khác. Bởi vì các đối tượng container (bộ phận) chỉ giữ các tài liệu tham khảo của các đối tượng có chứa (Giáo sư từ). Vì vậy, đây là mối liên hệ yếu giữa các đối tượng. Và hiệp hội yếu này được gọi là tổng hợp.Aggregation.

73. Làm thế nào là tạo ra một chuỗi sử dụng mới () khác với một chuỗi theo nghĩa đen?

Khi một chuỗi được hình thành như một nghĩa đen với sự hỗ trợ của toán tử gán, nó sẽ đi vào nhóm không đổi chuỗi để có thể thực hiện chuỗi chuỗi. Cùng một đối tượng trong heap sẽ được tham chiếu bởi một chuỗi khác nếu nội dung giống nhau cho cả hai.

String str1 = "InterviewBit";
String str2 = "InterviewBit";
 
System.out.println(str1 == str2);
1

Hàm séc () sẽ trả về true vì cùng một nội dung được tham chiếu bởi cả hai biến.

100 câu hỏi phỏng vấn java hàng đầu năm 2022

Ngược lại, khi một sự hình thành chuỗi diễn ra với sự trợ giúp của toán tử mới (), việc thực tập không diễn ra. Đối tượng được tạo trong bộ nhớ heap ngay cả khi cùng một đối tượng nội dung có mặt.

String str1 = "InterviewBit";
String str2 = "InterviewBit";
 
System.out.println(str1 == str2);
2

Hàm kiểm tra () sẽ trả về sai vì cùng một nội dung không được tham chiếu bởi cả hai biến.

100 câu hỏi phỏng vấn java hàng đầu năm 2022

74. Toán tử ’mới khác với toán tử‘ newinstance () trong Java?

Cả hai toán tử ’mới và‘ newinstance () đều được sử dụng để tạo các đối tượng. Sự khác biệt là- rằng khi chúng ta đã biết tên lớp mà chúng ta phải tạo đối tượng thì chúng ta sử dụng toán tử mới. Nhưng giả sử chúng tôi không biết tên lớp mà chúng tôi cần tạo đối tượng hoặc chúng tôi lấy tên lớp từ đối số dòng lệnh hoặc cơ sở dữ liệu hoặc tệp. Sau đó, trong trường hợp đó, chúng tôi sử dụng toán tử ‘newinstance ().new’ and ‘newInstance()’ operators are used to creating objects. The difference is- that when we already know the class name for which we have to create the object then we use a new operator. But suppose we don’t know the class name for which we need to create the object, Or we get the class name from the command line argument, or the database, or the file. Then in that case we use the ‘newInstance()’ operator.

Từ khóa ‘newinstance () ném một ngoại lệ mà chúng ta cần xử lý. Đó là bởi vì có nhiều khả năng định nghĩa lớp không tồn tại và chúng tôi nhận được tên lớp từ thời gian chạy. Vì vậy, nó sẽ ném một ngoại lệ.newInstance()’ keyword throws an exception that we need to handle. It is because there are chances that the class definition doesn’t exist, and we get the class name from runtime. So it will throw an exception.

75. Có vượt quá giới hạn bộ nhớ có thể trong một chương trình mặc dù có bộ thu gom rác không?

Có, chương trình có thể thoát khỏi bộ nhớ bất chấp sự hiện diện của một người thu gom rác. Bộ sưu tập rác hỗ trợ nhận ra và loại bỏ những đối tượng không cần thiết trong chương trình nữa, để giải phóng các tài nguyên được sử dụng bởi chúng.

Trong một chương trình, nếu một đối tượng không thể truy cập được, thì việc thực hiện bộ sưu tập rác diễn ra đối với đối tượng đó. Nếu lượng bộ nhớ cần thiết để tạo một đối tượng mới là không đủ, thì bộ nhớ sẽ được giải phóng cho các đối tượng không còn trong phạm vi với sự trợ giúp của bộ thu gom rác. Giới hạn bộ nhớ vượt quá cho chương trình khi bộ nhớ được phát hành là không đủ để tạo các đối tượng mới.

Hơn nữa, sự kiệt sức của bộ nhớ heap diễn ra nếu các đối tượng được tạo theo cách mà chúng vẫn ở trong phạm vi và tiêu thụ bộ nhớ. Nhà phát triển nên đảm bảo bỏ đi đối tượng sau khi công việc của nó được hoàn thành. Mặc dù người thu gom rác đã nỗ lực tốt nhất để lấy lại bộ nhớ càng nhiều càng tốt, giới hạn bộ nhớ vẫn có thể được vượt quá.

Hãy cùng xem ví dụ sau:

String str1 = "InterviewBit";
String str2 = "InterviewBit";
 
System.out.println(str1 == str2);
3

76. Tại sao đồng bộ hóa cần thiết? Giải thích với sự trợ giúp của một ví dụ có liên quan.

Thực hiện đồng thời các quá trình khác nhau được thực hiện bằng cách đồng bộ hóa. Khi một tài nguyên cụ thể được chia sẻ giữa nhiều luồng, các tình huống có thể phát sinh trong đó nhiều luồng yêu cầu cùng một tài nguyên được chia sẻ.

Đồng bộ hóa hỗ trợ giải quyết vấn đề và tài nguyên được chia sẻ bởi một luồng tại một thời điểm. Hãy để một ví dụ để hiểu rõ hơn. Ví dụ: bạn có một URL và bạn phải tìm ra số lượng yêu cầu thực hiện cho nó. Hai yêu cầu đồng thời có thể làm cho số lượng thất thường.

Không đồng bộ hóa:

String str1 = "InterviewBit";
String str2 = "InterviewBit";
 
System.out.println(str1 == str2);
4if một luồng luồng1 xem số lượng là 10, nó sẽ được tăng từ 1 đến 11. Đồng thời, nếu một luồng khác 2 xem số lượng là 10, nó sẽ được tăng lên 1 đến 11. Do đó, sự không nhất quán trong các giá trị đếm diễn ra vì Giá trị cuối cùng dự kiến ​​là 12 nhưng giá trị cuối cùng thực tế chúng tôi nhận được sẽ là 11.
100 câu hỏi phỏng vấn java hàng đầu năm 2022

If a thread Thread1 views the count as 10, it will be increased by 1 to 11. Simultaneously, if another thread Thread2 views the count as 10, it will be increased by 1 to 11. Thus, inconsistency in count values takes place because the expected final value is 12 but the actual final value we get will be 11.

Bây giờ, chức năng tăng () được thực hiện đồng bộ để không thể truy cập đồng thời.

Với đồng bộ hóa:

String str1 = "InterviewBit";
String str2 = "InterviewBit";
 
System.out.println(str1 == str2);
5 nếu một luồng1 xem số đếm là 10, nó sẽ được tăng lên 1 đến 11, sau đó luồng2 sẽ xem số lượng là 11, nó sẽ được tăng lên 1 đến 12. Do đó, tính nhất quán trong các giá trị đếm diễn ra.
100 câu hỏi phỏng vấn java hàng đầu năm 2022

If a thread Thread1 views the count as 10, it will be increased by 1 to 11, then the thread Thread2 will view the count as 11, it will be increased by 1 to 12. Thus, consistency in count values takes place.

77. Trong mã đã cho dưới đây, tầm quan trọng của ...?

String str1 = "InterviewBit";
String str2 = "InterviewBit";
 
System.out.println(str1 == str2);
6
  • Khả năng cung cấp
    System.out.println(str1.equals(str2));
    8 là một tính năng gọi là varargs (đối số biến) được giới thiệu như một phần của Java 5.
  • Hàm có
    System.out.println(str1.equals(str2));
    8 trong ví dụ trên chỉ ra rằng nó có thể nhận được nhiều đối số của chuỗi dữ liệu.
  • Ví dụ, FooBarmethod có thể được gọi theo nhiều cách và chúng ta vẫn có thể có một phương pháp để xử lý dữ liệu như được hiển thị bên dưới:
String str1 = "InterviewBit";
String str2 = "InterviewBit";
 
System.out.println(str1 == str2);
7

78. Điều gì sẽ là đầu ra của chương trình Java dưới đây và xác định các bước thực hiện chương trình Java với sự trợ giúp của mã dưới đây?

String str1 = "InterviewBit";
String str2 = "InterviewBit";
 
System.out.println(str1 == str2);
8

Đầu ra chúng tôi nhận được bằng cách thực hiện chương trình này sẽ

Khối tĩnh 1. Giá trị của J = 0 Phương thức
Static method. 
Static Block 2. Value of j = 10
Instance Block 1. Value of i = 0
Instance Block 2. Value of i = 5
Instance method. 
Welcome to InterviewBit

Đây là một câu hỏi phỏng vấn khó khăn của Java thường gặp trong các cuộc phỏng vấn của Java cho kinh nghiệm. Đầu ra sẽ như thế này bởi vì, khi chương trình Java được biên dịch và được thực thi, thì có nhiều bước khác nhau để thực hiện. Và các bước là -& nbsp;

  • Xác định các thành viên tĩnh từ trên xuống dưới.
  • Thực hiện gán biến tĩnh và một khối tĩnh từ trên xuống dưới.
  • Thực hiện phương pháp chính.
  • Xác định các thành viên thể hiện từ trên xuống dưới.
  • Thực hiện khối gán biến và khối biểu hiện từ trên xuống dưới.
  • Thực hiện hàm tạo.

Trong các bước trên từ 4 đến 6, sẽ được thực hiện cho mọi tạo đối tượng. Nếu chúng ta tạo nhiều đối tượng thì cho mọi đối tượng, các bước này sẽ được thực hiện.

Bây giờ từ mã trên, việc thực thi sẽ xảy ra như thế này -& nbsp;

1. Trong bước xác định của các thành viên tĩnh. Nó được tìm thấy rằng -

  • tĩnh in in j.
  • Khối tĩnh.
  • Phương pháp chính.
  • Phương pháp tĩnh_2.

Trong quá trình nhận dạng, JVM sẽ gán giá trị mặc định trong biến int j tĩnh. Sau đó, nó hiện đang ở trong tình trạng đọc và viết gián tiếp. Bởi vì giá trị ban đầu không được gán.

2. Trong bước tiếp theo, nó sẽ thực thi khối tĩnh và gán giá trị trong các biến tĩnh.

  • Khối tĩnh đầu tiên Nó sẽ in và vì thực hiện từ trên xuống dưới và giá trị ban đầu trong j không được gán. Vì vậy, nó sẽ in giá trị mặc định là 0.
  • Sau khi thực hiện Khối tĩnh 1. Nó sẽ thực thi Phương thức tĩnh_1 vì nó được gọi từ khối tĩnh 1.
  • Sau đó, nó sẽ gán giá trị ban đầu là 5 trong biến j. Và thực thi khối tĩnh còn lại.

3. Bây giờ nó sẽ thực hiện phương pháp chính. Trong đó nó sẽ tạo ra một đối tượng cho cuộc phỏng vấn lớp. Và sau đó việc thực hiện các trường hợp sẽ xảy ra.

4. Xác định các biến thể hiện và các khối từ trên xuống dưới. & NBSP;

  • int i.
  • Khối trường hợp 1.
  • Phương thức thể hiện_1.

Giống như một biến tĩnh, biến thể hiện cũng đã được khởi tạo với giá trị mặc định 0 và sẽ ở trạng thái đọc và viết gián tiếp.

5. Nó sẽ thực thi các phương thức thể hiện và gán giá trị ban đầu cho biến thể hiện.

  • In khối trường hợp 1. và giá trị hiện tại của I không được gán cho đến bây giờ, vì vậy nó sẽ in 0.
  • Gán giá trị ban đầu cho i. Sau đó in khối trường hợp 2. và sau phương thức phiên bản đó sẽ được gọi và in vì nó đang được gọi trong khối thể hiện.

6. Và ở bước cuối cùng, hàm tạo sẽ được gọi và các dòng sẽ được thực thi trong hàm tạo.

Đây là cách chương trình Java được thực hiện.

79. Xác định System.out.println ().

System.out.println () được sử dụng để in tin nhắn trên bảng điều khiển. Hệ thống - Đây là một lớp có trong gói java.lang. Out là biến tĩnh của lớp PrintStream có trong lớp hệ thống. println () là phương thức có trong lớp PrintStream. is used to print the message on the console. System - It is a class present in java.lang package. Out is the static variable of type PrintStream class present in the System class. println() is the method present in the PrintStream class.

Vì vậy, nếu chúng ta biện minh cho tuyên bố, thì chúng ta có thể nói rằng nếu chúng ta muốn in bất cứ thứ gì trên bảng điều khiển thì chúng ta cần gọi phương thức println () có mặt trong lớp PrintStream. Và chúng ta có thể gọi nó bằng cách sử dụng đối tượng đầu ra có trong lớp hệ thống.println() method that was present in PrintStream class. And we can call this using the output object that is present in the System class.

80. Bạn có thể giải thích vòng đời chủ đề Java không?

Java Thread Life Vòng đời như sau:

  • MỚI - Khi thể hiện của luồng được tạo và phương thức start () chưa được gọi, luồng được coi là còn sống và do đó ở trạng thái mới. – When the instance of the thread is created and the start() method has not been invoked, the thread is considered to be alive and hence in the NEW state.
  • Runnable - Sau khi phương thức start () được gọi, trước khi phương thức Run () được gọi bởi JVM, luồng được cho là ở trạng thái Runnable (Sẵn sàng để chạy). Trạng thái này cũng có thể được nhập từ trạng thái chờ hoặc trạng thái ngủ của sợi chỉ. – Once the start() method is invoked, before the run() method is called by JVM, the thread is said to be in RUNNABLE (ready to run) state. This state can also be entered from the Waiting or Sleeping state of the thread.
  • Chạy - Khi phương thức Run () đã được gọi và luồng bắt đầu thực thi, luồng được cho là ở trạng thái chạy. – When the run() method has been invoked and the thread starts its execution, the thread is said to be in a RUNNING state.
  • Không chạy được (bị chặn/chờ đợi)-khi chủ đề không thể chạy mặc dù thực tế là sự sống động của nó, chủ đề được cho là ở trạng thái không thể chạy. Lý tưởng nhất, sau một thời gian tồn tại của nó, chủ đề sẽ đi đến trạng thái có thể chạy được. – When the thread is not able to run despite the fact of its aliveness, the thread is said to be in a NON-RUNNABLE state. Ideally, after some time of its aliveness, the thread should go to a runnable state.
    • Một luồng được cho là ở trạng thái bị chặn nếu nó muốn nhập mã được đồng bộ hóa nhưng nó không thể vì một luồng khác đang hoạt động trong khối được đồng bộ hóa trên cùng một đối tượng. Chủ đề đầu tiên phải đợi cho đến khi luồng khác thoát ra khỏi khối đồng bộ.
    • Một luồng được cho là ở trạng thái chờ nếu nó đang chờ tín hiệu thực thi từ một luồng khác, tức là nó chờ công việc cho đến khi nhận được tín hiệu.
  • Chấm dứt - Sau khi thực hiện phương thức Run () được hoàn thành, luồng được cho là nhập bước chấm dứt và được coi là không còn sống. – Once the run() method execution is completed, the thread is said to enter the TERMINATED step and is considered to not be alive.

Sơ đồ sau đây giải thích rõ ràng vòng đời của chủ đề trong Java.

100 câu hỏi phỏng vấn java hàng đầu năm 2022

81. Điều gì có thể là sự đánh đổi giữa việc sử dụng một mảng không có thứ tự so với việc sử dụng một mảng được đặt hàng?

  • Ưu điểm chính của việc có một mảng được đặt hàng là độ phức tạp thời gian tìm kiếm giảm là
    for (;;)
    {
       // Business logic
       // Any break logic
    }
    0 trong khi độ phức tạp của thời gian trong một mảng không có thứ tự là
    for (;;)
    {
       // Business logic
       // Any break logic
    }
    1.
  • Hạn chế chính của mảng theo thứ tự là thời gian chèn tăng của nó là O (n) do thực tế là phần tử của nó phải được sắp xếp lại để duy trì thứ tự mảng trong mỗi lần chèn trong khi độ phức tạp của thời gian trong mảng không có thứ tự chỉ là O (1 ).
  • Xem xét 2 điểm chính trên và tùy thuộc vào loại kịch bản mà nhà phát triển yêu cầu, cấu trúc dữ liệu phù hợp có thể được sử dụng để thực hiện.

82. Có thể nhập cùng một lớp hoặc gói hai lần trong Java và điều gì xảy ra với nó trong thời gian chạy?

Tuy nhiên, có thể nhập một lớp hoặc gói nhiều lần, tuy nhiên, nó là dự phòng vì JVM chỉ tải gói hoặc lớp một lần.

83. Trong trường hợp gói có các gói phụ, liệu có đủ để nhập gói chính không? ví dụ. Nhập com.mymainpackage.* Cũng nhập com.mymainpackage.mysubpackage.*?

Đây là một không lớn. Chúng ta cần hiểu rằng việc nhập các gói phụ của gói cần được thực hiện rõ ràng. Nhập gói cha mẹ chỉ dẫn đến việc nhập các lớp trong đó chứ không phải nội dung của các gói con/phụ của nó.

84. Khối cuối cùng sẽ được thực thi nếu hệ thống mã.exit (0) được viết ở cuối khối thử?

KHÔNG. Việc kiểm soát bài chương trình

for (;;)
{
   // Business logic
   // Any break logic
}
2 ngay lập tức biến mất và chương trình bị chấm dứt, đó là lý do tại sao khối cuối cùng không bao giờ được thực thi.

85. Bạn hiểu gì về giao diện đánh dấu trong Java?

Giao diện đánh dấu, còn được gọi là giao diện gắn thẻ là những giao diện không có phương thức và hằng số được xác định trong chúng. Họ ở đó để giúp trình biên dịch và JVM có được thông tin liên quan đến thời gian chạy liên quan đến các đối tượng.

86. Giải thích thuật ngữ khởi tạo gấp đôi gấp đôi trong Java?

Đây là một phương tiện thuận tiện để khởi tạo bất kỳ bộ sưu tập nào trong Java. Hãy xem xét các ví dụ dưới đây.

String str1 = "InterviewBit";
String str2 = "InterviewBit";
 
System.out.println(str1 == str2);
9

Trong ví dụ trên, chúng ta thấy rằng các chuỗi đã được khởi tạo bằng cách sử dụng niềng răng đôi.

  • Nẹp đầu tiên thực hiện nhiệm vụ tạo ra một lớp bên trong ẩn danh có khả năng truy cập hành vi của lớp cha. Trong ví dụ của chúng tôi, chúng tôi đang tạo lớp con của Hashset để nó có thể sử dụng phương thức ADD () của Hashset.
  • Niềng răng thứ hai thực hiện nhiệm vụ khởi tạo các trường hợp.

Cần cẩn thận trong khi khởi tạo thông qua phương pháp này vì phương pháp liên quan đến việc tạo các lớp bên trong ẩn danh có thể gây ra vấn đề trong quá trình thu thập rác hoặc tuần tự hóa và cũng có thể dẫn đến rò rỉ bộ nhớ.

87. Tại sao người ta nói rằng phương thức độ dài () của lớp chuỗi không trả về kết quả chính xác?

  • Phương thức độ dài trả về số lượng đơn vị unicode của chuỗi. Hãy hiểu các đơn vị Unicode là gì và sự nhầm lẫn dưới đây là gì.
  • Chúng tôi biết rằng Java sử dụng UTF-16 để biểu diễn chuỗi. Với unicode này, chúng ta cần hiểu các thuật ngữ liên quan đến unicode dưới đây:
    • Điểm mã: Điều này thể hiện một số nguyên biểu thị một ký tự trong không gian mã.
    • Đơn vị mã: Đây là một chuỗi bit được sử dụng để mã hóa các điểm mã. Để làm điều này, một hoặc nhiều đơn vị có thể được yêu cầu để biểu diễn điểm mã.
  • Theo sơ đồ UTF-16, các điểm mã được chia thành 17 mặt phẳng và mặt phẳng đầu tiên được gọi là mặt phẳng đa ngôn ngữ cơ bản (BMP). BMP có các ký tự cổ điển - U+0000 đến U+FFFF. Phần còn lại của các ký tự- u+10000 đến u+10ffff được gọi là các ký tự bổ sung vì chúng được chứa trong các mặt phẳng còn lại.
    • Mã các điểm từ mặt phẳng đầu tiên được mã hóa bằng một đơn vị mã 16 bitone 16-bit code unit
    • Mã các điểm từ các mặt phẳng còn lại được mã hóa bằng hai đơn vị mã.two code units.

Bây giờ nếu một chuỗi chứa các ký tự bổ sung, hàm độ dài sẽ được tính là 2 đơn vị và kết quả của hàm độ dài () sẽ không theo những gì được mong đợi.

Nói cách khác, nếu có 1 ký tự bổ sung của 2 đơn vị, độ dài của ký tự đơn đó được coi là hai - để ý sự không chính xác ở đây? Theo tài liệu Java, nó được mong đợi, nhưng theo logic thực sự, nó không chính xác.

88. Đầu ra của mã dưới đây là gì và tại sao?

String str1 = new String("InterviewBit");
String str2 = "InterviewBit";
 
System.out.println(str1 == str2);
0

Bit bit có thể là kết quả được in nếu các chữ cái được sử dụng trong các trình điều khiển kép (hoặc các chữ theo chuỗi). Nhưng câu hỏi có các chữ ký tự (trích dẫn đơn) đang được sử dụng, đó là lý do tại sao việc kết hợp sẽ không xảy ra. Các giá trị ASCII tương ứng của mỗi ký tự sẽ được thêm vào và kết quả của số tiền đó sẽ được in. Các giá trị ASCII của ‘B,‘ I, ’T, là:
The ASCII values of ‘b’, ‘i’, ‘t’ are:

  • Bọ = 98
  • Tôi là tôi = 105
  • ‘Tát = 116

for (;;)
{
   // Business logic
   // Any break logic
}
3

Do đó 319 sẽ được in.

89. Những cách có thể để làm cho đối tượng đủ điều kiện cho Bộ sưu tập rác (GC) trong Java là gì?

Cách tiếp cận đầu tiên: Đặt các tham chiếu đối tượng cho NULL sau khi mục đích tạo đối tượng được phục vụ. Set the object references to null once the object creation purpose is served.

String str1 = new String("InterviewBit");
String str2 = "InterviewBit";
 
System.out.println(str1 == str2);
1

Cách tiếp cận thứ hai: Chỉ biến tham chiếu đến một đối tượng khác. Làm điều này, đối tượng mà biến tham chiếu đã tham chiếu trước khi đủ điều kiện cho GC. Point the reference variable to another object. Doing this, the object which the reference variable was referencing before becomes eligible for GC.

String str1 = new String("InterviewBit");
String str2 = "InterviewBit";
 
System.out.println(str1 == str2);
2

Cách tiếp cận thứ ba: Phương pháp cách ly đảo cách ly: Khi 2 biến tham chiếu chỉ vào các trường hợp của cùng một lớp và các biến này chỉ đề cập đến nhau và các đối tượng được chỉ ra bởi 2 biến này không có bất kỳ tài liệu tham khảo nào khác, thì nó được cho là có Được thành lập một hòn đảo cô lập của người Hồi giáo và 2 đối tượng này đủ điều kiện cho GC.Island of Isolation Approach: When 2 reference variables pointing to instances of the same class, and these variables refer to only each other and the objects pointed by these 2 variables don't have any other references, then it is said to have formed an “Island of Isolation” and these 2 objects are eligible for GC.

String str1 = new String("InterviewBit");
String str2 = "InterviewBit";
 
System.out.println(str1 == str2);
3

90. Trong chương trình Java dưới đây, có bao nhiêu đối tượng đủ điều kiện để thu gom rác?

String str1 = new String("InterviewBit");
String str2 = "InterviewBit";
 
System.out.println(str1 == str2);
4

Trong chương trình trên, tổng cộng 7 đối tượng sẽ đủ điều kiện để thu gom rác. Hãy để trực quan hiểu những gì đang xảy ra trong mã.

100 câu hỏi phỏng vấn java hàng đầu năm 2022
100 câu hỏi phỏng vấn java hàng đầu năm 2022

Trong hình trên trên dòng 3, chúng ta có thể thấy rằng trên mỗi chỉ mục mảng, chúng ta đang khai báo một mảng mới để tham chiếu sẽ là của mảng mới trên tất cả 3 chỉ mục. Vì vậy, mảng cũ sẽ được chỉ ra bởi không có. Vì vậy, ba người này đủ điều kiện để thu gom rác. Và trên dòng 4, chúng tôi đang tạo một đối tượng mảng mới trên tham chiếu cũ hơn. Vì vậy, điều đó sẽ chỉ ra một mảng mới và các đối tượng đa chiều cũ sẽ trở thành đủ điều kiện để thu gom rác.

91. Cách tốt nhất để tiêm phụ thuộc là gì? Ngoài ra, nêu lý do.

Không có giới hạn cho việc sử dụng một lần tiêm phụ thuộc cụ thể. Nhưng phương pháp được đề xuất là -& nbsp;

Các setters chủ yếu được khuyến nghị cho các phụ thuộc tùy chọn tiêm, và các đối số của hàm tạo được khuyến nghị cho các đối số bắt buộc. Điều này là do việc tiêm nhà xây dựng cho phép tiêm các giá trị vào các trường bất biến và cho phép đọc chúng dễ dàng hơn.

92. Làm thế nào chúng ta có thể đặt phạm vi đậu lò xo. Và nó có phạm vi hỗ trợ nào?

Một phạm vi có thể được đặt bằng một chú thích như chú thích @scope hoặc thuộc tính "phạm vi" trong tệp cấu hình XML. Spring Bean hỗ trợ năm phạm vi sau:

  • Singleton
  • Nguyên mẫu
  • Lời yêu cầu
  • Phiên họp
  • Global-session

93. Các loại khác nhau của các mẫu thiết kế Java là gì?

Các mẫu thiết kế Java được phân loại thành các loại khác nhau sau. Và đó cũng được phân loại thêm là & nbsp;

Mô hình cấu trúc:

  • Bộ chuyển đổi
  • Cầu
  • Lọc
  • Tổng hợp
  • Người trang trí
  • Mặt tiền
  • Trọng lượng bay
  • Ủy quyền

Mẫu hành vi:

  • Thông dịch viên
  • Phương pháp/ mẫu mẫu
  • Chuỗi trách nhiệm
  • Mô hình lệnh
  • Mẫu vòng lặp
  • Mô hình chiến lược
  • Mô hình khách truy cập

Các mẫu J2EE:

  • Mẫu MVC
  • Mẫu đối tượng truy cập dữ liệu
  • Mẫu điều khiển phía trước
  • Chặn mẫu bộ lọc
  • Chuyển mẫu đối tượng

Các mẫu sáng tạo:

  • Phương pháp/mẫu nhà máy
  • Nhà máy trừu tượng
  • Người xây dựng
  • Nguyên mẫu
  • Singleton

94. Rò rỉ bộ nhớ là gì? Thảo luận về một số nguyên nhân phổ biến của nó.

Trình thu gom rác Java (GC) thường loại bỏ các đối tượng không sử dụng khi chúng không còn cần thiết, nhưng khi chúng vẫn được tham chiếu, các đối tượng không sử dụng không thể được gỡ bỏ. Vì vậy, điều này gây ra vấn đề rò rỉ bộ nhớ. Ví dụ - xem xét một danh sách được liên kết như cấu trúc bên dưới -Example - Consider a linked list like the structure below -

100 câu hỏi phỏng vấn java hàng đầu năm 2022

Trong hình trên, có những đối tượng không sử dụng không được tham chiếu. Nhưng sau đó cũng thu gom rác sẽ không giải phóng nó. Bởi vì nó đang tham khảo một số đối tượng được tham chiếu hiện có. Vì vậy, đây có thể là tình huống rò rỉ bộ nhớ.

Một số nguyên nhân phổ biến của rò rỉ bộ nhớ là -& nbsp;

  • Khi có bộ nhớ cache không giới hạn.
  • Trao đổi trang quá mức được thực hiện bởi hệ điều hành.
  • Cấu trúc dữ liệu tùy chỉnh bằng văn bản không đúng.
  • Chèn vào một đối tượng thu thập mà không cần xóa nó trước.ETC.
    etc.

95. Giả sử một luồng có khóa trên nó, gọi phương thức Sleep () trên chủ đề đó sẽ giải phóng khóa?

Một chủ đề có khóa sẽ không được phát hành ngay cả sau khi nó gọi Sleep (). Mặc dù chủ đề ngủ trong một khoảng thời gian xác định, khóa sẽ không được giải phóng.

Câu hỏi phỏng vấn lập trình Java

96. Kiểm tra xem một chuỗi nhất định là palindrom bằng cách sử dụng đệ quy.

String str1 = new String("InterviewBit");
String str2 = "InterviewBit";
 
System.out.println(str1 == str2);
5

97. Viết một chương trình Java để in loạt Fibonacci bằng cách sử dụng đệ quy.

String str1 = new String("InterviewBit");
String str2 = "InterviewBit";
 
System.out.println(str1 == str2);
6

Trong mã trên, chúng tôi đang in các giá trị cơ sở 2 Fibonacci 0 và 1. và sau đó dựa trên độ dài của fibonacci sẽ được in, chúng tôi đang sử dụng hàm trợ giúp để in đó.

98. Viết một chương trình Java để kiểm tra xem hai chuỗi có phải là đảo chữ không.

Ý tưởng chính là xác nhận độ dài của chuỗi và sau đó nếu được tìm thấy bằng nhau, hãy chuyển đổi chuỗi thành mảng char và sau đó sắp xếp các mảng và kiểm tra xem cả hai đều bằng nhau.

String str1 = new String("InterviewBit");
String str2 = "InterviewBit";
 
System.out.println(str1 == str2);
7

99. Viết một chương trình Java để tìm giai thừa của một số nhất định.

String str1 = new String("InterviewBit");
String str2 = "InterviewBit";
 
System.out.println(str1 == str2);
8

100.

Ý tưởng là tìm tổng n số tự nhiên bằng cách sử dụng công thức và sau đó tìm tổng số số trong mảng đã cho. Trừ hai khoản tiền này dẫn đến số đó là số còn thiếu thực tế. Điều này dẫn đến độ phức tạp thời gian O (n) và độ phức tạp không gian O (1).

String str1 = new String("InterviewBit");
String str2 = "InterviewBit";
 
System.out.println(str1 == str2);
9

101. Viết chương trình Java để kiểm tra xem có số có số ma thuật hay không. Một số được cho là một số ma thuật nếu sau khi thực hiện tổng số chữ số trong mỗi bước và inturn thực hiện tổng số các chữ số đó, kết quả cuối cùng (khi chỉ còn lại một chữ số) là 1.

Ví dụ, xem xét số:

  • Bước 1: 163 => 1+6+3 = 10
  • Bước 2: 10 => 1+0 = 1 => Do đó 163 là số ma thuật
System.out.println(str1.equals(str2));
0

102. Viết chương trình Java để tạo và ném các ngoại lệ tùy chỉnh.

System.out.println(str1.equals(str2));
1

Chúng tôi đã tạo lớp ngoại lệ được đặt tên với CustomException và được gọi là hàm tạo ngoại lệ cơ sở với thông báo lỗi mà chúng tôi muốn in. Và để tránh xử lý các ngoại lệ trong phương thức chính, chúng tôi đã sử dụng từ khóa ném trong khai báo phương thức.

103. Viết một chương trình Java để đảo ngược một chuỗi.

System.out.println(str1.equals(str2));
2

Trong mã trên, chúng tôi đang lưu trữ ký tự cuối cùng từ chuỗi đến giá trị đầu tiên và giá trị đầu tiên đến cuối cùng trong mảng ký tự đầu ra. Và làm điều tương tự trong vòng lặp cho các ký tự 2 đến N-1 còn lại. Đây là cách chuỗi sẽ được đảo ngược.

104. Viết chương trình Java để xoay mảng 90 độ theo chiều kim đồng hồ bằng cách lấy ma trận từ đầu vào của người dùng.

System.out.println(str1.equals(str2));
3

Trong mã trên, để xoay ma trận sang & nbsp; 90 độ, trước tiên chúng ta chuyển ma trận để hàng trở thành cột. Và sau đó, chúng tôi đang đảo ngược từng hàng trong ma trận. Vì vậy, đây là cách ma trận được xoay.

105. Viết chương trình Java để kiểm tra xem có số nào được đưa ra dưới dạng đầu vào không phải là tổng của 2 số nguyên tố.

Thí dụ :

Đầu vào - 18

Đầu ra -& nbsp;

18 = 13 + 518 = 11 + 7
18 = 11 + 7

System.out.println(str1.equals(str2));
4

Trong mã trên, đối với bất kỳ số N nào, chúng tôi tìm thấy tất cả 2 cặp số được thêm vào với nhau dẫn đến n. Và mỗi số kiểm tra nếu nó là Prime. Nếu đó là Prime thì chúng ta đang in nó. n, we find all the 2 pairs of numbers that are added together resulting in n. And each checking number if it is prime. If it is prime then we are printing that.

106. Viết một chương trình Java để giải quyết vấn đề Tháp Hà Nội.

System.out.println(str1.equals(str2));
5

Trong mã trên, trước tiên chúng tôi di chuyển đĩa N-1 từ tháp A sang tháp B, sau đó di chuyển đĩa thứ n đó từ tháp A sang tháp C, và cuối cùng, đĩa N-1 còn lại từ tháp B sang tháp C. và chúng tôi đang làm điều này một cách đệ quy cho đĩa N-1.n-1 disk from Tower A to Tower B, then moving that nth disk from Tower A to Tower C, and finally, the remaining n-1 disk from Tower B to Tower C. And we are doing this recursively for the n-1 disk.

107. Thực hiện tìm kiếm nhị phân trong Java bằng cách sử dụng đệ quy.

System.out.println(str1.equals(str2));
6

Trong mã trên, chúng tôi đang tìm phần tử giữa mỗi lần và kiểm tra xem phần tử ở giữa hay không. Nếu không, thì chúng tôi kiểm tra phía nào từ giữa nó tồn tại. Và tìm kiếm đệ quy trên Subarray cụ thể. Vì vậy, bằng cách này, chúng tôi đang giảm 2 không gian tìm kiếm mỗi lần. Vì vậy, thời gian tìm kiếm rất thấp.

Java MCQ

Người phiên dịch không là gì ngoài trình biên dịch JIT.

Nó hoạt động như trung bình giữa JVM và JIT.

Nó thực hiện chuyển đổi mã byte thành mã máy.

Nó đọc mã cấp cao và thực thi chúng.

Sự kết hợp

Tập hợp

Thành phần

Đóng gói

Phương pháp int-float

Phương pháp float-int

Dịch lỗi

Lỗi runtime

0

1

Dịch lỗi

Lỗi runtime

Lỗi runtime

Bộ sưu tập rác không xảy ra trong quá trình thực hiện chủ đề.

Chủ đề tạm dừng trong khi quá trình thu gom rác chạy.

Cả hai quá trình diễn ra đồng thời và không can thiệp vào việc thực hiện của nó.

Không có gì xảy ra, chủ đề tiến hành thực thi.

sai sai

đúng rồi

đúng sai

sai đúng

Nó gọi các hàm tạo.

Nó có cùng chức năng của toán tử mới.

Nó tạo đối tượng nếu lớp không có hàm tạo được xác định.

Các câu hỏi phỏng vấn Java phổ biến nhất là gì?

Câu hỏi và câu trả lời phỏng vấn Java phổ biến nhất..
Q #1) Java là gì? ....
Q #2) Các tính năng của Java là gì? ....
Q #3) Java cho phép hiệu suất cao như thế nào? ....
Q #4) Đặt tên cho Java IDE? ....
Q #5) Bạn có nghĩa là gì khi xây dựng? ....
Q #6) Biến cục bộ và biến thể hiện có nghĩa là gì? ....
Q #7) Lớp học là gì ?.

Tôi nên chuẩn bị gì cho cuộc phỏng vấn Java?

Những chủ đề nào để chuẩn bị cho các cuộc phỏng vấn Java ?..
Nguyên tắc cơ bản của Java ..
Cấu trúc dữ liệu và thuật toán ..
Các khái niệm hướng đối tượng ..
MultiThreading, đồng thời và cơ bản chủ đề ..
Khung bộ sưu tập Java ..
Chuyển đổi loại ngày và các nguyên tắc cơ bản ..
Array..
Thu gom rác thải..

50 câu hỏi và câu trả lời phỏng vấn phổ biến là gì?

Hơn 50 câu hỏi phỏng vấn công việc phổ biến nhất..
Cho tôi biết về bản thân của bạn..
Dẫn tôi qua sơ yếu lý lịch của bạn ..
Làm thế nào bạn biết đến vị trí này?.
Tại sao bạn muốn làm việc tại công ty này?.
Tại sao bạn muốn công việc này?.
Tại sao chúng tôi nên tuyển dụng bạn?.
Bạn có thể mang theo gì cho công ty?.
Điểm mạnh lớn nhất của bạn là gì?.

Trang web nào tốt nhất cho các câu hỏi phỏng vấn Java?

10 trang web và địa điểm để thực hành các vấn đề mã hóa cho các cuộc phỏng vấn vào năm 2022..
LeetCode.Leetcode là một trang web tuyệt vời và tương đối mới với một số lượng lớn các câu hỏi.....
Geekforgeeks.....
Hackerrank.....
Javarevisited.....
Sự quan tâm.....
Mã nghề nghiệp Blog.....
Java67.....