-
چه سیستم های کنترل نسخه را می شناسید؟
Git، SVN، بازار، مرکوریال
-
SVN و Git چگونه متفاوت هستند؟
-
GIT یک VCS توزیع شده است، اما SVN نیست. به عبارت دیگر، اگر چندین توسعه دهنده با یک مخزن کار می کنند، هر کدام یک کپی کامل از این مخزن را در ماشین محلی خود خواهند داشت. البته یک ماشین مرکزی نیز وجود دارد که می توانید از آن مخزن را کلون کنید. این یادآور SVN است. مزیت اصلی Git این است که اگر به طور ناگهانی به اینترنت دسترسی ندارید، همچنان می توانید با مخزن کار کنید. سپس کافی است یک بار همگام سازی را انجام دهید و سایر توسعه دهندگان تاریخچه کامل را دریافت خواهند کرد.
-
ذخیرههای GIT ابردادهها را تغییر میدهند، در حالی که SVN کل فایلها را ذخیره میکند. این باعث صرفه جویی در فضا و زمان می شود.
-
-
GitHub چیست؟ آیا پروژه هایی در GitHub دارید؟
GitHub یک سرویس میزبانی پروژه مبتنی بر وب با استفاده از سیستم کنترل نسخه git و همچنین یک شبکه اجتماعی برای توسعه دهندگان است. کاربران می توانند تعداد نامحدودی مخزن ایجاد کنند که برای هر کدام یک ویکی ارائه می شود، یک سیستم ردیابی مشکل ارائه می شود، امکان بررسی کدها و غیره وجود دارد. علاوه بر Git، این سرویس از دریافت و ویرایش کد از طریق SVN و Mercurial نیز پشتیبانی می کند.
-
چرا به سیستم های کنترل نسخه نیاز داریم؟
VCS این امکان را فراهم می کند که فایل های فردی را به شکل قبلی خود بازگردانید، کل پروژه را به حالت قبلی خود برگردانید، تغییراتی را که در طول زمان رخ می دهد مشاهده کنید، تعیین کنید که آخرین کسی که تغییراتی را در ماژولی ایجاد کرده است که به طور ناگهانی کار نمی کند، چه کسی و چه زمانی به نوعی معرفی شده است. خطا در کد و غیره... به طور کلی، اگر با استفاده از VCS همه چیز را خراب کنید یا فایل ها را از دست بدهید، همه چیز به راحتی قابل بازیابی است.
-
عمومی چیست؟ چگونه در جاوا پیاده سازی می شوند؟
ژنریک ها انواع پارامتری هستند. با کمک آنها می توانید کلاس ها، رابط ها و متدهایی را که نوع داده به عنوان پارامتر مشخص می شود، اعلام کنید. Generics ایمنی نوع را به زبان اضافه کرد.
اجرای مثال:
class MyClass<T>{ T obj; public MyClass(T obj){ this.obj = obj; } } class MyClass<T>
براکت های زاویه از T ، نام پارامتر نوع استفاده می کنند. این نام به عنوان یک مکان نگهدار برای نام نوع واقعی ارسال شده به کلاس
MyClass
هنگام ایجاد انواع واقعی استفاده می شود. یعنیT
هر زمان که پارامتر type مورد نیاز باشد از پارامتر type در کلاس استفاده می شود. براکت های زاویه نشان می دهد که پارامتر را می توان تعمیم داد. خود کلاس یک کلاس عمومی یا نوع پارامتری نامیده می شود.در مرحله بعد، از نوع
T
برای اعلام یک شی با نام استفاده می شودobj
:T obj;
در عوض،
T
نوع واقعی جایگزین خواهد شد، که هنگام ایجاد یک شی از کلاس مشخص می شودMyClass
. شیobj
یک شی از نوع ارسال شده در پارامتر type خواهد بود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