Что известно о data классах и sealed классах ?
Спросят с веротяностью 20%
Data классы и sealed классы предоставляют удобные и мощные инструменты для работы с данными и управления потоком программы соответственно. Давайте подробнее рассмотрим каждый из них.
Data классы (Data Classes)
Предназначены для хранения данных. Они автоматически генерируют несколько полезных методов, таких как
Пример:
Sealed классы (Sealed Classes)
Это специальный тип классов, который используется для представления ограниченного иерархии классов. В отличие от обычных классов, которые могут иметь неограниченное количество подклассов, sealed классы ограничивают создание подклассов только внутри того же файла. Это позволяет использовать sealed классы в качестве основы для создания безопасных по типам иерархий, особенно полезных при работе с паттерном "Алгебраические типы данных" или при реализации шаблона проектирования "Посетитель".
Пример:
В этом примере
Основные отличия
✅Назначение: Data классы предназначены для хранения данных и автоматического предоставления методов для работы с этими данными. Sealed классы предназначены для создания ограниченных иерархий классов, что удобно при обработке различных вариантов состояний или результатов операций.
✅Использование: Data классы часто используются как модели данных в приложениях, а sealed классы — для управления состояниями в архитектурных компонентах, таких как ViewModel в MVVM.
✅Генерируемые методы: Data классы автоматически генерируют методы
Data классы и Sealed классы служат разным целям, но оба предоставляют мощные возможности для разработки чистого, безопасного и удобного в обслуживании кода. Data классы идеально подходят для представления моделей данных с автоматически сгенерированными методами для упрощения работы с данными. Sealed классы используются для создания ограниченных иерархий, что особенно полезно для обработки различных состояний или результатов в безопасном по типам стиле.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с веротяностью 20%
Data классы и sealed классы предоставляют удобные и мощные инструменты для работы с данными и управления потоком программы соответственно. Давайте подробнее рассмотрим каждый из них.
Data классы (Data Classes)
Предназначены для хранения данных. Они автоматически генерируют несколько полезных методов, таких как
equals(), hashCode(), toString(), а также copy() и компонентные функции (componentN()), что делает их идеальными для использования в качестве моделей данных. Пример:
data class User(val name: String, val age: Int)
В этом примере для класса
User автоматически будут сгенерированы методы equals(), hashCode(), toString(), а также метод copy() и компонентные функции. Это позволяет легко сравнивать объекты, копировать их с изменением определенных полей и пр.Sealed классы (Sealed Classes)
Это специальный тип классов, который используется для представления ограниченного иерархии классов. В отличие от обычных классов, которые могут иметь неограниченное количество подклассов, sealed классы ограничивают создание подклассов только внутри того же файла. Это позволяет использовать sealed классы в качестве основы для создания безопасных по типам иерархий, особенно полезных при работе с паттерном "Алгебраические типы данных" или при реализации шаблона проектирования "Посетитель".
Пример:
sealed class Result
data class Success(val data: String): Result()
data class Error(val error: Exception): Result()
В этом примере
Result может быть только Success или Error, что позволяет использовать when без необходимости предоставлять блок else, так как все возможные случаи уже исчерпаны.Основные отличия
✅Назначение: Data классы предназначены для хранения данных и автоматического предоставления методов для работы с этими данными. Sealed классы предназначены для создания ограниченных иерархий классов, что удобно при обработке различных вариантов состояний или результатов операций.
✅Использование: Data классы часто используются как модели данных в приложениях, а sealed классы — для управления состояниями в архитектурных компонентах, таких как ViewModel в MVVM.
✅Генерируемые методы: Data классы автоматически генерируют методы
equals(), hashCode(), toString(), copy() и компонентные функции. Sealed классы не генерируют эти методы автоматически, но подклассы, объявленные как data классы, получают их.Data классы и Sealed классы служат разным целям, но оба предоставляют мощные возможности для разработки чистого, безопасного и удобного в обслуживании кода. Data классы идеально подходят для представления моделей данных с автоматически сгенерированными методами для упрощения работы с данными. Sealed классы используются для создания ограниченных иерархий, что особенно полезно для обработки различных состояний или результатов в безопасном по типам стиле.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
👍3
Anonymous Quiz
25%
возникнет NullPointerException
10%
переменная будет автоматически инициализирована
17%
выдаст ошибку компиляции
48%
возникнет UninitializedPropertyAccessException
👍1
Каким образом осуществляется навигация ?
Спросят с вероятностью 13%
Навигация в контексте разработки ПО, в частности в мобильной и веб-разработке, относится к процессу перехода между различными частями приложения или сайта. Это ключевой аспект пользовательского интерфейса, который определяет, как пользователи взаимодействуют с приложением или сайтом и как легко они могут получить необходимую информацию или выполнить желаемые действия. Рассмотрим различные аспекты и методы ее реализации.
Веб-навигация
В веб-разработке она обычно осуществляется через гиперссылки, которые ведут пользователя к различным страницам или разделам веб-сайта.
1️⃣Меню навигации: Часто включает в себя верхнее меню, боковую панель или "гамбургер"-меню в мобильных версиях сайтов. Эти элементы содержат ссылки на основные разделы сайта.
2️⃣Панель хлебных крошек: Предоставляет пользователям информацию о текущем местоположении в структуре сайта и позволяет легко возвращаться к вышестоящим разделам.
3️⃣Пагинация: Используется для навигации по длинным спискам или сериям элементов, таким как статьи, продукты в интернет-магазине или результаты поиска.
4️⃣Футер: Обычно содержит ссылки на важные, но менее часто используемые разделы сайта, такие как контактная информация, карьера, политика конфиденциальности.
Мобильная навигация
В мобильных приложениях она должна быть интуитивно понятной и удобной для использования в условиях ограниченного пространства экрана.
1️⃣Tab Bar: Расположен в нижней части экрана, позволяет быстро переключаться между несколькими основными функциями приложения.
2️⃣Navigation Drawer (Боковое меню): Скрывается за краем экрана и выдвигается при нажатии на иконку "гамбургер". Используется для доступа к различным категориям и функциям приложения.
3️⃣Stack Navigation: Используется для организации навигации между экранами, где каждый новый экран помещается в стек над предыдущим. Пользователи могут вернуться назад по стеку, используя кнопку "Назад".
Навигация в одностраничных приложениях (SPA)
В нем все необходимые HTML, JavaScript и CSS загружаются одним махом, или соответствующие ресурсы подгружаются динамически и добавляются к странице по мере необходимости, без перезагрузки всей страницы.
1️⃣Dynamic Routing: Используется фреймворками вроде React с React Router или Angular с Angular Router, чтобы динамически изменять контент в зависимости от URL, без перезагрузки страницы.
2️⃣Hash Routing: Использует хэш-часть URL (всё после
Эффективная навигация критически важна для создания хорошего пользовательского опыта. Она должна быть простой, понятной и предсказуемой, чтобы пользователи могли легко находить необходимую информацию и использовать функционал приложения или сайта. Нужно учитывать контекст использования продукта (мобильный, веб, десктоп) и потребности целевой аудитории при проектировании системы навигации.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с вероятностью 13%
Навигация в контексте разработки ПО, в частности в мобильной и веб-разработке, относится к процессу перехода между различными частями приложения или сайта. Это ключевой аспект пользовательского интерфейса, который определяет, как пользователи взаимодействуют с приложением или сайтом и как легко они могут получить необходимую информацию или выполнить желаемые действия. Рассмотрим различные аспекты и методы ее реализации.
Веб-навигация
В веб-разработке она обычно осуществляется через гиперссылки, которые ведут пользователя к различным страницам или разделам веб-сайта.
1️⃣Меню навигации: Часто включает в себя верхнее меню, боковую панель или "гамбургер"-меню в мобильных версиях сайтов. Эти элементы содержат ссылки на основные разделы сайта.
2️⃣Панель хлебных крошек: Предоставляет пользователям информацию о текущем местоположении в структуре сайта и позволяет легко возвращаться к вышестоящим разделам.
3️⃣Пагинация: Используется для навигации по длинным спискам или сериям элементов, таким как статьи, продукты в интернет-магазине или результаты поиска.
4️⃣Футер: Обычно содержит ссылки на важные, но менее часто используемые разделы сайта, такие как контактная информация, карьера, политика конфиденциальности.
Мобильная навигация
В мобильных приложениях она должна быть интуитивно понятной и удобной для использования в условиях ограниченного пространства экрана.
1️⃣Tab Bar: Расположен в нижней части экрана, позволяет быстро переключаться между несколькими основными функциями приложения.
2️⃣Navigation Drawer (Боковое меню): Скрывается за краем экрана и выдвигается при нажатии на иконку "гамбургер". Используется для доступа к различным категориям и функциям приложения.
3️⃣Stack Navigation: Используется для организации навигации между экранами, где каждый новый экран помещается в стек над предыдущим. Пользователи могут вернуться назад по стеку, используя кнопку "Назад".
Навигация в одностраничных приложениях (SPA)
В нем все необходимые HTML, JavaScript и CSS загружаются одним махом, или соответствующие ресурсы подгружаются динамически и добавляются к странице по мере необходимости, без перезагрузки всей страницы.
1️⃣Dynamic Routing: Используется фреймворками вроде React с React Router или Angular с Angular Router, чтобы динамически изменять контент в зависимости от URL, без перезагрузки страницы.
2️⃣Hash Routing: Использует хэш-часть URL (всё после
#) для имитации полноценной навигации страниц без перезагрузки.Эффективная навигация критически важна для создания хорошего пользовательского опыта. Она должна быть простой, понятной и предсказуемой, чтобы пользователи могли легко находить необходимую информацию и использовать функционал приложения или сайта. Нужно учитывать контекст использования продукта (мобильный, веб, десктоп) и потребности целевой аудитории при проектировании системы навигации.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
🤔8👍1🔥1
Что такое константы и можно ли их изменять ?
Спросят с вероятностью 8%
Константы — это фиксированные значения, которые не могут быть изменены после их определения. Они используются для определения значений, которые остаются неизменными на протяжении выполнения программы. Константы могут быть числовыми, строковыми, булевыми и другими типами.
Объявление констант
Используется ключевое слово
В этом примере объявлены три константы:
Изменение констант
Константы являются неизменяемыми. Это означает, что после их определения значение константы не может быть изменено. Попытка присвоить новое значение константе приведет к ошибке компиляции.
В этом примере попытка изменить значение константы
Преимущества:
1️⃣Ясность кода: Использование констант делает код более читаемым и понятным, так как константы могут давать имена магическим числам и строкам.
2️⃣Безопасность: Константы предотвращают случайное изменение значений, которые не должны изменяться в ходе выполнения программы.
3️⃣Оптимизация: Компилятор может оптимизировать код, зная, что значения констант не изменятся.
Константы — это фиксированные значения, которые нельзя изменить после определения. Они используются для повышения ясности и безопасности кода, а также могут способствовать оптимизации программ.
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 349 вопроса на Golang разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с вероятностью 8%
Константы — это фиксированные значения, которые не могут быть изменены после их определения. Они используются для определения значений, которые остаются неизменными на протяжении выполнения программы. Константы могут быть числовыми, строковыми, булевыми и другими типами.
Объявление констант
Используется ключевое слово
const.package main
import "fmt"
const Pi = 3.14
const Greeting = "Hello, World!"
const IsEnabled = true
func main() {
fmt.Println("Pi:", Pi)
fmt.Println("Greeting:", Greeting)
fmt.Println("IsEnabled:", IsEnabled)
}
В этом примере объявлены три константы:
Pi, Greeting и IsEnabled. Эти значения не могут быть изменены в ходе выполнения программы.Изменение констант
Константы являются неизменяемыми. Это означает, что после их определения значение константы не может быть изменено. Попытка присвоить новое значение константе приведет к ошибке компиляции.
package main
import "fmt"
const Pi = 3.14
func main() {
Pi = 3.14159 // Ошибка компиляции: cannot assign to Pi
fmt.Println("Pi:", Pi)
}
В этом примере попытка изменить значение константы
Pi вызовет ошибку компиляции с сообщением cannot assign to Pi.Преимущества:
1️⃣Ясность кода: Использование констант делает код более читаемым и понятным, так как константы могут давать имена магическим числам и строкам.
2️⃣Безопасность: Константы предотвращают случайное изменение значений, которые не должны изменяться в ходе выполнения программы.
3️⃣Оптимизация: Компилятор может оптимизировать код, зная, что значения констант не изменятся.
Константы — это фиксированные значения, которые нельзя изменить после определения. Они используются для повышения ясности и безопасности кода, а также могут способствовать оптимизации программ.
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 349 вопроса на Golang разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
🤔8👍1
Anonymous Quiz
11%
operator
20%
inline
65%
infix
4%
extension
Чем launch отличается от async/await ?
Спросят с веротяностью 20%
Для работы с асинхронным кодом в корутинах используются два основных механизма:
Launch
Используется для запуска корутин без блокировки текущего потока и без непосредственного получения результата выполнения.
Пример:
Пример:
Основные отличия
✅Возвращаемое значение:
✅Назначение: Используйте
✅Ожидание результата: С
Выбор между
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с веротяностью 20%
Для работы с асинхронным кодом в корутинах используются два основных механизма:
launch и async с await. Оба они позволяют выполнять задачи асинхронно, не блокируя основной поток программы, но имеют различия в использовании и поведении.Launch
Используется для запуска корутин без блокировки текущего потока и без непосредственного получения результата выполнения.
launch возвращает объект Job, который можно использовать для управления корутиной (например, отменить её выполнение). Этот метод идеально подходит для задач, результат выполнения которых нам не интересен, или когда мы хотим просто выполнить некий код асинхронно.Пример:
GlobalScope.launch {
// Выполняем асинхронную операцию
delay(1000L) // Имитация асинхронной задачи
println("World!")
}
println("Hello,") // Этот код выполняется сразу, не дожидаясь завершения корутины
Async/Awaitasync запускает корутину, которая выполняет задачу и возвращает результат в виде объекта Deferred, который является подтипом Job. Чтобы получить результат выполнения корутины, необходимо вызвать метод await на объекте Deferred. Это делает async/await идеальным выбором для асинхронных операций, результат которых нам важен и который мы хотим использовать далее в коде.Пример:
val deferredResult = GlobalScope.async {
// Выполняем асинхронную операцию и возвращаем результат
delay(1000L) // Имитация асинхронной задачи
"World!"
}
println("Hello,") // Этот код выполняется сразу, не дожидаясь завершения корутины
println(deferredResult.await()) // Ожидаем и получаем результат асинхронной операцииОсновные отличия
✅Возвращаемое значение:
launch возвращает Job и используется для выполнения кода асинхронно без возвращения результата. async возвращает Deferred, что позволяет получить результат асинхронной операции с помощью await.✅Назначение: Используйте
launch для асинхронных задач, результат которых вам не нужен. async/await подходит для случаев, когда вам необходим результат выполнения асинхронной операции.✅Ожидание результата: С
launch нет необходимости ожидать завершения задачи, в то время как async требует вызова await для получения результата.Выбор между
launch и async/await зависит от конкретной задачи: необходимости в результате работы корутины и того, как вы планируете использовать этот результат.👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
👍6❤1
Что такое Extensions ?
Спросят с вероятностью 13%
Термин "Extensions" (расширения) используется для обозначения функциональности, которая позволяет добавлять новые возможности к существующим классам без изменения их исходного кода. Этот концепт особенно популярен к примеру в Swift и Kotlin, где расширения используются для улучшения читаемости кода, упрощения его структуры и добавления удобных методов для работы с уже существующими типами данных.
Расширения в Kotlin
Расширения позволяют добавить новую функциональность к классам, даже если исходный код этих классов недоступен для изменений (например, классы из стандартной библиотеки или сторонних библиотек). Это делается путём объявления функций или свойств, которые могут быть вызваны на экземплярах этих классов, как если бы они были частью оригинальных классов.
Пример:
Расширения в Swift
Использует очень похожий подход, позволяя добавлять новые методы и вычисляемые свойства к существующим типам. Расширения могут даже добавлять новые протоколы к типам, что делает их чрезвычайно мощным инструментом в разработке под iOS и macOS.
Пример:
Преимущества:
1️⃣Улучшение читаемости и организации кода: Расширения позволяют держать методы, связанные с определёнными типами данных, ближе к использованию этих типов.
2️⃣Избегание наследования: Расширения предоставляют альтернативный способ добавления функциональности к классам без использования наследования, что помогает избежать избыточной иерархии и увеличения сложности системы.
3️⃣Реиспользование кода: Методы, добавленные через расширения, могут быть легко переиспользованы в различных частях приложения.
Extensions являются мощным средством для расширения функциональности существующих классов без модификации их исходного кода. Это улучшает поддерживаемость, упрощает управление кодом и способствует лучшей модульности и гибкости в разработке ПО.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с вероятностью 13%
Термин "Extensions" (расширения) используется для обозначения функциональности, которая позволяет добавлять новые возможности к существующим классам без изменения их исходного кода. Этот концепт особенно популярен к примеру в Swift и Kotlin, где расширения используются для улучшения читаемости кода, упрощения его структуры и добавления удобных методов для работы с уже существующими типами данных.
Расширения в Kotlin
Расширения позволяют добавить новую функциональность к классам, даже если исходный код этих классов недоступен для изменений (например, классы из стандартной библиотеки или сторонних библиотек). Это делается путём объявления функций или свойств, которые могут быть вызваны на экземплярах этих классов, как если бы они были частью оригинальных классов.
Пример:
// Расширение класса String для проверки, пуста ли строка или состоит из пробелов
fun String.isNullOrBlank(): Boolean {
return this == null || this.trim().isEmpty()
}
// Использование расширения
val myString = " "
println(myString.isNullOrBlank()) // Выведет: true
Расширения в Swift
Использует очень похожий подход, позволяя добавлять новые методы и вычисляемые свойства к существующим типам. Расширения могут даже добавлять новые протоколы к типам, что делает их чрезвычайно мощным инструментом в разработке под iOS и macOS.
Пример:
// Расширение стандартного типа String для добавления метода инвертирования строки
extension String {
func reversedString() -> String {
return String(self.reversed())
}
}
let myString = "Hello"
print(myString.reversedString()) // Выведет: "olleH"
Преимущества:
1️⃣Улучшение читаемости и организации кода: Расширения позволяют держать методы, связанные с определёнными типами данных, ближе к использованию этих типов.
2️⃣Избегание наследования: Расширения предоставляют альтернативный способ добавления функциональности к классам без использования наследования, что помогает избежать избыточной иерархии и увеличения сложности системы.
3️⃣Реиспользование кода: Методы, добавленные через расширения, могут быть легко переиспользованы в различных частях приложения.
Extensions являются мощным средством для расширения функциональности существующих классов без модификации их исходного кода. Это улучшает поддерживаемость, упрощает управление кодом и способствует лучшей модульности и гибкости в разработке ПО.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
👍3
Anonymous Quiz
55%
возвратит null
11%
возвратит объект
22%
возвратит Unit
12%
возникнет ошибка компиляции
👍1
Какие паттерны традиционно используются в мобильныой разработке ?
Спросят с вероятностью 13%
Паттерны проектирования играют ключевую роль в создании удобной, масштабируемой и управляемой архитектуры приложений. Некоторые паттерны особенно популярны, так как они помогают решать типичные проблемы, связанные с жизненным циклом приложений, управлением состоянием, взаимодействием компонентов и другими аспектами. Вот несколько ключевых паттернов:
1️⃣Модель-Представление-Контроллер (MVC)
Разделяет приложение на три основных компонента:
✅Модель содержит данные и бизнес-логику.
✅Представление отвечает за вывод данных пользователю (UI).
✅Контроллер обрабатывает ввод пользователя и обновляет модель и представление.
Хотя MVC широко использовался в веб-разработке, в мобильной разработке он также находит применение, но иногда может приводить к сильной связанности между представлением и моделью, особенно на Android.
2️⃣Модель-Представление-Представитель (MVP)
Это эволюция паттерна MVC, где контроллер заменяется на представителя (Presenter), который отвечает за логику взаимодействия с пользователем:
✅Модель остается как в MVC.
✅Представление - это обычно активность или фрагмент в Android, которое отвечает только за отображение UI.
✅Представитель (Presenter) взаимодействует с моделью и обновляет представление, оставаясь от него независимым, что упрощает тестирование.
3️⃣Модель-Представление-Вид-Модель (MVVM)
Стал популярен в Android-разработке с появлением архитектурных компонентов Google, таких как LiveData и ViewModel:
✅Модель предоставляет данные.
✅Вид (View) отображает UI, реагируя на изменения в ViewModel.
✅ViewModel содержит логику отображения и общается с моделью, реагируя на действия вида и обновляя его через обсерваблы (например, LiveData).
4️⃣Singleton
Паттерн, гарантирующий, что класс имеет только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру. Этот паттерн часто используется для реализации менеджеров (например, настроек приложения).
5️⃣Фабрика (Factory)
Паттерн, который используется для создания объектов без спецификации конкретных классов объектов. Фабрика полезна в мобильной разработке для создания объектов с различными конфигурациями в зависимости от условий или типа устройства.
6️⃣Стратегия (Strategy)
Позволяет определять семейство алгоритмов, инкапсулируя каждый из них и делая их взаимозаменяемыми. Этот паттерн часто используется для определения поведения компонентов в приложении, которое может меняться в зависимости от конфигурации или предпочтений пользователя.
7️⃣Наблюдатель (Observer)
Часто используется в мобильной разработке для обработки событий или изменений состояния. В Android это особенно актуально для реакции на изменения данных или состояния UI.
Использование этих паттернов в мобильной разработке помогает строить эффективные, масштабируемые и легко тестируемые приложения. Они позволяют лучше структурировать код, упрощают поддержку и развитие приложений.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с вероятностью 13%
Паттерны проектирования играют ключевую роль в создании удобной, масштабируемой и управляемой архитектуры приложений. Некоторые паттерны особенно популярны, так как они помогают решать типичные проблемы, связанные с жизненным циклом приложений, управлением состоянием, взаимодействием компонентов и другими аспектами. Вот несколько ключевых паттернов:
1️⃣Модель-Представление-Контроллер (MVC)
Разделяет приложение на три основных компонента:
✅Модель содержит данные и бизнес-логику.
✅Представление отвечает за вывод данных пользователю (UI).
✅Контроллер обрабатывает ввод пользователя и обновляет модель и представление.
Хотя MVC широко использовался в веб-разработке, в мобильной разработке он также находит применение, но иногда может приводить к сильной связанности между представлением и моделью, особенно на Android.
2️⃣Модель-Представление-Представитель (MVP)
Это эволюция паттерна MVC, где контроллер заменяется на представителя (Presenter), который отвечает за логику взаимодействия с пользователем:
✅Модель остается как в MVC.
✅Представление - это обычно активность или фрагмент в Android, которое отвечает только за отображение UI.
✅Представитель (Presenter) взаимодействует с моделью и обновляет представление, оставаясь от него независимым, что упрощает тестирование.
3️⃣Модель-Представление-Вид-Модель (MVVM)
Стал популярен в Android-разработке с появлением архитектурных компонентов Google, таких как LiveData и ViewModel:
✅Модель предоставляет данные.
✅Вид (View) отображает UI, реагируя на изменения в ViewModel.
✅ViewModel содержит логику отображения и общается с моделью, реагируя на действия вида и обновляя его через обсерваблы (например, LiveData).
4️⃣Singleton
Паттерн, гарантирующий, что класс имеет только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру. Этот паттерн часто используется для реализации менеджеров (например, настроек приложения).
5️⃣Фабрика (Factory)
Паттерн, который используется для создания объектов без спецификации конкретных классов объектов. Фабрика полезна в мобильной разработке для создания объектов с различными конфигурациями в зависимости от условий или типа устройства.
6️⃣Стратегия (Strategy)
Позволяет определять семейство алгоритмов, инкапсулируя каждый из них и делая их взаимозаменяемыми. Этот паттерн часто используется для определения поведения компонентов в приложении, которое может меняться в зависимости от конфигурации или предпочтений пользователя.
7️⃣Наблюдатель (Observer)
Часто используется в мобильной разработке для обработки событий или изменений состояния. В Android это особенно актуально для реакции на изменения данных или состояния UI.
Использование этих паттернов в мобильной разработке помогает строить эффективные, масштабируемые и легко тестируемые приложения. Они позволяют лучше структурировать код, упрощают поддержку и развитие приложений.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
👍5
Как существуют и к чему привязаны фрагменты в Activity ?
Спросят с веротяностью 20%
Фрагменты представляют собой модульные секции пользовательского интерфейса, привязанные к активити, которые могут быть добавлены, удалены или заменены во время выполнения приложения. Они обладают собственным жизненным циклом, получают входящие события и могут быть добавлены в бэкстек для управления навигацией. Фрагменты были введены в Android API 11 для обеспечения более гибкой работы с пользовательским интерфейсом, особенно при разработке приложений для планшетов и других крупноэкранных устройств.
Привязка к активити
Фрагменты существуют в контексте активити и привязаны к ней. Они не могут существовать самостоятельно без активити. Когда активити создается, она может включать фрагменты в свой макет или добавлять их во время выполнения через транзакции фрагментов. Фрагменты добавляются в контейнеры, которые являются частью макета активити.
Взаимодействие с активити
✅Жизненный цикл: Жизненный цикл фрагмента тесно связан с жизненным циклом активити, к которой он привязан. Например, когда активити переходит в состояние "приостановлено" (
✅Взаимодействие: Фрагменты могут взаимодействовать с активити, используя интерфейсы или через обращение к
✅Управление: Активити может управлять фрагментами через
В активити можно добавить фрагмент следующим образом:
Где
Фрагменты привязаны к активити и предоставляют гибкий способ управления частями пользовательского интерфейса внутри активити. Они облегчают разработку адаптивных интерфейсов, поддерживают собственный жизненный цикл, могут быть добавлены в бэкстек для управления навигацией и предоставляют возможности для взаимодействия с активити.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с веротяностью 20%
Фрагменты представляют собой модульные секции пользовательского интерфейса, привязанные к активити, которые могут быть добавлены, удалены или заменены во время выполнения приложения. Они обладают собственным жизненным циклом, получают входящие события и могут быть добавлены в бэкстек для управления навигацией. Фрагменты были введены в Android API 11 для обеспечения более гибкой работы с пользовательским интерфейсом, особенно при разработке приложений для планшетов и других крупноэкранных устройств.
Привязка к активити
Фрагменты существуют в контексте активити и привязаны к ней. Они не могут существовать самостоятельно без активити. Когда активити создается, она может включать фрагменты в свой макет или добавлять их во время выполнения через транзакции фрагментов. Фрагменты добавляются в контейнеры, которые являются частью макета активити.
Взаимодействие с активити
✅Жизненный цикл: Жизненный цикл фрагмента тесно связан с жизненным циклом активити, к которой он привязан. Например, когда активити переходит в состояние "приостановлено" (
onPause()), все привязанные к ней фрагменты также переходят в это состояние.✅Взаимодействие: Фрагменты могут взаимодействовать с активити, используя интерфейсы или через обращение к
Context активити. Это позволяет фрагментам запрашивать выполнение определенных действий, таких как запуск новой активити, показ диалогов и т.д.✅Управление: Активити может управлять фрагментами через
FragmentManager, позволяя добавлять, удалять или заменять фрагменты во время выполнения.В активити можно добавить фрагмент следующим образом:
val fragmentManager = supportFragmentManager
val fragmentTransaction = fragmentManager.beginTransaction()
val fragment = MyFragment()
fragmentTransaction.add(R.id.fragment_container, fragment)
fragmentTransaction.commit()
Где
R.id.fragment_container — это идентификатор ViewGroup в макете активити, который будет служить контейнером для фрагмента.Фрагменты привязаны к активити и предоставляют гибкий способ управления частями пользовательского интерфейса внутри активити. Они облегчают разработку адаптивных интерфейсов, поддерживают собственный жизненный цикл, могут быть добавлены в бэкстек для управления навигацией и предоставляют возможности для взаимодействия с активити.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
👍7
Anonymous Quiz
24%
extension
12%
override
1%
operator
63%
никакой модификатор не требуется
👍3
Forwarded from Идущий к IT
10$ за техническое собеседование на английском языке:
1. Отправьте запись технического собеседования на английском языке файлом на этот аккаунт
2. Добавьте ссылку на вакансию или пришлите название компании и должность
3. Напишите номер кошелка USDT (Tether) на который отправить 10$
🛡 Важно:
– Запись будет использована только для сбора данных о вопросах
– Вы останетесь анонимны
– Запись нигде не будет опубликована
🤝 Условия:
– Внятный звук, различимая речь
– Допустимые профессии:
• Любые программисты
• DevOps
• Тестировщики
• Дата сайнтисты
• Бизнес/Системные аналитики
• Прожекты/Продукты
• UX/UI и продукт дизайнеры
1. Отправьте запись технического собеседования на английском языке файлом на этот аккаунт
2. Добавьте ссылку на вакансию или пришлите название компании и должность
3. Напишите номер кошелка USDT (Tether) на который отправить 10$
– Запись будет использована только для сбора данных о вопросах
– Вы останетесь анонимны
– Запись нигде не будет опубликована
– Внятный звук, различимая речь
– Допустимые профессии:
• Любые программисты
• DevOps
• Тестировщики
• Дата сайнтисты
• Бизнес/Системные аналитики
• Прожекты/Продукты
• UX/UI и продукт дизайнеры
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2
Как работает Hash Map ?
Спросят с вероятностью 13%
Как работает Hash Map
Это структура данных, используемая для хранения данных в виде пар "ключ-значение". Это одна из основных реализаций ассоциативного массива.
Принцип работы:
1️⃣Хеширование ключа: Каждый ключ преобразуется в хеш-код с помощью хеш-функции. Хеш-код используется для определения индекса в массиве (или в основной структуре данных), где будет храниться значение.
2️⃣Разрешение коллизий: Если два ключа дают один и тот же хеш-код (коллизия), то
3️⃣Вставка, поиск и удаление: Для вставки и поиска элемента используется хеш-код ключа для быстрого доступа к соответствующему индексу. Удаление работает по аналогичному принципу, находя элемент и затем удаляя его из структуры данных.
Как работает Cache Map (Кэш)
Это компонент, который временно хранит данные для быстрого доступа при повторных запросах. Оно часто используется для ускорения доступа к данным, снижения нагрузки на ресурсы и улучшения общей производительности приложений.
Принцип работы кэша:
1️⃣Запрос данных: При запросе данных система сначала проверяет, доступны ли они в кэше.
2️⃣Проверка кэша: Если данные находятся в кэше (это называется "кэш-попадание"), они возвращаются немедленно, что значительно быстрее, чем извлечение их из первичного источника данных (например, базы данных или удалённого сервера).
3️⃣Кэш-промах: Если данные в кэше отсутствуют (кэш-промах), система извлекает данные из первичного источника, после чего они могут быть добавлены в кэш для будущих запросов.
4️⃣Инвалидация и обновление кэша: С течением времени данные в кэше могут устаревать. Системы кэширования обычно имеют механизмы для инвалидации устаревших данных и их обновления.
Оба этих механизма —
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с вероятностью 13%
Как работает Hash Map
Это структура данных, используемая для хранения данных в виде пар "ключ-значение". Это одна из основных реализаций ассоциативного массива.
Принцип работы:
1️⃣Хеширование ключа: Каждый ключ преобразуется в хеш-код с помощью хеш-функции. Хеш-код используется для определения индекса в массиве (или в основной структуре данных), где будет храниться значение.
2️⃣Разрешение коллизий: Если два ключа дают один и тот же хеш-код (коллизия), то
HashMap использует одну из техник разрешения коллизий, например, метод цепочек (связные списки) или открытую адресацию.3️⃣Вставка, поиск и удаление: Для вставки и поиска элемента используется хеш-код ключа для быстрого доступа к соответствующему индексу. Удаление работает по аналогичному принципу, находя элемент и затем удаляя его из структуры данных.
Как работает Cache Map (Кэш)
Это компонент, который временно хранит данные для быстрого доступа при повторных запросах. Оно часто используется для ускорения доступа к данным, снижения нагрузки на ресурсы и улучшения общей производительности приложений.
Принцип работы кэша:
1️⃣Запрос данных: При запросе данных система сначала проверяет, доступны ли они в кэше.
2️⃣Проверка кэша: Если данные находятся в кэше (это называется "кэш-попадание"), они возвращаются немедленно, что значительно быстрее, чем извлечение их из первичного источника данных (например, базы данных или удалённого сервера).
3️⃣Кэш-промах: Если данные в кэше отсутствуют (кэш-промах), система извлекает данные из первичного источника, после чего они могут быть добавлены в кэш для будущих запросов.
4️⃣Инвалидация и обновление кэша: С течением времени данные в кэше могут устаревать. Системы кэширования обычно имеют механизмы для инвалидации устаревших данных и их обновления.
Оба этих механизма —
HashMap и кэширование — играют важные роли в разработке программного обеспечения, каждый по своему обеспечивая эффективность и производительность приложений. Если вам нужна более детальная информация по одной из этих тем или по другому виду "map", пожалуйста, уточните ваш вопрос.👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
🤔2👍1
Какие существуют правила для методов equals и hashcode ?
Спросят с вероятностью 13%
Методы equals() и hashCode() имеют важное значение для корректной работы коллекций, таких как
Метод equals(Object obj)
Определяет логику сравнения объектов на эквивалентность. При переопределении этого метода следует соблюдать следующие правила:
1️⃣Рефлексивность: Для любого ненулевого ссылочного значения
2️⃣Симметричность: Для любых ненулевых ссылочных значений
3️⃣Транзитивность: Для любых ненулевых ссылочных значений
4️⃣Консистентность: Многократные вызовы
5️⃣Сравнение с `null`: Для любого ненулевого ссылочного значения
Метод hashCode()
Возвращает хеш-код объекта, который используется хэш-таблицами. Важные правила для него включают:
1️⃣Внутреннее согласование: Если во время выполнения программы информация, используемая в
2️⃣Согласование с
3️⃣Необязательное различие значений: Если два объекта не равны согласно
Правильная реализация
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с вероятностью 13%
Методы equals() и hashCode() имеют важное значение для корректной работы коллекций, таких как
HashSet, HashMap и HashTable. Чтобы эти методы работали правильно, необходимо соблюдать определенные правила при их переопределении. Вот основные принципы и правила для equals() и hashCode():Метод equals(Object obj)
Определяет логику сравнения объектов на эквивалентность. При переопределении этого метода следует соблюдать следующие правила:
1️⃣Рефлексивность: Для любого ненулевого ссылочного значения
x, x.equals(x) должно возвращать true.2️⃣Симметричность: Для любых ненулевых ссылочных значений
x и y, x.equals(y) должно возвращать true тогда и только тогда, когда y.equals(x) возвращает true.3️⃣Транзитивность: Для любых ненулевых ссылочных значений
x, y и z, если x.equals(y) возвращает true и y.equals(z) возвращает true, тогда и x.equals(z) должно возвращать true.4️⃣Консистентность: Многократные вызовы
x.equals(y) должны возвращать одно и то же значение, при условии, что информация, используемая в equals() для сравнения объектов, не изменяется.5️⃣Сравнение с `null`: Для любого ненулевого ссылочного значения
x, x.equals(null) должно возвращать false.@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
MyObject other = (MyObject) obj;
return field1.equals(other.field1) && field2.equals(other.field2);
}
Метод hashCode()
Возвращает хеш-код объекта, который используется хэш-таблицами. Важные правила для него включают:
1️⃣Внутреннее согласование: Если во время выполнения программы информация, используемая в
equals() для сравнения объектов, не изменяется, то многократные вызовы hashCode() должны возвращать одно и то же значение.2️⃣Согласование с
x.equals(y) Если два объекта равны согласно методу equals(Object), то вызов hashCode() для каждого из них должен возвращать одинаковое значение.3️⃣Необязательное различие значений: Если два объекта не равны согласно
equals(Object), это не обязательно означает, что hashCode() должен возвращать различные значения. Однако разные значения hashCode() помогают улучшить производительность хэш-таблиц.@Override
public int hashCode() {
int result = field1.hashCode();
result = 31 * result + field2.hashCode();
return result;
}
Правильная реализация
equals() и hashCode() критически важна для корректной работы Java-коллекций, использующих хэширование. Несоблюдение вышеупомянутых правил может привести к непредсказуемому поведению и ошибкам в работе приложения.👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
👍3
Какие структуры данных есть ?
Спросят с веротяностью 20%
Существует множество структур данных, каждая из которых предназначена для решения определённого набора задач. Вот некоторые из наиболее часто используемых структур:
Массивы (Arrays)
Это коллекция элементов, расположенных в памяти последовательно. Все элементы массива обычно имеют одинаковый тип данных. Доступ к элементам массива осуществляется с помощью индексов. Массивы могут быть одномерными, двумерными и многомерными.
Связные списки (Linked Lists)
Состоит из узлов, каждый из которых содержит данные и ссылку (или указатель) на следующий узел в списке. Существуют односвязные списки (где каждый узел ссылается только на следующий узел) и двусвязные списки (где узлы содержат ссылки как на следующий, так и на предыдущий узлы).
Стеки (Stacks)
Это коллекция элементов с принципом последний пришёл — первый вышел (LIFO: Last In, First Out). Основные операции — это добавление элемента на вершину стека (push) и удаление элемента с вершины стека (pop).
Очереди (Queues)
Это коллекция элементов с принципом первый пришёл — первый вышел (FIFO: First In, First Out). Основные операции — это добавление элемента в конец очереди (enqueue) и удаление элемента из начала очереди (dequeue).
Двоичные деревья поиска (Binary Search Trees)
Это структура данных, в которой каждый узел имеет не более двух дочерних элементов (известных как левый и правый потомок), причём левый потомок меньше родителя, а правый — больше. Это обеспечивает эффективный поиск, вставку и удаление элементов.
Хэш-таблицы (Hash Tables)
Это структура данных, использующая хэш-функцию для вычисления индекса в массиве бакетов или слотов, откуда можно найти желаемое значение.
Графы (Graphs)
Состоит из узлов (вершин) и рёбер, соединяющих эти узлы. Графы бывают направленными и ненаправленными, а также могут содержать циклы или быть ацикличными. Графы используются для моделирования связей между объектами.
Кучи (Heaps)
Это специализированное дерево, которое удовлетворяет свойству кучи: для максимальной кучи каждый родительский узел больше или равен своим дочерним узлам, а для минимальной кучи — меньше или равен.
Очереди с приоритетом (Priority Queues)
Это тип данных, похожий на обычную очередь или стек, но в котором каждый элемент имеет определённый приоритет. Элементы с более высоким приоритетом обрабатываются перед элементами с более низким приоритетом.
Эти структуры данных лежат в основе многих алгоритмов и используются для решения различных задач. Выбор структуры данных зависит от конкретной задачи и требований к производительности операций с данными.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с веротяностью 20%
Существует множество структур данных, каждая из которых предназначена для решения определённого набора задач. Вот некоторые из наиболее часто используемых структур:
Массивы (Arrays)
Это коллекция элементов, расположенных в памяти последовательно. Все элементы массива обычно имеют одинаковый тип данных. Доступ к элементам массива осуществляется с помощью индексов. Массивы могут быть одномерными, двумерными и многомерными.
Связные списки (Linked Lists)
Состоит из узлов, каждый из которых содержит данные и ссылку (или указатель) на следующий узел в списке. Существуют односвязные списки (где каждый узел ссылается только на следующий узел) и двусвязные списки (где узлы содержат ссылки как на следующий, так и на предыдущий узлы).
Стеки (Stacks)
Это коллекция элементов с принципом последний пришёл — первый вышел (LIFO: Last In, First Out). Основные операции — это добавление элемента на вершину стека (push) и удаление элемента с вершины стека (pop).
Очереди (Queues)
Это коллекция элементов с принципом первый пришёл — первый вышел (FIFO: First In, First Out). Основные операции — это добавление элемента в конец очереди (enqueue) и удаление элемента из начала очереди (dequeue).
Двоичные деревья поиска (Binary Search Trees)
Это структура данных, в которой каждый узел имеет не более двух дочерних элементов (известных как левый и правый потомок), причём левый потомок меньше родителя, а правый — больше. Это обеспечивает эффективный поиск, вставку и удаление элементов.
Хэш-таблицы (Hash Tables)
Это структура данных, использующая хэш-функцию для вычисления индекса в массиве бакетов или слотов, откуда можно найти желаемое значение.
Графы (Graphs)
Состоит из узлов (вершин) и рёбер, соединяющих эти узлы. Графы бывают направленными и ненаправленными, а также могут содержать циклы или быть ацикличными. Графы используются для моделирования связей между объектами.
Кучи (Heaps)
Это специализированное дерево, которое удовлетворяет свойству кучи: для максимальной кучи каждый родительский узел больше или равен своим дочерним узлам, а для минимальной кучи — меньше или равен.
Очереди с приоритетом (Priority Queues)
Это тип данных, похожий на обычную очередь или стек, но в котором каждый элемент имеет определённый приоритет. Элементы с более высоким приоритетом обрабатываются перед элементами с более низким приоритетом.
Эти структуры данных лежат в основе многих алгоритмов и используются для решения различных задач. Выбор структуры данных зависит от конкретной задачи и требований к производительности операций с данными.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
👍5
Anonymous Quiz
23%
==
67%
===
10%
equals
1%
!==
👍2
В чем разница ArrayList, LinkedList, Vector ?
Спросят с вероятностью 13%
существует несколько разных реализаций интерфейса List, среди которых наиболее известными являются
1️⃣ArrayList
Это реализация изменяемого массива. Она позволяет динамически изменять размер, добавляя или удаляя элементы.
Особенности:
✅Основан на массиве: Внутренне использует массив для хранения элементов.
✅Доступ к элементам: Обеспечивает быстрый произвольный доступ к элементам через индексы, так как доступ к элементу массива по индексу выполняется за константное время O(1).
✅Изменение размера: При добавлении элементов, которые превышают начальную емкость массива,
2️⃣LinkedList
Реализует двунаправленный список и список очередей, позволяя эффективное добавление и удаление элементов как в начале, так и в конце списка.
Особенности:
✅Двунаправленный список: Каждый элемент (узел) содержит ссылки на предыдущий и следующий элементы.
✅Вставка и удаление: Операции вставки и удаления элементов в
✅Произвольный доступ: Доступ к элементам по индексу медленнее, чем в
3️⃣Vector
Очень похож на
Особенности:
✅Потокобезопасность: Все операции в
✅Расширение: Как и
Выбор между
✅ArrayList рекомендуется использовать, когда важен быстрый доступ к элементам и минимальное количество операций добавления/удаления.
✅LinkedList лучше подходит для ситуаций, когда часто происходят вставки и удаления элементов.
✅Vector используется в условиях, когда нужна потокобезопасность без внешней синхронизации, хотя современные альтернативы, такие как
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с вероятностью 13%
существует несколько разных реализаций интерфейса List, среди которых наиболее известными являются
ArrayList, LinkedList и Vector. Каждая из этих реализаций имеет свои особенности, преимущества и недостатки. Рассмотрим каждую из них подробнее.1️⃣ArrayList
Это реализация изменяемого массива. Она позволяет динамически изменять размер, добавляя или удаляя элементы.
Особенности:
✅Основан на массиве: Внутренне использует массив для хранения элементов.
✅Доступ к элементам: Обеспечивает быстрый произвольный доступ к элементам через индексы, так как доступ к элементу массива по индексу выполняется за константное время O(1).
✅Изменение размера: При добавлении элементов, которые превышают начальную емкость массива,
ArrayList создает новый массив большего размера и копирует в него элементы из старого массива, что может быть затратно по времени и памяти.2️⃣LinkedList
Реализует двунаправленный список и список очередей, позволяя эффективное добавление и удаление элементов как в начале, так и в конце списка.
Особенности:
✅Двунаправленный список: Каждый элемент (узел) содержит ссылки на предыдущий и следующий элементы.
✅Вставка и удаление: Операции вставки и удаления элементов в
LinkedList выполняются быстро (O(1)), так как не требуется перемещение других элементов.✅Произвольный доступ: Доступ к элементам по индексу медленнее, чем в
ArrayList, так как необходимо перебирать элементы от начала или конца списка до нужной позиции, что в среднем занимает время O(n/2).3️⃣Vector
Очень похож на
ArrayList, но все методы в нем синхронизированы для потокобезопасной работы в многопоточных средах.Особенности:
✅Потокобезопасность: Все операции в
Vector являются потокобезопасными, что делает его подходящим для использования в многопоточных приложениях, но это также делает его медленнее ArrayList из-за затрат на синхронизацию.✅Расширение: Как и
ArrayList, увеличивает свой размер, создавая новый массив и копируя элементы, но делает это с более консервативным коэффициентом расширения.Выбор между
ArrayList, LinkedList и Vector зависит от требований к приложению:✅ArrayList рекомендуется использовать, когда важен быстрый доступ к элементам и минимальное количество операций добавления/удаления.
✅LinkedList лучше подходит для ситуаций, когда часто происходят вставки и удаления элементов.
✅Vector используется в условиях, когда нужна потокобезопасность без внешней синхронизации, хотя современные альтернативы, такие как
Collections.synchronizedList(new ArrayList<>), могут предложить больше гибкости и производительности.👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
👍4
Anonymous Quiz
15%
3.33
15%
3.0
68%
3
2%
Исключение
👍2
С какими вариантами систем проектирования в Android работал ?
Спросят с вероятностью 13%
Система проектирования (design system) — это совокупность принципов, правил и компонентов, которые помогают разработчикам и дизайнерам создавать консистентный и удобный пользовательский интерфейс. Охватывает все аспекты дизайна приложения, от визуального стиля до взаимодействия и навигации. Рассмотрим основные варианты систем проектирования, которые часто используются в Android-разработке.
1️⃣Material Design
Это комплексная система проектирования, разработанная Google, которая предоставляет руководства, компоненты и инструменты для создания интуитивно понятных и красивых пользовательских интерфейсов. Она включает в себя чёткие указания по анимации, стилю, макетам и компонентам интерфейса.
Особенности:
✅Использование метафоры "материала" как единой метафорической основы дизайна.
✅Расширенная система типографики, цветов и иконок.
✅Рекомендации по созданию адаптивного дизайна, который хорошо работает на разных устройствах.
✅Библиотеки компонентов и инструменты, такие как Material Components for Android, которые облегчают имплементацию Material Design в приложениях.
2️⃣Fluent Design System от Microsoft
Это система проектирования, которая ориентирована на создание интуитивно понятных и доступных интерфейсов. Хотя первоначально она была разработана для Windows, принципы Fluent Design можно адаптировать и для Android-приложений.
Особенности:
✅Использование света, глубины, движения и материалов для создания реалистичного пользовательского интерфейса.
✅Поддержка доступности и адаптивности для работы на различных устройствах и платформах.
✅Компоненты и стили, которые можно адаптировать под Android через тщательную стилизацию.
3️⃣Human Interface Guidelines (HIG) от Apple
Хотя он ориентированы на iOS и macOS, принципы, изложенные в HIG, могут быть полезны при разработке кросс-платформенных приложений, включая Android, особенно если приложение должно обладать схожим внешним видом и поведением на всех платформах.
Особенности:
✅Глубокий акцент на чистоту дизайна и интуитивность интерфейса.
✅Рекомендации по навигации, использованию контролов и взаимодействиям, которые можно адаптировать для улучшения UX в Android-приложениях.
✅Поддержка доступности и универсального дизайна.
Выбор системы проектирования зависит от целей проекта, целевой аудитории и желаемого пользовательского опыта. Material Design является стандартным выбором для Android-разработки, поскольку он тесно интегрирован с экосистемой Google и Android. Однако принципы Fluent Design или HIG также могут быть адаптированы для создания кросс-платформенных приложений, которые требуют единого стиля и поведения на разных платформах.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с вероятностью 13%
Система проектирования (design system) — это совокупность принципов, правил и компонентов, которые помогают разработчикам и дизайнерам создавать консистентный и удобный пользовательский интерфейс. Охватывает все аспекты дизайна приложения, от визуального стиля до взаимодействия и навигации. Рассмотрим основные варианты систем проектирования, которые часто используются в Android-разработке.
1️⃣Material Design
Это комплексная система проектирования, разработанная Google, которая предоставляет руководства, компоненты и инструменты для создания интуитивно понятных и красивых пользовательских интерфейсов. Она включает в себя чёткие указания по анимации, стилю, макетам и компонентам интерфейса.
Особенности:
✅Использование метафоры "материала" как единой метафорической основы дизайна.
✅Расширенная система типографики, цветов и иконок.
✅Рекомендации по созданию адаптивного дизайна, который хорошо работает на разных устройствах.
✅Библиотеки компонентов и инструменты, такие как Material Components for Android, которые облегчают имплементацию Material Design в приложениях.
2️⃣Fluent Design System от Microsoft
Это система проектирования, которая ориентирована на создание интуитивно понятных и доступных интерфейсов. Хотя первоначально она была разработана для Windows, принципы Fluent Design можно адаптировать и для Android-приложений.
Особенности:
✅Использование света, глубины, движения и материалов для создания реалистичного пользовательского интерфейса.
✅Поддержка доступности и адаптивности для работы на различных устройствах и платформах.
✅Компоненты и стили, которые можно адаптировать под Android через тщательную стилизацию.
3️⃣Human Interface Guidelines (HIG) от Apple
Хотя он ориентированы на iOS и macOS, принципы, изложенные в HIG, могут быть полезны при разработке кросс-платформенных приложений, включая Android, особенно если приложение должно обладать схожим внешним видом и поведением на всех платформах.
Особенности:
✅Глубокий акцент на чистоту дизайна и интуитивность интерфейса.
✅Рекомендации по навигации, использованию контролов и взаимодействиям, которые можно адаптировать для улучшения UX в Android-приложениях.
✅Поддержка доступности и универсального дизайна.
Выбор системы проектирования зависит от целей проекта, целевой аудитории и желаемого пользовательского опыта. Material Design является стандартным выбором для Android-разработки, поскольку он тесно интегрирован с экосистемой Google и Android. Однако принципы Fluent Design или HIG также могут быть адаптированы для создания кросс-платформенных приложений, которые требуют единого стиля и поведения на разных платформах.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
👍2
В каком потоке запускается самый обычный сервис ?
Спросят с веротяностью 20%
Самый обычный сервис, который наследуется от класса
Чтобы избежать таких проблем, для выполнения длительных операций в сервисе необходимо использовать отдельные потоки, AsyncTask, или другие механизмы асинхронной обработки, такие как Kotlin Coroutines в случае разработки. Таким образом, можно обеспечить отзывчивость пользовательского интерфейса, выполняя тяжелые задачи в фоновом режиме.
Для реализации сервиса, который запускается в отдельном потоке, можно использовать
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с веротяностью 20%
Самый обычный сервис, который наследуется от класса
Service, по умолчанию запускается в главном потоке приложения, который также называется UI-потоком (User Interface Thread). Это означает, что все операции, выполняемые в сервисе, включая методы onStartCommand(), onCreate(), и onBind(), выполняются в главном потоке. Если в сервисе будут выполняться длительные или ресурсоемкие операции, такие как сетевые запросы, обработка больших данных или выполнение сложных вычислений, это может привести к "зависанию" пользовательского интерфейса и появлению сообщений о том, что приложение не отвечает (ANR — Application Not Responding).Чтобы избежать таких проблем, для выполнения длительных операций в сервисе необходимо использовать отдельные потоки, AsyncTask, или другие механизмы асинхронной обработки, такие как Kotlin Coroutines в случае разработки. Таким образом, можно обеспечить отзывчивость пользовательского интерфейса, выполняя тяжелые задачи в фоновом режиме.
Для реализации сервиса, который запускается в отдельном потоке, можно использовать
IntentService. IntentService обрабатывает все запросы в рабочем потоке с помощью очереди, что позволяет выполнять длительные операции в фоновом режиме без блокировки главного потока. Однако следует отметить, что начиная с Android 8.0 (API уровень 26), использование IntentService стало менее предпочтительным из-за новых ограничений на фоновую работу и рекомендуется использовать JobIntentService или WorkManager для выполнения фоновых задач в зависимости от конкретных требований приложения.👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 1078 вопросов на Android разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
👍6😁1