Swift | Вопросы собесов
2.13K subscribers
28 photos
956 links
Download Telegram
В чем суть оптимизации copy on write ?
Спросят с вероятностью 91%

Оптимизация "copy on write" (COW) представляет собой стратеги оптимизации управления памятью, применяемую к коллекциям и другим структурам данных, которые ведут себя как типы значений (value types), такие как структуры и перечисления. Эта стратегия позволяет избежать ненужного копирования объектов до тех пор, пока не произойдет попытка изменения.

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

Чтобы оптимизировать производительность, используется техника "copy on write". Суть её в том, что фактическое копирование происходит только в момент изменения данных. Если вы просто передаете данные или работаете с ними в режиме только для чтения, копирование не производится. Это значительно снижает нагрузку на память и процессор, особенно при работе с большими объемами данных.

Примером может служить работа с массивами:
var original = [1, 2, 3]
var copy = original // Здесь копирование не происходит, обе переменные ссылаются на один и тот же участок памяти

copy.append(4) // Только сейчас происходит фактическое копирование, так как мы модифицируем `copy`


В этом примере, когда мы добавляем элемент в copy, он определяет, что массив должен быть изменен, и только тогда происходит реальное копирование. До момента модификации original и copy эффективно ссылаются на одни и те же данные, что экономит ресурсы.

Суть оптимизации "copy on write" заключается в минимизации издержек на копирование данных, проводя копирование только тогда, когда это действительно необходимо для изменения данных. Это улучшает производительность при работе с большими структурами данных, сохраняя при этом безопасность и простоту работы с типами значений.

👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 823 вопросов на IOS разработчика. Ставь 👍 если нравится контент
👍182
Что такое Solid ?
Спросят с вероятностью 73%

SOLID — это аббревиатура, обозначающая пять основных принципов объектно-ориентированного программирования и дизайна, которые помогают разработчикам создавать системы, легкие в поддержке и расширении. Эти принципы были сформулированы Робертом Мартином (Uncle Bob) и являются ключевыми в построении эффективных, масштабируемых и поддерживаемых программных систем. Вот они:

1️⃣Single Responsibility Principle (Принцип единственной ответственности) - каждый класс должен иметь только одну причину для изменения. Этот принцип подчеркивает важность разделения обязанностей в программном обеспечении, чтобы каждый модуль или класс был ответственен за одну функциональность.

2️⃣Open/Closed Principle (Принцип открытости/закрытости) - программные сущности (классы, модули, функции и т.д.) должны быть открыты для расширения, но закрыты для модификации. Это означает, что можно добавлять новую функциональность без изменения существующего кода.

3️⃣Liskov Substitution Principle (Принцип подстановки Барбары Лисков) - объекты в программе должны быть заменяемы их наследниками без влияния на корректность программы. Этот принцип поддерживает концепцию полиморфизма и наследования, обеспечивая, чтобы подклассы могли служить заменой для их базовых классов.

4️⃣Interface Segregation Principle (Принцип разделения интерфейса) - клиенты не должны быть вынуждены зависеть от интерфейсов, которые они не используют. Суть в том, чтобы разбивать большие интерфейсы на мелкие и специфичные, чтобы их реализация не заставляла классы имплементировать методы, которые они не будут использовать.

5️⃣Dependency Inversion Principle (Принцип инверсии зависимостей) - модули высокого уровня не должны зависеть от модулей низкого уровня. Обе стороны должны зависеть от абстракций. Кроме того, абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций. Этот принцип направлен на снижение зависимостей между различными частями программы, что делает ее более модульной и упрощает тестирование.

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

👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 823 вопросов на IOS разработчика. Ставь 👍 если нравится контент
👍5🔥21