Swift | Вопросы собесов
Разбираем вопросы собеседований на iOS / Swift Developer Сайт: easyoffer.ru Реклама: @easyoffer_adv
Ko'proq ko'rsatish1 388
Obunachilar
+824 soatlar
+277 kunlar
+31230 kunlar
- Kanalning o'sishi
- Post qamrovi
- ER - jalb qilish nisbati
Ma'lumot yuklanmoqda...
Obunachilar o'sish tezligi
Ma'lumot yuklanmoqda...
🤔 Что такое опциональное связывание в Swift?Anonymous voting
- Процесс проверки и развертывания опциональных значений
- Добавление новых опций к существующим типам
- Связывание методов с объектом во время выполнения
- Автоматическое преобразование типов
🤯 1
Photo unavailableShow in Telegram
– Помощь с pet-проектом
– Составление roadmap
– Проведение код-ревью и mock-собеседования
– Помощь с трудоустройством
Все это и многое другое может Ментор. Он обеспечит вам необходимый boost, ускорит и упростит вход в IT.
🔥 Здесь размещен список менторов, и многие из них предлагают бесплатную первую консультацию
Что такое дженерики ?
Спросят с вероятностью 27%
Дженерики (generics) — это мощная особенность многих современных языков программирования, которые позволяют создавать гибкие, повторно используемые функции и типы данных, работающие с любым типом. Улучшают читаемость и безопасность типов кода, позволяя избежать дублирования кода и создавать более абстрактные, обобщённые решения.
Ключевые аспекты:
✅Повторное использование кода: Благодаря дженерикам, можно написать код, который будет работать с любым типом данных, что уменьшает необходимость в написании однотипного кода для разных типов.
✅Типобезопасность: Дженерики позволяют создавать код, который может работать с любым типом, при этом сохраняя строгую проверку типов на этапе компиляции. Это уменьшает вероятность ошибок во время выполнения.
✅Гибкость: Дженерики делают код более адаптируемым и легко расширяемым для работы с новыми типами, не требуя изменений в существующем коде.
Функции
func swapTwoValues<T>(_ a: inout T, _ b: inout T) {
let temporaryA = a
a = b
b = temporaryA
}
var int1 = 1
var int2 = 2
swapTwoValues(&int1, &int2) // int1 становится 2, int2 становится 1
var string1 = "Hello"
var string2 = "World"
swapTwoValues(&string1, &string2) // string1 становится "World", string2 становится "Hello"
Дженерик типы
Могут хранить элементы любого типа.
var numbers: Array<Int> = [1, 2, 3]
var strings: Dictionary<String, String> = ["Key": "Value"]
Дженерик протоколы
Также можно использовать с протоколами с помощью ассоциированных типов.
protocol Container {
associatedtype Item
mutating func append(_ item: Item)
var count: Int { get }
subscript(i: Int) -> Item { get }
}
Дженерики являются ключевой особенностью Swift, позволяя создавать гибкий и мощный код, способный работать с различными типами данных без потери безопасности типов.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 823 вопросов на IOS разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых👍 5❤ 1
🤔 Какой метод для работы с массивами не существует в Swift?Anonymous voting
- map()
- filter()
- reduce()
- collect()
🤔 Что такое `optional` в Swift?Anonymous voting
- Параметр функции
- Тип переменной, который может содержать `nil`
- Коллекция
- Метод массива
👾 1
Что может быть ключом и значением для dictionary ?
Спросят с вероятностью 27%
Словарь (Dictionary) представляет собой коллекцию пар ключ-значение, где каждый ключ должен быть уникальным. Чтобы использовать какой-либо тип в качестве ключа словаря, этот тип должен соответствовать протоколу
Hashable
. Это требование обусловлено тем, что Swift использует хеш-таблицу для хранения элементов словаря, что обеспечивает быстрый доступ к его элементам.
Ключи
✅Должны быть уникальными: Каждый ключ в словаре должен быть уникальным. При попытке добавить в словарь элемент с ключом, который уже существует в словаре, старое значение будет заменено на новое.
✅Должны соответствовать протоколу `Hashable`: Это означает, что тип ключа должен иметь способность быть правильно хешированным. Большинство базовых типов Swift (например, String
, Int
, Double
и др.) уже соответствуют Hashable
, поэтому их можно использовать в качестве ключей без дополнительных усилий.
Значения
✅Могут быть любого типа: Значения в словаре могут быть любого типа, и они не обязаны соответствовать протоколу Hashable
.
✅Могут повторяться: Разные ключи могут иметь одинаковые значения.
Пример:
var personAge: [String: Int] = ["John": 30, "Sara": 25]
В этом примере ключами являются строки (String
), представляющие имена людей, а значениями — целые числа (Int
), представляющие их возраст. Тип String
соответствует Hashable
, что делает его подходящим в качестве ключа для Dictionary
.
Собственные типы в качестве ключей
Вы также можете использовать собственные пользовательские типы в качестве ключей словаря, но для этого ваш тип должен соответствовать протоколу Hashable
. Это включает в себя реализацию требуемых методов для сравнения на равенство (==
) и хеширования (hash(into:)
).
struct Person: Hashable {
var name: String
var id: Int
}
var peopleDictionary: [Person: String] = [Person(name: "John", id: 1): "Engineer"]
Здесь Person — это пользовательский тип, соответствующий Hashable
, что позволяет использовать его в качестве ключа. Значения в этом словаре — строки, описывающие профессию человека.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 823 вопросов на IOS разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовыхPhoto unavailableShow in Telegram
⚡️В сети начали находить курсы и книги известных онлайн школ в открытом доступе
Вот отсортированная база с тонной материала(постепенно пополняется):
🔗 БАЗА (3385 видео):
(343 видео, 87 книги) — Java
(176 видео, 32 книги) — Git
(293 видео, 63 книги) — C#
(352 видео, 89 книги) — С++
(167 видео, 53 книги) — PHP
(227 видео, 83 книги) — SQL
(163 видео, 29 книги) — Linux
(363 видео, 122 книги) — Python
(415 видео, 168 книги) — Frontend
(143 видео, 33 книги) — Flask
(167 видео, 43 книги) — Django
(197 видео, 49 книги) — Разработка ботов
(137 видео, 93 книги) — Data Science
(113 видео, 82 книги) — GameDev
(129 видео, 73 книги) — QA
Скачивать ничего не нужно — все выложили в Telegram и на YouTube с доступом по ссылке
👾 2
🤔 Какой модификатор доступа в Swift является наиболее ограничивающим?Anonymous voting
- public
- internal
- fileprivate
- open
Что такое MemoryLayout и как посчитать размер протокола ?
Спросят с вероятностью 18%
MemoryLayout — это утилита, предоставляемая стандартной библиотекой, которая позволяет получить информацию о размерах и выравнивании типов данных в памяти. Это особенно полезно при низкоуровневой работе с памятью или при оптимизации программы.
Использование MemoryLayout
Позволяет определить три ключевых аспекта типа данных:
✅Size: общий размер в байтах, который требуется типу данных в памяти.
✅Stride: размер, который занимает экземпляр типа в массиве, включая возможные паддинги для выравнивания.
✅Alignment: требование к выравниванию в памяти, то есть, к какому адресу памяти должен быть выровнен адрес начала данных.
Пример использования
MemoryLayout
в Swift:
struct ExampleStruct {
var a: Int
var b: Bool
}
print("Size of ExampleStruct: \(MemoryLayout<ExampleStruct>.size)")
print("Stride of ExampleStruct: \(MemoryLayout<ExampleStruct>.stride)")
print("Alignment of ExampleStruct: \(MemoryLayout<ExampleStruct>.alignment)")
Размер протокола
Может быть запутанным, так как протоколы сами по себе не занимают пространство; они определяют интерфейс, которому должны соответствовать типы данных. Протоколы в Swift не имеют прямого размера в памяти, так как они не являются конкретными данными, а скорее определяют "шаблон", который должны следовать объекты или структуры.
Однако, если вы работаете с экземплярами типов, соответствующих протоколу, то может возникнуть вопрос о размере этих экземпляров. В случае использования типа Any
или любого другого обобщенного типа, который может принимать значения любых типов, соответствующих протоколу, размер такой переменной будет определяться как размер указателя в данной системе (обычно это 8 байт на 64-битных системах).
Пример определения размера типа, соответствующего протоколу:
protocol SomeProtocol {
var num: Int { get set }
}
struct SomeStruct: SomeProtocol {
var num: Int
}
print("Size of SomeStruct: \(MemoryLayout<SomeStruct>.size)")
В этом примере, размер SomeStruct
, которая соответствует SomeProtocol
, будет равен размеру его единственного свойства num
типа Int
.
Размеры типов данных, соответствующих протоколу, зависят от их конкретной реализации, а сам протокол не имеет непосредственного "размера" в традиционном понимании.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 823 вопросов на IOS разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых🔥 4
🤔 Какой оператор используется для безопасного разворачивания опционалов?Anonymous voting
- !
- ?
- ??
- ...
🤔 11🤯 3👾 1
Boshqa reja tanlang
Joriy rejangiz faqat 5 ta kanal uchun analitika imkoniyatini beradi. Ko'proq olish uchun, iltimos, boshqa reja tanlang.