JavaRush /Blog Java /Random-VI /Cấp độ 21. Trả lời các câu hỏi phỏng vấn về chủ đề cấp độ...
zor07
Mức độ
Санкт-Петербург

Cấp độ 21. Trả lời các câu hỏi phỏng vấn về chủ đề cấp độ

Xuất bản trong nhóm
Cấp độ 21. Trả lời câu hỏi phỏng vấn về chủ đề cấp độ - 1
  1. Liệt kê các phương thức lớpObject

    • equals()
    • hashCode()
    • toString()
    • getClass()
    • notify()
    • notifyAll()
    • wait()
    • wait(long timeOut)
    • wait(long timeOut, int nanos)
  2. equalsTại sao & phương pháp cần thiết hashCode?

    Dùng để so sánh các đối tượng.

    Mục đích của phương pháp này equalslà xác định xem các đối tượng có giống nhau bên trong hay không bằng cách so sánh nội dung bên trong của các đối tượng. Điều này equalshoạt động chậm, đầu tiên mã băm của các đối tượng được so sánh và nếu mã băm bằng nhau, việc kiểm tra sẽ được thực hiện đối vớiequals

  3. Điều gì xảy ra nếu bạn ghi đè bằng nhưng không ghi đè hashCode?

    Ban đầu hashCodelà một số ngẫu nhiên.

    equalsCác bộ sưu tập trong Java luôn tìm kiếm/so sánh chúng bằng phương thức này trước khi so sánh các đối tượng bằng cách sử dụng hashCode(). Và nếu các đối tượng giống nhau có khác nhau hashCodethì các đối tượng đó sẽ được coi là khác nhau - đơn giản là không thể so sánh bằng cách sử dụng chúng equals.

  4. Tại sao các phương pháp wait, notify, notifyAll?

    Đôi khi một chương trình có thể gặp tình huống một luồng đã nhập một khối mã synchronized, chặn màn hình và không thể hoạt động thêm, bởi vì một số dữ liệu vẫn bị thiếu: ví dụ: tệp cần xử lý vẫn chưa được tải hoặc nội dung tương tự. Một phương pháp đã được phát minh để giải quyết vấn đề này wait(). Việc gọi phương thức này sẽ khiến luồng giải phóng màn hình và "tạm dừng".

    Để bỏ tạm dừng, các phương thức được sử dụng notify. notifyAllPhương thức notify“giải phóng” một luồng ngẫu nhiên, phương thức notifyAll– tất cả các luồng “đóng băng” của một màn hình nhất định.

  5. Làm thế nào để sao chép một đối tượng một cách chính xác?

    Hai loại nhân bản.

    Để sao chép một đối tượng mặc định:

    • Thêm giao diện Cloneablevào lớp của bạn
    • Ghi đè phương thức clonevà gọi triển khai cơ sở trong đó:
    class Point implements Cloneable
    {
     int x;
     int y;
    
     public Object clone()
     {
      return super.clone();
     }
    }

    Hoặc bạn có thể tự viết phần thực hiện của phương thức clone:

    class Point
    {
     int x;
     int y;
    
     public Object clone()
     {
      Point point = new Point();
      point.x = this.x;
      point.y = this.y;
      return point;
     }
    }
  6. Tại sao phương pháp này cần thiết finalize()và nó hoạt động như thế nào?

    Nếu bạn còn nhớ, đây finalize()là một phương thức đặc biệt được gọi trên một đối tượng trước khi trình thu gom rác phá hủy nó.

    Mục đích chính của phương pháp này là giải phóng các tài nguyên không phải Java bên ngoài đã được sử dụng: đóng tệp, luồng I/O, v.v.

    finalize()hoạt động không ổn định.

    Phương pháp này không đáp ứng được những mong đợi đặt ra cho nó. Máy Java có thể trì hoãn việc hủy một đối tượng cũng như lệnh gọi một phương thức finalizebao lâu tùy thích. Hơn nữa, nó không đảm bảo rằng phương thức này sẽ được gọi. Trong nhiều trường hợp, vì mục đích "tối ưu hóa", nó không được gọi.

  7. Sự khác biệt là gì final, finally, finalize?

    • final- bổ nghĩa
    • Các trường không thể thay đổi, các phương thức bị ghi đè
    • Các lớp không thể được kế thừa
    • Công cụ sửa đổi này chỉ áp dụng cho các lớp, phương thức và biến (cả biến cục bộ)
    • Các đối số của phương thức được đánh dấu là finalchỉ đọc; cố gắng thay đổi chúng sẽ dẫn đến lỗi biên dịch.
    • Переменные final не инициализируются по умолчанию, им необходимо явно присвоить meaning при объявлении or в конструкторе, иначе – ошибка компиляции
    • Если final переменная содержит ссылку на an object, an object может быть изменен, но переменная всегда будет ссылаться на тот же самый an object
    • Также это справедливо и для массивов, потому что массивы являются an objectми, – массив может быть изменен, а переменная всегда будет ссылаться на тот же самый массив
    • Если класс объявлен final и abstract (взаимоисключающие понятия), произойдет ошибка компиляции
    • Так How final класс не может наследоваться, его методы никогда не могут быть переопределены

    finally — блок в связке try-catch-finally, code в котором выполнится независимо от того вылетело ли исключение в блоке try or нет. Используется для освобождения ресурсов.

    finalize — метод в классе Object см 6.

  8. What такое try-with-resources?

    Это специальная конструкция try, называемая try-with-resources, в которой Обрати внимание – после try следуют круглые скобки, где объявляются переменные и создаются an objectы. Эти an objectы можно использовать внутри блока try, обозначенного скобками {}. Когда выполнение команд блока try закончится, независимо от того – нормально оно закончилось or было исключение, для an object, созданного внутри круглых скобок (), будет вызван метод close();

  9. Чем отличаются методы wait(1000) и sleep(1000)?

    sleep() приостанавливает поток на указанное. состояние меняется на TIMED_WAITING, по истечению — RUNNABLE

    wait() меняет состояние потока на WAITING

    может быть вызвано только у an object владеющего блокировкой, в противном случае выкинется исключение IllegalMonitorStateException. при срабатывании метода блокировка отпускается, что позволяет продолжить работу другим потокам ожидающим захватить ту же самую блокировку . в случае wait(int) с аргументом состояние будет TIMED_WAITING

  10. В чем отличие i++ и ++i?

    • ++i, i сначала увеличивается на 1, затем участвует в выражении.
    • i++, i сначала участвует в выражении, затем увеличивается на 1.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION