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

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

Xuất bản trong nhóm
Tôi đã tìm kiếm trang web bằng tìm kiếm gốc của mình và tìm kiếm mọi thứ bằng Google - không có câu trả lời nào cho các câu hỏi ở cấp độ này. Có lẽ tôi đã bỏ lỡ điều gì đó và chúng vẫn còn ở đâu đó trên trang web này!? Cấp độ 34. Trả lời câu hỏi phỏng vấn về chủ đề cấp độ - 1Để đề phòng, tôi đính kèm các câu trả lời mà tôi đã viết cho chính mình: Câu hỏi cho cuộc phỏng vấn:
  1. Thu gom rác là gì?
  2. Khi nào phương thức được gọi finalize?
  3. Điều gì xảy ra nếu finalizemột ngoại lệ xảy ra trong một phương thức?
  4. Chuyện gì đã xảy ra vậy SoftReference?
  5. Chuyện gì đã xảy ra vậy WeakReference?
  6. Chuyện gì đã xảy ra vậy PhantomReference?
  7. Làm thế nào nó hoạt động WeakHashMap? Nó được sử dụng ở đâu?
  8. Tại sao bạn cần chuyển hàng đợi tới hàm tạo PhantomReference?
  9. Tại sao bạn cần một logger?
  10. Bạn biết những cài đặt logger nào?
Câu trả lời của tôi:
  1. Đây là một cơ chế để tiêu diệt các đối tượng không cần thiết. Những đồ vật không cần thiết là những đồ vật không được sử dụng. Có hai cách để tìm các đối tượng đó: đếm tham chiếu và truy tìm. Trong trường hợp đầu tiên, mỗi đối tượng được liên kết với một biến lưu trữ số lượng tham chiếu đến đối tượng này. Nếu con số này giảm xuống 0 thì vật thể được coi là đã chết. Trong trường hợp thứ hai, trình thu gom rác tuân theo các tham chiếu đối tượng từ điểm gốc đến điểm cuối (cho đến giá trị null), đi qua toàn bộ cây. Các đối tượng mà nó không thể tiếp cận từ điểm gốc được coi là đã chết. Các điểm gốc là tất cả các luồng đang hoạt động, phương thức chính, các đối số của phương thức main(), cũng như tất cả các biến tĩnh của lớp chứa phương thức đó main().

    Việc xác định đối tượng nào đủ điều kiện để tiêu hủy chỉ là phần đầu tiên trong công việc của người thu gom rác. Phần thứ hai thực sự là xóa chúng và làm việc với bộ nhớ. Một cách tiếp cận lai được sử dụng ở đây. Tất cả bộ nhớ có sẵn cho các đối tượng được chia thành ba vùng: vùng đối tượng trẻ, vùng đối tượng cũ và vùng đối tượng cố định (đây là các lớp, siêu dữ liệu, chuỗi nội bộ, v.v.). Khu vực đầu tiên được chia thành ba khu vực phụ nữa: Eden và không gian sống sót 1 và 2. Eden lưu trữ tất cả các đồ vật mới được tạo. Hai vùng còn lại lưu trữ các đối tượng còn sót lại sau lần thu gom rác cuối cùng. Trình thu gom rác làm việc với toàn bộ khu vực này (khu vực của các đối tượng trẻ) như sau. Trong lần thu gom rác tiếp theo, anh ta tìm thấy những vật thể sống ở khu vực Eden và sao chép chúng sang khu vực sống sót thứ hai. Sau đó, anh ta cũng tìm kiếm các vật thể sống ở khu vực đầu tiên và sao chép chúng sang khu vực thứ hai của những người sống sót, hoặc nếu họ đã đủ “già” thì vào khu vực của thế hệ cũ. Sau đó, anh ta dọn sạch khu vực Eden và khu vực sống sót đầu tiên. Tiếp theo, hắn coi khu vực thứ hai của những người sống sót là khu vực đầu tiên. Thế là xong, việc thu gom rác ở khu vực này kết thúc.

    Для второй области сборка мусора идёт несколько по-другому. Там есть одна большая область, она ни на что не делится, но сборщик мусора все живые an objectы в ней во время своей работы перемещает в начало области. Соответственно, вторая часть области будет состоять только из пустого пространства и мёртвых an objectов. После этого сборщик мусора завершает свою работу.

  2. Перед уничтожение an object сборщиком мусора. Также можно вручную запустить вызовы этого метода у всех недостижимых an objectов, для этого надо вызвать метод System.runFinalization() or Runtime.getRuntime().runFinalization().

  3. Это исключение будет проигнорировано, и произойдёт выход из метода.

  4. SoftReference переводится How "мягкая link". Эта link на an object, но более слабая, чем обычная link (StrongReference). Объекты, на которые сущесвуют только мягкие ссылки, называются мягcodeостижимыми. Такие an objectы не уничтожаются в обычном случае. Но если у JVM закочиналась память, то сборщик мусоры удаляет все такие an objectы.

  5. WeakReference — это так называемая слабая link на an object. Она ещё слабее Soft-ссылки. Все an objectы, на которые существуют только слабые ссылки, будут удалены при ближайщей сборке мусора.

  6. PhantomReference — это самая слабая link. Механизм работы с такими link запускается только если на an object нет больше ниHowих других ссылок. Призрачные ссылки используются для сложной proceduresы удаления an object. Это может быть необходимо, если an object делает что за граница Java-машины, например, вызывает низкоуровневые функции ОС or пишет своё состояние в файл, or делает ещё что-то важное и сложное.

    Механизм работы с такими linkми следующий. Если на an object не осталось больше ниHowих других ссылок, и у него переопределён метода finalize(), то этот метода будет вызван во время ближащей сборки мусора. Если же этот метод не переопределён, то этот an object пропускает текущую сборку мусора, и попадает только в следующую. Во время этой (следующей) сборки мусора данный an object помещается в очередь призрачных an objectов, из которой будет удалён, когда у его призрачной ссылки вызовут метод clear(). Также стоит отметить, что метода get() у призрачной link всегда возвращает null (в отличие от двух других несильных ссылок, у которых он возвращает null, только если an object уже уничтожен).

  7. WeakHashMap — это HashMap, у которого ключами являются слабые ссылки. Поэтому, если во время ближайшей сборки мусора будет обнаружено, что на an object существует только link в WeakHashMap, то из WeakHashMap будет удалена вся пара "ключ-meaning", связанная с этим an objectом.

    В связи с этим данная коллекция может быть использована для хранения Howой-то дополнительной, не очень важной информации об an objectе. Также её удобно использоваться для хранения Howой-то временной информации (которая нужная только в рамках данной операции).

  8. Эта очередь используется для отслеживания того, что an object больше не нужен. Может быть использовано для закрытия ресурсов, открытых данным an objectом (например, удаление созданных файлов).

  9. Cần có một trình ghi nhật ký để lưu thông tin về hoạt động của chương trình cũng như một số trạng thái của chương trình. Có thể được sử dụng để gỡ lỗi và xác định lỗi và lỗi chương trình. Trình ghi nhật ký cũng cho phép nhà phát triển nhận phản hồi từ chương trình của mình khi chương trình đang chạy. Ngoài ra, trong trường hợp xảy ra lỗi nghiêm trọng, trình ghi nhật ký có thể nhanh chóng thông báo cho đúng người (ví dụ: nhà phát triển, khách hàng, người quản lý dự án, bộ phận hỗ trợ kỹ thuật, v.v.) về những lỗi này.

  10. Khi thiết lập ghi nhật ký, bạn có thể chỉ định những điều sau:

    • nơi thông tin sẽ được ghi (tệp, bảng điều khiển, cơ sở dữ liệu, mạng, v.v.)
    • thông báo ở mức độ nào sẽ được ghi lại
    • loại mục nhật ký
    • đối với các tệp bạn có thể chỉ định: đường dẫn đến tệp và thư mục, kích thước tệp, số lượng tệp
    • chỉ định cho từng gói riêng lẻ mức độ thông báo sẽ được ghi vào nhật ký
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION