Привет, ребят, хочу сделать так, чтобы для каждого вопроса было поясняющее видео в reels/shorts формате.
Ищу человека который с этим поможет, работу оплачу. Вопросы есть, нужен простой монтаж и озвучка. Все видосы делаются по шаблону.
Если интересует такая подработка напишите мне @kivaiko
Ищу человека который с этим поможет, работу оплачу. Вопросы есть, нужен простой монтаж и озвучка. Все видосы делаются по шаблону.
Если интересует такая подработка напишите мне @kivaiko
👍9🔥3
Что такое сборщик мусора ?
Спросят с вероятностью 27%
Сборщик мусора (Garbage Collector, GC) — это механизм управления памятью, который автоматически освобождает память, выделенную для объектов, которые больше не используются в программе. Эта функция присутствует во многих современных языках программирования, где не требуется явно управлять памятью, как это делается в языках, например, C или C++.
Как он работает:
Работает в фоновом режиме, периодически сканируя память программы на предмет объектов, которые больше не доступны для использования. Доступность объекта обычно определяется по наличию "живых" ссылок на него. Если на объект нет активных ссылок, то считается, что он больше не нужен, и память, которую он занимает, может быть освобождена.
Существуют разные алгоритмы сборки мусора, но многие из них используют следующие базовые принципы:
1️⃣Пометка (Marking): Сканирует объекты, доступные из корневого набора (например, переменные на стеке, статические переменные), и помечает все объекты, которые можно достичь напрямую или косвенно, как "живые".
2️⃣Очистка (Sweeping): Затем сборщик проходит по всей куче (heap) памяти и освобождает память, занимаемую объектами, которые не были помечены как "живые".
Преимущества сборщика мусора:
✅Уменьшение ошибок управления памятью: Автоматическое управление памятью значительно снижает риск таких ошибок, как утечки памяти (когда память выделяется, но не освобождается) и двойное освобождение памяти (когда память освобождается более одного раза).
✅Простота разработки: Не нужно тратить время на явное управление памятью, что упрощает процесс разработки.
Недостатки сборщика мусора:
✅Непредсказуемость: Сборка мусора может произойти в любой момент времени, что может привести к кратковременным задержкам в выполнении программы, особенно если сборка мусора занимает много времени.
✅Накладные расходы: Сборка мусора потребляет системные ресурсы, такие как процессорное время и память, что может снизить общую производительность приложения.
Сборщик мусора автоматически освобождает память, занимаемую объектами, которые больше не используются в программе, облегчая разработку и снижая вероятность ошибок управления памятью, но в то же время может влиять на производительность из-за своих накладных расходов и непредсказуемости.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с вероятностью 27%
Сборщик мусора (Garbage Collector, GC) — это механизм управления памятью, который автоматически освобождает память, выделенную для объектов, которые больше не используются в программе. Эта функция присутствует во многих современных языках программирования, где не требуется явно управлять памятью, как это делается в языках, например, C или C++.
Как он работает:
Работает в фоновом режиме, периодически сканируя память программы на предмет объектов, которые больше не доступны для использования. Доступность объекта обычно определяется по наличию "живых" ссылок на него. Если на объект нет активных ссылок, то считается, что он больше не нужен, и память, которую он занимает, может быть освобождена.
Существуют разные алгоритмы сборки мусора, но многие из них используют следующие базовые принципы:
1️⃣Пометка (Marking): Сканирует объекты, доступные из корневого набора (например, переменные на стеке, статические переменные), и помечает все объекты, которые можно достичь напрямую или косвенно, как "живые".
2️⃣Очистка (Sweeping): Затем сборщик проходит по всей куче (heap) памяти и освобождает память, занимаемую объектами, которые не были помечены как "живые".
Преимущества сборщика мусора:
✅Уменьшение ошибок управления памятью: Автоматическое управление памятью значительно снижает риск таких ошибок, как утечки памяти (когда память выделяется, но не освобождается) и двойное освобождение памяти (когда память освобождается более одного раза).
✅Простота разработки: Не нужно тратить время на явное управление памятью, что упрощает процесс разработки.
Недостатки сборщика мусора:
✅Непредсказуемость: Сборка мусора может произойти в любой момент времени, что может привести к кратковременным задержкам в выполнении программы, особенно если сборка мусора занимает много времени.
✅Накладные расходы: Сборка мусора потребляет системные ресурсы, такие как процессорное время и память, что может снизить общую производительность приложения.
Сборщик мусора автоматически освобождает память, занимаемую объектами, которые больше не используются в программе, облегчая разработку и снижая вероятность ошибок управления памятью, но в то же время может влиять на производительность из-за своих накладных расходов и непредсказуемости.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
👍11❤3🤔2
Как выбрать архитектуру ?
Спросят с вероятностью 13%
Выбор архитектуры для проекта является ключевым решением, которое оказывает глубокое влияние на процесс разработки, сопровождение, масштабирование и успешность проекта в целом. Архитектура приложения должна обеспечивать не только текущие технические требования, но и адаптироваться к изменяющимся потребностям проекта в будущем. Рассмотрим несколько шагов, которые помогут выбрать правильную архитектуру для вашего приложения:
1️⃣Определите требования и ограничения
Прежде чем выбирать архитектуру, важно чётко понимать требования вашего проекта. Это включает в себя:
✅Функциональные требования: Какие задачи должно выполнять приложение?
✅Нефункциональные требования: Какие есть требования к производительности, масштабируемости, безопасности и доступности?
✅Бизнес-требования: Какие бизнес-цели должно поддерживать приложение?
✅Технологические ограничения: Есть ли ограничения по технологиям, стеку или инфраструктуре?
2️⃣Исследуйте подходящие архитектурные паттерны
На основе собранных требований рассмотрите различные архитектурные паттерны, которые могут подойти для вашего проекта. Например:
✅Монолитная архитектура: Подходит для небольших и средних проектов, где все компоненты приложения тесно связаны.
✅Микросервисная архитектура: Лучше для больших, масштабируемых приложений, требующих гибкости в разработке и поддержке.
✅Серверлесс архитектура: Идеально подходит для приложений с переменной нагрузкой, где важна оптимизация затрат на инфраструктуру.
3️⃣Анализируйте примеры из практики
Изучите кейс-стади из вашей отрасли или аналогичных проектов. Опыт других компаний может помочь понять потенциальные преимущества и недостатки различных архитектурных решений.
4️⃣Прототипирование и оценка
Разработайте прототипы с использованием нескольких архитектурных подходов, если это возможно. Это позволит вам лучше понять, как каждый подход может влиять на разработку и эксплуатацию вашего приложения.
5️⃣Обратите внимание на масштабируемость и адаптивность
Выбранная архитектура должна быть гибкой, чтобы адаптироваться к изменениям в требованиях и условиях эксплуатации без необходимости полной переработки приложения.
6️⃣Командная экспертиза и ресурсы
Учитывайте навыки и опыт вашей команды. Архитектура, которая требует специализированных знаний или технологий, недоступных в вашей команде, может увеличить риски и сроки проекта.
7️⃣Долгосрочное сопровождение
Рассмотрите требования к поддержке и обновлению приложения. Архитектура должна облегчать обновления, масштабирование и интеграцию с другими системами.
Выбор архитектуры — это процесс, требующий баланса между многими факторами, включая текущие и будущие потребности проекта, ресурсы, экспертизу и риски. Грамотно выбранная архитектура позволяет создать эффективное, масштабируемое и легко поддерживаемое приложение.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с вероятностью 13%
Выбор архитектуры для проекта является ключевым решением, которое оказывает глубокое влияние на процесс разработки, сопровождение, масштабирование и успешность проекта в целом. Архитектура приложения должна обеспечивать не только текущие технические требования, но и адаптироваться к изменяющимся потребностям проекта в будущем. Рассмотрим несколько шагов, которые помогут выбрать правильную архитектуру для вашего приложения:
1️⃣Определите требования и ограничения
Прежде чем выбирать архитектуру, важно чётко понимать требования вашего проекта. Это включает в себя:
✅Функциональные требования: Какие задачи должно выполнять приложение?
✅Нефункциональные требования: Какие есть требования к производительности, масштабируемости, безопасности и доступности?
✅Бизнес-требования: Какие бизнес-цели должно поддерживать приложение?
✅Технологические ограничения: Есть ли ограничения по технологиям, стеку или инфраструктуре?
2️⃣Исследуйте подходящие архитектурные паттерны
На основе собранных требований рассмотрите различные архитектурные паттерны, которые могут подойти для вашего проекта. Например:
✅Монолитная архитектура: Подходит для небольших и средних проектов, где все компоненты приложения тесно связаны.
✅Микросервисная архитектура: Лучше для больших, масштабируемых приложений, требующих гибкости в разработке и поддержке.
✅Серверлесс архитектура: Идеально подходит для приложений с переменной нагрузкой, где важна оптимизация затрат на инфраструктуру.
3️⃣Анализируйте примеры из практики
Изучите кейс-стади из вашей отрасли или аналогичных проектов. Опыт других компаний может помочь понять потенциальные преимущества и недостатки различных архитектурных решений.
4️⃣Прототипирование и оценка
Разработайте прототипы с использованием нескольких архитектурных подходов, если это возможно. Это позволит вам лучше понять, как каждый подход может влиять на разработку и эксплуатацию вашего приложения.
5️⃣Обратите внимание на масштабируемость и адаптивность
Выбранная архитектура должна быть гибкой, чтобы адаптироваться к изменениям в требованиях и условиях эксплуатации без необходимости полной переработки приложения.
6️⃣Командная экспертиза и ресурсы
Учитывайте навыки и опыт вашей команды. Архитектура, которая требует специализированных знаний или технологий, недоступных в вашей команде, может увеличить риски и сроки проекта.
7️⃣Долгосрочное сопровождение
Рассмотрите требования к поддержке и обновлению приложения. Архитектура должна облегчать обновления, масштабирование и интеграцию с другими системами.
Выбор архитектуры — это процесс, требующий баланса между многими факторами, включая текущие и будущие потребности проекта, ресурсы, экспертизу и риски. Грамотно выбранная архитектура позволяет создать эффективное, масштабируемое и легко поддерживаемое приложение.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
👍6
Что из себя представляет каждый компонент Аndroid-приложения ?
Спросят с вероятностью 13%
В Android приложения строятся из нескольких основных компонентов, каждый из которых имеет свои специфические задачи и особенности. Эти компоненты взаимодействуют друг с другом и с операционной системой для создания функционального приложения. Основные компоненты включают:
1️⃣Activity
Это компонент, который предоставляет пользовательский интерфейс приложения. Каждая активность представляет собой отдельный экран с пользовательским интерфейсом. Приложения обычно состоят из нескольких активностей, которые взаимодействуют друг с другом. Например, список писем в почтовом приложении может быть одной активностью, а детали письма — другой.
2️⃣Service
Это компонент, который выполняет долгосрочные операции в фоновом режиме и не предоставляет пользовательского интерфейса. Он может выполнять операции, когда активность пользователя не активна. Например, сервис может воспроизводить музыку в фоне или загружать данные из сети, пока пользователь занимается другими задачами.
3️⃣Broadcast Receiver
Это компонент, который позволяет приложению получать и реагировать на широковещательные сообщения от других приложений или от системы. Например, приложения могут отслеживать различные системные сообщения, такие как низкий заряд батареи, изменение сетевого соединения или когда пользователь разблокировал экран.
4️⃣Content Provider
Позволяет приложениям делиться данными с другими приложениями. Android использует контент-провайдеры для чтения и записи данных, которые могут быть общими для нескольких приложений, например, контакты, фотографии или медиафайлы. Он предоставляет данные в структурированном формате и управляет доступом к ним через стандартный интерфейс.
5️⃣Fragment
Это компонент, который представляет собой часть пользовательского интерфейса или поведения в Activity. Он имеет собственный жизненный цикл, получает свои собственные входные события и может быть добавлен или удален во время выполнения активности. Фрагменты используются для создания адаптивных пользовательских интерфейсов, которые могут эффективно работать на широком спектре устройств, например, планшетах и телефонах.
6️⃣View
Это базовый строительный блок для компонентов пользовательского интерфейса в Android. Он отвечает за рисование и обработку событий, таких как жесты касания. Все элементы интерфейса, такие как кнопки и текстовые поля, являются подклассами
7️⃣Intent
Не является компонентом в привычном понимании, но это важный механизм для связи между компонентами в Android. Он используется для запроса действий от других компонентов приложения. Intents могут использоваться для запуска Activity, запуска Services, отправки сообщений Broadcast Receivers и т. д.
Эти компоненты вместе создают структуру Android-приложения, обеспечивая его много функциональность, интерактивность и способность работать в различных условиях и конфигурациях устройств.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с вероятностью 13%
В Android приложения строятся из нескольких основных компонентов, каждый из которых имеет свои специфические задачи и особенности. Эти компоненты взаимодействуют друг с другом и с операционной системой для создания функционального приложения. Основные компоненты включают:
1️⃣Activity
Это компонент, который предоставляет пользовательский интерфейс приложения. Каждая активность представляет собой отдельный экран с пользовательским интерфейсом. Приложения обычно состоят из нескольких активностей, которые взаимодействуют друг с другом. Например, список писем в почтовом приложении может быть одной активностью, а детали письма — другой.
2️⃣Service
Это компонент, который выполняет долгосрочные операции в фоновом режиме и не предоставляет пользовательского интерфейса. Он может выполнять операции, когда активность пользователя не активна. Например, сервис может воспроизводить музыку в фоне или загружать данные из сети, пока пользователь занимается другими задачами.
3️⃣Broadcast Receiver
Это компонент, который позволяет приложению получать и реагировать на широковещательные сообщения от других приложений или от системы. Например, приложения могут отслеживать различные системные сообщения, такие как низкий заряд батареи, изменение сетевого соединения или когда пользователь разблокировал экран.
4️⃣Content Provider
Позволяет приложениям делиться данными с другими приложениями. Android использует контент-провайдеры для чтения и записи данных, которые могут быть общими для нескольких приложений, например, контакты, фотографии или медиафайлы. Он предоставляет данные в структурированном формате и управляет доступом к ним через стандартный интерфейс.
5️⃣Fragment
Это компонент, который представляет собой часть пользовательского интерфейса или поведения в Activity. Он имеет собственный жизненный цикл, получает свои собственные входные события и может быть добавлен или удален во время выполнения активности. Фрагменты используются для создания адаптивных пользовательских интерфейсов, которые могут эффективно работать на широком спектре устройств, например, планшетах и телефонах.
6️⃣View
Это базовый строительный блок для компонентов пользовательского интерфейса в Android. Он отвечает за рисование и обработку событий, таких как жесты касания. Все элементы интерфейса, такие как кнопки и текстовые поля, являются подклассами
View.7️⃣Intent
Не является компонентом в привычном понимании, но это важный механизм для связи между компонентами в Android. Он используется для запроса действий от других компонентов приложения. Intents могут использоваться для запуска Activity, запуска Services, отправки сообщений Broadcast Receivers и т. д.
Эти компоненты вместе создают структуру Android-приложения, обеспечивая его много функциональность, интерактивность и способность работать в различных условиях и конфигурациях устройств.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
👍10😁4🤔2❤1
Что такое null safety и как это пишется ?
Спросят с вероятностью 13%
Null safety, или безопасность относительно
Null Safety в Kotlin
Ввёл комплексный подход к обработке
1️⃣Не допускаются `null` по умолчанию: В Kotlin типы переменных по умолчанию не допускают
2️⃣Nullable типы: Чтобы объявить переменную, которая может содержать
3️⃣Безопасный вызов (`?.`): Вы можете использовать оператор безопасного вызова
4️⃣Оператор Элвиса (`?:`): Этот оператор позволяет предоставить альтернативное значение для случая, если выражение слева от
5️⃣Принудительное разыменование (`!!`): Если вы уверены, что объект не
Null Safety в Java
Нет встроенной поддержки null safety, как в Kotlin, и
Kotlin значительно улучшает работу с
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с вероятностью 13%
Null safety, или безопасность относительно
null, — это концепция, направленная на предотвращение ошибок времени выполнения, которые происходят из-за непредвиденного использования null значений (например, NullPointerException в Java). Разные языки реализуют механизмы null safety по-разному, чтобы уменьшить возможность возникновения и обработки исключений, связанных с null.Null Safety в Kotlin
Ввёл комплексный подход к обработке
null, который позволяет избежать многих обычных ошибок, связанных с null значениями в Java. Вот основные аспекты null safety в Kotlin:1️⃣Не допускаются `null` по умолчанию: В Kotlin типы переменных по умолчанию не допускают
null. Если вы попытаетесь присвоить null переменной, которая не была объявлена как допускающая null, компилятор выдаст ошибку.var a: String = "text"
a = null // Ошибка компиляции
2️⃣Nullable типы: Чтобы объявить переменную, которая может содержать
null, используйте символ вопроса ? после типа данных.var b: String? = null // Допускается
3️⃣Безопасный вызов (`?.`): Вы можете использовать оператор безопасного вызова
?. для доступа к методам и свойствам объекта, который может быть null. Если объект окажется null, то весь вызов вернёт null, избегая таким образом исключения.val length = b?.length // length будет null, если b равно null
4️⃣Оператор Элвиса (`?:`): Этот оператор позволяет предоставить альтернативное значение для случая, если выражение слева от
?: возвращает null.val safeLength = b?.length ?: 0 // Если b равно null, то safeLength будет равно 0
5️⃣Принудительное разыменование (`!!`): Если вы уверены, что объект не
null, вы можете использовать оператор !!, чтобы принудительно вызвать NullPointerException, если объект окажется null. Использование этого оператора не рекомендуется без крайней необходимости, так как это противоречит принципам безопасности от null.val nonNullLength = b!!.length // Бросит NullPointerException, если b равно null
Null Safety в Java
Нет встроенной поддержки null safety, как в Kotlin, и
NullPointerException является распространённой проблемой. Однако можно использовать различные практики программирования, такие как проверка на null перед использованием объектов, использование аннотаций @Nullable и @NonNull для лучшей документации и анализа кода, а также использование классов из пакета java.util.Optional для обработки переменных, которые могут быть null.Kotlin значительно улучшает работу с
null, делая код более безопасным и уменьшая количество потенциальных ошибок во время выполнения. В Java же нужно самостоятельно обеспечивать обработку null, что делает Kotlin привлекательным выбором для новых проектов за счёт улучшенной безопасности и читаемости кода.👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
👍9
Что известно про RecyclerView ?
Спросят с вероятностью 27%
RecyclerView — это мощный компонент пользовательского интерфейса, предоставляемый библиотекой Android Support Library (или AndroidX в более новых версиях), предназначенный для отображения динамических списков элементов. Он был представлен как улучшенная и более гибкая замена
Основные особенности:
1️⃣Эффективное повторное использование вью: Использует концепцию "вьюхолдеров" (view holders) для эффективного повторного использования элементов списка при прокрутке. Это значительно повышает производительность, особенно для больших списков, поскольку количество создаваемых объектов вью ограничивается только теми, которые видны пользователю.
2️⃣Гибкое отображение элементов: Поддерживает различные компоновки (layouts), включая линейную (
3️⃣Анимация изменений: Предоставляет встроенную поддержку анимаций для операций добавления, удаления и перемещения элементов, что позволяет создавать динамичные интерфейсы без значительных затрат времени на реализацию анимаций.
4️⃣Декорации и разделители: С помощью класса
5️⃣Улучшенная обработка событий нажатий: В отличие от
Ключевые компоненты:
✅Adapter: Отвечает за связь данных с вьюхолдерами, а также за создание вьюхолдеров.
✅LayoutManager: Управляет расположением элементов внутри
✅ViewHolder: Содержит ссылки на все вью, которые необходимо заполнить данными в элементе списка, что упрощает доступ к ним и улучшает производительность за счет повторного использования.
RecyclerView — это гибкий и производительный компонент для отображения коллекций данных, поддерживающий эффективное повторное использование вьюх, различные компоновки, анимации и пользовательскую настройку декораций, что делает его незаменимым инструментом для создания современных мобильных приложений.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с вероятностью 27%
RecyclerView — это мощный компонент пользовательского интерфейса, предоставляемый библиотекой Android Support Library (или AndroidX в более новых версиях), предназначенный для отображения динамических списков элементов. Он был представлен как улучшенная и более гибкая замена
ListView, предоставляя лучшую производительность и большую гибкость в создании сложных макетов списков.Основные особенности:
1️⃣Эффективное повторное использование вью: Использует концепцию "вьюхолдеров" (view holders) для эффективного повторного использования элементов списка при прокрутке. Это значительно повышает производительность, особенно для больших списков, поскольку количество создаваемых объектов вью ограничивается только теми, которые видны пользователю.
2️⃣Гибкое отображение элементов: Поддерживает различные компоновки (layouts), включая линейную (
LinearLayoutManager), табличную (GridLayoutManager), и даже пользовательские компоновки благодаря LayoutManager API. Это позволяет создавать списки с различными структурами отображения, включая сетки и горизонтальные списки.3️⃣Анимация изменений: Предоставляет встроенную поддержку анимаций для операций добавления, удаления и перемещения элементов, что позволяет создавать динамичные интерфейсы без значительных затрат времени на реализацию анимаций.
4️⃣Декорации и разделители: С помощью класса
ItemDecoration можно легко добавлять разделители между элементами или выполнять другие декоративные настройки.5️⃣Улучшенная обработка событий нажатий: В отличие от
ListView, RecyclerView не имеет встроенного метода для обработки нажатий на элементы. Это предоставляет больше гибкости, позволяя разработчикам самостоятельно определять и управлять событиями нажатий с учетом специфики своего приложения.Ключевые компоненты:
✅Adapter: Отвечает за связь данных с вьюхолдерами, а также за создание вьюхолдеров.
✅LayoutManager: Управляет расположением элементов внутри
RecyclerView, определяя таким образом его общий внешний вид.✅ViewHolder: Содержит ссылки на все вью, которые необходимо заполнить данными в элементе списка, что упрощает доступ к ним и улучшает производительность за счет повторного использования.
class MyAdapter(private val myDataset: Array<String>) :
RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
class MyViewHolder(val textView: TextView) : RecyclerView.ViewHolder(textView)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val textView = LayoutInflater.from(parent.context)
.inflate(R.layout.my_text_view, parent, false) as TextView
return MyViewHolder(textView)
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.textView.text = myDataset[position]
}
override fun getItemCount() = myDataset.size
}
RecyclerView — это гибкий и производительный компонент для отображения коллекций данных, поддерживающий эффективное повторное использование вьюх, различные компоновки, анимации и пользовательскую настройку декораций, что делает его незаменимым инструментом для создания современных мобильных приложений.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
👍7
Что такое принципы SOLID ?
Спросят с вероятностью 27%
Принципы SOLID — это пять основных принципов объектно-ориентированного программирования и проектирования, направленные на улучшение читаемости, масштабируемости и поддерживаемости кода, а также упрощение его тестирования и рефакторинга. Эти принципы были сформулированы и популяризированы Робертом Мартином (Uncle Bob) и являются акронимом, составленным из первых букв названий пяти принципов:
1️⃣Single Responsibility Principle (Принцип единственной ответственности)
Каждый класс должен иметь только одну причину для изменения, что означает, что класс должен выполнять только одну задачу или функцию. Это упрощает понимание класса, его тестирование и поддержку.
2️⃣Open/Closed Principle (Принцип открытости/закрытости)
Классы должны быть открыты для расширения, но закрыты для модификации. Это означает, что можно добавлять новые функциональности, не изменяя существующий код, что помогает предотвратить появление ошибок в уже проверенном коде.
3️⃣Liskov Substitution Principle (Принцип подстановки Барбары Лисков)
Объекты в программе можно заменять их наследниками без изменения свойств программы. Этот принцип уточняет, что наследник класса должен дополнять, а не заменять поведение базового класса.
4️⃣Interface Segregation Principle (Принцип разделения интерфейса)
Клиенты не должны быть вынуждены зависеть от интерфейсов, которые они не используют. Это означает, что лучше иметь несколько специализированных интерфейсов, чем один универсальный.
5️⃣Dependency Inversion Principle (Принцип инверсии зависимостей)
Модули высокого уровня не должны зависеть от модулей низкого уровня. Оба типа модулей должны зависеть от абстракций. Кроме того, абстракции не должны зависеть от деталей реализации. Это означает, что взаимодействие между модулями должно осуществляться через интерфейсы или абстрактные классы, что улучшает гибкость и возможности повторного использования кода.
Принципы SOLID — это набор рекомендаций для разработки гибкого, масштабируемого и поддерживаемого ПО с использованием объектно-ориентированного подхода. Они помогают создавать качественный код, который легко читать, тестировать и модифицировать.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с вероятностью 27%
Принципы SOLID — это пять основных принципов объектно-ориентированного программирования и проектирования, направленные на улучшение читаемости, масштабируемости и поддерживаемости кода, а также упрощение его тестирования и рефакторинга. Эти принципы были сформулированы и популяризированы Робертом Мартином (Uncle Bob) и являются акронимом, составленным из первых букв названий пяти принципов:
1️⃣Single Responsibility Principle (Принцип единственной ответственности)
Каждый класс должен иметь только одну причину для изменения, что означает, что класс должен выполнять только одну задачу или функцию. Это упрощает понимание класса, его тестирование и поддержку.
2️⃣Open/Closed Principle (Принцип открытости/закрытости)
Классы должны быть открыты для расширения, но закрыты для модификации. Это означает, что можно добавлять новые функциональности, не изменяя существующий код, что помогает предотвратить появление ошибок в уже проверенном коде.
3️⃣Liskov Substitution Principle (Принцип подстановки Барбары Лисков)
Объекты в программе можно заменять их наследниками без изменения свойств программы. Этот принцип уточняет, что наследник класса должен дополнять, а не заменять поведение базового класса.
4️⃣Interface Segregation Principle (Принцип разделения интерфейса)
Клиенты не должны быть вынуждены зависеть от интерфейсов, которые они не используют. Это означает, что лучше иметь несколько специализированных интерфейсов, чем один универсальный.
5️⃣Dependency Inversion Principle (Принцип инверсии зависимостей)
Модули высокого уровня не должны зависеть от модулей низкого уровня. Оба типа модулей должны зависеть от абстракций. Кроме того, абстракции не должны зависеть от деталей реализации. Это означает, что взаимодействие между модулями должно осуществляться через интерфейсы или абстрактные классы, что улучшает гибкость и возможности повторного использования кода.
Принципы SOLID — это набор рекомендаций для разработки гибкого, масштабируемого и поддерживаемого ПО с использованием объектно-ориентированного подхода. Они помогают создавать качественный код, который легко читать, тестировать и модифицировать.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
👍13🔥3👾1
Что такое Activity и для чего это используется ?
Спросят с вероятностью 27%
Activity — это компонент приложения, который предоставляет пользовательский интерфейс (UI), с которым пользователи могут взаимодействовать для выполнения различных действий, таких как набор номера телефона, просмотр фотографий, отправка электронной почты и т. д. Каждая активность представляет собой один экран с пользовательским интерфейсом. Если представить приложение как книгу, то активность будет одной страницей этой книги.
Основное назначение:
1️⃣Предоставление интерфейса пользователя: Основная задача — предоставить макет (layout), который будет содержать все элементы пользовательского интерфейса, такие как кнопки, текстовые поля, изображения и прочее, с которыми пользователь может взаимодействовать.
2️⃣Взаимодействие с пользователем: Служит в качестве "лица" приложения для взаимодействия с пользователем, обрабатывая пользовательские входные данные, такие как нажатие кнопок, ввод текста и т. д.
3️⃣Управление жизненным циклом: Android управляет активностями через заданный жизненный цикл, который определяет, как активность создается, запускается, останавливается и уничтожается. Разработчики могут переопределять методы жизненного цикла, чтобы добавить свою логику обработки для разных состояний активности.
4️⃣Переход между экранами: В приложении обычно есть несколько активностей, и он используется для перехода от одного экрана к другому. Для перехода между активностями используются интенты (Intents), которые не только помогают открыть новую активность, но и могут передавать данные между активностями.
5️⃣Взаимодействие с другими компонентами приложения: Может взаимодействовать с другими компонентами приложения, такими как
Этот пример кода демонстрирует базовую активность, которая устанавливает пользовательский интерфейс из файла макета
Activity является основным компонентом для взаимодействия пользователя с Android-приложением, служа экраном с пользовательским интерфейсом для выполнения различных действий. Оно управляет жизненным циклом взаимодействия пользователя с приложением, переходами между экранами и взаимодействием с другими компонентами приложения.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с вероятностью 27%
Activity — это компонент приложения, который предоставляет пользовательский интерфейс (UI), с которым пользователи могут взаимодействовать для выполнения различных действий, таких как набор номера телефона, просмотр фотографий, отправка электронной почты и т. д. Каждая активность представляет собой один экран с пользовательским интерфейсом. Если представить приложение как книгу, то активность будет одной страницей этой книги.
Основное назначение:
1️⃣Предоставление интерфейса пользователя: Основная задача — предоставить макет (layout), который будет содержать все элементы пользовательского интерфейса, такие как кнопки, текстовые поля, изображения и прочее, с которыми пользователь может взаимодействовать.
2️⃣Взаимодействие с пользователем: Служит в качестве "лица" приложения для взаимодействия с пользователем, обрабатывая пользовательские входные данные, такие как нажатие кнопок, ввод текста и т. д.
3️⃣Управление жизненным циклом: Android управляет активностями через заданный жизненный цикл, который определяет, как активность создается, запускается, останавливается и уничтожается. Разработчики могут переопределять методы жизненного цикла, чтобы добавить свою логику обработки для разных состояний активности.
4️⃣Переход между экранами: В приложении обычно есть несколько активностей, и он используется для перехода от одного экрана к другому. Для перехода между активностями используются интенты (Intents), которые не только помогают открыть новую активность, но и могут передавать данные между активностями.
5️⃣Взаимодействие с другими компонентами приложения: Может взаимодействовать с другими компонентами приложения, такими как
Services, BroadcastReceivers, и ContentProviders, используя интенты и другие механизмы Android для межкомпонентного взаимодействия.Activity обычно определяется в файле Java или Kotlin и связанном с ним XML-файле макета. Например:class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}Этот пример кода демонстрирует базовую активность, которая устанавливает пользовательский интерфейс из файла макета
activity_main.xml.Activity является основным компонентом для взаимодействия пользователя с Android-приложением, служа экраном с пользовательским интерфейсом для выполнения различных действий. Оно управляет жизненным циклом взаимодействия пользователя с приложением, переходами между экранами и взаимодействием с другими компонентами приложения.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
👍11🤔1👾1
Как передавать данные из одного фрагмента в другой ?
Спросят с вероятностью 27%
Передача данных между фрагментами может быть реализована несколькими способами, в зависимости от архитектуры и требований приложения. Важно помнить, что фрагменты не должны напрямую обмениваться данными друг с другом. Вместо этого они должны общаться через свою родительскую активность или использовать общий ViewModel. Ниже приведены основные подходы к передаче данных между фрагментами:
Использование родительской активности как посредника
1️⃣Через интерфейс: Один из самых распространенных способов — это определение интерфейса в отправляющем фрагменте и его реализация в активности. Активность затем передает данные целевому фрагменту.
✅Определите интерфейс в отправляющем фрагменте.
✅Реализуйте интерфейс в активности.
✅В активности получите экземпляр целевого фрагмента и передайте ему данные.
2️⃣Через методы активности: Отправляющий фрагмент может вызвать метод активности, передав в него данные. Метод активности затем передает эти данные целевому фрагменту.
Использование ViewModel для общения между фрагментами
Может использоваться для обмена данными между фрагментами. Фрагменты могут обращаться к одной и той же модели, предоставляемой их общей активностью, что позволяет им наблюдать за данными и реагировать на их изменения.
✅Создайте
✅Доступ к этой
✅Отправляющий фрагмент обновляет данные в
Использование Bundle и аргументов фрагмента
Для передачи данных при создании нового экземпляра фрагмента можно их использовать. Это полезно для инициализации фрагмента данными.
✅Создайте
✅Используйте
✅В целевом фрагменте извлеките данные из полученного
Пример:
Выбор метода зависит от конкретного случая использования. В современной разработке часто рекомендуется использовать
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с вероятностью 27%
Передача данных между фрагментами может быть реализована несколькими способами, в зависимости от архитектуры и требований приложения. Важно помнить, что фрагменты не должны напрямую обмениваться данными друг с другом. Вместо этого они должны общаться через свою родительскую активность или использовать общий ViewModel. Ниже приведены основные подходы к передаче данных между фрагментами:
Использование родительской активности как посредника
1️⃣Через интерфейс: Один из самых распространенных способов — это определение интерфейса в отправляющем фрагменте и его реализация в активности. Активность затем передает данные целевому фрагменту.
✅Определите интерфейс в отправляющем фрагменте.
✅Реализуйте интерфейс в активности.
✅В активности получите экземпляр целевого фрагмента и передайте ему данные.
2️⃣Через методы активности: Отправляющий фрагмент может вызвать метод активности, передав в него данные. Метод активности затем передает эти данные целевому фрагменту.
Использование ViewModel для общения между фрагментами
Может использоваться для обмена данными между фрагментами. Фрагменты могут обращаться к одной и той же модели, предоставляемой их общей активностью, что позволяет им наблюдать за данными и реагировать на их изменения.
✅Создайте
ViewModel, содержащую LiveData или другие обсерваблы для хранения данных.✅Доступ к этой
ViewModel должен быть получен из обоих фрагментов через их родительскую активность.✅Отправляющий фрагмент обновляет данные в
ViewModel, а целевой фрагмент наблюдает за этими данными и реагирует на их изменения.Использование Bundle и аргументов фрагмента
Для передачи данных при создании нового экземпляра фрагмента можно их использовать. Это полезно для инициализации фрагмента данными.
✅Создайте
Bundle и поместите в него данные.✅Используйте
setArguments() для передачи Bundle новому экземпляру фрагмента.✅В целевом фрагменте извлеките данные из полученного
Bundle с помощью метода getArguments().Пример:
class SharedViewModel : ViewModel() {
val selected = MutableLiveData<Any>()
fun select(item: Any) {
selected.value = item
}
}// В отправляющем фрагменте
viewModel.select(myData)
// В целевом фрагменте
viewModel.selected.observe(viewLifecycleOwner, Observer { item ->
// Используйте данные
})
Выбор метода зависит от конкретного случая использования. В современной разработке часто рекомендуется использовать
ViewModel для обмена данными между фрагментами, так как это способствует созданию надежной и тестируемой архитектуры приложения.👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
👍12
В чем особенность делегатов свойств ?
Спросят с вероятностью 13%
Делегаты свойств — это мощная функциональность, позволяющая делегировать выполнение операций получения и установки значения свойства другому объекту. Основная идея заключается в том, что вместо того чтобы каждое свойство самостоятельно хранило данные или выполняло операции, оно может перенаправить эти задачи делегату. Это позволяет избежать дублирования кода и сделать более модульными и переиспользуемыми механизмы обработки свойств.
Основные особенности и преимущества:
1️⃣Изоляция логики: Делегаты свойств позволяют изолировать логику обработки свойств в отдельных классах, что упрощает тестирование и поддержку кода. Это также уменьшает вероятность ошибок за счёт централизации обработки свойств.
2️⃣Повторное использование кода: Делегирование свойств позволяет переиспользовать один и тот же код обработки для разных свойств в одном или нескольких классах. Например, можно создать делегат, который обеспечивает логику ленивой инициализации, и использовать его для любого свойства, которое должно инициализироваться по требованию.
3️⃣Расширяемость: С помощью делегатов можно легко добавить новое поведение для стандартных операций свойства, таких как чтение и запись, без изменения класса, который использует это свойство.
4️⃣Встроенная поддержка в языке: Предлагает встроенную поддержку для делегирования свойств, включая стандартные делегаты, такие как
Примеры:
1️⃣Ленивая инициализация (lazy):
2️⃣Отслеживание изменений (observable):
3️⃣Валидация значений (vetoable):
Делегаты свойств — это эффективный инструмент для управления свойствами в более гибком и масштабируемом стиле. Они предоставляют механизмы для упрощения кода, изоляции логики и повышения переиспользуемости компонентов. Эти возможности делают код более читаемым и легким для поддержки, позволяя разработчикам сосредоточиться на бизнес-логике, а не на механике управления данными.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с вероятностью 13%
Делегаты свойств — это мощная функциональность, позволяющая делегировать выполнение операций получения и установки значения свойства другому объекту. Основная идея заключается в том, что вместо того чтобы каждое свойство самостоятельно хранило данные или выполняло операции, оно может перенаправить эти задачи делегату. Это позволяет избежать дублирования кода и сделать более модульными и переиспользуемыми механизмы обработки свойств.
Основные особенности и преимущества:
1️⃣Изоляция логики: Делегаты свойств позволяют изолировать логику обработки свойств в отдельных классах, что упрощает тестирование и поддержку кода. Это также уменьшает вероятность ошибок за счёт централизации обработки свойств.
2️⃣Повторное использование кода: Делегирование свойств позволяет переиспользовать один и тот же код обработки для разных свойств в одном или нескольких классах. Например, можно создать делегат, который обеспечивает логику ленивой инициализации, и использовать его для любого свойства, которое должно инициализироваться по требованию.
3️⃣Расширяемость: С помощью делегатов можно легко добавить новое поведение для стандартных операций свойства, таких как чтение и запись, без изменения класса, который использует это свойство.
4️⃣Встроенная поддержка в языке: Предлагает встроенную поддержку для делегирования свойств, включая стандартные делегаты, такие как
lazy, observable и vetoable, которые покрывают множество распространённых сценариев.Примеры:
1️⃣Ленивая инициализация (lazy):
val heavyObject: HeavyClass by lazy {
// Этот код выполнится только при первом обращении к свойству
HeavyClass()
}
2️⃣Отслеживание изменений (observable):
var name: String by Delegates.observable("<no name>") { prop, old, new ->
println("$old -> $new")
}
3️⃣Валидация значений (vetoable):
var age: Int by Delegates.vetoable(0) { property, oldValue, newValue ->
newValue >= 0 // Не принимать изменения, если новое значение меньше 0
}
Делегаты свойств — это эффективный инструмент для управления свойствами в более гибком и масштабируемом стиле. Они предоставляют механизмы для упрощения кода, изоляции логики и повышения переиспользуемости компонентов. Эти возможности делают код более читаемым и легким для поддержки, позволяя разработчикам сосредоточиться на бизнес-логике, а не на механике управления данными.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
👍10🔥2
Для чего нужны inline функции ?
Спросят с вероятностью 27%
Inline функции предназначены для улучшения производительности вашего кода, особенно когда вы используете функции высшего порядка (функции, которые принимают функции в качестве параметров или возвращают их). Основная идея состоит в том, чтобы уменьшить накладные расходы на вызовы функций и создание объектов для лямбда-выражений. Вот основные аспекты и преимущества использования данных функций:
Уменьшение накладных расходов
Когда вы передаёте лямбда-выражение в функцию высшего порядка, без inline создаётся анонимный класс, а затем экземпляр этого класса, что приводит к дополнительным накладным расходам как по памяти, так и по процессорному времени. Использование inline функций позволяет избежать этого, поскольку код функции вместе с переданными лямбда-выражениями встраивается непосредственно в место вызова.
Возможности использования reified параметров типов
Типы стираются во время выполнения из-за работы на JVM, что означает, что вы не можете проверить типы во время выполнения напрямую. Однако данные функции могут использовать reified типы параметров, что позволяет сохранить информацию о типах во время выполнения и делать проверки типов или приведения.
Без inline:
Во втором случае, использование
Важные соображения
✅Использование
✅Не все функции следует делать inline. В основном это касается функций высшего порядка или функций, принимающих лямбды.
✅
Inline функции используются для улучшения производительности за счёт уменьшения накладных расходов на вызовы функций и создание объектов для лямбда-выражений, позволяя при этом использовать reified типы параметров и обеспечивая большую гибкость в обработке типов во время выполнения.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с вероятностью 27%
Inline функции предназначены для улучшения производительности вашего кода, особенно когда вы используете функции высшего порядка (функции, которые принимают функции в качестве параметров или возвращают их). Основная идея состоит в том, чтобы уменьшить накладные расходы на вызовы функций и создание объектов для лямбда-выражений. Вот основные аспекты и преимущества использования данных функций:
Уменьшение накладных расходов
Когда вы передаёте лямбда-выражение в функцию высшего порядка, без inline создаётся анонимный класс, а затем экземпляр этого класса, что приводит к дополнительным накладным расходам как по памяти, так и по процессорному времени. Использование inline функций позволяет избежать этого, поскольку код функции вместе с переданными лямбда-выражениями встраивается непосредственно в место вызова.
Возможности использования reified параметров типов
Типы стираются во время выполнения из-за работы на JVM, что означает, что вы не можете проверить типы во время выполнения напрямую. Однако данные функции могут использовать reified типы параметров, что позволяет сохранить информацию о типах во время выполнения и делать проверки типов или приведения.
Без inline:
fun <T> myHigherOrderFunction(param: T, operation: (T) -> Unit) {
operation(param)
}
С inline:inline fun <T> myHigherOrderFunction(param: T, operation: (T) -> Unit) {
operation(param)
}Во втором случае, использование
inline означает, что вызов operation(param) будет вставлен непосредственно в место вызова myHigherOrderFunction, уменьшая накладные расходы.Важные соображения
✅Использование
inline может увеличить размер скомпилированного кода, так как код функции вставляется в каждое место вызова.✅Не все функции следует делать inline. В основном это касается функций высшего порядка или функций, принимающих лямбды.
✅
noinline может быть использован для указания, что определённые лямбда-параметры не должны быть встроенными.Inline функции используются для улучшения производительности за счёт уменьшения накладных расходов на вызовы функций и создание объектов для лямбда-выражений, позволяя при этом использовать reified типы параметров и обеспечивая большую гибкость в обработке типов во время выполнения.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
👍6
Anonymous Quiz
4%
open
24%
sealed
68%
final
4%
abstract
👍2🔥2👾2🎉1
Как появились фрагменты и для чего их начали использовать ?
Спросят с вероятностью 13%
Фрагменты были введены в версии 3.0 (Honeycomb), выпущенной в 2011 году. Эта концепция была разработана для решения ряда проблем, связанных с управлением пользовательским интерфейсом (UI) в приложениях, и для предоставления большей гибкости при работе с разнообразными и динамичными интерфейсами, особенно на устройствах с большими экранами, таких как планшеты.
Зачем начали использовать фрагменты
1️⃣Адаптивность интерфейса: С появлением планшетов и других устройств с большими экранами возникла необходимость создавать гибкие интерфейсы, которые могли бы адаптироваться к различным размерам и ориентациям экрана. Фрагменты позволили разработчикам использовать один и тот же компонент интерфейса в разных конфигурациях макета, например, отображать две панели рядом на планшетах (мастер/деталь) и одну панель на телефонах.
2️⃣Модульность и повторное использование: Фрагменты способствуют модульному подходу в разработке приложений, где отдельные части интерфейса могут быть разработаны и тестированы независимо друг от друга. Это также облегчает повторное использование компонентов UI в разных частях приложения или даже в разных приложениях.
3️⃣Управление жизненным циклом: Фрагменты имеют собственный жизненный цикл, независимый от жизненного цикла их хост-активности, но тесно с ним интегрированный. Это позволяет более тонко управлять ресурсами и обрабатывать изменения конфигурации устройства, например, повороты экрана.
4️⃣Взаимодействие с пользователем: Фрагменты могут обрабатывать пользовательский ввод и можно управлять ими в рамках активности. Это делает структуру приложения более гибкой и позволяет эффективнее управлять взаимодействием пользователя с приложением.
5️⃣Оптимизация памяти и производительности: Фрагменты могут быть динамически добавлены или удалены из активности, что позволяет оптимизировать использование памяти и ресурсов устройства.
Пример:
Рассмотрим приложение новостей, где на больших экранах (планшетах) список новостей (мастер) и детали выбранной новости (деталь) отображаются одновременно. На маленьких экранах (телефонах) детали новости открываются в новом окне или экране поверх списка новостей. Используя фрагменты, разработчики могут создать оба этих варианта интерфейса, используя те же компоненты UI.
Введение фрагментов значительно улучшило архитектуру Android-приложений, предоставив инструменты для создания адаптивных, модульных и масштабируемых приложений. Фрагменты остаются ключевым элементом Android-разработки, несмотря на появление новых архитектурных компонентов и подходов, таких как Jetpack Compose, которые предлагают другие методы решения подобных задач.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с вероятностью 13%
Фрагменты были введены в версии 3.0 (Honeycomb), выпущенной в 2011 году. Эта концепция была разработана для решения ряда проблем, связанных с управлением пользовательским интерфейсом (UI) в приложениях, и для предоставления большей гибкости при работе с разнообразными и динамичными интерфейсами, особенно на устройствах с большими экранами, таких как планшеты.
Зачем начали использовать фрагменты
1️⃣Адаптивность интерфейса: С появлением планшетов и других устройств с большими экранами возникла необходимость создавать гибкие интерфейсы, которые могли бы адаптироваться к различным размерам и ориентациям экрана. Фрагменты позволили разработчикам использовать один и тот же компонент интерфейса в разных конфигурациях макета, например, отображать две панели рядом на планшетах (мастер/деталь) и одну панель на телефонах.
2️⃣Модульность и повторное использование: Фрагменты способствуют модульному подходу в разработке приложений, где отдельные части интерфейса могут быть разработаны и тестированы независимо друг от друга. Это также облегчает повторное использование компонентов UI в разных частях приложения или даже в разных приложениях.
3️⃣Управление жизненным циклом: Фрагменты имеют собственный жизненный цикл, независимый от жизненного цикла их хост-активности, но тесно с ним интегрированный. Это позволяет более тонко управлять ресурсами и обрабатывать изменения конфигурации устройства, например, повороты экрана.
4️⃣Взаимодействие с пользователем: Фрагменты могут обрабатывать пользовательский ввод и можно управлять ими в рамках активности. Это делает структуру приложения более гибкой и позволяет эффективнее управлять взаимодействием пользователя с приложением.
5️⃣Оптимизация памяти и производительности: Фрагменты могут быть динамически добавлены или удалены из активности, что позволяет оптимизировать использование памяти и ресурсов устройства.
Пример:
Рассмотрим приложение новостей, где на больших экранах (планшетах) список новостей (мастер) и детали выбранной новости (деталь) отображаются одновременно. На маленьких экранах (телефонах) детали новости открываются в новом окне или экране поверх списка новостей. Используя фрагменты, разработчики могут создать оба этих варианта интерфейса, используя те же компоненты UI.
Введение фрагментов значительно улучшило архитектуру Android-приложений, предоставив инструменты для создания адаптивных, модульных и масштабируемых приложений. Фрагменты остаются ключевым элементом Android-разработки, несмотря на появление новых архитектурных компонентов и подходов, таких как Jetpack Compose, которые предлагают другие методы решения подобных задач.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
👍9
Anonymous Quiz
6%
Создаёт новый поток
92%
Означает, что функция может быть асинхронной
1%
Запускает цикл
1%
Инициализирует переменную
Как будут вести себя linked list и array list, если вставить в них элемент ?
Спросят с вероятностью 13%
LinkedList и ArrayList представляют собой две разные реализации интерфейса
ArrayList
Основан на динамическом массиве. Это означает, что внутри
Добавление элемента в конец списка `ArrayList` (используя метод `add(E e)`):
✅Когда вы добавляете элемент в конец, операция обычно выполняется за время O(1), так как не требуется сдвигать элементы.
✅Однако, если внутренний массив заполнен, и требуется его расширение,
Добавление элемента в середину списка (используя метод `add(int index, E element)`):
✅Если вам нужно вставить элемент в середину списка,
LinkedList
Реализует структуру данных двунаправленного связного списка. Каждый элемент (узел) содержит ссылки на предыдущий и следующий элементы в списке, а также данные элемента.
Добавление элемента в конец списка
✅Это обычно выполняется за время O(1), так как достаточно просто обновить ссылки последнего узла и добавить новый узел в конец.
Добавление элемента в начало списка:
✅Так же как и добавление в конец, добавление элемента в начало списка (используя метод
Добавление элемента в середину списка (используя метод `add(int index, E element)`):
✅Для этого необходимо сначала найти узел, который в данный момент находится на данной позиции. Поскольку для этого требуется пройти от начала или конца списка до индекса, это занимает O(n / 2) в среднем, а затем вставка нового узла происходит за O(1). Таким образом, общая сложность составляет O(n).
Выбор между
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с вероятностью 13%
LinkedList и ArrayList представляют собой две разные реализации интерфейса
List, и каждая из них имеет свои особенности поведения при вставке элементов. Разберем, как эти две структуры данных ведут себя при добавлении элемента, исходя из их внутренней структуры и алгоритмической сложности операций.ArrayList
Основан на динамическом массиве. Это означает, что внутри
ArrayList данные хранятся в массиве, размер которого автоматически увеличивается, когда текущая емкость массива исчерпана.Добавление элемента в конец списка `ArrayList` (используя метод `add(E e)`):
✅Когда вы добавляете элемент в конец, операция обычно выполняется за время O(1), так как не требуется сдвигать элементы.
✅Однако, если внутренний массив заполнен, и требуется его расширение,
ArrayList создает новый массив большего размера и копирует в него все элементы из старого массива, что занимает O(n) времени, где n — количество элементов в списке. Это случается редко, но делает среднюю сложность вставки в конец O(1) (амортизированное время).Добавление элемента в середину списка (используя метод `add(int index, E element)`):
✅Если вам нужно вставить элемент в середину списка,
ArrayList должен сдвинуть все последующие элементы на одну позицию вправо для освобождения места для нового элемента. Эта операция имеет временную сложность O(n - index), где index — индекс, на который вставляется элемент.LinkedList
Реализует структуру данных двунаправленного связного списка. Каждый элемент (узел) содержит ссылки на предыдущий и следующий элементы в списке, а также данные элемента.
Добавление элемента в конец списка
LinkedList (используя методсебя linked или `addLast(E e)`):✅Это обычно выполняется за время O(1), так как достаточно просто обновить ссылки последнего узла и добавить новый узел в конец.
Добавление элемента в начало списка:
✅Так же как и добавление в конец, добавление элемента в начало списка (используя метод
addFirst(E e)) выполняется за время O(1), потому что требуется только изменить несколько ссылок в узлах.Добавление элемента в середину списка (используя метод `add(int index, E element)`):
✅Для этого необходимо сначала найти узел, который в данный момент находится на данной позиции. Поскольку для этого требуется пройти от начала или конца списка до индекса, это занимает O(n / 2) в среднем, а затем вставка нового узла происходит за O(1). Таким образом, общая сложность составляет O(n).
Выбор между
LinkedList и ArrayList зависит от типа операций, которые вы планируете чаще всего выполнять. Если вам нужно быстро добавлять и удалять элементы без учета их позиции, LinkedList может быть более предпочтительным. Если же вам нужен быстрый произвольный доступ к элементам и добавление в конец списка, ArrayList будет лучшим выбором.👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
👍10🔥1
Что известно про extension ?
Спросят с вероятностью 20%
Extension функции и свойства (расширения) позволяют добавлять новую функциональность к существующим классам без их модификации или наследования. Расширения не изменяют класс, к которому они добавлены, а предоставляют способ расширить его функциональность "снаружи".
Extension функции
Позволяют добавлять новые методы к классу. Они объявляются с указанием типа, который они расширяют, за которым следует точка и имя функции. Расширяющая функция внутри своего тела может обращаться к членам класса через
Пример расширяющей функции:
Extension свойства
Подобно функциям, можно объявлять расширяющие свойства, которые позволяют "добавлять" новые свойства к существующим классам.
Пример расширяющего свойства:
Это расширение добавляет к классу
Расширения не могут доступать к приватным или защищенным членам класса, так как они фактически являются внешними функциями или свойствами, добавленными к классу.
Преимущества использования
1️⃣Улучшение читаемости кода: Расширения позволяют писать более четкий и понятный код, особенно когда функциональность тесно связана с конкретным типом данных.
2️⃣Более удобная организация кода: Функциональность можно добавлять к классам без изменения исходного кода класса или создания подклассов.
3️⃣Повышение гибкости: Расширения дают возможность расширять функциональность классов из внешних библиотек или фреймворков, к исходному коду которых у вас нет доступа.
Расширения особенно полезны при работе с библиотеками или фреймворками, когда модификация исходного класса невозможна. Они также идеально подходят для создания DSL (Domain-Specific Languages).
Extension функции и свойства — это мощный инструмент, позволяющий расширять функциональность существующих классов без их изменения или наследования, облегчая тем самым разработку и поддержку кода.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с вероятностью 20%
Extension функции и свойства (расширения) позволяют добавлять новую функциональность к существующим классам без их модификации или наследования. Расширения не изменяют класс, к которому они добавлены, а предоставляют способ расширить его функциональность "снаружи".
Extension функции
Позволяют добавлять новые методы к классу. Они объявляются с указанием типа, который они расширяют, за которым следует точка и имя функции. Расширяющая функция внутри своего тела может обращаться к членам класса через
this.Пример расширяющей функции:
fun String.lastChar(): Char = this[this.length - 1]
Это расширение добавляет к классу
String функцию lastChar, возвращающую последний символ строки.Extension свойства
Подобно функциям, можно объявлять расширяющие свойства, которые позволяют "добавлять" новые свойства к существующим классам.
Пример расширяющего свойства:
val String.lastChar: Char
get() = this[this.length - 1]
Это расширение добавляет к классу
String свойство lastChar, которое позволяет получить последний символ строки.Расширения не могут доступать к приватным или защищенным членам класса, так как они фактически являются внешними функциями или свойствами, добавленными к классу.
Преимущества использования
1️⃣Улучшение читаемости кода: Расширения позволяют писать более четкий и понятный код, особенно когда функциональность тесно связана с конкретным типом данных.
2️⃣Более удобная организация кода: Функциональность можно добавлять к классам без изменения исходного кода класса или создания подклассов.
3️⃣Повышение гибкости: Расширения дают возможность расширять функциональность классов из внешних библиотек или фреймворков, к исходному коду которых у вас нет доступа.
Расширения особенно полезны при работе с библиотеками или фреймворками, когда модификация исходного класса невозможна. Они также идеально подходят для создания DSL (Domain-Specific Languages).
Extension функции и свойства — это мощный инструмент, позволяющий расширять функциональность существующих классов без их изменения или наследования, облегчая тем самым разработку и поддержку кода.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
👍5
Anonymous Quiz
88%
Иммутабельность
6%
Ленивая инициализация
2%
Внутренняя синхронизация
4%
Глобальная видимость
❤2👾1
Чем отличаются единицы измерения, например dp от sp ?
Спросят с вероятностью 13%
Используются различные единицы измерения для указания размеров и расстояний в пользовательском интерфейсе, среди которых наиболее часто используются dp (density-independent pixels) и sp (scale-independent pixels). Обе эти единицы предназначены для обеспечения одинакового визуального представления элементов интерфейса на различных устройствах, но они служат разным целям.
1️⃣Density-independent Pixels (dp)
✅Определение: Или "пиксель, не зависящий от плотности", — это абстрактная единица, которая используется для выражения размеров макета или элементов интерфейса. 1 dp эквивалентен одному пикселю на экране с плотностью 160 dpi (точек на дюйм), которая считается базовой плотностью (mdpi).
✅Цель использования: dp используется для гарантии того, что элементы пользовательского интерфейса (например, кнопки, поля, отступы) будут иметь одинаковый физический размер на всех устройствах, независимо от плотности экрана устройства.
2️⃣Scale-independent Pixels (sp)
✅Определение: Или "пиксель, не зависящий от масштаба", также является абстрактной единицей и используется специально для размеров шрифтов текста.
✅Особенность: Помимо учета плотности экрана, как и dp, sp также учитывает предпочтения пользователя по масштабу текста. Если пользователь увеличивает масштаб текста в настройках доступности своего устройства, размеры текста в sp автоматически увеличиваются, обеспечивая лучшую читаемость.
Основные различия между dp и sp
1️⃣Масштабирование текста: sp масштабируются не только с изменением плотности экрана, но и в зависимости от пользовательских настроек масштабирования текста. Это делает sp предпочтительной единицей для задания размеров текста, чтобы обеспечить его доступность и комфортное восприятие.
2️⃣Использование в макетах: dp рекомендуется использовать для всех других размеров в пользовательском интерфейсе, включая отступы, ширины, высоты элементов и т. д., чтобы обеспечить их консистентность на различных устройствах.
В XML-разметке Android можно указать размер текста в sp и размер элемента в dp:
Такое разделение позволяет оптимизировать приложение для различных устройств и настроек доступности, улучшая пользовательский опыт. Поэтому важно всегда использовать sp для текста и dp для всех остальных размеров в приложении Android.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с вероятностью 13%
Используются различные единицы измерения для указания размеров и расстояний в пользовательском интерфейсе, среди которых наиболее часто используются dp (density-independent pixels) и sp (scale-independent pixels). Обе эти единицы предназначены для обеспечения одинакового визуального представления элементов интерфейса на различных устройствах, но они служат разным целям.
1️⃣Density-independent Pixels (dp)
✅Определение: Или "пиксель, не зависящий от плотности", — это абстрактная единица, которая используется для выражения размеров макета или элементов интерфейса. 1 dp эквивалентен одному пикселю на экране с плотностью 160 dpi (точек на дюйм), которая считается базовой плотностью (mdpi).
✅Цель использования: dp используется для гарантии того, что элементы пользовательского интерфейса (например, кнопки, поля, отступы) будут иметь одинаковый физический размер на всех устройствах, независимо от плотности экрана устройства.
2️⃣Scale-independent Pixels (sp)
✅Определение: Или "пиксель, не зависящий от масштаба", также является абстрактной единицей и используется специально для размеров шрифтов текста.
✅Особенность: Помимо учета плотности экрана, как и dp, sp также учитывает предпочтения пользователя по масштабу текста. Если пользователь увеличивает масштаб текста в настройках доступности своего устройства, размеры текста в sp автоматически увеличиваются, обеспечивая лучшую читаемость.
Основные различия между dp и sp
1️⃣Масштабирование текста: sp масштабируются не только с изменением плотности экрана, но и в зависимости от пользовательских настроек масштабирования текста. Это делает sp предпочтительной единицей для задания размеров текста, чтобы обеспечить его доступность и комфортное восприятие.
2️⃣Использование в макетах: dp рекомендуется использовать для всех других размеров в пользовательском интерфейсе, включая отступы, ширины, высоты элементов и т. д., чтобы обеспечить их консистентность на различных устройствах.
В XML-разметке Android можно указать размер текста в sp и размер элемента в dp:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:padding="8dp"
android:text="Пример текста" />
Такое разделение позволяет оптимизировать приложение для различных устройств и настроек доступности, улучшая пользовательский опыт. Поэтому важно всегда использовать sp для текста и dp для всех остальных размеров в приложении Android.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
👍9
Anonymous Quiz
18%
Возвращает новый объект
26%
Изменяет контекст
52%
Возвращает контекстный объект
4%
Создает анонимный класс