Начальный уровень. Общие вопросы.
Жизненный цикл приложения.
Хотя вопрос на прямую задают не часто, зато во время разговора могут спросить про точку входа в приложение или про стейты жизненного цикла и как приложение переходит из одного в другой. Будет большим минусом, если вы не сможете ответить, но и вообще нужно знать это даже на начальном уровне.
Жизненный цикл приложения представляет собой последовательность событий, происходящих между запуском и закрытием приложения.
Точкой входа является main.swift:
main.swift
autoreleasepool {
UIApplicationMain(CommandLine.argc, CommandLine.unsafeArgv, nil, NSStringFromClass(AppDelegate.self))
}
Во время запуска, функция UIApplicationMain выбирает несколько ключевых объектов и запускает приложение. В сердце каждого iOS приложения лежит объект UIApplication, который способствует взаимодействию между системой и другими объектами приложения. Объект UIApplication запускает main runloop и использует его для обработки пользовательских событий и изменений в интерфейсе.
В любом момент времени приложение можно находится в одном из пяти состояний:
• Not running (Не запущено): приложение не было запущено или остановлено системой.
• Inactive (Неактивное состояние): приложение переходит в состояние переднего плана, но не получает события.
• Active (Активное состояние): приложение переходит в состояние переднего плана и может обрабатывать события.
• Background (Фоновое состояние): в этом состоянии, если есть исполняемый код, он будет выполняться, а если исполняемый код отсутствует или выполнение завершено, приложение будет немедленно приостановлено.
• Suspended (Приостановленное состояние): приложение находится в фоновом режиме (в памяти), но не выполняет код, и если в системе недостаточно памяти, оно завершит работу приложения.
Это короткий ответ на данную тему, так же отдельного разбора требует runloop (в одном из будущих постов). Более подробный разбор по ссылке ниже 👇 👇👇
https://medium.com/@neroxiao/ios-app-life-cycle-ec1b31cee9dc
#SwiftInterviewGeneral
#SwiftInterviewBeginner
Жизненный цикл приложения.
Хотя вопрос на прямую задают не часто, зато во время разговора могут спросить про точку входа в приложение или про стейты жизненного цикла и как приложение переходит из одного в другой. Будет большим минусом, если вы не сможете ответить, но и вообще нужно знать это даже на начальном уровне.
Жизненный цикл приложения представляет собой последовательность событий, происходящих между запуском и закрытием приложения.
Точкой входа является main.swift:
main.swift
autoreleasepool {
UIApplicationMain(CommandLine.argc, CommandLine.unsafeArgv, nil, NSStringFromClass(AppDelegate.self))
}
Во время запуска, функция UIApplicationMain выбирает несколько ключевых объектов и запускает приложение. В сердце каждого iOS приложения лежит объект UIApplication, который способствует взаимодействию между системой и другими объектами приложения. Объект UIApplication запускает main runloop и использует его для обработки пользовательских событий и изменений в интерфейсе.
В любом момент времени приложение можно находится в одном из пяти состояний:
• Not running (Не запущено): приложение не было запущено или остановлено системой.
• Inactive (Неактивное состояние): приложение переходит в состояние переднего плана, но не получает события.
• Active (Активное состояние): приложение переходит в состояние переднего плана и может обрабатывать события.
• Background (Фоновое состояние): в этом состоянии, если есть исполняемый код, он будет выполняться, а если исполняемый код отсутствует или выполнение завершено, приложение будет немедленно приостановлено.
• Suspended (Приостановленное состояние): приложение находится в фоновом режиме (в памяти), но не выполняет код, и если в системе недостаточно памяти, оно завершит работу приложения.
Это короткий ответ на данную тему, так же отдельного разбора требует runloop (в одном из будущих постов). Более подробный разбор по ссылке ниже 👇 👇👇
https://medium.com/@neroxiao/ios-app-life-cycle-ec1b31cee9dc
#SwiftInterviewGeneral
#SwiftInterviewBeginner
Medium
iOS App Life Cycle
During startup, the UIApplicationMain function sets up several key objects and starts the app running. At the heart of every iOS app is the…
👍9
Начальный уровень. UIKit.
Жизненный цикл UIViewController.
Опять же фундаментальная тема, вопросы по которой задают очень часто. Возможно вы получите какие-то косвенные вопросы, на которые обязательно нужно знать ответы, например, в какой момент времени view знает свои размеры, в какой момент создаётся view, скоро раз вызывается метод viewDidLoad, один или может несколько и т.д.
Сам жизненный цикл состоит из следующих методов:
Создание
• init
• initWithNibName
Создание view
• isViewLoaded
• loadView
• viewDidLoad
• initWithFrame
• initWithCoder
Обработка изменения состояния view
• viewDidLoad
• viewWillAppear
• viewDidAppear
• viewWillDisappear
• viewDidDisappear
• viewDidUnload
Обработка memory warning
• didReceiveMemoryWarning
Уничтожение
• viewDidUnload (deprecated уже давно)
• deinit
Если вы не смогли ответить на вопросы, что-то не понимаете или увидели незнакомые методы, то ознакомьтесь с исчерпывающей статьей на хабре по ссылке ниже 👇👇👇 (Она хоть и старая, но до сих пор актуальная, только viewDidUnload уже нет)
#SwiftInterviewBeginner
#SwiftInterviewUIKit
https://habr.com/ru/post/129557/
Жизненный цикл UIViewController.
Опять же фундаментальная тема, вопросы по которой задают очень часто. Возможно вы получите какие-то косвенные вопросы, на которые обязательно нужно знать ответы, например, в какой момент времени view знает свои размеры, в какой момент создаётся view, скоро раз вызывается метод viewDidLoad, один или может несколько и т.д.
Сам жизненный цикл состоит из следующих методов:
Создание
• init
• initWithNibName
Создание view
• isViewLoaded
• loadView
• viewDidLoad
• initWithFrame
• initWithCoder
Обработка изменения состояния view
• viewDidLoad
• viewWillAppear
• viewDidAppear
• viewWillDisappear
• viewDidDisappear
• viewDidUnload
Обработка memory warning
• didReceiveMemoryWarning
Уничтожение
• viewDidUnload (deprecated уже давно)
• deinit
Если вы не смогли ответить на вопросы, что-то не понимаете или увидели незнакомые методы, то ознакомьтесь с исчерпывающей статьей на хабре по ссылке ниже 👇👇👇 (Она хоть и старая, но до сих пор актуальная, только viewDidUnload уже нет)
#SwiftInterviewBeginner
#SwiftInterviewUIKit
https://habr.com/ru/post/129557/
Хабр
Жизненный цикл UIViewController'a
Большинство прикладных приложения под iOS таким или иным образом используют UIViewController'ы. Там где UIKit фрэймворк — там и UIViewController'ы. Их много, они...
👍8
Начальный уровень. Алгоритмы.
Алгоритмическая сложность. Аннотация Big O.
Алоха друзья! Этим постом мы открываем важную тему в программировании «Алгоритмы» и целую область вопросов, попадающихся на собеседовании.
Каждому, даже начинающему программисту необходимо знать аннотацию Big O, какая алгоритмическая сложность у цикла, вложенного цикла, вставки в массив, в множество, пузырьковая сортировка и т.п. Все это поможет делать ваш код более оптимальным и избегать затратных алгоритмов. Начнём пока с самых азов, знания которых как правило достаточно для джунов, в следующих постах мы углубимся в тему.
Сложность алгоритма - это количественная характеристика, которая говорит о том, сколько времени, либо какой объём памяти потребуется для выполнения алгоритма.
Big O показывает то, как сложность алгоритма растёт с увеличением входных данных. При этом она всегда показывает худший вариант развития событий - верхнюю границу.
Распространённые сложности алгоритмов:
• O(1) - константная
• O(n) - линейная
• O(log n) - логарифмическая
• O(n * log n) - линеарифметическая или линеаризованная
• O(n2), O(n^2) - квадратичная
Наглядно зависимость времени обработки от входящих данных для различных алгоритмов можете увидеть в прикреплённом графике. На нем, например, видно как сильно отличаются графики для простого цикла (линейная сложность) и вложенного (квадратичная). Более подробно с примерами в статье 👇👇👇
#SwiftInterviewBeginner
#SwiftInterviewAlgorithms
https://bimlibik.github.io/posts/complexity-of-algorithms/
Алгоритмическая сложность. Аннотация Big O.
Алоха друзья! Этим постом мы открываем важную тему в программировании «Алгоритмы» и целую область вопросов, попадающихся на собеседовании.
Каждому, даже начинающему программисту необходимо знать аннотацию Big O, какая алгоритмическая сложность у цикла, вложенного цикла, вставки в массив, в множество, пузырьковая сортировка и т.п. Все это поможет делать ваш код более оптимальным и избегать затратных алгоритмов. Начнём пока с самых азов, знания которых как правило достаточно для джунов, в следующих постах мы углубимся в тему.
Сложность алгоритма - это количественная характеристика, которая говорит о том, сколько времени, либо какой объём памяти потребуется для выполнения алгоритма.
Big O показывает то, как сложность алгоритма растёт с увеличением входных данных. При этом она всегда показывает худший вариант развития событий - верхнюю границу.
Распространённые сложности алгоритмов:
• O(1) - константная
• O(n) - линейная
• O(log n) - логарифмическая
• O(n * log n) - линеарифметическая или линеаризованная
• O(n2), O(n^2) - квадратичная
Наглядно зависимость времени обработки от входящих данных для различных алгоритмов можете увидеть в прикреплённом графике. На нем, например, видно как сильно отличаются графики для простого цикла (линейная сложность) и вложенного (квадратичная). Более подробно с примерами в статье 👇👇👇
#SwiftInterviewBeginner
#SwiftInterviewAlgorithms
https://bimlibik.github.io/posts/complexity-of-algorithms/
👍9
Начальный уровень. Общие вопросы.
Принципы SOLID.
Алоха друзья! Сегодня мы разберём один из базовых вопросов на собеседовании. Итак, SOLID - это мнемонический акроним для первых пяти принципов, названных Робертом Мартином в начале 2000-х, которые означали 5 основных принципов объектно-ориентированного программирования и проектирования. Использование принципов SOLID способствует созданию системы, которую будет легко поддерживать и расширять в течение долгого времени.
Разберём подробнее каждую букву:
• S - Single-responsibility principle/ Принцип единственной ответственности
Для каждого класса должно быть определено единственное назначение. Все ресурсы, необходимые для его осуществления, должны быть инкапсулированы в этот класс и подчинены только этой задаче
• O - Open–closed principle / Принцип открытости-закрытости
Программные сущности должны быть открыты для расширения, но закрыты для модификации
• L - Liskov substitution principle / Принцип подстановки Лисков
Объекты родительских классов должны быть заменимы объектами подклассов без изменения поведения приложения
• I - Interface segregation principle / Принцип разделения интерфейсов
Слишком «толстые» интерфейсы необходимо разделять на более маленькие и специфические, чтобы программные сущности маленьких интерфейсов знали только о методах, которые необходимы им в работе. В итоге, при изменении метода интерфейса не должны меняться программные сущности, которые этот метод не используют
• D - Dependency inversion principle / Принцип инверсии зависимостей
При разработке нужно полагаться на абстракции, а не на конкретные реализации. Компоненты ПО должны иметь низкую связность и высокую согласованность.
Часто спрашивают не все принципы, а какой-то один, например, чаще почему-то именно принцип подстановки Лисков. Иногда просят привести пример нарушения принципов SOLID, в стандартных библиотеках, фреймворках от Apple. Тут можно указать, что в языке Swift есть механизм переопределения функции (override func), который нарушает принцип Принцип открытости-закрытости. Так же можно привести пример UIStackview, который игнорирует backgroundColor, тем самым нарушается принцип подстановки Лисков.
Более наглядно в статье по принципам SOLID 👇👇👇
#SwiftInterviewBeginner
#SwiftInterviewGeneral
https://habr.com/ru/company/productivity_inside/blog/505430/
Принципы SOLID.
Алоха друзья! Сегодня мы разберём один из базовых вопросов на собеседовании. Итак, SOLID - это мнемонический акроним для первых пяти принципов, названных Робертом Мартином в начале 2000-х, которые означали 5 основных принципов объектно-ориентированного программирования и проектирования. Использование принципов SOLID способствует созданию системы, которую будет легко поддерживать и расширять в течение долгого времени.
Разберём подробнее каждую букву:
• S - Single-responsibility principle/ Принцип единственной ответственности
Для каждого класса должно быть определено единственное назначение. Все ресурсы, необходимые для его осуществления, должны быть инкапсулированы в этот класс и подчинены только этой задаче
• O - Open–closed principle / Принцип открытости-закрытости
Программные сущности должны быть открыты для расширения, но закрыты для модификации
• L - Liskov substitution principle / Принцип подстановки Лисков
Объекты родительских классов должны быть заменимы объектами подклассов без изменения поведения приложения
• I - Interface segregation principle / Принцип разделения интерфейсов
Слишком «толстые» интерфейсы необходимо разделять на более маленькие и специфические, чтобы программные сущности маленьких интерфейсов знали только о методах, которые необходимы им в работе. В итоге, при изменении метода интерфейса не должны меняться программные сущности, которые этот метод не используют
• D - Dependency inversion principle / Принцип инверсии зависимостей
При разработке нужно полагаться на абстракции, а не на конкретные реализации. Компоненты ПО должны иметь низкую связность и высокую согласованность.
Часто спрашивают не все принципы, а какой-то один, например, чаще почему-то именно принцип подстановки Лисков. Иногда просят привести пример нарушения принципов SOLID, в стандартных библиотеках, фреймворках от Apple. Тут можно указать, что в языке Swift есть механизм переопределения функции (override func), который нарушает принцип Принцип открытости-закрытости. Так же можно привести пример UIStackview, который игнорирует backgroundColor, тем самым нарушается принцип подстановки Лисков.
Более наглядно в статье по принципам SOLID 👇👇👇
#SwiftInterviewBeginner
#SwiftInterviewGeneral
https://habr.com/ru/company/productivity_inside/blog/505430/
Хабр
Принципы SOLID в картинках
Если вы знакомы с объектно-ориентированным программированием , то наверняка слышали и о принципах SOLID . Эти пять правил разработки ПО задают траекторию, по которой нужно следовать, когда пишешь...
👍9🔥2❤1
Начальный уровень. Работа с памятью.
Расскажите про работу с памятью в 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/
Расскажите про работу с памятью в 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/
Хабр
Память в Swift (куча, стек, ARC)
Для хранения объектов Swift использует две структуры данных: стек и кучу. Управление распределением памяти подразумевает выделение памяти под объект (аллокацию) и ее последующее высвобождение...
👍8🔥3
Общие вопросы
Подготовка к нетехнической части собеседования
Друзья, всем привет! Хочу поделиться радостной новостью - вчера на Хабре вышла моя первая, так сказать, вводная статья - «Подготовка к нетехнической части собеседования». В дальнейшем планирую выкладывать там важный материал, связанный напрямую с темой моего телеграмм-канала. Возможно, часть информации, необходимой для подготовки к собеседованиям, будет выкладываться там раньше, поэтому буду признателен, если подпишитесь на меня на Хабре. Заранее спасибо и хорошего дня! Ссылка на статью👇👇👇https://habr.com/ru/post/701962/
#SwiftInterviewGeneral
#SwiftInterviewBeginner
#SwiftInterviewMedium
#SwiftInterviewAdvanced
Подготовка к нетехнической части собеседования
Друзья, всем привет! Хочу поделиться радостной новостью - вчера на Хабре вышла моя первая, так сказать, вводная статья - «Подготовка к нетехнической части собеседования». В дальнейшем планирую выкладывать там важный материал, связанный напрямую с темой моего телеграмм-канала. Возможно, часть информации, необходимой для подготовки к собеседованиям, будет выкладываться там раньше, поэтому буду признателен, если подпишитесь на меня на Хабре. Заранее спасибо и хорошего дня! Ссылка на статью👇👇👇https://habr.com/ru/post/701962/
#SwiftInterviewGeneral
#SwiftInterviewBeginner
#SwiftInterviewMedium
#SwiftInterviewAdvanced
Хабр
Подготовка к нетехнической части собеседования
Для многих разработчиков (как начинающих, так и опытных) собеседование – стресс. Для меня корни этой проблемы уходят в школьное прошлое, когда я боялся выходить к доске на уроках русского языка. Имея...
🔥8❤1