JavaRush /Blog Java /Random-VI /Nghỉ giải lao #167. Những điều cần xem xét trước cuộc phỏ...

Nghỉ giải lao #167. Những điều cần xem xét trước cuộc phỏng vấn Java. Sự khác biệt giữa enum và iterator trong Java là gì?

Xuất bản trong nhóm

Những điều cần xem xét trước cuộc phỏng vấn Java

Nguồn: Medium Trong bài viết này, bạn sẽ tìm thấy 17 mẹo từ một nhà phát triển có kinh nghiệm sẽ giúp bạn trong cuộc phỏng vấn Java. Nghỉ giải lao #167.  Những điều cần xem xét trước cuộc phỏng vấn Java.  Sự khác biệt giữa enum và iterator trong Java là gì?  - 1Tôi đã làm việc trong ngành CNTT hơn 20 năm và dành phần lớn thời gian đó để làm việc với Java. Ngoài ra, tôi còn có được kinh nghiệm đáng kể khi phỏng vấn các nhà phát triển Java. Mặc dù ngôn ngữ Java không ngừng phát triển nhưng các khái niệm cốt lõi phần lớn vẫn giống nhau. Dưới đây là một số mẹo tôi muốn chia sẻ với các nhà phát triển đầy tham vọng trước khi họ đi phỏng vấn. Nếu bạn lặp lại chúng, nó sẽ cứu bạn khỏi những sai lầm nghiêm trọng.
  1. Lớp Object nằm ở gốc của hệ thống phân cấp lớp Java. Tất cả các lớp Java đều theo dõi ngược lại Object . Ngay cả khi một lớp không mở rộng rõ ràng bất kỳ lớp nào, nó vẫn mở rộng Object . Tuy nhiên, một lớp có thể tự do mở rộng Object một cách rõ ràng.

  2. Trong Java, bạn chỉ có thể mở rộng một lớp (không được phép kế thừa nhiều lớp do tính mơ hồ). Tuy nhiên, một lớp có thể thực hiện bất kỳ số lượng giao diện nào cùng một lúc.

  3. Một giao diện mở rộng một giao diện khác (ngược lại với việc triển khai).

  4. Có bốn công cụ sửa đổi truy cập trong Java: public (có sẵn cho mọi người), được bảo vệ (chỉ có sẵn cho các lớp con), riêng tư (chỉ có sẵn trong một lớp duy nhất), mặc định (có sẵn trong một gói duy nhất). Cần lưu ý rằng các lớp con của cùng một lớp có thể nằm trong các gói khác nhau. Lớp cha và lớp con không nhất thiết phải là một phần của cùng một gói.

  5. Chuỗi lớp là bất biến. Tính bất biến có nghĩa là bản thân lớp String không cung cấp bất kỳ phương thức nào để thay thế giá trị trong tham chiếu String . Nếu bạn muốn thay thế giá trị của tham chiếu chuỗi, bạn phải gán giá trị đó một cách rõ ràng bằng toán tử = . So sánh điều này với các lớp StringBuffer hoặc StringBuilder , có các phương thức như nối thêm nên bạn không cần phải sử dụng toán tử = ở đó .

  6. ConcurrentHashMap hiệu quả hơn Hashtable . ConcurrentHashMap hoạt động trên các phân đoạn của cấu trúc dữ liệu cơ bản, trong đó thao tác ghi chỉ khóa một phân đoạn cụ thể (bất kể khóa thuộc về phân đoạn nào). Tuy nhiên, trong Hashtable toàn bộ cấu trúc dữ liệu sẽ bị khóa.

  7. ConcurrentHashMap chậm hơn HashMapHashMap không triển khai tính an toàn của luồng. HashMap có thể ném ra một ngoại lệ ConcurrentModificationException nếu một luồng lặp qua HashMap và một luồng khác cố gắng sửa đổi cùng một HashMap . ConcurrentHashMap sẽ không đưa ra ngoại lệ ở đây.

  8. Làm cách nào để triển khai sự bình đẳng của hai đối tượng cùng lớp mà bạn đã xác định? Trả lời: Điều này có thể được thực hiện bằng cách ghi đè phương thức hashcode() .

  9. Kết quả mặc định của phương thức toString() là gì? Trả lời: Đó là sự kết hợp của tên lớp, dấu @ và giá trị hashcode() .

  10. Làm cách nào để triển khai tính đa hình trong Java? Một cách để làm điều này là nạp chồng phương thức. Một cách khác là ghi đè phương thức.

  11. Làm thế nào để bạn gọi một hàm tạo siêu lớp từ một lớp con? Trả lời: Điều này có thể được thực hiện bằng từ khóa super() . Phương thức super() không có đối số luôn được gọi, ngay cả khi nó không được chỉ định rõ ràng. Phương thức super() có đối số phải được chỉ định rõ ràng. Lệnh gọi super() (có hoặc không có đối số) phải luôn là dòng đầu tiên trong hàm tạo của lớp con nếu nó được yêu cầu gọi.

  12. Ngoại lệ được kiểm tra và không được kiểm tra là gì? Trả lời: Các ngoại lệ được kiểm tra là những ngoại lệ phải được khai báo hoặc bị bắt trong phương thức mà chúng dự kiến ​​sẽ bị ném ra. Một ngoại lệ không được kiểm tra không có giới hạn này. java.io.IOException là một ví dụ về ngoại lệ được kiểm tra. Các ngoại lệ không được kiểm tra đến từ lớp RunTimeException .

  13. Lớp gốc của hệ thống phân cấp ngoại lệ là Throwable (do đó ngầm mở rộng Object ). Ngoại lệLỗi đến từ Throwable .

  14. Kể từ Java 8, các phương thức có thể được triển khai trong giao diện. Các phương thức mặc định và phương thức tĩnh có thể được triển khai.

  15. Một lớp đủ điều kiện là trừu tượng không thể được khởi tạo. Bất kỳ lớp nào không cung cấp nội dung cho bất kỳ phương thức nào đều phải được khai báo là trừu tượng. Nhà phát triển có thể khai báo một lớp là trừu tượng ngay cả khi tất cả các phương thức đều có phần thân - tuy nhiên, điều này không được khuyến khích lắm vì trong trường hợp này, lớp đó không thể được khởi tạo.

  16. Lớp học cuối cùng không thể được mở rộng. Một biến cuối cùng không thể được gán một giá trị khác. Phương thức cuối cùng không thể bị ghi đè.

  17. Những từ khóa nào được yêu cầu trong cấu trúc thử bắt cuối cùng ? Đây có thể là try-catch , try-finally hoặc cả ba. Trong trường hợp này, bắt không phải là từ khóa bắt buộc.

Sự khác biệt giữa enum và iterator trong Java là gì?

Nguồn: Rrtutors Bài đăng này mang đến cho bạn thảo luận về sự khác biệt giữa phép liệt kê và phép lặp trong Java. Gói Java.util cung cấp hai giao diện để duyệt qua các phần tử của đối tượng Bộ sưu tập : EnumerationIterator . Mặc dù cả hai đều đi qua một đối tượng Collection nhưng vẫn có một số khác biệt giữa chúng.

Sự khác biệt giữa enum và iterator

  • Thời gian được thêm vào JDK: Chúng được giới thiệu vào những thời điểm khác nhau. Enum được giới thiệu trong JDK 1.0, trong khi iterator được giới thiệu trong JDK 1.2.

  • Loại bỏ các yếu tố: Đây là điểm khác biệt chính giữa hai yếu tố này. Trong giao diện Iterator , chúng ta có thể loại bỏ một phần tử khi lặp qua một đối tượng Collection , trong khi chúng ta không thể thay đổi nó khi lặp qua một đối tượng Collection bằng cách sử dụng Enumeration . Điều này là do giao diện Iterator có phương thức Remove() nhưng giao diện Enumeration thì không.

  • Loại hoạt động: Iterator có loại hoạt động không nhanh và liệt kê có loại hoạt động không an toàn. Kết quả là, Iterator ném ra Ngoại lệ ConcurrentModificationException khi bộ sưu tập được sửa đổi trong quá trình lặp trừ khi phương thức Remove() của chính nó được sử dụng , trong khi Enumeration không đưa ra bất kỳ ngoại lệ nào khi bộ sưu tập được sửa đổi trong quá trình lặp.

Ví dụ về liệt kê và lặp trong Java

Ví dụ về liệt kê

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Enumeration;

import java.util.List;

import java.util.Vector;

public class Enumeration_Example {

      public static void main(String[] args) {

                  List laptoplist = new ArrayList(Arrays.asList( new String[] {"Samsung", "Lenovo", "Apple", "HP"}));

            Vector vectali = new Vector(laptoplist);

            delete(vectali, "Samsung");

        }

        private static void delete(Vector vectali, String laptop) {

            Enumeration lapi = vectali.elements();

            while (lapi.hasMoreElements()) {

              String s = (String) lapi.nextElement();

              if (s.equals(laptop)) {

                  vectali.remove(laptop);

              }

            }

            System.out.println("The Laptop brands includes:");

            lapi = vectali.elements();

            while (lapi.hasMoreElements()) {

              System.out.println(lapi.nextElement());

            }

      }

}
Phần kết luận:
Các hãng Laptop bao gồm: Lenovo Apple HP

Ví dụ về trình vòng lặp:

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Iterator;

import java.util.List;

import java.util.Vector;

public class Iterator_example {

      public static void main(String[] args) {

                  List laptoplist = new ArrayList(Arrays.asList( new String[] {"Samsung", "Lenovo", "HP", "Apple"}));

            Vector vectali = new Vector(laptoplist);

            delete(vectali, "HP");

        }

        private static void delete(Vector vectali, String name) {

            Iterator a = vectali.iterator();

            while (a.hasNext()) {

              String s = (String) a.next();

              if (s.equals(name)) {

                  a.remove();

              }

            }

            // Display the names

            System.out.println("The laptop brand includes:");

            a = vectali.iterator();

            while (a.hasNext()) {

              System.out.println(a.next());

            }

      }

}
Phần kết luận:
Thương hiệu laptop bao gồm: Samsung Lenovo Apple
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION