JavaRush /Java Blog /Random-TW /第 35 級。有關該級別主題的面試問題的答案
Afli
等級 41
Санкт-Петербург

第 35 級。有關該級別主題的面試問題的答案

在 Random-TW 群組發布
歡迎提問/補充/批評。 第 35 級。關於第 1 級主題的面試問題的答案
  1. 你知道哪些版本控制系統?

    Git、SVN、Bazaar、Mercurial

  2. SVN 和 Git 有什麼不同?

    1. GIT 是分散式 VCS,但 SVN 不是。換句話說,如果有多個開發人員使用某個儲存庫,則每個開發人員都將在其本機電腦上擁有該儲存庫的完整副本。當然,還有一台中央機器,您可以從中複製儲存庫。這讓人想起SVN。Git 的主要優點是,如果您突然無法存取互聯網,您仍然可以使用儲存庫。然後只需進行一次同步,所有其他開發人員都將收到完整的歷史記錄。

    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;

    實際類型將被替換T,該類型將在建立該類別的物件時指定MyClass。該物件obj將是類型參數中傳遞的類型的物件T。如果T將類型作為參數傳遞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