cookie

Utilizamos cookies para mejorar tu experiencia de navegación. Al hacer clic en "Aceptar todo", aceptas el uso de cookies.

avatar

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

Разбираем вопросы собеседований на iOS / Swift Developer Сайт: https://easyoffer.ru Реклама: @easyoffer_adv

Mostrar más
Publicaciones publicitarias
1 332
Suscriptores
+1724 horas
+1257 días
+68630 días

Carga de datos en curso...

Tasa de crecimiento de suscriptores

Carga de datos en curso...

Что такое Hashable ? Спросят с вероятностью 27% Протокол Hashable позволяет объекту быть использованным в качестве ключа в словаре (Dictionary) или элемента в множестве (Set). Чтобы объект мог выполнять эту роль, он должен быть уникально идентифицируемым, чтобы каждый экземпляр объекта мог быть сравним с другими экземплярами и иметь уникальное хэш-значение. Это требование обеспечивается реализацией двух требований протокола: Equatable и hash(into:). Equatable Это протокол, который требует от типов предоставить реализацию оператора равенства (==), позволяя сравнивать два экземпляра данного типа. Для использования в качестве ключа словаря или элемента множества объекты должны поддерживать возможность такого сравнения на равенство. hash(into:) Позволяет объекту добавлять своё состояние к Hasher, который является структурой, предоставляющей унифицированный интерфейс для вычисления хэш-значений. Правильно реализованный хэш учитывает все значимые свойства объекта, которые также используются в сравнении на равенство. Пример:
struct Person: Hashable {
    var name: String
    var age: Int
    
    static func == (lhs: Person, rhs: Person) -> Bool {
        return lhs.name == rhs.name && lhs.age == rhs.age
    }
    
    func hash(into hasher: inout Hasher) {
        hasher.combine(name)
        hasher.combine(age)
    }
}
В этом примере Person структура реализует Hashable, предоставляя реализации для == и hash(into:). Это позволяет использовать Person в качестве ключей в Dictionary или элементов в Set. Данный протокол необходим для:Использования объектов в качестве ключей словаря. Эффективный поиск и доступ к элементам словаря требуют уникального идентификатора для каждого ключа. ✅Включения объектов в множество. Множества (Set) гарантируют уникальность своих элементов, что требует возможности сравнения этих элементов на равенство и вычисления их хэш-значений. Hashable делает возможным эффективное хранение и поиск данных, используя хэш-таблицы, что является основой для Dictionary и Set. 👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 823 вопросов на IOS разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
Mostrar todo...

👍 5
Photo unavailableShow in Telegram
❤️ Все платные курсы и книги выложили в Telegram Найденные материалы по всем популярным языкам программирования теперь доступны бесплатно. Выбирай направление и обучайся: — Frontend-разработчик — Backend-разработчик — Python-разработчик — Kotlin-разработчик — Swift-разработчик — Golang-разработчик — Java-разработчик — C#-разработчик — C/C++-разработчик — PHP-разработчик — Rust-разработчик — QA-тестировщик — DevOps-инженер 🔒 Ежедневно куча материалов сливается в канал Easy Dev
Mostrar todo...
1
Как в Swift устроена инкапсуляция ? Спросят с вероятностью 27% Инкапсуляция — это концепция, заключающаяся в ограничении доступа к данным и компонентам объекта и управлении взаимодействием с этим объектом только через его интерфейс. Предоставляет различные уровни доступа для реализации инкапсуляции, позволяя разработчикам скрывать детали реализации и предотвращать непреднамеренное использование внутреннего состояния и поведения объектов. Уровни доступа: 1️⃣Public: Члены класса доступны из любого кода в том же модуле и вне его. Используется для определения интерфейса публичного API. 2️⃣Open: Такой же уровень доступа, как и public, но в дополнение позволяет классам и членам класса быть наследованными и переопределенными вне модуля, в котором они объявлены. 3️⃣Internal: Члены класса доступны в любом месте кода в их собственном модуле или приложении, но недоступны за его пределами. Это уровень доступа по умолчанию. 4️⃣Fileprivate: Ограничивает доступ к членам класса в пределах того же файла исходного кода. 5️⃣Private: Самый строгий уровень доступа, ограничивающий область видимости членов класса контекстом, в котором они объявлены. Начиная с Swift 4, private также означает доступность в расширениях класса в том же файле. Примеры:
class SomeClass {
    private var privateVariable: Int = 0 // Доступна только внутри `SomeClass`
    fileprivate func fileprivateMethod() {} // Доступен в любом месте внутри того же файла исходного кода
    internal func internalMethod() {} // Доступен в любом месте внутри того же модуля (по умолчанию)
    public var publicVariable: Int = 0 // Доступна из любого места в том же модуле и из внешних модулей
    open func openMethod() {} // Может быть переопределен во внешних модулях
}

private class PrivateClass {} // Доступен только внутри текущего файла
Использование различных уровней доступа позволяет разработчикам точно контролировать, какие части класса или структуры могут быть доступны извне и как они могут быть использованы. Это способствует созданию чёткого и безопасного API, предотвращает неправильное использование внутренних данных и методов, а также облегчает сопровождение и обновление кода, поскольку внутренняя реализация может быть изменена без влияния на внешний код, который использует эти компоненты. 👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 823 вопросов на IOS разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
Mostrar todo...
👍 7
Когда использовать Set вместо Array ? Спросят с вероятностью 18% Set и Array являются двумя основными структурами данных, используемыми в многих языках для хранения коллекций значений. Выбор между этими структурами зависит от конкретных требований к данным и операциям, которые вы собираетесь выполнять. Вот основные различия и сценарии использования для каждой из структур: Array (Массив) Это упорядоченная коллекция элементов, которая позволяет хранить дублирующиеся значения. Массивы предоставляют следующие характеристики: 1️⃣Порядок: Элементы в массиве имеют конкретный порядок, который определяется их позицией. 2️⃣Доступ по индексу: Можно получить доступ к любому элементу массива по его индексу. 3️⃣Дублирование элементов: Массивы могут содержать множество одинаковых элементов. Использование массивов: ✅Когда порядок элементов важен. ✅Когда необходимо часто получать доступ к элементам по индексу. ✅Когда вам нужно часто добавлять и удалять элементы из конца коллекции (особенно для динамически расширяемых массивов). Set (Множество) Представляет собой неупорядоченную коллекцию уникальных элементов. Это означает, что множество не может содержать дубликатов. Основные характеристики множеств включают: 1️⃣Уникальность: Все элементы в множестве уникальны. 2️⃣Неупорядоченность: Элементы в множестве не хранятся в каком-либо определенном порядке. 3️⃣Эффективность операций: Операции добавления, удаления и проверки на вхождение обычно более эффективны для множеств по сравнению с массивами из-за использования хеш-таблиц. Использование множеств: ✅Когда необходимо обеспечить уникальность элементов. ✅Для быстрой проверки принадлежности элементов к коллекции. ✅Когда порядок элементов не важен. ✅Для выполнения математических операций над множествами, таких как пересечение, объединение, разность. Примеры: Массив:
var visitors = ["Alice", "Bob", "Alice", "Joe"]
print(visitors[1]) // Выводит "Bob"
// Используется для учёта всех посещений, включая повторные
Множество:
var uniqueVisitors: Set = ["Alice", "Bob", "Alice", "Joe"]
print(uniqueVisitors) // Выводит ["Alice", "Bob", "Joe"]
// Используется для учёта уникальных посетителей
Выбор между Set и Array зависит от требований к вашим данным. Если порядок и/или дублирование элементов важны, выбирайте массив. Если важны уникальность элементов и быстродействие операций проверки принадлежности, то лучше подходит множество. Всегда старайтесь выбирать структуру данных, которая наилучшим образом соответствует вашим потребностям в плане производительности и функциональности. 👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 823 вопросов на IOS разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
Mostrar todo...
🔥 8👍 3 1
Появился чит для собесов! Работает на iPhone/iPad и особенно хорошо раскрывается на маках с M процессором. Что умеет: 1. Лучшая на рынке транскрипция диалога во время интервью(Whisper) 2. Отправляет запросы в GPT-4o весь распознанный текст или его часть(выделенный вопрос) 3. Распознает изображения/скриншоты. 4. Конечно, решает алгоритмические задачки(со скринов и текста) 5. Интерфейс сделан так чтобы ничего не надо было печатать, поэтому заметно не будет. https://apps.apple.com/app/ai-interview-copilot/id6502950340
Mostrar todo...
свифт161.MP44.47 MB
свифт162.MP424.05 MB
🤔 7🔥 6👍 3😁 1🤯 1
Какие есть два типа инициализаторов ? Спросят с вероятностью 27% Существуют два основных типа инициализаторов: обозначенные (Designated) и вспомогательные (Convenience). Эти типы инициализаторов играют важную роль в процессе инициализации экземпляров классов, помогая управлять процессом создания объектов с корректным начальным состоянием. Обозначенные инициализаторы (Designated Initializers) Являются основными инициализаторами класса. Они полностью инициализируют все свойства, введённые классом, и вызывают соответствующий инициализатор суперкласса, чтобы продолжить процесс инициализации вверх по иерархии наследования. Каждый класс должен иметь хотя бы один обозначенный инициализатор. В некоторых случаях это может быть инициализатор, унаследованный от суперкласса. Пример:
class Person {
    var name: String
    var age: Int

    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}

В этом примере 
init(name: String, age: Int) является обозначенным инициализатором для класса Person, который инициализирует все свойства класса. Вспомогательные инициализаторы (Convenience Initializers) Являются второстепенными, удобными инициализаторами, которые можно определить в классе для предоставления дополнительных опций для создания экземпляра класса, используя некоторые значения по умолчанию или другую простую логику инициализации. Вспомогательные инициализаторы всегда вызывают обозначенный инициализатор того же класса (непосредственно или косвенно), обеспечивая таким образом полную инициализацию объекта. Пример:
class Person {
    var name: String
    var age: Int

    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
    
    convenience init() {
        self.init(name: "Unknown", age: 0)
    }
}
Здесь convenience init() является вспомогательным инициализатором, который предоставляет возможность создать экземпляр Person с некоторыми значениями по умолчанию. Ключевые отличияОбязанности: Обозначенные инициализаторы несут ответственность за полную инициализацию всех свойств, введённых классом, а также за вызов соответствующего инициализатора суперкласса. Вспомогательные инициализаторы не обязаны напрямую инициализировать все свойства, они обычно предоставляют альтернативный или упрощённый способ инициализации. ✅Вызовы: Вспомогательные инициализаторы всегда вызывают обозначенный инициализатор того же класса, в то время как обозначенные инициализаторы могут вызывать инициализаторы своего суперкласса. Понимание этих двух типов инициализаторов важно для корректной инициализации объектов, особенно при работе с наследованием и расширением классов. 👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 823 вопросов на IOS разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
Mostrar todo...
🔥 7 5👍 4
Photo unavailableShow in Telegram
🔥Тесты для подготовки к собеседованию🔥 Выбери своё направление: 1. Frontend 2. Python 3. Java 4. Тестировщик QA 5. Data Science 6. DevOps 7. C# 8. С/C++ 9. Golang 10. PHP 11. Kotlin 12. Swift
Mostrar todo...
🔥 5👍 3
Что такое ARC ? Спросят с вероятностью 27% ARC, или Automatic Reference Counting — это система управления памятью. Он автоматически отслеживает и управляет жизненным циклом объектов в памяти, освобождая разработчика от необходимости вручную увеличивать или уменьшать счетчик ссылок на объекты. В языках программирования,объекты остаются в памяти до тех пор, пока на них существуют активные ссылки. Когда количество ссылок на объект уменьшается до нуля, это означает, что объект больше не используется, и система может освободить занимаемую им память. Как он работает:Увеличение счетчика ссылок: Каждый раз, когда вы создаете новую сильную ссылку (strong reference) на объект (например, присваивая объект переменной или свойству), ARC автоматически увеличивает счетчик ссылок на этот объект. ✅Уменьшение счетчика ссылок: Когда сильная ссылка на объект уничтожается (например, когда переменная выходит из области видимости или ей присваивается значение nil), ARC уменьшает счетчик ссылок на объект. ✅Освобождение памяти: Когда счетчик ссылок на объект достигает нуля, ARC автоматически освобождает память, занимаемую этим объектом. ARC и управление циклическими ссылками: Одной из проблем, которую нужно решать при использовании ARC, является возможность возникновения циклических ссылок, когда два объекта ссылаются друг на друга сильными ссылками. Это может привести к тому, что счетчик ссылок на оба объекта никогда не достигнет нуля, и память, занимаемая этими объектами, не будет освобождена. Для решения этой проблемы предлагается два типа ссылок, которые не увеличивают счетчик ссылок: ✅weak: Слабые ссылки (weak) не увеличивают счетчик ссылок и автоматически становятся nil, когда объект уничтожается. Они обычно используются для предотвращения циклических ссылок, когда объекты могут быть уничтожены в любой момент. ✅unowned: Несильные ссылки (unowned) похожи на слабые, но предполагают, что другой объект будет иметь тот же срок жизни или более долгий срок жизни. unowned ссылки не становятся nil и могут привести к ошибкам времени выполнения, если вы попытаетесь получить доступ к объекту, который уже был освобожден. ARC значительно упрощает управление памятью в приложениях, автоматизируя большую часть процесса, но требует от разработчиков понимания работы сильных, слабых и несильных ссылок для предотвращения утечек памяти и ошибок времени выполнения. 👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 823 вопросов на IOS разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
Mostrar todo...
👍 5
Photo unavailableShow in Telegram
Привет! Ты сейчас ищешь работу? Если да, то у меня для тебя классные новости. Мы с Максом решили провести вебинар на тему поиска работы и того, как быстрее получить оффер. Зачем? Да потому что найти работу просто откликаясь на вакансии теперь практически нереально. На Junior вакансии откликаются по 1500 кандидатов. 1500 человек, Карл... Вопрос: Как искать работу в таких условиях? Ответ: Нужно менять подходы, и использовать новые способы поиска работы. А вот какие способы, и как искать работу в 2024 году, расскажет мой товарищ - Макс, который помогает разработчикам с трудоустройством. Он расскажет тебе как ПРАВИЛЬНО откликаться на вакансии, на что смотрят рекрутеры, и как ты должен быть упакован, чтобы получить работу в это непростое время. 🗓 Когда? Во вторник – 18 июня, в 19:00 по мск. 🎁 После регистрации он также обещал прислать: 1) Анализ рынка труда. 2) Разбор кейсов тех, кто сейчас находит работу. 3) Пошаговый план, что нужно делать, чтобы прийти к оферу. 👉 Записаться на вебинар по поиску работы.
Mostrar todo...
1
В чем заключается суть оптимизации ? Спросят с вероятностью 18% Оптимизация — это процесс улучшения кода для достижения более эффективного исполнения, обычно в контексте улучшения производительности, уменьшения занимаемого ресурсами места или увеличения эффективности работы с памятью. Этот процесс может касаться разных аспектов приложения, включая время выполнения, потребление памяти, управление базами данных, взаимодействие с сетью и пользовательский интерфейс. Цели: 1️⃣Улучшение производительности: Снижение времени, необходимого для выполнения определённых операций, что может включать оптимизацию алгоритмов, уменьшение количества обращений к базе данных или использование более эффективных методов обработки данных. 2️⃣Сокращение потребления ресурсов: Уменьшение объёма используемой оперативной памяти, дискового пространства или пропускной способности сети. Это может быть критически важно для приложений, работающих на устройствах с ограниченными ресурсами, например, на мобильных устройствах. 3️⃣Энергоэффективность: Особенно важна для мобильных и встроенных систем, где сокращение потребления энергии может привести к увеличению времени работы от батареи. 4️⃣Улучшение масштабируемости: Оптимизация программного обеспечения для обработки большего количества задач параллельно или обслуживания большего числа пользователей одновременно. 5️⃣Улучшение удобства пользователя: Сокращение времени отклика приложения на действия пользователя, что делает интерфейс более отзывчивым и приятным в использовании. Методы: 1️⃣Профилирование: Использование специальных инструментов для анализа, где приложение проводит больше всего времени или потребляет больше всего ресурсов. Это помогает идентифицировать "узкие места" и приоритизировать усилия по оптимизации. 2️⃣Оптимизация алгоритмов: Замена медленных алгоритмов на более быстрые и эффективные. Например, использование хеш-таблиц вместо списков для быстрого поиска данных. 3️⃣Асинхронное программирование: Использование асинхронных операций для улучшения отклика приложения, позволяя пользовательскому интерфейсу оставаться отзывчивым во время выполнения длительных операций. 4️⃣Минимизация зависимостей: Уменьшение зависимостей от внешних библиотек и сервисов, которые могут замедлять загрузку или выполнение приложения. 5️⃣Избегание избыточности: Удаление повторяющихся или ненужных операций в коде. При оптимизации важно соблюдать баланс между улучшением производительности и сохранением читаемости и поддерживаемости кода. Оптимизация "до абсурда" может привести к тому, что код станет трудночитаемым и трудно поддерживаемым. Всегда полезно помнить о принципе "прематурная оптимизация — корень всех зол", который предостерегает от чрезмерного фокуса на оптимизации на ранних этапах разработки в ущерб функциональности и архитектуре ПО. 👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 823 вопросов на IOS разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
Mostrar todo...
Elige un Plan Diferente

Tu plan actual sólo permite el análisis de 5 canales. Para obtener más, elige otro plan.