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

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

Open in Telegram

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv

Show more
2 209
Subscribers
+124 hours
-67 days
-1230 days
Attracting Subscribers
June '26
June '26
+27
in 0 channels
May '26
+21
in 0 channels
Get PRO
April '26
+23
in 0 channels
Get PRO
March '26
+35
in 0 channels
Get PRO
February '26
+45
in 1 channels
Get PRO
January '26
+58
in 0 channels
Get PRO
December '25
+28
in 0 channels
Get PRO
November '25
+156
in 1 channels
Get PRO
October '25
+26
in 0 channels
Get PRO
September '25
+41
in 0 channels
Get PRO
August '25
+38
in 0 channels
Get PRO
July '25
+27
in 0 channels
Get PRO
June '25
+34
in 0 channels
Get PRO
May '25
+50
in 0 channels
Get PRO
April '25
+87
in 0 channels
Get PRO
March '25
+151
in 2 channels
Get PRO
February '25
+123
in 1 channels
Get PRO
January '25
+127
in 53 channels
Get PRO
December '24
+55
in 1 channels
Get PRO
November '24
+75
in 0 channels
Get PRO
October '24
+193
in 42 channels
Get PRO
September '24
+348
in 251 channels
Get PRO
August '24
+98
in 0 channels
Get PRO
July '24
+140
in 54 channels
Get PRO
June '24
+411
in 244 channels
Get PRO
May '24
+646
in 191 channels
Get PRO
April '24
+353
in 23 channels
Date
Subscriber Growth
Mentions
Channels
26 June0
25 June+1
24 June0
23 June0
22 June+1
21 June+1
20 June0
19 June+3
18 June+1
17 June+1
16 June0
15 June+2
14 June+1
13 June+3
12 June+1
11 June+1
10 June+1
09 June+1
08 June+2
07 June0
06 June+1
05 June0
04 June+2
03 June0
02 June+3
01 June+1
Channel Posts
🤔 Какие есть инструменты для работы с потоками? В Swift есть несколько инструментов для работы с многопоточностью и параллельным выполнением кода. Вот основные из них: 🟠GCD (Grand Central Dispatch) – главный инструмент для потоков GCD – это низкоуровневая технология, позволяющая управлять задачами (тасками) в очередях (DispatchQueue).
DispatchQueue.global(qos: .background).async {
    print("Фоновый поток")
    
    DispatchQueue.main.async {
        print("Вернулись в главный поток")
    }
}
🟠OperationQueue – более удобный API для задач OperationQueue – это более гибкая и объектно-ориентированная альтернатива GCD.
let queue = OperationQueue()
queue.maxConcurrentOperationCount = 2 // Ограничение на 2 задачи одновременно

queue.addOperation {
    print("Операция 1")
}

queue.addOperation {
    print("Операция 2")
}
🟠Actors – безопасная работа с потоками в Swift 5.5+ С actor можно работать с потоками без гонок данных, потому что все его свойства защищены от одновременного доступа.
actor Counter {
    private var value = 0
    
    func increment() {
        value += 1
    }

    func getValue() -> Int {
        return value
    }
}

let counter = Counter()

Task {
    await counter.increment()
    print(await counter.getValue()) // Потокобезопасный доступ
}
🟠Task & Async/Await (Swift 5.5+) – современный подход к асинхронности С async/await код становится читаемым и удобным.
func fetchData() async -> String {
    try? await Task.sleep(nanoseconds: 1_000_000_000) // 1 секунда задержки
    return "Данные загружены"
}

Task {
    let result = await fetchData()
    print(result)
}
Ставь 👍 и забирай 📚 Базу знаний

2
🤔 Где фреймы — наиболее яркий пример использования? Фреймы логично использовать в анимациях, при рисовании на Canvas, и в простых элементах интерфейса, где точное позиционирование важнее гибкости. Также актуальны при создании кастомных вью или в играх. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
173
3
🤔 Почему Apple предпочитает использовать value type по умолчанию? Apple предпочитает value types (структуры struct) по умолчанию в Swift по нескольким причинам 🟠Безопасность многопоточного кода struct копируется при передаче, а не передается по ссылке, как class. Это снижает вероятность гонки данных (data race), когда один поток изменяет объект, а другой читает его одновременно. В многопоточной среде это делает код более безопасным. struct Point { var x: Int var y: Int } var p1 = Point(x: 1, y: 2) var p2 = p1 // p2 - это копия, изменения в p2 не затронут p1 p2.x = 10 print(p1.x) // 1 print(p2.x) // 10 🟠Производительность struct хранятся в стеке, а не в куче, что делает их создание и удаление быстрее. Куча (heap) требует управления памятью (ARC – Automatic Reference Counting), а struct — нет. class MyClass { var value = 0 } // В куче (heap), управляется ARC struct MyStruct { var value = 0 } // В стеке (stack), копируется при передаче 🟠Предсказуемость и неизменяемость struct ведут себя как примитивные типы (Int, Double), что делает код предсказуемым. Их изменение происходит локально, без неожиданных эффектов в других частях программы. class Car { var speed: Int init(speed: Int) { self.speed = speed } } var car1 = Car(speed: 60) var car2 = car1 // car2 - это ссылка на тот же объект car2.speed = 100 // Изменение затрагивает car1! print(car1.speed) // 100 (хотя мы меняли car2!) 🟠Использование в стандартной библиотеке Swift изначально построен на struct: Int, Double, Bool, Array, Dictionary, String — это структуры. Это делает язык более безопасным и производительным. var arr1 = [1, 2, 3] var arr2 = arr1 // Копия массива, а не ссылка! arr2.append(4) print(arr1) // [1, 2, 3] (не изменился!) print(arr2) // [1, 2, 3, 4] (новый массив) 🚩Когда использовать `class`? Хотя struct — предпочтительный выбор, class нужен, когда: Нужна ссылочная семантика (например, объект должен изменяться в разных местах кода). Есть сложные иерархии наследования. Требуется работа с Objective-C (NSObject). Ставь 👍 и забирай 📚 Базу знаний
214
4
🤔 Какие есть ключевые различия между Objective-C и Swift? Swift — это современный, безопасный, типизированный язык с лаконичным синтаксисом. Objective-C основан на динамической диспетчеризации и C-подобной нотации. В Swift управление памятью автоматизировано и безопаснее. Swift также поддерживает опциональные типы, value semantics, протокол-ориентированное программирование, тогда как Objective-C ближе к классической ООП-модели. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
227
5
Осталось 3 часа до конца акции: «Пожизненный PRO тариф — по цене 1 года» Поиск работы отнимает силы, время и веру в себя, но
Осталось 3 часа до конца акции: «Пожизненный PRO тариф — по цене 1 года» Поиск работы отнимает силы, время и веру в себя, но не у тех кто использует easyoffer PRO. Успей сделать самую выгодную инвестицию в развитие своей карьеры. Акция закончится уже сегодня 23 июня 23:59 по мск: 👉 https://easyoffer.ru/pro
80
6
🤔 Что означает принцип open closed? Принцип открытости/закрытости (Open/Closed Principle) гласит, что классы должны быть открыты для расширения, но закрыты для модификации. Это позволяет добавлять новую функциональность без изменения существующего кода, что снижает риск внесения ошибок. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
247
7
Последний день акции: «Пожизненный PRO тариф — по цене 1 года» 🚀 PRO включает: – Полный доступ ко всем грейдам и профессиям
Последний день акции: «Пожизненный PRO тариф — по цене 1 года» 🚀 PRO включает: – Полный доступ ко всем грейдам и профессиям – База live-coding задач и вопросов из технических собеседований с вероятностью их встречи – Примеры лучших ответов от Senior разработчиков – 1100+ записи реальных собеседований, в том числе в топовые компании (Сбер, Авито, Яндекс, WB, OZON, МТС и др.) – База 400+ тестовых заданий от компаний. – Автоотклики на вакансии в хедхантер – Аналитика ТОП-требований из вакансий для лучшего написания резюме и прохождения ATS систем рекрутеров – Генератор уникального резюме и CV под каждую вакансию – Тренажеры подготовки к собеседованию: «Реальное собеседование» и «Проработка вопросов» по методике интервальных повторений (как Anki) – (скоро) Агрегатор вакансий – (скоро) Сообщество Акция закончится уже сегодня 23 июня 23:59 по мск: 👉 https://easyoffer.ru/pro
184
8
🤔 Что наследуется? Класс-наследник может унаследовать: - свойства и методы, - инициализаторы (если они явно разрешены), - доступ к superclass через super. Протоколы могут быть унаследованы другим протоколом или реализованы классом/структурой. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
278
9
Пожизненный PRO тариф — по цене 1 года. Покупаешь один раз — пользуешься всю жизнь: 👉 https://easyoffer.ru/pro 🚀 PRO-доступ
Пожизненный PRO тариф — по цене 1 года. Покупаешь один раз — пользуешься всю жизнь: 👉 https://easyoffer.ru/pro 🚀 PRO-доступ закроет 99% проблем на пути к офферу: 1. Полный доступ ко всем грейдам и профессиям. Не важно, Junior вы или Senior, Тестировщик, Разработчик, Проджект — вы получите материалы под ваш текущий уровень и цели, без ограничений. 2. База live-coding задач и вопросов с реальных собесов с уникальной системой вероятности их встречи. Вы будете готовиться не вслепую, а точечно по тем темам, которые спрашивают чаще всего. 3. Эталонные ответы от Senior-разработчиков. Никакой воды и догадок — только четкие, структурированные решения, за которые дают «зеленый свет» к офферу 4. 1100+ записей реальных собеседований (включая топы: Сбер, Авито, Яндекс, WB, OZON, МТС). Вы увидите всё изнутри: как спрашивают, как отвечают сильные кандидаты и на каких ошибках проваливаются 80% проходящих. 5. База 400+ тестовых заданий. Если вы еще студент, то практикуйтесь на решении задач, которые помогут попасть на собес 6. Автоотклики на Хедхантере — пока вы спите, ваше резюме летит к рекрутерам автоматически. Это экономия сотен часов ручного кликанья. 7. Аналитика ТОП-требований из вакансий. Мы парсим рынок и показываем, какие скиллы сейчас в цене. Это позволит вам точечно апгрейдить резюме и проходить суровые ATS-фильтры (которые отсеивают до 75% резюме еще до просмотра рекрутером). 8. Генератор уникального резюме и CV под каждую вакансию. Забудьте про «универсальное» резюме — нейросеть адаптирует ваш опыт под конкретную позицию за минуту, повышая шансы на приглашение в разы. 9. Тренажеры подготовки к собеседованию: «Реальное собеседование» — сценарий вопросов из реальных интервью «Проработка вопросов» — флеш карточки с вопросами/ответами по методике интервальных повторений (как Anki) 10. (Скоро) Агрегатор вакансий — все вакансии из HH, Telegram, LinkedIn и других площадок в одной ленте. 11. (Скоро) Закрытое комьюнити — нетворкинг и помощь в сложных вопросах от таких же целеустремленных айтишников. Завтра последний день акции: 👉 https://easyoffer.ru/pro
245
10
🤔 Что происходит с вьюшками, которые лежат в Scroll View? - Эти вьюшки не двигаются физически — они находятся в contentView, которая движется вместе с contentOffset. - Относительно ScrollView они могут визуально выходить за пределы видимости, но физически остаются на месте внутри большого contentSize. Если вью ушла за пределы видимой области, она не рендерится до тех пор, пока не попадёт в видимую область (оптимизация). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
347
11
🤔 Как отлавливать, где допущена ошибка в свифте? В 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("Метод ещё не реализован") } Ставь 👍 и забирай 📚 Базу знаний
353
12
🤔 Какие есть фреймворки для выполнения бэкраунд задач? 1. GCD (Grand Central Dispatch): для управления потоками и выполнения задач. 2. OperationQueue: более высокоуровневая абстракция над GCD. 3. URLSession: для выполнения сетевых запросов в фоне. 4. BackgroundTasks: для выполнения долгосрочных задач в фоне. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
298
13
Привет, ребята! У нас для вас отличные новости — на easyoffer вышло сразу несколько крупных обновлений: 1. Автоотклики на HeadHunter Снова работают в полную силу — можно смело возвращаться к активному поиску. 2. Новый раздел «Резюмейкер» Теперь вы можете быстро создавать уникальные резюме, адаптированные под каждую вакансию, и сразу добавлять сопроводительное письмо. Это заметно повышает шансы получить приглашение на собеседование. 3. База вопросов стала чище Мы навели порядок и удалили около 30% дубликатов. Ориентироваться стало проще. –––––––––––––––––– 🔥 Акция в честь обновления Пожизненный тариф easyoffer PRO — по цене одного года. Успейте до 23 июня: 👉 https://easyoffer.ru/pro –––––––––––––––––– Что дальше? В ближайшие пару недель добавим ещё два раздела: 1. Сообщество с чатами по всем профессиональным направлениям. 2. Агрегатор вакансий, чтобы поиск работы стал ещё удобнее.
205
14
🤔 Чем отличается virtual table от witness table? VTable — это таблица методов для классов (динамическое наследование), используется для переопределения. Witness table — механизм Swift для протоколов, в ней хранится соответствие реализаций протокольным методам. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
301
15
🤔 Когда используется runloop? RunLoop используется для поддержки непрерывного ожидания и обработки событий в потоке. Он нужен, когда поток не должен завершаться, а должен обрабатывать входящие события, таймеры, сигналы или сообщения, особенно в UI и фоновых задачах. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
323
16
🤔 Что такое work right? Если речь о work right в контексте GCD или планировщика задач — это стратегия, при которой задачи выполняются максимально близко ко времени их планирования. Также термин может использоваться в смысле правильной, согласованной работы потоков без гонки за ресурсами. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
346
17
🤔 Что из себя представляет структура данных 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 – поиск в глубину) История действий (назад-вперед в браузере, отмена в редакторе). Ставь 👍 и забирай 📚 Базу знаний
342
18
🤔 Почему Swift не может сам сгенерировать memberwise инициализатор для классов? 1. Классы поддерживают наследование, что делает сложным автоматическое создание инициализатора, учитывающего все поля, включая родительские. 2. Инициализация в классах может включать дополнительные логики, которые сложно определить на этапе компиляции. 3. Структуры, в отличие от классов, не имеют этих ограничений, поэтому memberwise инициализатор создаётся автоматически. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
295
19
🤔 Что такое синхронная задача? Синхронная задача в программировании выполняется последовательно в текущем потоке, блокируя его до завершения задачи. Это контрастирует с асинхронной задачей, которая позволяет выполнение другого кода, пока задача обрабатывается. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
299
20
🤔 Какие можно выделить главные принципы ООП? Объектно-ориентированное программирование (ООП) — это парадигма, основанная на концепции "объектов", которые могут содержать данные в виде полей (часто называемых атрибутами или свойствами) и код в виде процедур (часто называемых методами). ООП фокусируется на использовании объектов для моделирования реального мира (или абстракций), облегчая разработку и поддержку сложных программ. Существует четыре основных принципа: 🟠Инкапсуляция Механизм ООП, который объединяет данные (атрибуты) и код (методы), манипулирующий этими данными, внутри одного объекта и скрывает детали реализации от внешнего использования. Это позволяет защитить внутреннее состояние объекта от прямого доступа извне и обеспечить контролируемый интерфейс для работы с этим объектом. 🟠Наследование Позволяет создавать новый класс на основе уже существующего класса, перенимая его свойства и методы. Новый класс может добавлять собственные свойства и методы или модифицировать унаследованные. Наследование обеспечивает повторное использование кода, упрощает его расширение и поддержку. 🟠Полиморфизм Способность объектов с одинаковым интерфейсом предоставлять различную реализацию для одного и того же метода. Это означает, что функция или метод могут использоваться для различных типов объектов, и каждый тип может реализовать эту функцию или метод по-своему. Полиморфизм упрощает написание общего кода для работы с объектами разных классов и обеспечивает гибкость в его использовании. 🟠Абстракция Позволяет скрыть сложность системы, представляя её ключевые аспекты и скрывая детали реализации. Это достигается за счёт использования абстрактных классов и интерфейсов, которые определяют шаблон для классов-наследников. Абстракция помогает сосредоточиться на взаимодействии объектов на более высоком уровне, игнорируя ненужные детали. Ставь 👍 и забирай 📚 Базу знаний
299