Каковы некоторые хорошие вопросы об интервью Java и ответы относительно дженериков и аннотации? [закрытый]

12
задан David M 21 May 2010 в 15:46
поделиться

10 ответов

  • Что гарантирует Class Enum > ?
  • Является ли Список x () полезной сигнатурой?
  • Политики сохранения аннотаций и почему они существуют?
  • Предположим, вы хотите повторно использовать класс в разных контекстах, используете ли вы аннотации или внешнюю конфигурацию? (т.е. аннотации вводят зависимости).

Сложнее:

  • Примеры допустимого универсального типа, который не может быть выражен с помощью системы типов Java и приведет к предупреждениям компилятора.
  • Примеры, в которых компилятор java будет / не будет определять универсальный тип? (примеры кода, в котором компилятор определит неправильный тип)
  • Какая информация об общем типе не стирается и может быть получена из байтового кода? ( Токены супертипа - это одно приложение)
  • Что такое APT (варианты использования, когда не использовать отражение)?
3
ответ дан 2 December 2019 в 05:53
поделиться
  1. Generic:

Q: В чем разница между Hashmap и Hashtable?

A: Hashtable синхронизируется, Hashmap - нет.

  1. Аннотации:

Q: Опишите сериализацию java-объектов с помощью интерфейса и аннотаций javax.xml.bind.Marshaller.

A: Описание чего-то подобного в осмысленном контексте должно быть приемлемым:

@XmlRootElement
класс Сотрудник {
...
}

2
ответ дан 2 December 2019 в 05:53
поделиться

Аннотации: Какие риски? (компилятор может попасть в бесконечный цикл и заглушить процесс сборки).

Дженерики: Как создать миксин с использованием дженериков? (напишите общий класс, который принимает параметр, а затем расширьте его подклассом в качестве параметра).

Также +1 за стирание шрифта.

1
ответ дан 2 December 2019 в 05:53
поделиться

Общие: Задайте вопрос, чтобы узнать, понимают ли они стирание типа .

Аннотации: спросите их, какая аннотация нравится им больше всего и как она работает (вам не нужны подробные технические объяснения, но вы ищете нечто большее, чем «волшебство»).

1
ответ дан 2 December 2019 в 05:53
поделиться

Вопрос: Как можно определить тип объекта, который использует generic во время выполнения?

Ответ: Невозможно определить тип из-за стирания типов.

2
ответ дан 2 December 2019 в 05:53
поделиться

Вот некоторые из них, которые я только что придумал:

- [Cagey generics] Может ли раскомментировать какую-либо из этих строк проблемы? Какие, если есть? Почему или почему нет?

public class Cage<T> { ... }
public class Animal { ... }
public class Bear extends Animal { ... }
// Cage<Animal> c = new Cage<Bear>();
// Cage<Bear> c = new Cage<Animal>();
// Cage<?> c = new Cage<Animal>();
// Cage<Animal> c = new Cage<?>();

- Только [Ограничения] Животные должны помещаться в Клетки . Как мы можем ужесточить определения классов выше, чтобы они отражали это новое требование?

- [Юридические проблемы] Вы не можете создать экземпляр массива универсального типа. Таким образом, что-то вроде new List [10] недопустимо.Можете ли вы представить сценарий, при котором, если бы это было законным, у вас были бы проблемы?

Ответы, оставленные читателю в качестве упражнения - вы ничего не узнаете, если не сделаете это? не разбирайся в них сам! Но вот несколько подсказок.

  • [Дженерики Кейджи]: Что означает ? ? Вы помните термин «ковариация»?
  • [Ограничения]: Java позволяет ограничивать значения параметра типа. Вы помните синтаксис для этого?
  • [Проблемы с законом]: Предположим, вы могли бы сделать Object [] arr = new List [] . Можете ли вы написать код, который помещает что-то в списки arr , которые не должны туда входить?
1
ответ дан 2 December 2019 в 05:53
поделиться

Вот пара обобщений:

1)

Вопрос : Если бы у меня был этот метод, как бы я создал новый экземпляр типа T и назначьте его переменной с именем item внутри этого метода (предположим, что Class имеет конструктор по умолчанию)?

public static <T> Collection<T> select(Class<T> c, String sqlStatement) {
}

Ответ :

T item = c.newInstance();

2)

Вопрос : Если вы хотите указать, что универсальный расширяет некоторый базовый класс, но вы не знаете, каким будет класс, расширяющий базовый класс, до времени выполнения, как вы могли бы объявить универсальный?

​​Ответ : используйте подстановочный знак:

1
ответ дан 2 December 2019 в 05:53
поделиться
7
ответ дан 2 December 2019 в 05:53
поделиться

Если вы ищете рок-звезду Java-программиста, вы могли бы составить довольно много продвинутых вопросов из главы Generics в книге Bloch's Effective Java. Такие вещи, как однородные или неоднородные контейнеры (примеры с клеткой для птиц и клеткой для льва из одного из учебников по java), стирание и т.д.

У менее опытных людей я прежде всего ищу понимание того, зачем нужны дженерики (вы удивитесь, как много людей не понимают этого и считают, что способ Java 2 все еще правит), и тому подобные вещи.

В аннотациях мне нравится спрашивать об аннотации "Override" и ее преимуществах. Мне также нравится проводить более глубокое обсуждение плюсов и минусов аннотаций и того, когда их уместно использовать - я не поклонник слишком усердного мета-программирования. Это также хороший шанс увидеть, использовал ли кто-то Hibernate или JUnit с аннотациями.

1
ответ дан 2 December 2019 в 05:53
поделиться

"Какие вещи лучше всего подходят для аннотаций?" и "в чем плохие аннотации?" приходит на ум.

Аннотации хороши для метапрограммирования, но в качестве возможной передовой практики код, который работал с аннотациями, все равно должен работать, если вы уберете их все.

Или нет. Ваш опыт может отличаться, но вы, вероятно, хотите, чтобы все ваши старшие разработчики согласились с этим.

1
ответ дан 2 December 2019 в 05:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: