-
Jakie znasz systemy kontroli wersji?
Git, SVN, Bazar, Mercurial
-
Czym różnią się SVN i Git?
-
GIT jest rozproszonym VCS, ale SVN nim nie jest. Innymi słowy, jeśli z repozytorium pracuje kilku programistów, każdy z nich będzie miał PEŁNĄ kopię tego repozytorium na swoim komputerze lokalnym. Oczywiście istnieje również maszyna centralna, z której można sklonować repozytorium. Przypomina to SVN. Główną zaletą Gita jest to, że jeśli nagle nie będziesz miał dostępu do Internetu, nadal możesz pracować z repozytorium. Następnie wystarczy wykonać synchronizację raz, a wszyscy pozostali programiści otrzymają pełną historię.
-
GIT przechowuje metadane zmian, podczas gdy SVN przechowuje całe pliki. Oszczędza to miejsce i czas.
-
-
Co to jest GitHub? Czy masz projekty na GitHubie?
GitHub to internetowa usługa hostingu projektów wykorzystująca system kontroli wersji git, a także sieć społecznościowa dla programistów. Użytkownicy mogą tworzyć nieograniczoną liczbę repozytoriów, dla każdego z nich dostępna jest wiki, dostępny jest system śledzenia problemów, istnieje możliwość przeprowadzania przeglądów kodu itp. Oprócz Git usługa obsługuje odbieranie i edycję kodu za pośrednictwem SVN i Mercurial.
-
Dlaczego potrzebujemy systemów kontroli wersji?
VCS umożliwia przywrócenie poszczególnych plików do ich poprzedniej postaci, przywrócenie całego projektu do poprzedniego stanu, podgląd zmian zachodzących w czasie, ustalenie, kto jako ostatni wprowadzał zmiany w module, który nagle przestał działać, kto i kiedy wprowadził jakieś zmiany błędów w kodzie itp. Ogólnie rzecz biorąc, jeśli używając VCS wszystko zniszczysz lub stracisz pliki, wszystko można łatwo przywrócić.
-
Co to jest rodzajowe? Jak są one zaimplementowane w Javie?
Generics to typy sparametryzowane. Za ich pomocą można deklarować klasy, interfejsy i metody, gdzie typ danych jest określony jako parametr. Generics dodało do języka bezpieczeństwo typów.
Przykładowa realizacja:
class MyClass<T>{ T obj; public MyClass(T obj){ this.obj = obj; } } class MyClass<T>
W nawiasach ostrokątnych używana jest nazwa parametru typu T. Nazwa ta jest używana jako symbol zastępczy nazwy typu rzeczywistego przekazywanej do klasy
MyClass
podczas tworzenia typów rzeczywistych. Oznacza to, że parametr typuT
jest używany w klasie zawsze, gdy wymagany jest parametr typu. Nawiasy ostrokątne wskazują, że parametr można uogólnić. Sama klasa nazywana jest klasą ogólną lub typem sparametryzowanym.Następnie typ
T
służy do zadeklarowania obiektu według nazwyobj
:T obj;
Zamiast tego
T
zostanie podstawiony typ rzeczywisty, który zostanie określony podczas tworzenia obiektu klasyMyClass
. Obiektobj
będzie obiektem typu przekazanego w parametrze typeT
. JeśliT
przekażesz typ jako parametrString
, instancjaobj
będzie miała typString
.Rozważmy konstruktora
MyClass()
:public MyClass(T obj){ this.obj = obj; }
Parametr
obj
jest typuT
. Oznacza to, że rzeczywisty typ parametruobj
jest określony przez typ przekazany przez parametr typeT
podczas tworzenia obiektu klasyMyClass
.Parametru type
T
można również użyć do określenia typu zwracanego przez metodę.W nazwach zmiennych typu zwyczajowo używa się wielkich liter. Zwykle w przypadku kolekcji używana jest litera
E
, literyK
i są używaneV
do typów kluczy i wartości (Klucz/Wartość), a literaT
(oraz, jeśli to konieczne, literyS
iU
) jest dowolnego typu.Generics działają tylko z obiektami.
int
Dlatego nie można używać typów elementarnych, takich jak lub jako parametruchar
.*Uważam również, że należy wspomnieć o metodach generycznych. Są to metody takie jak:
modyfikatory <T, ...> returnTypeNazwaMetody(T t, ...)
Jak rozumiem, jeśli parametry są używane jako typ w sygnaturze metody, konieczne jest ich wyświetlenie przed typem wartości zwracanej. Czy to prawda?
Bardziej szczegółowe informacje można znaleźć pod poniższymi linkami:
-
Co to jest usuwanie typu?
Informacje o parametrze typu nie są przechowywane w klasie ogólnej. Nazywa się to usuwaniem typu. Na etapie kompilacji obiekt klasy jest rzutowany na typ określony podczas deklaracji.
Przykład:
-
Co to jest symbol wieloznaczny?
Symbol wieloznaczny jest odmianą formy <?>, co oznacza, że typem może być dowolny. Używany na przykład w kolekcjach, w których typem podstawowym dla wszystkich kolekcji jest Collection<?>.
Przydatny link: Teoria i praktyka Java. Eksperymentowanie z metodami ogólnymi
-
Opowiedz nam o rozszerzeniach i super w Generics?
Aby nałożyć ograniczenie na symbol wieloznaczny, musisz użyć konstrukcji takich jak:
? extends SomeClass
— oznacza, że można użyć dowolnej klasy wywodzącej się z SomeClass? super SomeClass
— означает, что может быть использован класс SomeClass, либо класс-родитель (Lub интерфейс) SomeClass
Это называется bounded wildcard.
Для того, чтобы определиться с выбором между
extends
иsuper
был придуман метод PECS.Подробно про это можно прочитать по ссылке ниже: Использование generic wildcards для повышения удобства Java API
-
Как использовать wildcard?
Пример использования wildcard:
List<?> numList = new ArrayList<Integer>();
Вопрос я не понял, но в принципе использование wildcard’ов рассматривается в материалах по połączyćм выше.
-
В чем отличие ArrayList и ArrayList<?>
Запись вида ArrayList называется raw type (обычный тип). Она эквивалентна записи вида ArrayList<T> и используется для обратной совместимости, т.к. до Java 1.5 не было дженерик коллекций. По возможности такой формы записи следует избегать.
ArrayList<?> является супертипом для ArrayList.
Poziom 35. Odpowiedzi na pytania podczas rozmowy kwalifikacyjnej na temat poziomu
Pytania/dodatki/krytyka są mile widziane.
GO TO FULL VERSION