
Какие системы контроля версий вы знаете?
Git, SVN, Bazaar, Mercurial
Чем отличаются SVN и Git?
GIT — распределенная СКВ, а SVN — нет. Другими словами, если есть несколько разработчиков работающих с репозиторием у каждого на локальной машине будет ПОЛНАЯ копия этого репозитория. Разумеется есть и центральная машина, с которой можно клонировать репозиторий. Это напоминает SVN. Основной плюс Git в том, что если вдруг у вас нет доступа к интернету, сохраняется возможность работать с репозиторием. Потом только один раз сделать синхронизацию и все остальные разработчики получат полную историю.
GIT сохраняет метаданные изменений, а SVN целые файлы. Это экономит место и время.
Что такое GitHub? У вас есть проекты на GitHub?
GitHub — веб-сервис хостинга проектов с использованием системы контроля версий git, а также как социальная сеть для разработчиков. Пользователи могут создавать неограниченное число репозиториев, для каждого из которых предоставляется wiki, система issue tracking-а, есть возможность проводить code review и т.п. Кроме Git, сервис поддерживает получение и редактирование кода через SVN и Mercurial.
Зачем нужны системы контроля версий?
СКВ дает возможность возвращать отдельные файлы к прежнему виду, возвращать к прежнему состоянию весь проект, просматривать происходящие со временем изменения, определять, кто последним вносил изменения во внезапно переставший работать модуль, кто и когда внес в код какую-то ошибку, и т.п.. Вообще, если, пользуясь СКВ, вы всё испортите или потеряете файлы, всё можно будет легко восстановить.
Что такое generic? Как они реализованы в Java?
Generics — это параметризованные типы. С их помощью можно объявлять классы, интерфейсы и методы, где тип данных указан в виде параметра. Обобщения добавили в язык безопасность типов.
Пример реализации:
class MyClass<T>{ T obj; public MyClass(T obj){ this.obj = obj; } } class MyClass<T>В угловых скобках используется T — имя параметра типа. Это имя используется в качестве заполнителя, куда будет подставлено имя реального типа, переданного классу
MyClassпри создании реальных типов. То есть параметр типаTприменяется в классе всякий раз, когда требуется параметр типа. Угловые скобки указывают, что параметр может быть обобщен. Сам класс при этом называется обобщенным классом или параметризованным типом.Далее тип
Tиспользуется для объявления объекта по имениobj:T obj;Вместо
Tподставится реальный тип, который будет указан при создании объекта классаMyClass. Объектobjбудет объектом типа, переданного в параметре типаT. Если в параметреTпередать типString, то экземплярobjбудет иметь типString.Рассмотрим конструктор
MyClass():public MyClass(T obj){ this.obj = obj; }Параметр
objимеет типT. Это значит, что реальный тип параметраobjопределяется типом, переданным параметром типаTпри создании объекта классаMyClass.Параметр типа
Tтакже может быть использован для указания типа возвращаемого значения метода.В именах переменных типа принято использовать заглавные буквы. Обычно для коллекций используется буква
E, буквамиKиV— типы ключей и значение (Key/Value), а буквойT(и при необходимости буквыSиU) — любой тип.Обобщения работают только с объектами. Поэтому нельзя использовать в качестве параметра элементарные типы вроде
intилиchar.*Так же считаю нужным упомянуть generic методы. Это методы вида:
модификаторы <T, ...> возвращаемыйТип имяМетода(T t, ...)
Как я понял, если в качестве типа в сигнатуре метода используются параметры, необходимо перед типом возвращаемого значения их перечислить. Верно ли это?
Более подробную информацию можно посмотреть по следующим ссылкам:
Что такое стирание типов?
Внутри класса-дженерика не хранится информация о его типе параметре. Это и называется стиранием типов. На стадии компиляции происходит приведение объекта класса к типу, который был указан при объявлении.
Пример:
![Уровень 35. Ответы на вопросы к собеседованию по теме уровня - 2]()
Что такое wildcard?
Wildcard — это дженерик вида <?>, что означает, что тип может быть чем угодно. Используется, например, в коллекциях, где для всех коллекций базовым типом является Сollection<?>.
Полезная ссылка: Теория и практика Java. Эксперименты с generic-методами
Расскажите про extends и super в Generic'ах?
Чтобы наложить ограничение на wildcard необходимо использовать конструкции типа:
? extends SomeClass— означает, что может быть использован любой класс-наследник SomeClass? super SomeClass— означает, что может быть использован класс SomeClass, либо класс-родитель (или интерфейс) SomeClass
Это называется bounded wildcard.
Для того, чтобы определиться с выбором между
extendsиsuperбыл придуман метод PECS.Подробно про это можно прочитать по ссылке ниже: Использование generic wildcards для повышения удобства Java API
Как использовать wildcard?
Пример использования wildcard:
List<?> numList = new ArrayList<Integer>();Вопрос я не понял, но в принципе использование wildcard’ов рассматривается в материалах по ссылкам выше.
В чем отличие ArrayList и ArrayList<?>
Запись вида ArrayList называется raw type (обычный тип). Она эквивалентна записи вида ArrayList<T> и используется для обратной совместимости, т.к. до Java 1.5 не было дженерик коллекций. По возможности такой формы записи следует избегать.
ArrayList<?> является супертипом для ArrayList.

ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ