ru
Feedback
Swift | Вопросы собесов

Swift | Вопросы собесов

Открыть в Telegram
2 214
Подписчики
-124 часа
+37 дней
-430 день
Привлечение подписчиков
июнь '26
июнь '26
+19
в 0 каналах
май '26
+21
в 0 каналах
Get PRO
апрель '26
+23
в 0 каналах
Get PRO
март '26
+35
в 0 каналах
Get PRO
февраль '26
+45
в 1 каналах
Get PRO
январь '26
+58
в 0 каналах
Get PRO
декабрь '25
+28
в 0 каналах
Get PRO
ноябрь '25
+156
в 1 каналах
Get PRO
октябрь '25
+26
в 0 каналах
Get PRO
сентябрь '25
+41
в 0 каналах
Get PRO
август '25
+38
в 0 каналах
Get PRO
июль '25
+27
в 0 каналах
Get PRO
июнь '25
+34
в 0 каналах
Get PRO
май '25
+50
в 0 каналах
Get PRO
апрель '25
+87
в 0 каналах
Get PRO
март '25
+151
в 2 каналах
Get PRO
февраль '25
+123
в 1 каналах
Get PRO
январь '25
+127
в 53 каналах
Get PRO
декабрь '24
+55
в 1 каналах
Get PRO
ноябрь '24
+75
в 0 каналах
Get PRO
октябрь '24
+193
в 42 каналах
Get PRO
сентябрь '24
+348
в 251 каналах
Get PRO
август '24
+98
в 0 каналах
Get PRO
июль '24
+140
в 54 каналах
Get PRO
июнь '24
+411
в 244 каналах
Get PRO
май '24
+646
в 191 каналах
Get PRO
апрель '24
+353
в 23 каналах
Дата
Привлечение подписчиков
Упоминания
Каналы
17 июня0
16 июня0
15 июня+2
14 июня+1
13 июня+3
12 июня+1
11 июня+1
10 июня+1
09 июня+1
08 июня+2
07 июня0
06 июня+1
05 июня0
04 июня+2
03 июня0
02 июня+3
01 июня+1
Посты канала
🤔 Что из себя представляет структура данных stack? Stack (стек) – это структура данных, работающая по принципу LIFO (Last In, First Out – "последним пришел, первым ушел"). 🚩Пример реализации стека в Swift В Swift нет встроенного стека (кроме Array), но можно создать свой:
struct Stack<T> {
    private var elements: [T] = []

    mutating func push(_ item: T) {
        elements.append(item)
    }

    mutating func pop() -> T? {
        return elements.popLast() // Удаляет и возвращает верхний элемент
    }

    func peek() -> T? {
        return elements.last // Возвращает верхний элемент без удаления
    }

    func isEmpty() -> Bool {
        return elements.isEmpty
    }
}

// Пример использования:
var stack = Stack<Int>()
stack.push(10)
stack.push(20)
stack.push(30)

print(stack.pop()!) // 30
print(stack.peek()!) // 20
print(stack.isEmpty()) // false
🚩Где используется стек? Обратный порядок выполнения (рекурсия) – стек вызовов функций. Алгоритмы (обратная польская нотация, DFS – поиск в глубину) История действий (назад-вперед в браузере, отмена в редакторе). Ставь 👍 и забирай 📚 Базу знаний

2
🤔 Почему Swift не может сам сгенерировать memberwise инициализатор для классов? 1. Классы поддерживают наследование, что делает сложным автоматическое создание инициализатора, учитывающего все поля, включая родительские. 2. Инициализация в классах может включать дополнительные логики, которые сложно определить на этапе компиляции. 3. Структуры, в отличие от классов, не имеют этих ограничений, поэтому memberwise инициализатор создаётся автоматически. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
170
3
🤔 Что такое синхронная задача? Синхронная задача в программировании выполняется последовательно в текущем потоке, блокируя его до завершения задачи. Это контрастирует с асинхронной задачей, которая позволяет выполнение другого кода, пока задача обрабатывается. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
202
4
🤔 Какие можно выделить главные принципы ООП? Объектно-ориентированное программирование (ООП) — это парадигма, основанная на концепции "объектов", которые могут содержать данные в виде полей (часто называемых атрибутами или свойствами) и код в виде процедур (часто называемых методами). ООП фокусируется на использовании объектов для моделирования реального мира (или абстракций), облегчая разработку и поддержку сложных программ. Существует четыре основных принципа: 🟠Инкапсуляция Механизм ООП, который объединяет данные (атрибуты) и код (методы), манипулирующий этими данными, внутри одного объекта и скрывает детали реализации от внешнего использования. Это позволяет защитить внутреннее состояние объекта от прямого доступа извне и обеспечить контролируемый интерфейс для работы с этим объектом. 🟠Наследование Позволяет создавать новый класс на основе уже существующего класса, перенимая его свойства и методы. Новый класс может добавлять собственные свойства и методы или модифицировать унаследованные. Наследование обеспечивает повторное использование кода, упрощает его расширение и поддержку. 🟠Полиморфизм Способность объектов с одинаковым интерфейсом предоставлять различную реализацию для одного и того же метода. Это означает, что функция или метод могут использоваться для различных типов объектов, и каждый тип может реализовать эту функцию или метод по-своему. Полиморфизм упрощает написание общего кода для работы с объектами разных классов и обеспечивает гибкость в его использовании. 🟠Абстракция Позволяет скрыть сложность системы, представляя её ключевые аспекты и скрывая детали реализации. Это достигается за счёт использования абстрактных классов и интерфейсов, которые определяют шаблон для классов-наследников. Абстракция помогает сосредоточиться на взаимодействии объектов на более высоком уровне, игнорируя ненужные детали. Ставь 👍 и забирай 📚 Базу знаний
196
5
🤔 Как очищается стек? Стек очищается автоматически, когда завершается функция. Как только стековая рамка функции выходит за пределы контекста вызова — вся память, связанная с ней, сбрасывается. Это обеспечивает высокую производительность, но требует строгой структуры вызовов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
226
6
🤔 Зачем нужны свойства "Content Hugging Priority"? Свойства "Content Hugging Priority" и "Content Compression Resistance Priority" играют ключевую роль в системе Auto Layout. Эти свойства помогают определить, как вьюшки (views) должны быть отформатированы и как они реагируют на изменения в доступном пространстве в интерфейсе пользователя. Рассмотрим подробнее, что означает каждое из этих свойств и как они используются в разработке интерфейсов. 🚩Content Hugging Priority Определяет, насколько сильно вьюшка должна "обнимать" своё содержимое. Это свойство указывает на желательность вьюшки быть как можно ближе к своим внутренним размерам, основанным на своем содержимом. 🚩Content Compression Resistance Priority Определяет, насколько сильно вьюшка должна противостоять сжатию размеров меньше, чем размеры её содержимого. Ставь 👍 и забирай 📚 Базу знаний
239
7
🤔 Что такое поток безопасности (thread-safety)? Потокобезопасность — это свойство кода/объекта, означающее, что он может использоваться из разных потоков одновременно без ошибок и гонок данных. Потокобезопасный код: - Не вызывает крашей. - Не вызывает конфликтов доступа. - Защищает внутреннее состояние при параллельном использовании. В Swift thread-safety достигается через: - Синхронизацию (DispatchQueue, lock). - Immutable-структуры. - Использование actor и @MainActor. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
226
8
🤔 Какие есть фрейм ворк механизмы в айос для выполненной бэкраунд задач? В iOS для выполнения фоновых задач существуют несколько ключевых механизмов: 🚩Основные механизмы 🟠Grand Central Dispatch (GCD): Используется для асинхронного выполнения задач на глобальных или пользовательских очередях. DispatchQueue.global(qos: .background).async { // Фоновая задача } 🟠OperationQueue: Высокоуровневый API для управления очередями операций с возможностью указания зависимостей. let queue = OperationQueue() queue.addOperation { // Фоновая операция } 🟠Background Fetch: Позволяет приложению периодически загружать новые данные в фоновом режиме. func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { // Фоновое обновление данных completionHandler(.newData) } 🟠BGTaskScheduler: Новый фреймворк для планирования и выполнения фоновых задач. import BackgroundTasks func scheduleBackgroundTask() { let request = BGAppRefreshTaskRequest(identifier: "com.example.app.refresh") request.earliestBeginDate = Date(timeIntervalSinceNow: 15 * 60) try? BGTaskScheduler.shared.submit(request) } 🟠URLSession Background Transfers: Выполнение загрузки и выгрузки данных в фоновом режиме. let configuration = URLSessionConfiguration.background(withIdentifier: "com.example.app.background") let session = URLSession(configuration: configuration) let url = URL(string: "https://example.com/largefile")! let task = session.downloadTask(with: url) task.resume() Ставь 👍 и забирай 📚 Базу знаний
251
9
🤔 Что такое escaping closure? Escaping closure — это замыкание, которое используется после выхода из функции, в которую его передали. Например, если замыкание сохраняется в свойстве или передаётся асинхронно. Его нужно отметить @escaping, чтобы компилятор знал, что оно будет жить дольше тела функции. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
238
10
🤔 Какой путь проделывает ивент , когда пользователь нажимает на приложение? Когда пользователь нажимает на иконку приложения на домашнем экране, iOS проходит несколько этапов перед тем, как приложение становится активным. 🚩Разберём путь события подробнее 🟠Пользователь нажимает на иконку (SpringBoard) iOS-устройства управляются системой SpringBoard – это оболочка, отвечающая за домашний экран, иконки, фоновые процессы. Когда пользователь тапает на иконку приложения, SpringBoard отправляет событие UIApplicationLaunchOptionsKey в систему. 🟠iOS загружает процесс приложения Если приложение не запущено: - iOS создаёт новый процесс и выделяет память. - Загружаются зависимости (библиотеки, фреймворки). - Создаётся объект UIApplication. 🟠Вызывается `application(_:didFinishLaunchingWithOptions:)` Здесь приложение инициализируется и загружается основной UI. Метод в AppDelegate: func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { print("Приложение запущено") return true } Ставь 👍 и забирай 📚 Базу знаний
283
11
🤔 Можно ли наследовать структуру от нескольких родителей? Нет, структуры не поддерживают наследование. Однако можно использовать протоколы (protocol) для реализации общих интерфейсов и функциональности. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
287
12
🤔 Какие виды ссылок бывают в Swift? – strong — по умолчанию, удерживает объект в памяти. – weak — не увеличивает счётчик ссылок и становится nil, когда объект освобождён. – unowned — не увеличивает счётчик, но не обнуляется (используется, когда объект точно не должен быть уничтожен до использования). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
328
13
🤔 С какими типами можно использовать ссылки? Ссылки (strong, weak, unowned) применимы только к reference-типа — то есть к экземплярам классов. Value-типы (например, struct, enum) копируются при передаче, и на них нельзя создать ссылку в обычном понимании. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
352
14
🤔 Есть ли функция первого класса в языке? Да. В Swift функции — объекты первого класса. Их можно передавать как параметры, возвращать из других функций и сохранять в переменные. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
394
15
🤔 За что отвечают Compression Resistance Priority? Отвечают за сопротивление сжатию UI-элемента в ограниченном пространстве. Элемент с более высоким приоритетом будет меньше сжиматься, чем элемент с более низким значением. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
396
16
🤔 Как приложения реагируют на нажатия? Система распознаёт событие касания, передаёт его объекту UIResponder, который находится в иерархии view. Объект может обработать его или передать дальше по цепочке. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
403
17
🤔 Как инициализация классов связана с выделением памяти? При инициализации класса происходит выделение памяти в heap, а затем инициализация всех его свойств. После завершения инициализации объект готов к использованию. Это отличается от структур, которые хранятся в stack (если не вложены в ссылочный тип). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
413
18
🤔 Что нужно сделать, чтобы вызвать жизненный цикл view-контроллера? Жизненный цикл UIViewController запускается: - При инициализации и отображении контроллера (вручную или через навигацию). - Основные методы: - viewDidLoad() - viewWillAppear() - viewDidAppear() - viewWillDisappear() - viewDidDisappear() Чтобы вызвать жизненный цикл вручную: - Представить контроллер: - Или встроить в навигацию: Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
411
19
🤔 Если обозначить внутри метода Synchronized , что будет монитору? Это высокоуровневый механизм синхронизации, который объединяет взаимное исключение (mutex) и условные переменные (condition variables) для управления доступом к объектам в многопоточной среде. 🚩Как работает 🟠Взаимное исключение (Mutual Exclusion) Только один поток может выполнить защищенный блок кода в любой момент времени. 🟠Условные переменные (Condition Variables) Позволяют потокам ожидать определенных условий, а другим потокам уведомлять их о наступлении этих условий. 🚩Примеры class ThreadSafeClass { private var internalState = 0 private let queue = DispatchQueue(label: "com.example.threadSafeQueue") func increment() { queue.sync { internalState += 1 } } func getState() -> Int { return queue.sync { internalState } } } С NSLock class ThreadSafeClass { private var internalState = 0 private let lock = NSLock() func increment() { lock.lock() internalState += 1 lock.unlock() } func getState() -> Int { lock.lock() let state = internalState lock.unlock() return state } } С objc_sync_enter и objc_sync_exit class ThreadSafeClass: NSObject { private var internalState = 0 func increment() { objc_sync_enter(self) internalState += 1 objc_sync_exit(self) } func getState() -> Int { objc_sync_enter(self) let state = internalState objc_sync_exit(self) return state } } Ставь 👍 и забирай 📚 Базу знаний
392
20
🤔 В каком методе жизненного цикла контроллера нам в первый раз известны финальные размеры view? Финальные размеры UIView гарантированно известны в методе viewDidLayoutSubviews(). На этом этапе система уже рассчитала Auto Layout и определила финальный frame всех вью. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
311