JavaRush /Blog Java /Random-PL /Poziom 34. Odpowiedzi na pytania podczas rozmowy kwalifik...
lichMax
Poziom 40
Санкт-Петербург

Poziom 34. Odpowiedzi na pytania podczas rozmowy kwalifikacyjnej na temat poziomu

Opublikowano w grupie Random-PL
Przeszukałem witrynę za pomocą wyszukiwania natywnego, a wszystko przeszukałem za pomocą Google - nie ma odpowiedzi na pytania z tego poziomu. Może coś przeoczyłem i nadal są gdzieś na stronie!? Poziom 34. Odpowiedzi na pytania z rozmowy kwalifikacyjnej na temat poziomu - 1Na wszelki wypadek załączam odpowiedzi, które sama dla siebie napisałam: Pytania do rozmowy kwalifikacyjnej:
  1. Co to jest zbieranie śmieci?
  2. Kiedy nazywa się metodę finalize?
  3. Co się stanie, jeśli finalizew metodzie wystąpi wyjątek?
  4. Co się stało SoftReference?
  5. Co się stało WeakReference?
  6. Co się stało PhantomReference?
  7. Jak to działa WeakHashMap? Gdzie jest używany?
  8. Dlaczego musisz przekazać kolejkę do konstruktora PhantomReference?
  9. Dlaczego potrzebujesz rejestratora?
  10. Jakie znasz ustawienia rejestratora?
Moje odpowiedzi:
  1. Jest to mechanizm niszczenia niepotrzebnych obiektów. Niepotrzebne przedmioty to nieużywane przedmioty. Istnieją dwa sposoby znajdowania takich obiektów: liczenie odniesień i śledzenie. W pierwszym przypadku każdy obiekt jest powiązany ze zmienną przechowującą liczbę odwołań do tego obiektu. Jeśli liczba ta spadnie do zera, obiekt uważa się za martwy. W drugim przypadku moduł zbierający elementy bezużyteczne podąża za referencjami do obiektów od korzeni do końca (aż do wartości null), przechodząc przez całe drzewo. Obiekty, do których nie może dotrzeć z punktów korzeniowych, są uważane za martwe. Punktami głównymi są wszystkie aktywne wątki, metoda główna, argumenty metody main(), a także wszystkie zmienne statyczne klasy, w której znajduje się metoda main().

    Ustalenie, które obiekty kwalifikują się do zniszczenia, to dopiero pierwsza część pracy śmieciarki. Druga część polega na ich usunięciu i pracy z pamięcią. Zastosowano tu podejście hybrydowe. Cała pamięć dostępna dla obiektów jest podzielona na trzy obszary: obszar młodych obiektów, obszar starych obiektów i obszar obiektów stałych (są to klasy, metadane, internowane ciągi znaków itp.). Pierwszy obszar podzielony jest na trzy kolejne podobszary: Eden oraz przestrzeń ocalałych 1 i 2. Eden przechowuje wszystkie nowo utworzone obiekty. Pozostałe dwie strefy przechowują obiekty, które przetrwały ostatnie wyrzucanie elementów bezużytecznych. Śmieciarz działa z całym tym obszarem (obszarem młodych obiektów) w następujący sposób. Podczas następnego zbierania śmieci znajduje żywe obiekty w obszarze Edenu i kopiuje je do drugiego obszaru ocalałego. Następnie szuka również żywych obiektów w pierwszym obszarze i kopiuje je albo do drugiego obszaru ocalałych, albo, jeśli są już wystarczająco „stare”, do obszaru starego pokolenia. Następnie oczyszcza obszar Edenu i obszar pierwszego ocalałego. Następnie uważa drugi obszar ocalałych za pierwszy. I tyle, kończy się wywóz śmieci na tym terenie.

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

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

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

  4. SoftReference переводится Jak "мягкая połączyć". Эта połączyć на obiekt, но более слабая, чем обычная połączyć (StrongReference). Объекты, на которые сущесвуют только мягкие ссылки, называются мягkodостижимыми. Такие obiektы не уничтожаются в обычном случае. Но если у JVM закочиналась память, то сборщик мусоры удаляет все такие obiektы.

  5. WeakReference — это так называемая слабая połączyć на obiekt. Она ещё слабее Soft-ссылки. Все obiektы, на которые существуют только слабые ссылки, будут удалены при ближайщей сборке мусора.

  6. PhantomReference — это самая слабая połączyć. Механизм работы с такими połączyć запускается только если на obiekt нет больше ниJakих других ссылок. Призрачные ссылки используются для сложной proceduryы удаления obiektа. Это может быть необходимо, если obiekt делает что за граница Java-машины, например, вызывает низкоуровневые функции ОС Lub пишет своё состояние в файл, Lub делает ещё что-то важное и сложное.

    Механизм работы с такими połączyćми следующий. Если на obiekt не осталось больше ниJakих других ссылок, и у него переопределён метода finalize(), то этот метода будет вызван во время ближащей сборки мусора. Если же этот метод не переопределён, то этот obiekt пропускает текущую сборку мусора, и попадает только в следующую. Во время этой (следующей) сборки мусора данный obiekt помещается в очередь призрачных obiektов, из которой будет удалён, когда у его призрачной ссылки вызовут метод clear(). Также стоит отметить, что метода get() у призрачной połączyć всегда возвращает null (в отличие от двух других несильных ссылок, у которых он возвращает null, только если obiekt уже уничтожен).

  7. WeakHashMap — это HashMap, у которого ключами являются слабые ссылки. Поэтому, если во время ближайшей сборки мусора будет обнаружено, что на obiekt существует только połączyć в WeakHashMap, то из WeakHashMap будет удалена вся пара "ключ-oznaczający", связанная с этим obiektом.

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

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

  9. Rejestrator jest potrzebny do zapisywania informacji o zachowaniu programu, a także niektórych jego stanach. Może być używany do debugowania i identyfikowania błędów i awarii programu. Rejestrator umożliwia także programiście otrzymywanie informacji zwrotnych z programu podczas jego działania. Ponadto w przypadku awarii krytycznych rejestrator może szybko powiadomić o tych awariach odpowiednie osoby (np. programistów, klientów, kierowników projektów, wsparcie techniczne itp.).

  10. Konfigurując rejestrowanie, możesz określić następujące rzeczy:

    • miejsce, w którym zostaną zapisane informacje (plik, konsola, baza danych, sieć itp.)
    • na jakim poziomie wiadomości będą nagrywane
    • typ wpisów dziennika
    • dla plików możesz określić: ścieżkę do pliku i katalogu, rozmiar pliku, liczbę plików
    • określ dla każdego pakietu własny poziom komunikatów, które będą zapisywane w dzienniku
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION