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

channel icon
Разбираем вопросы собеседований на iOS / Swift Developer

Сайт: easyoffer.ru

Условия размещения

Цена за 48 часов в ленте 1750,00
Цена за 1 час закрепления N/A
Взаимопиар Нет
Дополнительные условия рекламы Отсутствуют
+3
1 989
подписчиков
-3
385
охват 1 публикации
0
~3
постов / день
-0,2%
19,4%
ERR % ?

Статистика

Последние публикации

Swift | Вопросы собесов
12 февраля 2025 г. 19:10
🤔🤔 Для чего нужен volatile?

1. Модификатор volatile используется для указания, что значение переменной должно всегда читаться из основной памяти, а не из кеша потока.
2. Это гарантирует видимость изменений переменной между потоками.
3. Однако volatile не обеспечивает атомарность операций, таких как инкремент или декремент.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚📚 Базу знаний Базу знаний
Swift | Вопросы собесов
12 февраля 2025 г. 12:10
🤔 Зачем нужны слабые ссылки?Зачем нужны слабые ссылки?

Слабые ссылки (weak references) играют важную роль в управлении памятью, особенно когда нужно предотвратить циклы сильных ссылок (retain cycles) и утечки памяти.

🚩Основные причины использования

🟠Предотвращение циклов сильных ссылок
Циклы сильных ссылок возникают, когда два объекта держат сильные ссылки друг на друга, что препятствует их освобождению из памяти. Слабые ссылки разрывают этот цикл, позволяя одному из объектов освобождаться.
class Person {
var name: String
weak var friend: Person?
init(name: String) {
self.name = name
}
}

var alice: Person? = Person(name: "Alice")
var bob: Person? = Person(name: "Bob")

alice?.friend = bob
bob?.friend = alice

alice = nil // Теперь объекты могут быть освобождены
bob = nil


🟠Избежание утечек памяти
Утечки памяти происходят, когда объекты, которые больше не нужны, не освобождаются из памяти. Слабые ссылки помогают избежать этих утечек, обеспечивая правильное освобождение памяти. Делегаты часто объявляются как слабые ссылки, чтобы избежать утечек памяти.
protocol TaskDelegate: AnyObject {
func taskDidFinish()
}

class Task {
weak var delegate: TaskDelegate?
func complete() {
delegate?.taskDidFinish()
}
}

class ViewController: TaskDelegate {
var task = Task()
init() {
task.delegate = self
}

func taskDidFinish() {
print("Task finished")
}
}


🟠Управление временными зависимостями
Слабые ссылки удобны для временных зависимостей, когда объект не должен удерживаться в памяти, если нет других сильных ссылок. Использование слабых ссылок для временных объектов.
class Cache {
weak var temporaryObject: SomeClass?
}

class SomeClass {
// Код класса
}

var cache = Cache()
var object = SomeClass()
cache.temporaryObject = object
object = SomeClass() // Старый объект удаляется, так как на него нет сильных ссылок


🚩Плюсы и минусы

Предотвращение циклов ссылок
Основное преимущество слабых ссылок заключается в их способности разрывать циклы ссылок, предотвращая утечки памяти.
Обеспечение корректного управления памятью
Слабые ссылки позволяют объектам освобождаться из памяти, когда на них больше нет сильных ссылок, что улучшает управление ресурсами.
Гибкость и безопасность
Использование слабых ссылок обеспечивает более гибкое и безопасное управление зависимостями между объектами.
Сложности управления
Необходимо учитывать, что слабые ссылки могут стать nil в любой момент, поэтому требуется дополнительная проверка.
Понимание жизненного цикла объектов
Требуется хорошее понимание жизненного цикла объектов и управления памятью, чтобы правильно использовать слабые ссылки.

Ставь 👍👍 и забирай 📚📚 Базу знаний Базу знаний
Swift | Вопросы собесов
12 февраля 2025 г. 10:00
Все новости из мира программирования на этом канале @umnyiprogrammist

Подписывайтесь, чтобы не упустите ничего важного

Ставь 👍👍 и забирай 📚 📚 Базу знанийБазу знаний
Swift | Вопросы собесов
12 февраля 2025 г. 4:47
Бесплатный проект для новичков в DevOps. Подписывайся!Бесплатный проект для новичков в DevOps. Подписывайся!

Сообщество для начинающих DevOps-инженеров.

В канале собраны фишки DevOps. Как быстро стартануть в DevOps и внедрить методологию в свои проекты? Какие инструменты осваивать в первую очередь? Лекции, статьи и вебинары от ведущих практиков IT-рынка. Практические задания, еженедельные разборы и лайвы от наставника проекта

ПодписатьсяПодписаться

#реклама 16+
slurm.io

О рекламодателе
Swift | Вопросы собесов
11 февраля 2025 г. 19:10
🤔🤔 Если обозначить внутри метода Synchronized, что будет монитору?

1. Если синхронизация применяется к блоку внутри метода, монитор захватывается для указанного объекта.
2. Например, synchronized(this) блокирует текущий объект, а synchronized(ClassName.class) — класс.
3. Монитор защищает только код внутри синхронизированного блока.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚📚 Базу знаний Базу знаний
Swift | Вопросы собесов
11 февраля 2025 г. 16:16
Онлайн-интенсив для ИТ-специалистов в Открытых школах Т1Онлайн-интенсив для ИТ-специалистов в Открытых школах Т1

Уже есть опыт работы в ИТ, но хочешь прокачать скилы и продвинуться в карьере?

Тогда скорее залетай на бесплатный ИТ-интенсив в Открытых школах Т1.

Открытые школы — это возможность усилить свои навыки и получить оффер в ИТ-холдинг Т1. И все это за месяц, онлайн и в удобное вечернее время.

Что ты получишь?

✅ бесплатное обучение в гибком формате: по вечерам, онлайн, из любого города РФ и РБ.
✅ материалы от HR для прокачки резюме и подготовки к интервью в Т1.
✅ много практики и уникальный рыночный опыт.
✅ поддержку опытных преподавателей и карьерный фаст-трек до мидла в Т1 для лучших выпускников.
✅ реальный шанс получить оффер в Т1.

Более 1000 специалистов уже прошли этот путь — теперь твоя очередь!

Регистрация до 14 марта!

Подать заявкуПодать заявку

#реклама 16+
t1.ru

О рекламодателе
Swift | Вопросы собесов
11 февраля 2025 г. 12:10
🤔🤔🤔 Какие знаешь способы внедрения зависимостей? Какие знаешь способы внедрения зависимостей?

Внедрение зависимостей (Dependency Injection, DI) в iOS-приложениях позволяет сделать код более модульным, тестируемым и поддерживаемым. Рассмотрим основные способы внедрения зависимостей в Swift.

🟠Внедрение через инициализатор (Initializer Injection)
Это самый распространенный и рекомендуемый способ. Зависимости передаются в объект через его инициализатор.
protocol NetworkServiceProtocol {
func fetchData()
}

class NetworkService: NetworkServiceProtocol {
func fetchData() {
print("Данные загружены")
}
}

// Класс, которому нужна зависимость
class ViewModel {
private let networkService: NetworkServiceProtocol

init(networkService: NetworkServiceProtocol) {
self.networkService = networkService
}

func loadData() {
networkService.fetchData()
}
}

// Использование
let networkService = NetworkService()
let viewModel = ViewModel(networkService: networkService)
viewModel.loadData()


🟠Внедрение через свойства (Property Injection)
Зависимость передается через свойство класса.
class ViewModel {
var networkService: NetworkServiceProtocol?

func loadData() {
networkService?.fetchData()
}
}

// Использование
let viewModel = ViewModel()
viewModel.networkService = NetworkService()
viewModel.loadData()


🟠Внедрение через метод (Method Injection)
Зависимость передается непосредственно в метод, который её использует.
class ViewModel {
func loadData(with networkService: NetworkServiceProtocol) {
networkService.fetchData()
}
}

// Использование
let viewModel = ViewModel()
let networkService = NetworkService()
viewModel.loadData(with: networkService)


🟠Использование Service Locator (Антипаттерн)
Класс сам запрашивает зависимость у глобального локатора.
class ServiceLocator {
static let shared = ServiceLocator()

private var services: [String: Any] = [:]

func register(_ service: T) {
let key = String(describing: T.self)
services[key] = service
}

func resolve() -> T? {
let key = String(describing: T.self)
return services[key] as? T
}
}

// Регистрация зависимостей
let locator = ServiceLocator.shared
locator.register(NetworkService() as NetworkServiceProtocol)

// Использование
class ViewModel {
func loadData() {
let networkService: NetworkServiceProtocol? = ServiceLocator.shared.resolve()
networkService?.fetchData()
}
}


🟠Использование DI-контейнеров (например, Swinject)
Специальные библиотеки помогают управлять зависимостями.
import Swinject

let container = Container()
container.register(NetworkServiceProtocol.self) { _ in NetworkService() }

class ViewModel {
private let networkService: NetworkServiceProtocol

init(networkService: NetworkServiceProtocol) {
self.networkService = networkService
}

func loadData() {
networkService.fetchData()
}
}

// Разрешение зависимости через контейнер
let networkService = container.resolve(NetworkServiceProtocol.self)!
let viewModel = ViewModel(networkService: networkService)
viewModel.loadData()


Ставь 👍👍 и забирай 📚📚 Базу знаний Базу знаний
Swift | Вопросы собесов
11 февраля 2025 г. 6:43
Подключите единое решение для клиентской поддержкиПодключите единое решение для клиентской поддержки

Увеличьте скорость ответа на звонки и чаты с аналитикой и другими возможностями в одном окне Контакт-центра MANGO OFFICE!

✅Читайте на сайте реальные кейсы повышения SL, CSI, NPS и управления аномальной нагрузкой

ПопробоватьПопробовать

#реклама 16+
mango-office.ru

О рекламодателе
Swift | Вопросы собесов
10 февраля 2025 г. 23:14
Репост:
Ищу работу пол года

Практически под каждым постом в этом канале я вижу комментарии от людей, которые ищут работу по полгода. Это перерастает в обсуждение того, как нужно (или не нужно) искать работу, почему процесс найма сломан и как они откликались на фейковые вакансии.

Честно говоря, искать работу полгода — это нонсенс. Очевидно, что человек делает что-то не так. Главная ошибка, которую совершают многие, — это создание иллюзии поиска работы.

То есть человек вроде бы ищет работу, но делает это неэффективно, тратя время на нецелевые действия. Например:

➖ Просматривает вакансии перед откликом.
➖ Пытается понять, подходит ли он под вакансию. Если считает, что не подходит — не откликается.
➖ Пишет сопроводительные письма (иногда даже уникальные под каждую вакансию).
➖ Заполняет анкеты, проходит тесты.

Все эти действия отнимают время, но не приводят к результату.

Почему это не работает?

HR-менеджер не может вручную отсмотреть 2000 откликов, оценить каждое резюме и прочитать сопроводительные письма. Поэтому компании используют ATS-системы (системы автоматического подбора), которые анализируют резюме и определяют процент его соответствия вакансии.

Что делать, чтобы повысить шансы?

1️⃣ Добавить ключевые навыки в резюме — и в основной текст, и в теги. Возьмите их с easyoffer.ru

2️⃣ Убрать нерелевантный опыт, оставить только подходящий.

3️⃣ Оформить опыт так, чтобы он выглядел релевантным. Если у вас его нет, укажите проекты, стажировки или другой опыт, который можно представить как работу от 1 года. Если опыт слишком большой, сузьте его до 6 лет.

4️⃣ Откликаться на все вакансии без разбору. Если вы Junior, не ищите только стажер или Junior-вакансии — пробуйте везде. Не отказывайте себе сами, пусть это решит HR

5️⃣ Сделать резюме публичным, потому что HR-менеджеры часто ищут кандидатов не только среди откликов, но и в базе резюме.

6️⃣ Используйте ИИ по минимуму – ATS-системы считывают это и помечают "сгенерировано ИИ"

‼️ Главное правило: чем больше откликов — тем выше шанс получить оффер. Делайте резюме удобным для ATS-систем, и вас заметят.

1. Посмотрите видео о том как я вывел свою резюме в Топ1 на HH
2. Посмотрите видео как я нашел первую работу
3. Прочитайте этот кейс про оптимизацию резюме

Если прям вообще тяжело.

Создайте несколько разных резюме. Создайте 2, 3 да хоть 10 резюме. Настройте авто-отлики и ждите приглашения на собесы.

Не нужно создавать иллюзию поиска работы, сделайте несколько простых и актуальных действий.
Swift | Вопросы собесов
10 февраля 2025 г. 19:10
🤔🤔 Что такое Object?

1. Object — базовый класс для всех классов в Java.
2. Он предоставляет базовые методы, такие как toString(), hashCode(), equals(), clone().
3. Это корневой элемент иерархии классов, от которого наследуются все остальные классы.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚📚 Базу знаний Базу знаний
Swift | Вопросы собесов
10 февраля 2025 г. 12:10
🤔🤔🤔 Как бы реализовал словарь в Swift при помощи массива? Как бы реализовал словарь в Swift при помощи массива?

В Swift словарь (Dictionary) представляет собой структуру данных, которая хранит пары ключ-значение и обеспечивает быстрый доступ к значениям по ключу (O(1) в среднем). Но если бы мы хотели реализовать словарь на основе массива, то пришлось бы использовать линейный поиск, что делает операции менее эффективными (O(n)).

🚩Реализация словаря через массив кортежей

Один из простых способов создать словарь на базе массива — использовать массив кортежей (ключ, значение).
struct ArrayDictionary {
private var items: [(Key, Value)] = [] // Храним пары ключ-значение

// Получение значения по ключу
func value(for key: Key) -> Value? {
for (k, v) in items {
if k == key {
return v
}
}
return nil
}

// Добавление или обновление значения
mutating func insert(value: Value, for key: Key) {
for i in 0.. if items[i].0 == key {
items[i].1 = value // Обновляем значение, если ключ уже есть
return
}
}
items.append((key, value)) // Добавляем новую пару
}

// Удаление элемента по ключу
mutating func remove(for key: Key) {
items.removeAll { $0.0 == key }
}
}

// Пример использования
var myDict = ArrayDictionary()
myDict.insert(value: 42, for: "age")
myDict.insert(value: 30, for: "height")

print(myDict.value(for: "age")!) // 42
myDict.remove(for: "age")
print(myDict.value(for: "age")) // nil


🚩Оптимизация: Использование бинарного поиска

Если мы отсортируем массив по ключам, можно использовать бинарный поиск (O(log n)) для ускорения поиска ключа.
struct SortedArrayDictionary {
private var items: [(Key, Value)] = []

// Бинарный поиск индекса ключа
private func index(of key: Key) -> Int? {
var left = 0
var right = items.count - 1
while left <= right {
let mid = (left + right) / 2
if items[mid].0 == key {
return mid
} else if items[mid].0 < key {
left = mid + 1
} else {
right = mid - 1
}
}
return nil
}

// Получение значения по ключу
func value(for key: Key) -> Value? {
if let index = index(of: key) {
return items[index].1
}
return nil
}

// Вставка с сохранением сортировки
mutating func insert(value: Value, for key: Key) {
if let index = index(of: key) {
items[index].1 = value
} else {
items.append((key, value))
items.sort { $0.0 < $1.0 } // Сортируем после вставки
}
}
}

// Использование
var sortedDict = SortedArrayDictionary()
sortedDict.insert(value: 50, for: "b")
sortedDict.insert(value: 20, for: "a")
sortedDict.insert(value: 70, for: "c")

print(sortedDict.value(for: "b")!) // 50


Ставь 👍👍 и забирай 📚📚 Базу знаний Базу знаний
Swift | Вопросы собесов
9 февраля 2025 г. 19:10
🤔🤔 Можем ли на переменную "повесить" Synchronized?

1. Нельзя использовать synchronized напрямую на переменной.
2. Однако переменная может быть защищена с использованием синхронизированного блока или метода.
3. Например, synchronized(this) { sharedVariable = value; }.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚📚 Базу знаний Базу знаний
Swift | Вопросы собесов
9 февраля 2025 г. 14:06
Инвестиции в отельный бизнес. Вложения в ₽ заработок в $Инвестиции в отельный бизнес. Вложения в ₽ заработок в $

International Investment предлагает портфельные инвестиции в пятизвездочный отель на Черноморском побережье Грузии. Сумма вложения — от $40 000 (или эквивалент в рублях). Фиксированная доходность 12% годовых по договору, заверенному Министерством юстиции Грузии. Срок инвестиции 3 года, с возможностью пролонгации или обратного выкупа по первоначальной цене.

Инвестор становится совладельцем 5* отеля от мирового бренда. По окончании срока вложений портфель продлевается, либо мы выкупаем его по первоначальной цене, обеспечивая сохранность средств. Оставьте заявку на консультацию и получите подробную информацию о проекте.

Узнать большеУзнать больше

#реклама
ge.internationalinvestment.biz

О рекламодателе
Swift | Вопросы собесов
9 февраля 2025 г. 12:10
🤔🤔🤔 Почему приложения под Swift массивные? Почему приложения под Swift массивные?

Приложения, написанные на Swift, могут быть довольно большими по размеру.

🟠Статическая связка Swift Runtime
Swift — это относительно новый язык, и его стандартная библиотека не встроена в iOS (как, например, Objective-C runtime). Это значит, что при компиляции приложения в его бинарь включаются стандартные Swift-библиотеки.

🟠Bitcode и архитектуры (Fat Binary)
При публикации в App Store, Xcode компилирует приложение для нескольких архитектур (arm64, armv7, x86_64). Это называется Fat Binary — один исполняемый файл включает версии для разных процессоров.

🟠Swift ABI Stability – улучшение, но не панацея
С версии Swift 5.0 ABI (Application Binary Interface) стабилизирован. Это означает, что в iOS 12.2+ уже есть встроенные Swift-библиотеки.

🟠Использование SwiftUI и Combine
SwiftUI и Combine — новые технологии, они не так оптимизированы, как UIKit. При их использовании код разрастается за счёт декларативного подхода и дополнительной логики от Apple.

🟠Дополнительные ресурсы и Assets
Если приложение использует локализацию, изображения, шрифты, CoreML, ARKit, это тоже увеличивает размер .ipa.

Ставь 👍👍 и забирай 📚📚 Базу знаний Базу знаний
Swift | Вопросы собесов
9 февраля 2025 г. 2:43
Репост:
Привет, ребята!
1,5 года я учился на программиста, а сайт easyoffer.ru стал моим пет-проектом. Я создавал его, потому что:
а) нужно было добавить хоть какой-нибудь проект в резюме
б) подготовиться к прохождению собесов

И всё получилось! Благодаря еasyoffer я успешно прошёл собеседование и устроился Python Junior-разработчиком на удаленку с зарплатой 115 тысяч рублей.

Однако ещё во время разработки я понял, что у этого проекта есть потенциал. Казалось, что сайт может стать популярным и, возможно, превратиться в стартап.

По-этому я с самого начала заложил в проект минимальную бизнес-модель, на случай, если сайт начнёт набирать трафик. Я предложил пользователям полный доступ к сайту в обмен на подписку на Telegram-каналы. Это позволяло развивать аудиторию, а в будущем — зарабатывать на рекламе.

Результат превзошёл ожидания!
С момента запуска easyoffer посетило 400 тысяч человек. А когда доход с рекламы превысил мою зарплату программиста, я принял решение уйти с работы и полностью посвятить себя разработке новой версии сайта.

Вот так, зайдя в IT, через 4 месяца вышел через свой же пет-проект. Мне очень повезло

Уже год я работаю над easyoffer 2.0.
Это будет более масштабный и качественной новый проект:
– Появится тренажер
– Появятся задачи из собесов
– Фильтрация контента по грейдам
и еще очень много фич, о которых я расскажу позже.

Хочу, довести easyoffer до ума, чтобы сайт стал настоящим помощником для всех, кто готовится к собеседованиям.
По этому в ближайшее время я объявлю о старте краудфандинговой кампании, чтобы ускорить разработку и я готов щедро отблагодарить всех, кто поддержит проект.

А те, кто поддержат проект первыми, получат специальные лимитированные выгодные вознаграждения. Следите за этим телеграм каналом, если хотите стать первыми сапортерами.
Swift | Вопросы собесов
8 февраля 2025 г. 19:10
🤔🤔 Что произойдет, если обратиться к удаленному объекту?

1. Если ссылка weak, обращение к объекту вернет nil, так как объект уже освобожден.
2. Если ссылка unowned, произойдет runtime-ошибка, так как unowned не проверяет существование объекта перед доступом.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚📚 Базу знаний Базу знаний
Swift | Вопросы собесов
8 февраля 2025 г. 15:02
Квартиры с ремонтом в ЖК "Корней" Заезжай и живи!Квартиры с ремонтом в ЖК "Корней" Заезжай и живи!

📅Акция! Скидки на квартиры до 470 000 ₽.

✨1 место - В номинации «Лучший жилой комплекс-новостройка в Тюменской области»

✨Финалист - В номинации «Лучший жилой комплекс в Тюменской области - доступное жилье»

Сочетание лучших решений формирует неповторимый образ идеального места для проживания. Места общего пользования, эксплуатируемые кровли, прогулочные зоны, коворкинги и семейные пространства создаются для того, чтобы соседи становились друзьями.

💰Сотрудничаем с ведущими банками России и подбираем не только выгодные, но и удобные программы с минимальной ставкой!
- 95% одобрения для наших клиентов

АО Специализированный застройщик "Твелл". Проектная декларация на сайте: наш.дом.рф.

Получить предложениеПолучить предложение

Проектная декларация на сайте https://наш.дом.рф/https://наш.дом.рф/. Застройщик: АО СЗ ТВЕЛЛ

#реклама
mrqz.me

О рекламодателе
Swift | Вопросы собесов
8 февраля 2025 г. 15:02
Swift | Вопросы собесов
8 февраля 2025 г. 15:02