JavaRush /Java Blog /Random-JA /レベル 35. レベルのトピックに関するインタビューの質問への回答
Afli
レベル 41
Санкт-Петербург

レベル 35. レベルのトピックに関するインタビューの質問への回答

Random-JA グループに公開済み
質問/追加/批判は大歓迎です。 レベル 35. レベル - 1 のトピックに関するインタビューの質問への回答
  1. どのようなバージョン管理システムを知っていますか?

    Git、SVN、バザール、Mercurial

  2. SVN と Git はどう違うのですか?

    1. GIT は分散 VCS ですが、SVN は分散 VCS ではありません。つまり、複数の開発者がリポジトリを使用している場合、各開発者はローカル マシン上にこのリポジトリの完全なコピーを持つことになります。もちろん、リポジトリのクローンを作成できる中央マシンもあります。これはSVNを彷彿とさせます。Git の主な利点は、突然インターネットにアクセスできなくなった場合でも、リポジトリを操作できることです。その後、同期を 1 回実行するだけで、他のすべての開発者が完全な履歴を受け取るようになります。

    2. GIT は変更メタデータを保存しますが、SVN はファイル全体を保存します。これによりスペースと時間が節約されます。

  3. GitHub とは何ですか? GitHub にプロジェクトはありますか?

    GitHub は、git バージョン管理システムを使用した Web ベースのプロジェクト ホスティング サービスであり、開発者向けのソーシャル ネットワークです。ユーザーはリポジトリを無制限に作成でき、それぞれに Wiki が提供され、問題追跡システムが提供され、コード レビューを実施することができます。このサービスは、Git に加えて、SVN および Mercurial を介したコードの受信と編集をサポートしています。

  4. なぜバージョン管理システムが必要なのでしょうか?

    VCS を使用すると、個々のファイルを以前の形式に戻したり、プロジェクト全体を以前の状態に戻したり、時間の経過とともに発生した変更を表示したり、突然機能しなくなったモジュールに最後に変更を加えたのが誰であるか、何らかの種類が導入されたのがいつ誰だったかを判断することができます。コードへのエラーなど。.. 一般に、VCS を使用すると、すべてが台無しになったり、ファイルが失われたりしても、すべてを簡単に復元できます。

  5. ジェネリックとは何ですか? Java ではどのように実装されるのでしょうか?

    ジェネリックはパラメーター化された型です。これらの助けを借りて、データ型をパラメータとして指定するクラス、インターフェイス、およびメソッドを宣言できます。ジェネリックスは言語に型安全性を追加しました。

    実装例:

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

    山かっこでは、型パラメーターの名前であるTを使用します。この名前は、実数型の作成時にクラスに渡される実数型の名前のプレースホルダーとして使用されますMyClass。つまり、型パラメータがT必要な場合は常に、型パラメータがクラス内で使用されます。山括弧は、パラメータが一般化できることを示します。クラス自体は、ジェネリック クラスまたはパラメーター化された型と呼ばれます。

    次に、型Tを使用してオブジェクトを名前で宣言しますobj

    T obj;

    代わりに、Tclass のオブジェクトを作成するときに指定される実際の型が置き換えられますMyClass。オブジェクトは、objtype パラメータで渡された型のオブジェクトになりますTT型をパラメータとして渡すとString、インスタンスはobjその型を持ちますString

    コンストラクターを考えてみましょう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 класса к типу, который был указан при объявлении.

    Пример:

    レベル 35. レベル - 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.

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION