Общие вопросы интервью в интервью Java становятся все более и более распространенными в Java 5 в течение значительного времени, и многие приложения либо переходят на Java 5, и почти вся новая разработка Java происходит на Tiger (кодовое имя Java 5). Важность функций Generics и Java 5, таких как Enum , утилиты Collection, становится все более популярной на интервью Java. Общий вопрос интервью может стать очень сложным, если вы не знакомы с ограниченными и неограниченными универсальными подстановочными знаками , как работаютуниверсальныешаблоны внутри себя , стирают тип и знакомы с написанием параметризованных обобщенных классов и методов в Java. Лучший способ подготовиться к собеседованию по дженерикам — это попробовать простую программу, лучше всего описывающую различные дженерики. В любом случае, в этой статье о Java-интервью мы увидим некоторые популярные вопросы об интервью и ответы на дженерики в Java.
1. Что такое дженерики в Java?Каковы преимущества использования Generics?
Это один из первых вопросов интервью, заданных на дженериках в любом Java-интервью, в основном на начальном и среднем уровнях. Те, кто пришел до Java 5, знают, как неудобно было сохранять объект в Collection и затем приводить его обратно к правильному типу Type перед его использованием. Дженерики мешают от тех. он обеспечивает безопасность типов времени компиляции и гарантирует, что вы вставляете только правильный тип в коллекцию, и исключает ClassCastException во время выполнения.
2. Как Generics работает в Java?Что такое стирание типа?
Это один из лучших вопросов интервью в Generics. Обобщение реализовано с использованием стирания типов , компилятор стирает всю информацию, относящуюся к типу, во время компиляции, а информация, относящаяся к типу, недоступна во время выполнения. например, List <String> представлен только List во время выполнения. Это было сделано для обеспечения двоичной совместимости с библиотеками, которые были разработаны до Java 5. У вас нет доступа к аргументу Type во время выполнения, а Generic type переводится в тип Raw компилятором во время выполнения. Вы можете получить много дополнительных вопросов на основе этого общего вопроса на основе вашего ответа, например, Почему Generics реализован с использованием стирания типа или представления некоторого недопустимого общего кода, что приводит к ошибке компилятора. прочитайте мой пост, как Generics работает в Java для более подробной информации
3. Что такое подстановочные знаки «Неограниченный» и «Неограниченный» в Generics?
Это еще один очень популярный вопрос об Java-интервью по Generics. Ограниченные подстановочные знаки — это те, которые накладывают ограничения на тип. Есть два вида подстановочных знаков <? расширяет T>, что накладывает верхнюю границу, гарантируя, что тип должен быть подклассом T и <? super T> где его наложение нижней границы, гарантируя, что Type должен быть суперклассом T. Этот универсальный тип должен быть создан с помощью Type внутри bound, иначе это приведет к ошибке компиляции. С другой стороны, <?> Представляют и неограниченный тип, потому что <?> Можно заменить любым типом. См. Больше на моем посте различия между подстановочными знаками Bounded и Unbounded в Generics .
4. В чем разница междусписком <?расширяет T>иList <?супер T>?
Это связано с предыдущими вопросами об общих дженериках, иногда вместо того, чтобы спрашивать, что является ограниченным и неограниченным подстановочными знаками, интервьюер представляет этот вопрос, чтобы оценить ваше понимание дженериков Обе декларации List являются примером ограниченных символов подстановки, List <? extends T> будет принимать любой список с типом extending T, а List <? super T> примет любой Список с типом super class из T. Например, List <? extends Number> может принимать список <Integer> или список <Float>. см. больше по ссылке выше.
5. Как написать универсальный метод, который принимает универсальный аргумент и возвращает универсальный тип?
Написание универсального метода не сложно, вместо использования необработанного типа вам нужно использовать универсальный тип, такой как T, E или K, V, которые являются хорошо известными заполнителями для Type, Element и Key, Value. Посмотрите на Java Collection Framework для примеров обобщенных методов. В простейшей форме универсальный метод будет выглядеть так:
1
2
3
publicV put(K key, V value) {
returncache.put(key, value);
}
6. Как написать параметризованный класс в Java, используя Generics?
Это расширение предыдущего вопроса об интервью с дженериками Java. Вместо того, чтобы просить написать универсальный метод, Interviewer может попросить написать безопасный для типа класс с использованием обобщенных типов . опять же, вместо использования необработанных типов необходимо использовать универсальные типы и всегда использовать стандартный заполнитель, используемый в JDK.
7. Напишите программу для реализации LRU-кэша с использованием Generics?
Это упражнение для тех, кто любит кодирование в Java. Один намек заключается в том, что LinkedHashMap может использоваться для реализации LRU-кэша фиксированного размера, где необходимо удалить самую старую запись, когда Cache заполнен. LinkedHashMap предоставляет метод с именем removeEldestEntry (), который вызывается put () и putAll () и может использоваться для указания удаления самой старой записи. Вы можете сами предложить свою реализацию, если у вас есть рабочая версия вместе с модульным тестом.
8. Можете ли вы передатьList <String>методу, который принимает List <Object>
Этот общий вопрос об интервью на Java может показаться странным для любого, кто не очень знаком с Generics, так как на первый взгляд кажется, что String является объектом, поэтому List <String> можно использовать там, где требуется List <Object>, но это не так. Это приведет к ошибке компиляции. Это имеет смысл, если вы идете на один шаг дальше, потому что List <Object> может хранить любую вещь, включая String, Integer и т. Д., Но List <String> может хранить только String.
Вероятно, это был самый простой вопрос об обобщении в Java, если вы знаете тот факт, что Array не поддерживает Generics, и именно поэтому Джошуа Блоч предложил предпочесть List над Array, потому что List может обеспечить безопасность типов времени компиляции над Array.
10. Как вы можете подавить непроверенное предупреждение в Java?
Компилятор javac для Java 5 генерирует непроверенные предупреждения, если вы используете объединение необработанных типов и обобщенных типов, например
1
2
3
List<String> rawList = newArrayList()
Note: Hello.java uses unchecked or unsafe operations.;
который может быть подавлен с помощью аннотации @SuppressWarnings («unchecked»).
Это были некоторые из часто задаваемых вопросов об интервью дженериков и ответов на Java . Ни один из этих общих вопросов интервью не является жестким или сложным, на самом деле они основаны на фундаментальных знаниях дженериков. Любой Java-программист, который имеет приличное знание Generics, должен быть знаком с этими универсальными вопросами в Java. Если у вас есть какой-либо другой хороший общий вопрос, который был задан в каком-либо интервью, или вы ищете ответ на любой вопрос об интервью Generics на Java, пожалуйста, оставьте сообщение в разделе комментариев.