JavaRush /Blogue Java /Random-PT /Nível 35. Respostas às perguntas da entrevista sobre o tó...
Afli
Nível 41
Санкт-Петербург

Nível 35. Respostas às perguntas da entrevista sobre o tópico do nível

Publicado no grupo Random-PT
Perguntas/acréscimos/críticas são bem-vindas. Nível 35. Respostas às perguntas da entrevista sobre o tema do nível - 1
  1. Quais sistemas de controle de versão você conhece?

    Git, SVN, Bazar, Mercurial

  2. Como o SVN e o Git são diferentes?

    1. GIT é um VCS distribuído, mas SVN não. Em outras palavras, se houver vários desenvolvedores trabalhando com um repositório, cada um terá uma cópia COMPLETA deste repositório em sua máquina local. Claro, também existe uma máquina central a partir da qual você pode clonar o repositório. Isso é uma reminiscência do SVN. A principal vantagem do Git é que se de repente você não tiver acesso à Internet, ainda poderá trabalhar com o repositório. Depois é só fazer a sincronização uma vez e todos os outros desenvolvedores receberão o histórico completo.

    2. O GIT armazena metadados de alterações, enquanto o SVN armazena arquivos inteiros. Isso economiza espaço e tempo.

  3. O que é GitHub? Você tem projetos no GitHub?

    GitHub é um serviço de hospedagem de projetos baseado na web que usa o sistema de controle de versão git, bem como uma rede social para desenvolvedores. Os usuários podem criar um número ilimitado de repositórios, para cada um dos quais é fornecido um wiki, um sistema de rastreamento de problemas, é possível realizar revisões de código, etc. Além do Git, o serviço suporta recebimento e edição de código via SVN e Mercurial.

  4. Por que precisamos de sistemas de controle de versão?

    O VCS permite retornar arquivos individuais ao seu formato anterior, retornar todo o projeto ao seu estado anterior, visualizar as mudanças que ocorreram ao longo do tempo, determinar quem foi o último a fazer alterações em um módulo que parou de funcionar repentinamente, quem e quando introduziu algum tipo de erro no código, etc.. Em geral, se usando VCS você estraga tudo ou perde arquivos, tudo pode ser facilmente restaurado.

  5. O que é genérico? Como eles são implementados em Java?

    Genéricos são tipos parametrizados. Com a ajuda deles, você pode declarar classes, interfaces e métodos, onde o tipo de dados é especificado como parâmetro. Os genéricos adicionaram segurança de tipo à linguagem.

    Exemplo de implementação:

    class MyClass<T>{
      T obj;
      public MyClass(T obj){
        this.obj = obj;
      }
    }
    class MyClass<T>

    Os colchetes angulares usam T , o nome do parâmetro de tipo. Este nome é usado como espaço reservado para o nome do tipo real passado para a classe MyClassao criar tipos reais. Ou seja, o parâmetro de tipo Té usado na classe sempre que um parâmetro de tipo é necessário. Colchetes angulares indicam que o parâmetro pode ser generalizado. A classe em si é chamada de classe genérica ou tipo parametrizado.

    A seguir, o tipo Té usado para declarar um objeto por nome obj:

    T obj;

    Em vez disso, Tserá substituído pelo tipo real, que será especificado ao criar um objeto da classe MyClass. O objeto objserá um objeto do tipo passado no parâmetro de tipo T. Se Tvocê passar o tipo como parâmetro String, a instância objterá o tipo String.

    Considere o construtor MyClass():

    public MyClass(T obj){
      this.obj = obj;
    }

    Параметр obj имеет тип T. Это значит, что реальный тип параметра obj определяется типом, переданным параметром типа T при создании an object класса MyClass.

    Параметр типа T также может быть использован для указания типа возвращаемого значения метода.

    В именах переменных типа принято использовать заглавные буквы. Обычно для коллекций используется буква E, буквами K и V — типы ключей и meaning (Key/Value), а буквой T (и при необходимости буквы S и U) — любой тип.

    Обобщения работают только с an objectми. Поэтому нельзя использовать в качестве параметра elementрные типы вроде int or char.

    *Так же считаю нужным упомянуть generic методы. Это методы вида:

    модификаторы <T, ...> возвращаемыйТип method name(T t, ...)

    Как я понял, если в качестве типа в сигнатуре метода используются параметры, необходимо перед типом возвращаемого значения их перечислить. Верно ли это?

    Более подробную информацию можно посмотреть по следующим linkм:

  6. What такое стирание типов?

    Внутри класса-дженерика не хранится информация о его типе параметре. Это и называется стиранием типов. На стадии компиляции происходит приведение an object класса к типу, который был указан при объявлении.

    Пример:

    Nível 35. Respostas às perguntas da entrevista sobre o tema do nível - 2
  7. What такое wildcard?

    Wildcard — это дженерик вида <?>, что означает, что тип может быть чем угодно. Используется, например, в коллекциях, где для всех коллекций базовым типом является Сollection<?>.

    Полезная link: Теория и практика Java. Эксперименты с generic-методами

  8. Расскажите про extends и super в Generic'ах?

    Whatбы наложить ограничение на wildcard необходимо использовать конструкции типа:

    • ? extends SomeClass — означает, что может быть использован любой класс-наследник SomeClass
    • ? super SomeClass — означает, что может быть использован класс SomeClass, либо класс-родитель (or интерфейс) SomeClass

    Это называется bounded wildcard.

    Для того, чтобы определиться с выбором между extends и super был придуман метод PECS.

    Подробно про это можно прочитать по ссылке ниже: Использование generic wildcards для повышения удобства Java API

  9. Как использовать wildcard?

    Пример использования wildcard:

    List<?> numList = new ArrayList<Integer>();

    Вопрос я не понял, но в принципе использование wildcard’ов рассматривается в материалах по linkм выше.

  10. В чем отличие ArrayList и ArrayList<?>

    Запись вида ArrayList называется raw type (обычный тип). Она эквивалентна записи вида ArrayList<T> и используется для обратной совместимости, т.к. до Java 1.5 не было дженерик коллекций. По возможности такой формы записи следует избегать.

    ArrayList<?> является супертипом для ArrayList.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION