Swift | Вопросы собесов
رفتن به کانال در Telegram
Cайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp Тесты t.me/+bn3i_aLL0-A2ZGMy Задачи t.me/+JQkI4zSOEXtkYzg6 Вакансии t.me/+3o9-Ytdiv_E5OGIy
نمایش بیشتر2 213
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-27 روز
-830 روز
در حال بارگیری داده...
کانالهای مشابه
ابر برچسبها
اشارات ورودی و خروجی
---
---
---
---
---
---
جذب مشترکین
ژوئن '26
ژوئن '26
+11
در 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 کانالها
| تاریخ | رشد مشترکین | اشارات | کانالها | |
| 10 ژوئن | +1 | |||
| 09 ژوئن | +1 | |||
| 08 ژوئن | +2 | |||
| 07 ژوئن | 0 | |||
| 06 ژوئن | +1 | |||
| 05 ژوئن | 0 | |||
| 04 ژوئن | +2 | |||
| 03 ژوئن | 0 | |||
| 02 ژوئن | +3 | |||
| 01 ژوئن | +1 |
پستهای کانال
🤔 Какие виды ссылок бывают в Swift?
– strong — по умолчанию, удерживает объект в памяти.
– weak — не увеличивает счётчик ссылок и становится nil, когда объект освобождён.
– unowned — не увеличивает счётчик, но не обнуляется (используется, когда объект точно не должен быть уничтожен до использования).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
| 2 | 🤔 С какими типами можно использовать ссылки?
Ссылки (strong, weak, unowned) применимы только к reference-типа — то есть к экземплярам классов. Value-типы (например, struct, enum) копируются при передаче, и на них нельзя создать ссылку в обычном понимании.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний | 206 |
| 3 | 🤔 Есть ли функция первого класса в языке?
Да. В Swift функции — объекты первого класса. Их можно передавать как параметры, возвращать из других функций и сохранять в переменные.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний | 254 |
| 4 | 🤔 За что отвечают Compression Resistance Priority?
Отвечают за сопротивление сжатию UI-элемента в ограниченном пространстве. Элемент с более высоким приоритетом будет меньше сжиматься, чем элемент с более низким значением.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний | 272 |
| 5 | 🤔 Как приложения реагируют на нажатия?
Система распознаёт событие касания, передаёт его объекту UIResponder, который находится в иерархии view. Объект может обработать его или передать дальше по цепочке.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний | 313 |
| 6 | 🤔 Как инициализация классов связана с выделением памяти?
При инициализации класса происходит выделение памяти в heap, а затем инициализация всех его свойств. После завершения инициализации объект готов к использованию. Это отличается от структур, которые хранятся в stack (если не вложены в ссылочный тип).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний | 335 |
| 7 | 🤔 Что нужно сделать, чтобы вызвать жизненный цикл view-контроллера?
Жизненный цикл UIViewController запускается:
- При инициализации и отображении контроллера (вручную или через навигацию).
- Основные методы:
- viewDidLoad()
- viewWillAppear()
- viewDidAppear()
- viewWillDisappear()
- viewDidDisappear()
Чтобы вызвать жизненный цикл вручную:
- Представить контроллер:
- Или встроить в навигацию:
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний | 348 |
| 8 | 🤔 Если обозначить внутри метода 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
}
}
Ставь 👍 и забирай 📚 Базу знаний | 336 |
| 9 | 🤔 В каком методе жизненного цикла контроллера нам в первый раз известны финальные размеры view?
Финальные размеры UIView гарантированно известны в методе viewDidLayoutSubviews(). На этом этапе система уже рассчитала Auto Layout и определила финальный frame всех вью.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний | 271 |
| 10 | 🤔 Есть функция, принимающая аргумент, а туда закинут integer — что произойдёт?
В языках со строгой типизацией (Swift, Kotlin, Java) произойдёт ошибка компиляции, если типы не совпадают. В динамически типизированных языках (Python, JavaScript) может быть попытка приведения типа — и тогда поведение зависит от реализации функции.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний | 286 |
| 11 | 🤔 Что такое многопоточность?
Это возможность центрального процессора (ЦПУ) или программы выполнять несколько задач (потоков) одновременно. В контексте программирования она используется для улучшения производительности приложений за счёт параллельной обработки задач. Это особенно важно для задач, требующих интенсивных вычислений, или приложений, которые должны одновременно реагировать на множество входных данных, таких как пользовательский интерфейс.
🚩Основные понятия
🟠Поток (Thread)
Минимальная единица обработки, которая может быть выполнена операционной системой.
🟠Конкуренция (Concurrency)
Способность программы делать прогресс в нескольких задачах одновременно. Конкуренция достигается за счёт переключения между задачами.
🟠Параллелизм (Parallelism)
Способность программы выполнять несколько операций одновременно, используя множество процессоров или ядер.
Ставь 👍 и забирай 📚 Базу знаний | 297 |
| 12 | 🤔 Как отменять синхронные задачи?
Синхронные задачи нельзя отменить напрямую — нужно использовать флаг (например, isCancelled) и вручную проверять его внутри выполнения. Лучше использовать DispatchWorkItem или Operation.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний | 280 |
| 13 | 🤔 Как устроена память?
Память устройства можно представить в виде нескольких уровней, каждый из которых имеет свою скорость доступа, размер и назначение:
🟠Регистры процессора
Это самая быстрая память, непосредственно встроенная в процессор. Регистры хранят те данные, с которыми процессор работает в данный момент времени.
🟠Кэш-память
Она находится непосредственно на процессоре или рядом с ним. Кэш-память используется для временного хранения копий часто используемых данных из основной памяти для ускорения доступа к ним. Кэш-память делится на несколько уровней (L1, L2, и иногда L3), где L1 — самый быстрый и обычно самый маленький.
🟠Оперативная память (ОЗУ)
Здесь хранятся данные и программы, с которыми компьютер работает в данный момент. Доступ к ОЗУ быстрый, но оно является временным хранилищем: при выключении устройства данные в ОЗУ теряются.
🟠Постоянная память (ПЗУ, SSD, HDD)
Это память для долговременного хранения данных. Она сохраняет информацию даже при выключении питания. HDD (жесткие диски) использовались ранее и работают на принципе магнитного записывания данных, в то время как SSD (твердотельные накопители) работают на основе флеш-памяти и обеспечивают более быстрый доступ к данным.
🟠Виртуальная память
Это техника, которая позволяет операционной системе использовать часть жесткого диска (или SSD) как дополнительную оперативную память. Когда ОЗУ заполнено, операционная система может перемещать редко используемые данные из ОЗУ на диск в специальный файл подкачки (swap file), освобождая ОЗУ для других задач.
Ставь 👍 и забирай 📚 Базу знаний | 318 |
| 14 | 🤔 Как функционируют стеки между собой?
Стеки между собой не взаимодействуют напрямую, потому что каждый из них принадлежит отдельному потоку и находится в своей изолированной памяти.
Однако потоки могут обмениваться данными через:
- Общую (разделяемую) память.
- Коллекции или переменные, защищённые механизмами синхронизации (например, DispatchQueue, NSLock, Atomic).
- Очереди (например, GCD или OperationQueue в Swift).
Сами стеки — независимы и не пересекаются между потоками.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний | 310 |
| 15 | 🤔 Расскажи про две семантики в 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"
Ставь 👍 и забирай 📚 Базу знаний | 328 |
| 16 | Главный навык на ближайшие годы — ВАЙБ-КОДИНГ
ИИ уже пишет код, чинит баги, генерирует тесты, документацию и помогает запускать продукты быстрее, чем это делали классические команды разработки. И это уже не "будущее когда-нибудь", а реальность, которая меняет рынок уже сегодня
И те, кто научится вайбкодить сейчас, будут увереннее конкурировать на рынке и зарабатывать больше тех, кто по-прежнему делает всё вручную.
Стартовать с нуля поможет канал Вайб-кодинг. Там ребята круглосуточно мониторят более 320 российских и зарубежных источников и публикуют только главное: релизы, инструменты, гайды, курсы и практические кейсы.
Подписывайтесь, нас уже 30 тысяч: @vibecoding_tg | 0 |
| 17 | 🤔 Как отлавливать, где допущена ошибка в свифте?
В Swift есть несколько способов отлавливать и диагностировать ошибки в коде:
🚩Обработка ошибок через `do-catch`
Используется, если функция генерирует ошибку (throws).
enum LoginError: Error {
case wrongPassword
case userNotFound
}
func login(user: String, password: String) throws {
if user != "admin" { throw LoginError.userNotFound }
if password != "1234" { throw LoginError.wrongPassword }
}
do {
try login(user: "admin", password: "wrong")
} catch LoginError.wrongPassword {
print("Ошибка: Неверный пароль")
} catch {
print("Ошибка: \(error)")
}
🚩`assert()`, `precondition()`, `fatalError()` (для отладки)
Эти функции прерывают выполнение программы, если что-то пошло не так.
assert() (только в Debug)
let age = -5
assert(age >= 0, "Возраст не может быть отрицательным")
precondition() (работает в Release)
precondition(age >= 0, "Возраст не может быть отрицательным")
fatalError() (прерывает программу)
func getData() -> String {
fatalError("Метод ещё не реализован")
}
Ставь 👍 и забирай 📚 Базу знаний | 0 |
| 18 | 🤔Что такое cherrypick?
cherrypick — это команда Git, которая позволяет взять конкретные изменения из одного коммита и применить их в другой ветке. Это полезно для исправления ошибок или добавления небольших фич без полного слияния веток.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний | 0 |
| 19 | 🤔 Перечислите все ленивые (lazy) контейнеры/вью?
В iOS существует несколько ленивых (lazy) контейнеров и вью, которые откладывают создание или загрузку элементов до момента их фактического использования.
🚩`lazy var` (ленивые свойства)
Обычное свойство инициализируется сразу, а lazy – только при первом вызове.
class Example {
lazy var expensiveObject: Data = {
print("Объект создан!")
return Data()
}()
}
let obj = Example()
print("Объект ещё не создан")
_ = obj.expensiveObject // Только теперь создастся
🚩`LazySequence` и `LazyCollection`
Если вы хотите избежать лишних вычислений, можно использовать ленивую последовательность:
let numbers = (1...1000).lazy.map { $0 * 2 } // Не вычисляется сразу!
print(numbers.first!) // Только теперь вычисляется первый элемент
🚩`LazyVStack`, `LazyHStack`, `LazyGrid` (SwiftUI)
В отличие от обычных VStack и HStack, ленивые версии создают элементы только при прокрутке.
ScrollView {
LazyVStack {
ForEach(0..<1000) { index in
Text("Элемент \(index)")
}
}
}
🚩`UITableView` и `UICollectionView` (UIKit)
Они работают по принципу переиспользования ячеек, загружая их только когда нужно.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = "Строка \(indexPath.row)"
return cell
}
Ставь 👍 и забирай 📚 Базу знаний | 0 |
| 20 | 🤔 Как устроены массивы?
В Swift массив — это структура с механизмом Copy-on-Write. Под капотом — буфер в памяти, индексируемый по целому числу. Массивы автоматически расширяются при добавлении новых элементов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний | 0 |
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
