JavaRush /Blog Java /Random-FR /Niveau 34. Réponses aux questions d'entretien sur le suje...
lichMax
Niveau 40
Санкт-Петербург

Niveau 34. Réponses aux questions d'entretien sur le sujet du niveau

Publié dans le groupe Random-FR
J'ai effectué une recherche sur le site en utilisant ma recherche native et tout recherché en utilisant Google - il n'y a pas de réponses aux questions de ce niveau. Peut-être que j'ai raté quelque chose, et ils sont toujours là quelque part sur le site !? Niveau 34. Réponses aux questions d'entretien sur le thème du niveau - 1Au cas où, je joins les réponses que j'ai écrites pour moi-même : Questions pour l'entretien :
  1. Qu’est-ce que la collecte des déchets ?
  2. Quand la méthode est-elle appelée finalize?
  3. Que se passe-t-il si finalizeune exception se produit dans une méthode ?
  4. Ce qui s'est passé SoftReference?
  5. Ce qui s'est passé WeakReference?
  6. Ce qui s'est passé PhantomReference?
  7. Comment ça marche WeakHashMap? Où est-il utilisé ?
  8. Pourquoi faut-il passer une file d'attente au constructeur PhantomReference?
  9. Pourquoi avez-vous besoin d'un enregistreur ?
  10. Quels paramètres de l'enregistreur connaissez-vous ?
Mes réponses:
  1. Il s'agit d'un mécanisme permettant de détruire les objets inutiles. Les objets inutiles sont des objets inutilisés. Il existe deux manières de trouver de tels objets : le comptage de références et le traçage. Dans le premier cas, chaque objet est associé à une variable qui stocke le nombre de références à cet objet. Si ce nombre tombe à zéro, alors l'objet est considéré comme mort. Dans le second cas, le garbage collector suit les références d'objet depuis les points racines jusqu'à la fin (jusqu'à la valeur nulle), en parcourant l'intégralité de cette arborescence. Les objets qu'il ne peut pas atteindre depuis les points racines sont considérés comme morts. Les points racines sont tous les threads actifs, la méthode principale, les arguments de la méthode main(), ainsi que toutes les variables statiques de la classe dans laquelle se trouve la méthode main().

    Déterminer quels objets peuvent être détruits n'est que la première partie du travail du garbage collector. La deuxième partie consiste à les supprimer et à travailler avec la mémoire. Une approche hybride est utilisée ici. Toute la mémoire disponible pour les objets est divisée en trois zones : la zone des objets jeunes, la zone des objets anciens et la zone des objets permanents (ce sont les classes, les métadonnées, les chaînes internées, etc.). La première zone est divisée en trois sous-zones supplémentaires : Eden et les espaces survivants 1 et 2. Eden stocke tous les objets nouvellement créés. Les deux zones restantes stockent les objets qui ont survécu au dernier garbage collection. Le garbage collector travaille avec toute cette zone (la zone des jeunes objets) comme suit. Lors du prochain ramassage des ordures, il retrouve des objets vivants dans la zone Eden et les copie dans la deuxième zone des survivants. Après cela, il recherche également des objets vivants dans la première zone et les copie soit dans la deuxième zone des survivants, soit, s'ils sont déjà assez « vieux », dans la zone de l'ancienne génération. Ensuite, il nettoie la zone Eden et la zone des premiers survivants. Ensuite, il considère le deuxième domaine des survivants comme le premier. Et voilà, le ramassage des déchets se termine pour cette zone.

    Для второй области сборка мусора идёт несколько по-другому. Там есть одна большая область, она ни на что не делится, но сборщик мусора все живые 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. Un enregistreur est nécessaire pour enregistrer des informations sur le comportement du programme, ainsi que certains de ses états. Peut être utilisé pour déboguer et identifier les erreurs et les échecs du programme. Le logger permet également au développeur de recevoir des retours de son programme pendant son exécution. De plus, en cas de pannes critiques, l'enregistreur peut rapidement informer les bonnes personnes (par exemple, développeurs, clients, chefs de projet, support technique, etc.) de ces pannes.

  10. Lors de la configuration de la journalisation, vous pouvez spécifier les éléments suivants :

    • l'endroit où seront écrites les informations (fichier, console, base de données, réseau, etc.)
    • quel niveau les messages seront enregistrés
    • type d'entrées de journal
    • pour les fichiers, vous pouvez spécifier : le chemin d'accès au fichier et au répertoire, la taille du fichier, le nombre de fichiers
    • spécifier pour chaque package individuel son propre niveau de messages qui seront écrits dans le journal
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION