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

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

الذهاب إلى القناة على Telegram
2 216
المشتركون
+124 ساعات
+27 أيام
-630 أيام
جذب المشتركين
يونيو '26
يونيو '26
+16
في 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 قنوات
التاريخ
نمو المشتركين
الإشارات
القنوات
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
منشورات القناة
🤔 Что такое поток безопасности (thread-safety)? Потокобезопасность — это свойство кода/объекта, означающее, что он может использоваться из разных потоков одновременно без ошибок и гонок данных. Потокобезопасный код: - Не вызывает крашей. - Не вызывает конфликтов доступа. - Защищает внутреннее состояние при параллельном использовании. В Swift thread-safety достигается через: - Синхронизацию (DispatchQueue, lock). - Immutable-структуры. - Использование actor и @MainActor. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

2
🤔 Какие есть фрейм ворк механизмы в айос для выполненной бэкраунд задач? В 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() Ставь 👍 и забирай 📚 Базу знаний
135
3
🤔 Что такое escaping closure? Escaping closure — это замыкание, которое используется после выхода из функции, в которую его передали. Например, если замыкание сохраняется в свойстве или передаётся асинхронно. Его нужно отметить @escaping, чтобы компилятор знал, что оно будет жить дольше тела функции. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
162
4
🤔 Какой путь проделывает ивент , когда пользователь нажимает на приложение? Когда пользователь нажимает на иконку приложения на домашнем экране, 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 } Ставь 👍 и забирай 📚 Базу знаний
202
5
🤔 Можно ли наследовать структуру от нескольких родителей? Нет, структуры не поддерживают наследование. Однако можно использовать протоколы (protocol) для реализации общих интерфейсов и функциональности. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
215
6
🤔 Какие виды ссылок бывают в Swift? – strong — по умолчанию, удерживает объект в памяти. – weak — не увеличивает счётчик ссылок и становится nil, когда объект освобождён. – unowned — не увеличивает счётчик, но не обнуляется (используется, когда объект точно не должен быть уничтожен до использования). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
269
7
🤔 С какими типами можно использовать ссылки? Ссылки (strong, weak, unowned) применимы только к reference-типа — то есть к экземплярам классов. Value-типы (например, struct, enum) копируются при передаче, и на них нельзя создать ссылку в обычном понимании. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
294
8
🤔 Есть ли функция первого класса в языке? Да. В Swift функции — объекты первого класса. Их можно передавать как параметры, возвращать из других функций и сохранять в переменные. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
339
9
🤔 За что отвечают Compression Resistance Priority? Отвечают за сопротивление сжатию UI-элемента в ограниченном пространстве. Элемент с более высоким приоритетом будет меньше сжиматься, чем элемент с более низким значением. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
344
10
🤔 Как приложения реагируют на нажатия? Система распознаёт событие касания, передаёт его объекту UIResponder, который находится в иерархии view. Объект может обработать его или передать дальше по цепочке. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
358
11
🤔 Как инициализация классов связана с выделением памяти? При инициализации класса происходит выделение памяти в heap, а затем инициализация всех его свойств. После завершения инициализации объект готов к использованию. Это отличается от структур, которые хранятся в stack (если не вложены в ссылочный тип). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
375
12
🤔 Что нужно сделать, чтобы вызвать жизненный цикл view-контроллера? Жизненный цикл UIViewController запускается: - При инициализации и отображении контроллера (вручную или через навигацию). - Основные методы: - viewDidLoad() - viewWillAppear() - viewDidAppear() - viewWillDisappear() - viewDidDisappear() Чтобы вызвать жизненный цикл вручную: - Представить контроллер: - Или встроить в навигацию: Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
380
13
🤔 Если обозначить внутри метода 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 } } Ставь 👍 и забирай 📚 Базу знаний
363
14
🤔 В каком методе жизненного цикла контроллера нам в первый раз известны финальные размеры view? Финальные размеры UIView гарантированно известны в методе viewDidLayoutSubviews(). На этом этапе система уже рассчитала Auto Layout и определила финальный frame всех вью. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
295
15
🤔 Есть функция, принимающая аргумент, а туда закинут integer — что произойдёт? В языках со строгой типизацией (Swift, Kotlin, Java) произойдёт ошибка компиляции, если типы не совпадают. В динамически типизированных языках (Python, JavaScript) может быть попытка приведения типа — и тогда поведение зависит от реализации функции. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
313
16
🤔 Что такое многопоточность? Это возможность центрального процессора (ЦПУ) или программы выполнять несколько задач (потоков) одновременно. В контексте программирования она используется для улучшения производительности приложений за счёт параллельной обработки задач. Это особенно важно для задач, требующих интенсивных вычислений, или приложений, которые должны одновременно реагировать на множество входных данных, таких как пользовательский интерфейс. 🚩Основные понятия 🟠Поток (Thread) Минимальная единица обработки, которая может быть выполнена операционной системой. 🟠Конкуренция (Concurrency) Способность программы делать прогресс в нескольких задачах одновременно. Конкуренция достигается за счёт переключения между задачами. 🟠Параллелизм (Parallelism) Способность программы выполнять несколько операций одновременно, используя множество процессоров или ядер. Ставь 👍 и забирай 📚 Базу знаний
319
17
🤔 Как отменять синхронные задачи? Синхронные задачи нельзя отменить напрямую — нужно использовать флаг (например, isCancelled) и вручную проверять его внутри выполнения. Лучше использовать DispatchWorkItem или Operation. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
303
18
🤔 Как устроена память? Память устройства можно представить в виде нескольких уровней, каждый из которых имеет свою скорость доступа, размер и назначение: 🟠Регистры процессора Это самая быстрая память, непосредственно встроенная в процессор. Регистры хранят те данные, с которыми процессор работает в данный момент времени. 🟠Кэш-память Она находится непосредственно на процессоре или рядом с ним. Кэш-память используется для временного хранения копий часто используемых данных из основной памяти для ускорения доступа к ним. Кэш-память делится на несколько уровней (L1, L2, и иногда L3), где L1 — самый быстрый и обычно самый маленький. 🟠Оперативная память (ОЗУ) Здесь хранятся данные и программы, с которыми компьютер работает в данный момент. Доступ к ОЗУ быстрый, но оно является временным хранилищем: при выключении устройства данные в ОЗУ теряются. 🟠Постоянная память (ПЗУ, SSD, HDD) Это память для долговременного хранения данных. Она сохраняет информацию даже при выключении питания. HDD (жесткие диски) использовались ранее и работают на принципе магнитного записывания данных, в то время как SSD (твердотельные накопители) работают на основе флеш-памяти и обеспечивают более быстрый доступ к данным. 🟠Виртуальная память Это техника, которая позволяет операционной системе использовать часть жесткого диска (или SSD) как дополнительную оперативную память. Когда ОЗУ заполнено, операционная система может перемещать редко используемые данные из ОЗУ на диск в специальный файл подкачки (swap file), освобождая ОЗУ для других задач. Ставь 👍 и забирай 📚 Базу знаний
338
19
🤔 Как функционируют стеки между собой? Стеки между собой не взаимодействуют напрямую, потому что каждый из них принадлежит отдельному потоку и находится в своей изолированной памяти. Однако потоки могут обмениваться данными через: - Общую (разделяемую) память. - Коллекции или переменные, защищённые механизмами синхронизации (например, DispatchQueue, NSLock, Atomic). - Очереди (например, GCD или OperationQueue в Swift). Сами стеки — независимы и не пересекаются между потоками. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
323
20
🤔 Расскажи про две семантики в swift'е В Swift все типы данных делятся на два вида по семантике хранения и передачи: 🚩Значимая семантика (Value Semantics) Структуры (struct), перечисления (enum) и кортежи (tuple) передаются по значению, то есть каждое присваивание создаёт копию объекта. struct User { var name: String } var user1 = User(name: "Alice") var user2 = user1 // Копия! user2.name = "Bob" print(user1.name) // "Alice" (НЕ изменилось) print(user2.name) // "Bob" 🚩Ссылочная семантика (Reference Semantics) Классы (class), акторы (actor) и замыкания (closure) передаются по ссылке, то есть несколько переменных могут ссылаться на один и тот же объект. class User { var name: String init(name: String) { self.name = name } } var user1 = User(name: "Alice") var user2 = user1 // Передача ссылки! user2.name = "Bob" print(user1.name) // "Bob" (ИЗМЕНИЛОСЬ!) print(user2.name) // "Bob" Ставь 👍 и забирай 📚 Базу знаний
345