Swift Interview - Вопросы для собеседований. Mobile митапы и конференции.
161 subscribers
9 photos
28 links
При интервью кандидаты часто сталкиваются с вопросами, которые не встречали или разбирали поверхностно. Это касается как и сложных, так и простых тем. На канале вопросы будут систематизироваться по сложности и темам
Download Telegram
Вопросы будут распределены по хештегам #SwiftInterviewUIKit, #SwiftInterviewRxSwift, #SwiftInterviewArchitecture, #SwiftInterviewGeneral, #SwiftInterviewNotification,
#SwiftInterviewMultithreading,
#SwiftInterviewMemory,
#SwiftInterviewTasks (по мере заполнения количество тем будет увеличиваться). И по сложности #SwiftInterviewBeginner, #SwiftInterviewMedium, #SwiftInterviewAdvanced. В начале большинство вопросов будут для начального уровня, затем будут разбираться более сложные темы.

Так же будут ссылки на мобильные конференции и митапы, на которых можно узнать что-то новое и повысить свой уровень. Надеюсь, канал найдут полезным как начинающие, так и продвинутые разрабочики

Вопросы для разбора, предложения можно присылать @dmitryZazulin
Начальный уровень. Работа с памятью.

Расскажите про работу с памятью в Swift. 

Доброго времени суток! Сегодня мы начнём разбирать вопрос, который попадается на собеседовании в не зависимости от роли, на которую вы претендуете. В этом посте разберём что необходимо знать джуну для ответа, а именно что такое reference/value type, что хранится в стеке, а что в куче, принцип работы arc, как избежать зацикливания сильных ссылок.

Value/Reference Types

Value и Reference Types — это основные концепции Swift. В Swift есть три способа объявления типа: классы, структуры и перечисления. Их можно разделить на типы значений (структуры, перечисления, базовые типы) и ссылочные типы (классы, функции, замыкания). То, как они хранятся в памяти, определяет разницу между ними:

• Value Type — каждая переменная типа значения имеет свою собственную копию данных, и операции с одной не влияют на другую. За него отвечает стэк;

• Reference Type — у нас есть ссылка, указывающая на это место в памяти. Переменные ссылочного типа могут указывать на одни и те же данные; следовательно, операции с одной переменной могут повлиять на данные, указанные другой переменной. За него отвечает куча.

ARC

Количество ссылок на один объект может увеличиваться и уменьшаться. В Swift для того чтобы отслеживать этого количество и при уменьшении его до нуля освобождать объект из памяти существует механизм ARC (Automatic Reference Counter).

Retain cycle

При подсчете ссылок может возникнуть ситуация, когда два объекта ссылаются друг на друга, что делает невозможным их высвобождение из памяти, потому что оба их счетчика ссылок (retain count) всегда будут равны единице или больше. То есть происходит ситуация зацикливания сильных ссылок (retain cycle). Для ее исправления нужно сделайте одну из ссылок weak или unowned.

• Слабая(weak) ссылка: не увеличивает счетчик ссылок. Слабые ссылки всегда объявляются как необязательные (optional) типы. Когда счетчик ссылок становится равным нулю, объект автоматически будет деаллоцирован.

• Unowned ссылки: тут точно так же, как и со слабыми ссылками. Она не увеличивает счетчик ссылок. Основное отличие в том, что это не необязательный тип. Если вы попытаетесь получить доступ к unowned свойству, которое ссылается на деинициализированный объект, вы получите ошибку времени выполнения, сравнимую с принудительной распаковкой необязательного типа с nil.

Это краткий ответ по основным пунктам, более подробно в том числе про кучу и стек по ссылке снизу 👇👇👇

#SwiftInterviewBeginner
#SwiftInterviewMemory

https://habr.com/ru/company/otus/blog/649329/
👍8🔥3