-
你知道哪些版本控制系統?
Git、SVN、Bazaar、Mercurial
-
SVN 和 Git 有什麼不同?
-
GIT 是分散式 VCS,但 SVN 不是。換句話說,如果有多個開發人員使用某個儲存庫,則每個開發人員都將在其本機電腦上擁有該儲存庫的完整副本。當然,還有一台中央機器,您可以從中複製儲存庫。這讓人想起SVN。Git 的主要優點是,如果您突然無法存取互聯網,您仍然可以使用儲存庫。然後只需進行一次同步,所有其他開發人員都將收到完整的歷史記錄。
-
GIT 儲存變更元數據,而 SVN 儲存整個檔案。這節省了空間和時間。
-
-
什麼是 GitHub?你在 GitHub 上有專案嗎?
GitHub 是一個使用 git 版本控制系統的基於 Web 的專案託管服務,也是開發人員的社交網路。使用者可以建立無限數量的儲存庫,每個儲存庫都提供一個 wiki、一個問題追蹤系統、可以進行程式碼審查等。除了 Git 之外,該服務還支援透過 SVN 和 Mercurial 接收和編輯程式碼。
-
為什麼我們需要版本控制系統?
VCS 可以將單一文件返回到先前的形式,將整個專案返回到先前的狀態,查看隨著時間的推移發生的更改,確定誰是最後一個對突然停止工作的模組進行更改的人,誰以及何時引入某種類型代碼中的錯誤等...一般來說,如果使用 VCS,您破壞了所有內容或丟失了文件,則可以輕鬆恢復所有內容。
-
什麼是通用的?它們在 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
orchar
.*Так же считаю нужным упомянуть generic методы. Это методы вида:
модификаторы <T, ...> возвращаемыйТип method name(T t, ...)
Как я понял, если в качестве типа в сигнатуре метода используются параметры, необходимо перед типом возвращаемого значения их перечислить. Верно ли это?
Более подробную информацию можно посмотреть по следующим linkм:
-
What такое стирание типов?
Внутри класса-дженерика не хранится информация о его типе параметре. Это и называется стиранием типов. На стадии компиляции происходит приведение an object класса к типу, который был указан при объявлении.
Пример:
-
What такое wildcard?
Wildcard — это дженерик вида <?>, что означает, что тип может быть чем угодно. Используется, например, в коллекциях, где для всех коллекций базовым типом является Сollection<?>.
Полезная link: Теория и практика Java. Эксперименты с generic-методами
-
Расскажите про extends и super в Generic'ах?
Whatбы наложить ограничение на wildcard необходимо использовать конструкции типа:
? extends SomeClass
— означает, что может быть использован любой класс-наследник SomeClass? super SomeClass
— означает, что может быть использован класс SomeClass, либо класс-родитель (or интерфейс) SomeClass
Это называется bounded wildcard.
Для того, чтобы определиться с выбором между
extends
иsuper
был придуман метод PECS.Подробно про это можно прочитать по ссылке ниже: Использование generic wildcards для повышения удобства Java API
-
Как использовать wildcard?
Пример использования wildcard:
List<?> numList = new ArrayList<Integer>();
Вопрос я не понял, но в принципе использование wildcard’ов рассматривается в материалах по linkм выше.
-
В чем отличие ArrayList и ArrayList<?>
Запись вида ArrayList называется raw type (обычный тип). Она эквивалентна записи вида ArrayList<T> и используется для обратной совместимости, т.к. до Java 1.5 не было дженерик коллекций. По возможности такой формы записи следует избегать.
ArrayList<?> является супертипом для ArrayList.
第 35 級。有關該級別主題的面試問題的答案
歡迎提問/補充/批評。
GO TO FULL VERSION