#Собес #kotlin
🤔 Чем Kotlin отличается от Java?
💬 Кратко:
Kotlin и Java оба работают на JVM, но Kotlin предлагает более компактный и читаемый синтаксис. В нем встроены функции безопасности для null-ссылок, что помогает избежать типичных ошибок. Kotlin также поддерживает более современные возможности, такие как корутины для асинхронного программирования и функции расширения, чего нет в Java.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
💬 Кратко:
Kotlin и Java оба работают на JVM, но Kotlin предлагает более компактный и читаемый синтаксис. В нем встроены функции безопасности для null-ссылок, что помогает избежать типичных ошибок. Kotlin также поддерживает более современные возможности, такие как корутины для асинхронного программирования и функции расширения, чего нет в Java.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
YeaHub
YeaHub — тренажер собеседований по IT
5000+ вопросов для подготовки к интервью. Фильтры, квизы, статистика!
#Собес #null_safety #safe_calls #elvis_operator
🤔 Как обрабатывать nullable значения в Kotlin?
💬 Кратко:
В Kotlin для работы с nullable типами данных можно использовать несколько методов:
- Safe calls (?.): безопасный доступ к свойствам и методам объекта, если объект равен
- Elvis operator (?:): позволяет задать значение по умолчанию, если объект равен
- Safe casts (as?): безопасное приведение типов, которое возвращает
- Non-null assertion (!!): если вы уверены, что переменная не равна
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Как обрабатывать nullable значения в Kotlin?
💬 Кратко:
В Kotlin для работы с nullable типами данных можно использовать несколько методов:
- Safe calls (?.): безопасный доступ к свойствам и методам объекта, если объект равен
null.- Elvis operator (?:): позволяет задать значение по умолчанию, если объект равен
null.- Safe casts (as?): безопасное приведение типов, которое возвращает
null, если приведение невозможно.- Non-null assertion (!!): если вы уверены, что переменная не равна
null, используйте оператор !!, но будьте осторожны, потому что это может вызвать исключение NullPointerException.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
👍1
#полезное
🛞 Kotlin DataFrame — библиотека для типизированной обработки данных от JetBrains, вдохновленная Pandas.
Проект позволяет загружать данные из CSV/JSON/SQL, фильтровать и агрегировать их через цепочки вызовов в Kotlin-стиле. Интересно, что инструмент поддержи очень быструю генерацию type-safe API: при работе в Jupyter Notebook или с Gradle-плагином система автоматически создаёт extension-свойства для колонок.
Github
👉 Новости 👉 База вопросов
Проект позволяет загружать данные из CSV/JSON/SQL, фильтровать и агрегировать их через цепочки вызовов в Kotlin-стиле. Интересно, что инструмент поддержи очень быструю генерацию type-safe API: при работе в Jupyter Notebook или с Gradle-плагином система автоматически создаёт extension-свойства для колонок.
Github
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😵 Ultimatum
Форк Chromium с поддержкой веб-расширений на Android, возможностями браузера, скрывающими его от обнаружения, поддержкой Web3.0 и многим другим
Гитхаб
👉 Новости 👉 База вопросов
Форк Chromium с поддержкой веб-расширений на Android, возможностями браузера, скрывающими его от обнаружения, поддержкой Web3.0 и многим другим
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - gonzazoid/Ultimatum: Ultimatum is a chromium fork with webextensions support on Android, anti-detect browser capabilities…
Ultimatum is a chromium fork with webextensions support on Android, anti-detect browser capabilities, web3.0 support and much more - gonzazoid/Ultimatum
👍1
#Собес #kotlin
🤔 Что такое оператор Elvis в Kotlin?
💬 Кратко:
Оператор Elvis (?:) используется для того, чтобы задать значение по умолчанию, если объект равен nul1 . Если объект не равен null, возвращается его значение, если равен null, то используется значение после оператора ?: .
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
💬 Кратко:
Оператор Elvis (?:) используется для того, чтобы задать значение по умолчанию, если объект равен nul1 . Если объект не равен null, возвращается его значение, если равен null, то используется значение после оператора ?: .
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #mitm #udp #tcp
🤔 Senior Android разработчик в компанию Юрент.
Техническое собеседование. Лето 2025. Юрент - проект для обеспечения работы самокатов (тех. обслуживание). Вилка: 250-400к + 20% премии. Были вопросы про опыт. В конце был лайвкодинг.
💬 Вопросы:
- Что такое MVI?
- Что такое WebSocket? Как использовал на проекте?
- Чем отличается функционально GET от POST? Можем ли писать запрос в body GET?
- Чем отличается TCP от UDP протоколы? Для чего каждый используется?
- Какие есть способы защиты приложения от MITM?
👉 Все вопросы из этого собеседования (12)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
🤔 Senior Android разработчик в компанию Юрент.
Техническое собеседование. Лето 2025. Юрент - проект для обеспечения работы самокатов (тех. обслуживание). Вилка: 250-400к + 20% премии. Были вопросы про опыт. В конце был лайвкодинг.
💬 Вопросы:
- Что такое MVI?
- Что такое WebSocket? Как использовал на проекте?
- Чем отличается функционально GET от POST? Можем ли писать запрос в body GET?
- Чем отличается TCP от UDP протоколы? Для чего каждый используется?
- Какие есть способы защиты приложения от MITM?
👉 Все вопросы из этого собеседования (12)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
#Собес #github
🤔 Что такое Git и GitHub?
💬 Кратко:
Git — это система контроля версий, которая позволяет отслеживать изменения в коде, возвращаться к старым версиям и работать над проектом совместно с другими разработчиками. GitHub — это платформа, где можно хранить код в облаке, делиться им и управлять проектами с помощью Git. Вместе они помогают эффективно работать над проектом в команде.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Что такое Git и GitHub?
💬 Кратко:
Git — это система контроля версий, которая позволяет отслеживать изменения в коде, возвращаться к старым версиям и работать над проектом совместно с другими разработчиками. GitHub — это платформа, где можно хранить код в облаке, делиться им и управлять проектами с помощью Git. Вместе они помогают эффективно работать над проектом в команде.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#Собес #opentelemetry #observability #tracing
🤔 Что такое OpenTelemetry? Для чего используется?
💬 Кратко:
OpenTelemetry - open-source инструмент для сбора телеметрии (метрики, логи, трейсы). Помогает в мониторинге и диагностике.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Что такое OpenTelemetry? Для чего используется?
💬 Кратко:
OpenTelemetry - open-source инструмент для сбора телеметрии (метрики, логи, трейсы). Помогает в мониторинге и диагностике.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
❤1
🚀 Как научиться проходить систем-дизайн интервью
Систем-дизайн или архитектурная секция - один из самых сложных и экспертных этапов, потому хорошая архитектура - когда легко изменить и масштбировать проект без бойлерплейта.
Я обожаю проходить такие этапы интервью, потому что на них интересно.
Делюсь с тобой алгоритмом для подготовки к этой секции.
📈 Как подготовиться к system design
1. Посмотри фреймворк и попробуй спроектировать приложение самостоятельно
2. Сравни с разбором собеса от меня
3. Изучи, какие я допустил ошибки и потренируйся на других примерах
Материалы для тренировки:
1️⃣Мок-собесы по system design
2️⃣Распространенные ошибки на system design
Если ты нашел другие полезные материалы, обязательно делись в комментариях)
Желаю тебе удачи на собеседовании!
🚀 Пост Guru Android: @kishmyak
Систем-дизайн или архитектурная секция - один из самых сложных и экспертных этапов, потому хорошая архитектура - когда легко изменить и масштбировать проект без бойлерплейта.
Я обожаю проходить такие этапы интервью, потому что на них интересно.
Делюсь с тобой алгоритмом для подготовки к этой секции.
📈 Как подготовиться к system design
1. Посмотри фреймворк и попробуй спроектировать приложение самостоятельно
2. Сравни с разбором собеса от меня
3. Изучи, какие я допустил ошибки и потренируйся на других примерах
Материалы для тренировки:
1️⃣Мок-собесы по system design
2️⃣Распространенные ошибки на system design
Если ты нашел другие полезные материалы, обязательно делись в комментариях)
Желаю тебе удачи на собеседовании!
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - weeeBox/mobile-system-design: A simple framework for mobile system design interviews
A simple framework for mobile system design interviews - weeeBox/mobile-system-design
🔥2👍1
#Собес #docker_volumes #persistent_data #storage
🤔 Какова цель томов в Docker?
💬 Кратко:
Тома в Docker предназначены для хранения и обмена данными между контейнерами и хост-системой. Они позволяют сохранять данные независимо от жизненного цикла контейнера, обеспечивая сохранность данных при остановке или удалении контейнера. Тома можно использовать для базы данных, конфигураций приложений и логов.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Какова цель томов в Docker?
💬 Кратко:
Тома в Docker предназначены для хранения и обмена данными между контейнерами и хост-системой. Они позволяют сохранять данные независимо от жизненного цикла контейнера, обеспечивая сохранность данных при остановке или удалении контейнера. Тома можно использовать для базы данных, конфигураций приложений и логов.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#book #практика
📚 Java Concurrency на практике
Стандарт в разработке. Книга, которая даст вам прочную базу в Java-разработке и поможет изучить непростую тему потокобезопасности. Возможно, книга немного устарела, ей уже много лет. Но погрузиться с ней в основы получится отлично. Ведь книга описывает типичные ошибки написания конкурентных приложений на Java и распространённые ошибки с многопоточностью.
Перейти к материалу
👉 База вопросов 👉 Новости
📚 Java Concurrency на практике
Стандарт в разработке. Книга, которая даст вам прочную базу в Java-разработке и поможет изучить непростую тему потокобезопасности. Возможно, книга немного устарела, ей уже много лет. Но погрузиться с ней в основы получится отлично. Ведь книга описывает типичные ошибки написания конкурентных приложений на Java и распространённые ошибки с многопоточностью.
Перейти к материалу
👉 База вопросов 👉 Новости
#course #ооп #case
📚 Практический анализ ПО с моделированием на UML
Целью курса является обучение слушателей теоретическим основам объектно-ориентированного подхода, практическим методам визуального проектирования и технологии разработки программного обеспечения с использованием компьютеризированных систем разработки (CASE
Перейти к материалу
👉 База вопросов 👉 Новости
📚 Практический анализ ПО с моделированием на UML
Целью курса является обучение слушателей теоретическим основам объектно-ориентированного подхода, практическим методам визуального проектирования и технологии разработки программного обеспечения с использованием компьютеризированных систем разработки (CASE
Перейти к материалу
👉 База вопросов 👉 Новости
❤1
#Собес #array #loop #equals
🤔 Как вернуть первые два подряд идущих равных элемента из массива?
💬 Кратко:
Идём по массиву, сравниваем
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Как вернуть первые два подряд идущих равных элемента из массива?
💬 Кратко:
Идём по массиву, сравниваем
arr[i] и arr[i+1].📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
❤1
Тестирование и с чем его едят🥣
У многих начинающих ребят возникают вопросы о тестах. В этом посте я постараюсь кратко раскрыть эту тему.
Тест — это способ проверить, работает ли программа так, как задумано. Он может пройти или упасть. Упавший тест — сигнал, что в коде есть ошибка, и его не добавят в кодовую базу, пока всё не исправят.
Есть пирамида тестирования, похожая на пирамиду Маслоу. Она показывает, сколько разных тестов должно быть:
Unit-тесты проверяют отдельные элементы программы, которые пишут разработчики. Их должно быть около 60–80%.
UI-тесты, скриншот-тесты, API-тесты проверяют взаимодействие нескольких элементов. Их пишут разработчики или AutoQA. Их должно быть 15–30%.
End-to-End-тесты проверяют систему целиком. Их пишут AutoQA, и их должно быть 5–10%.
Чем больше систем охватывает тест, тем больше причин, по которым он может ложно упасть. Кроме того, такие тесты сложнее писать, они дольше проходят и больше подвержены изменениям. Поэтому удобнее работать с большим количеством Unit-тестов, которые быстро показывают ошибку, легко пишутся и не меняются.
Что делать, чтобы лучше разобраться в тестах❓
1️⃣Узнай, какие тесты есть на твоём языке программирования и платформе.
2️⃣Прочитай документацию или посмотри обучающее видео.
3️⃣Попробуй найти репозитории, где можно написать тесты.
4️⃣Попрактикуйся и разберись в отличиях разных видов тестов.
❗️Помни, тесты — это способ убедиться, что программа работает правильно. Они помогают быстро находить ошибки и гарантируют, что изменения в коде не нарушат работу программы.
🚀 Пост Guru Android: @kishmyak
У многих начинающих ребят возникают вопросы о тестах. В этом посте я постараюсь кратко раскрыть эту тему.
Тест — это способ проверить, работает ли программа так, как задумано. Он может пройти или упасть. Упавший тест — сигнал, что в коде есть ошибка, и его не добавят в кодовую базу, пока всё не исправят.
Есть пирамида тестирования, похожая на пирамиду Маслоу. Она показывает, сколько разных тестов должно быть:
Unit-тесты проверяют отдельные элементы программы, которые пишут разработчики. Их должно быть около 60–80%.
UI-тесты, скриншот-тесты, API-тесты проверяют взаимодействие нескольких элементов. Их пишут разработчики или AutoQA. Их должно быть 15–30%.
End-to-End-тесты проверяют систему целиком. Их пишут AutoQA, и их должно быть 5–10%.
Чем больше систем охватывает тест, тем больше причин, по которым он может ложно упасть. Кроме того, такие тесты сложнее писать, они дольше проходят и больше подвержены изменениям. Поэтому удобнее работать с большим количеством Unit-тестов, которые быстро показывают ошибку, легко пишутся и не меняются.
Что делать, чтобы лучше разобраться в тестах❓
1️⃣Узнай, какие тесты есть на твоём языке программирования и платформе.
2️⃣Прочитай документацию или посмотри обучающее видео.
3️⃣Попробуй найти репозитории, где можно написать тесты.
4️⃣Попрактикуйся и разберись в отличиях разных видов тестов.
❗️Помни, тесты — это способ убедиться, что программа работает правильно. Они помогают быстро находить ошибки и гарантируют, что изменения в коде не нарушат работу программы.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2🔥2
#Собес #android #components #intent
🤔 Middle Android разработчик в компанию ОТП Банк
Техническое собеседование. Лето 2024
💬 Вопросы:
- Какую роль выполняет метод CompositionLocal в Jetpack Compose?
- Для чего в Jetpack Compose используются аннотации @Stable и @Immutable?
- Что такое DiffUtil и для чего он используется?
- Как бы вы реализовали чат в Android?
- Может ли Android-приложение работать в нескольких процессах?
👉 Все вопросы из этого собеседования (16)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
🤔 Middle Android разработчик в компанию ОТП Банк
Техническое собеседование. Лето 2024
💬 Вопросы:
- Какую роль выполняет метод CompositionLocal в Jetpack Compose?
- Для чего в Jetpack Compose используются аннотации @Stable и @Immutable?
- Что такое DiffUtil и для чего он используется?
- Как бы вы реализовали чат в Android?
- Может ли Android-приложение работать в нескольких процессах?
👉 Все вопросы из этого собеседования (16)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
❤1
#documentation #глоссарий
📚 Глоссарий Google Android
Если вы вступаете в огромный мир разработки под Android, то очевидно, что вы столкнётесь со множеством новых понятий и терминов. Не беспокойтесь, Google разработал интерактивный и простой в использовании глоссарий с примерами кода, который облегчит вашу жизнь.
Перейти к материалу
👉 База вопросов 👉 Новости
📚 Глоссарий Google Android
Если вы вступаете в огромный мир разработки под Android, то очевидно, что вы столкнётесь со множеством новых понятий и терминов. Не беспокойтесь, Google разработал интерактивный и простой в использовании глоссарий с примерами кода, который облегчит вашу жизнь.
Перейти к материалу
👉 База вопросов 👉 Новости
❤3
#Собес #threading #synchronization #lock
🤔 Что делает ключевое слово synchronized?
💬 Кратко:
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Что делает ключевое слово synchronized?
💬 Кратко:
synchronized блокирует доступ к коду или объекту для других потоков, пока текущий поток не завершит выполнение. Это предотвращает гонки данных (race conditions) и обеспечивает потокобезопасность.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
👍1🔥1
#Собес #navigation_component #nav_controller #nav_graph
🤔 Для чего нужен Navigation Component?
💬 Кратко:
Navigation Component упрощает навигацию между
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Для чего нужен Navigation Component?
💬 Кратко:
Navigation Component упрощает навигацию между
Fragment и Activity через NavGraph, NavController и Safe Args. Он генерирует код для безопасной передачи аргументов, управляет back-stack автоматически и облегчает Deep Linking и переходы с анимацией, снижая шаблонный код и ошибки при навигации вручную.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Победи страх собеседований ☠️
Страх собеседований проходит после5-10 успешных собеседований, это я понял на своем примере, примере моих учеников и друзей. Успешное собеседование - когда дают оффер или зовут на следующий этап.
Но как быть уверенным на собеседовании, если каждый раз задают новые вопросы, невозможно же подготовиться к каждому вопросу?
Для этого существуют мок-собеседования
Это тестовые собеседования, когда опытный разработчик проводит собеседование и затрагивает каждую тему, которая встречается на собеседовании. После такого собеседования ты получаешь подробный фидбек по секциям, а также материалы для подготовки и закрытия пробелов.
Что делать, если ты не знаешь, где попробовать свои силы на мок-собесе, но и на реальное собеседование тебе страшно идти? Посмотри публичные мок-собеседования, как раз такое собеседование я записал вместе с бывшим коллегой из Яндекса. На это интервью я пришел без тем и без ответов на вопросы, это было похоже на реальное собеседование. Затронули все темы, которые есть в android: Kotlin/Java, Android, Coroutines, Compose, System Design.
В следующем собеседовании затронем и livecoding.
https://youtu.be/MgWUtFK8TLA
🚀 Пост Guru Android: @kishmyak
Страх собеседований проходит после
Но как быть уверенным на собеседовании, если каждый раз задают новые вопросы, невозможно же подготовиться к каждому вопросу?
Для этого существуют мок-собеседования
Это тестовые собеседования, когда опытный разработчик проводит собеседование и затрагивает каждую тему, которая встречается на собеседовании. После такого собеседования ты получаешь подробный фидбек по секциям, а также материалы для подготовки и закрытия пробелов.
Что делать, если ты не знаешь, где попробовать свои силы на мок-собесе, но и на реальное собеседование тебе страшно идти? Посмотри публичные мок-собеседования, как раз такое собеседование я записал вместе с бывшим коллегой из Яндекса. На это интервью я пришел без тем и без ответов на вопросы, это было похоже на реальное собеседование. Затронули все темы, которые есть в android: Kotlin/Java, Android, Coroutines, Compose, System Design.
В следующем собеседовании затронем и livecoding.
https://youtu.be/MgWUtFK8TLA
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3🔥3
#Собес #lifecycle #activity #intent
🤔 Middle Android разработчик в компанию Avito
Техническое собеседование. Осень 2024
💬 Вопросы:
- Почему RecyclerView считается лучше ListView?
- В чём разница между Serializable и Parcelable?
- Как RecyclerView рендерит элементы?
- В чём сильные стороны RecyclerView?
- Как спроектировать сетевой запрос в Android?
👉 Все вопросы из этого собеседования (19)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
🤔 Middle Android разработчик в компанию Avito
Техническое собеседование. Осень 2024
💬 Вопросы:
- Почему RecyclerView считается лучше ListView?
- В чём разница между Serializable и Parcelable?
- Как RecyclerView рендерит элементы?
- В чём сильные стороны RecyclerView?
- Как спроектировать сетевой запрос в Android?
👉 Все вопросы из этого собеседования (19)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
❤1
Forwarded from YeaHub
В этом видео мы подробно разбираем профессию Android-разработчик: кто это, чем занимается, какие навыки нужны и сколько можно зарабатывать. Наш гость — сеньор Android-разработчик с опытом работы в Яндекс, МТС и Wildberries, который делится личным опытом: как пройти путь от новичка до ведущего специалиста всего за 5 лет.
Вы узнаете:
— Что делает Android-разработчик и как выглядит его рабочий день
— Какие качества и навыки нужны для успешного старта
— Сколько времени потребуется на обучение и с чего лучше начинать
— Какие инструменты и технологии нужно знать
— Топ-3 ресурса для старта Android-разработки
— Советы для первого проекта и развития карьеры
Если вы хотите стать Android-разработчиком или просто интересуетесь IT-профессиями, это видео точно для вас!
Подпишитесь на канал, чтобы не пропустить новые видео про карьеру в IT и обучение программированию.
https://yeahub.ru/ - тренажер для подготовки к собеседованиям
https://t.me/yeahub_android_mobile - канал YeaHub в Android
https://t.me/gulyaev_it - телеграмм-канал Антона об Android и IT
https://www.youtube.com/@gulyaev_it - ютуб-канал Антона
#it #android #kotlin #программирование #разработка #собеседование #трудоустройство
https://www.youtube.com/watch?v=ss5cjY7SPXY
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🔥2👍1