👀 Собес в Google в 2024: что реально спрашивают и как пройти 👀
Нет, я не проходил собеседование в Google пока. Но я недавно наткнулся на статью, как разработчик в 2024 году прошёл собес в Google и получил оффер. Это на фоне того, что в бигтехах — Google, Meta, Amazon — массовые увольнения.
Вот вам мой супер краткий пересказ статьи, что кандидата спрашивали и что надо знать, чтобы пройти:
📞 Телефонный скрининг: обсуждают опыт, проекты, и как вы понимаете структуры данных и алгоритмы.
🖥️ Три технических раунда (45 минут каждый):
- Алгоритмы, деревья, динамическое программирование. Так что учите динамическое программирование!
- Задачи уровня LeetCode Medium и Hard.
- Пишем код по OOP, SOLID стандартам — чистый код важен. Хотя тут мне не совсем понятно, про что она. На сколько SOLID код мне надо писать, чтобы сделать поиск по дереву? Тут вопросики.
🧠 Googlyness: проверка на командность и решение конфликтов. Отвечайте по методу STAR (Situation, Task, Action, Result).
🤝 Team Matching: выбираете команду, обсуждаете проекты, цели, и насколько вы подходите команде.
Вывод: всё по-старому, готовьтесь по алгоритмам и будьте вежливы на командных раундах. 😎
Кто из вас проходил собеседования в Бигтехи? Есть что добавить? 💬 Я кстати, как-то проходил собесы в Facebook, но потом они объявили свои layoffs на середине пути :)
P.S. 🎟️ Остался один день розыгрыша бесплатного билета на Подлодку! Смотрите пост в закрепе!
#собеседование #google #бигтех
Нет, я не проходил собеседование в Google пока. Но я недавно наткнулся на статью, как разработчик в 2024 году прошёл собес в Google и получил оффер. Это на фоне того, что в бигтехах — Google, Meta, Amazon — массовые увольнения.
Вот вам мой супер краткий пересказ статьи, что кандидата спрашивали и что надо знать, чтобы пройти:
📞 Телефонный скрининг: обсуждают опыт, проекты, и как вы понимаете структуры данных и алгоритмы.
🖥️ Три технических раунда (45 минут каждый):
- Алгоритмы, деревья, динамическое программирование. Так что учите динамическое программирование!
- Задачи уровня LeetCode Medium и Hard.
- Пишем код по OOP, SOLID стандартам — чистый код важен. Хотя тут мне не совсем понятно, про что она. На сколько SOLID код мне надо писать, чтобы сделать поиск по дереву? Тут вопросики.
🧠 Googlyness: проверка на командность и решение конфликтов. Отвечайте по методу STAR (Situation, Task, Action, Result).
🤝 Team Matching: выбираете команду, обсуждаете проекты, цели, и насколько вы подходите команде.
Вывод: всё по-старому, готовьтесь по алгоритмам и будьте вежливы на командных раундах. 😎
Кто из вас проходил собеседования в Бигтехи? Есть что добавить? 💬 Я кстати, как-то проходил собесы в Facebook, но потом они объявили свои layoffs на середине пути :)
P.S. 🎟️ Остался один день розыгрыша бесплатного билета на Подлодку! Смотрите пост в закрепе!
#собеседование #google #бигтех
👍11❤3
This media is not supported in your browser
VIEW IN TELEGRAM
🔥14
🔢 Как инкрементить build number в GitHub Actions 🔢
Сегодня стартанула Podlodka Android Crew 12, и я решил каждый день делать пост — инсайт дня, или “что больше всего запомнилось за первый день”. Вот мой первый инсайт!
Сегодня на докладе Никиты Куликова из Flipper Devices меня поразила простая, но элегантная штука — как инкрементировать версию в GitHub Actions. 💡
Ведь, если задуматься, чтобы инкрементить версию, нам нужно персистентное хранилище. Какие есть варианты?
- Просто положить число в репозиторий? Не, это мега неудобно, как с этим вообще потом работать? 🤦♂️
- Можно, конечно, заморочиться и поднять свой сервис с базой данных и автоматизацией, но это уже слишком громоздко и явно не для тех, кто хочет по-быстрому. ⏱️
- Можешь использовать номер прогона в GHA? Ну, это тоже гемор, особенно когда номера прыгают туда-сюда по разным воркфлоу. 💥
Так вот, как можно сделать по-легкому? Теги! 🎯
Теги — это как бесплатное персистентное хранилище, встроенное в гит. Никита показал экшн build-tag-number — это не единственный вариант, но суть в том, что мы используем хранилище тегов, чтобы хранить наш последний номер билда! 📦
С одной стороны, да, выглядит как костыль. 🩼 Но с другой — это реально быстрый и удобный способ, когда надо всё сделать и без лишних сложностей.
Может и костыль, но зато рабочий! 😎
А как вы инкрементите версию? Пишите в комментах! 💬
#podlodka #githubactions
Сегодня стартанула Podlodka Android Crew 12, и я решил каждый день делать пост — инсайт дня, или “что больше всего запомнилось за первый день”. Вот мой первый инсайт!
Сегодня на докладе Никиты Куликова из Flipper Devices меня поразила простая, но элегантная штука — как инкрементировать версию в GitHub Actions. 💡
Ведь, если задуматься, чтобы инкрементить версию, нам нужно персистентное хранилище. Какие есть варианты?
- Просто положить число в репозиторий? Не, это мега неудобно, как с этим вообще потом работать? 🤦♂️
- Можно, конечно, заморочиться и поднять свой сервис с базой данных и автоматизацией, но это уже слишком громоздко и явно не для тех, кто хочет по-быстрому. ⏱️
- Можешь использовать номер прогона в GHA? Ну, это тоже гемор, особенно когда номера прыгают туда-сюда по разным воркфлоу. 💥
Так вот, как можно сделать по-легкому? Теги! 🎯
Теги — это как бесплатное персистентное хранилище, встроенное в гит. Никита показал экшн build-tag-number — это не единственный вариант, но суть в том, что мы используем хранилище тегов, чтобы хранить наш последний номер билда! 📦
С одной стороны, да, выглядит как костыль. 🩼 Но с другой — это реально быстрый и удобный способ, когда надо всё сделать и без лишних сложностей.
Может и костыль, но зато рабочий! 😎
А как вы инкрементите версию? Пишите в комментах! 💬
#podlodka #githubactions
🔥10👍2😐1
🛠️ Detekt: как обычные правила отличаются от правил с type resolution 🛠️
Неделя Podlodka Android Crew 12 в самом разгаре, и как я и обещал, каждый день рассказываю интересную вещь с каждого дня.
Сегодня Гриша Шимичев раскрыл тему detekt (картинка - это слайд из его доклада). И самое важное, что надо знать — что у detekt есть два типа правил:
1. Обычные правила.
2. Правила с type resolution (это где detekt реально понимает, какие типы у тебя в коде).
🤔 Что это значит?
Смотри на картинку. Слева у нас обычное правило, которое ловит "магические числа". Всё понятно, типы тут особо не важны — это просто чистая проверка кода. Справа — пример с type resolution: здесь detekt уже проверяет более глубокие вещи, как ненужные операторы
⚡ Как запустить detekt с type resolution?
Если вы используете Gradle таску, то:
Если cli:
Короче, если хотите углубиться в статический анализ кода и написать свои кастомные правилн, то скорее всего без type resolution не обойтись. 🔧
А вы запускаете detekt с type resolution или без? 💬
#podlodka #android #detekt #статическийанализ
Неделя Podlodka Android Crew 12 в самом разгаре, и как я и обещал, каждый день рассказываю интересную вещь с каждого дня.
Сегодня Гриша Шимичев раскрыл тему detekt (картинка - это слайд из его доклада). И самое важное, что надо знать — что у detekt есть два типа правил:
1. Обычные правила.
2. Правила с type resolution (это где detekt реально понимает, какие типы у тебя в коде).
🤔 Что это значит?
Смотри на картинку. Слева у нас обычное правило, которое ловит "магические числа". Всё понятно, типы тут особо не важны — это просто чистая проверка кода. Справа — пример с type resolution: здесь detekt уже проверяет более глубокие вещи, как ненужные операторы
!!. И тут уже важно знать тип переменной. Если тип не nullable, detekt подскажет, что этот !! не нужен.⚡ Как запустить detekt с type resolution?
Если вы используете Gradle таску, то:
./gradlew detektMainЕсли cli:
detekt --classpath build/classes/kotlin/main --jvm-target 1.8Короче, если хотите углубиться в статический анализ кода и написать свои кастомные правилн, то скорее всего без type resolution не обойтись. 🔧
А вы запускаете detekt с type resolution или без? 💬
#podlodka #android #detekt #статическийанализ
🔥7👍4
🚀 3 CI/CD инструмента, которые тебе пригодятся 🚀
Очередной день Podlodka Android Crew 12, а это значит — новый инсайт дня от меня!
Сегодня мне зашёл круглый стол про CI/CD, где мы пообщались с Сергеем Боиштяном, Андреем Берюховым и Алексеем Хайминовым. Было много интересного, но я решил поделиться тремя инструментами, которые вам точно пригодятся в работе:
1. Dependency Analysis Gradle Plugin
Плагин для Gradle, который анализирует зависимости в проекте. Он помогает находить неиспользуемые зависимости и неправильно настроенные зависимости (например, когда вы путаете api, implementation и compileOnly). Плюс, он следит за "здоровьем сборки" и помогает чистить проект от лишнего мусора. 📦 Для меня самое ценное — это проверка корректности зависимостей!
2. Danger
CI-инструмент, который автоматизирует код ревью. Он проверяет ваши pull requests на наличие изменений в Changelog, ссылки на таски в Trello/JIRA, описательные лейблы и многое другое. Настраиваешь правила под свою команду, и Danger становится вашим помощником в CI. 🕵️♂️ Я сам не пробовал этот инструмен. Кто пробовал, напишите, как вам?
3. Talaiot
Библиотека для Gradle, которая отслеживает время сборки и выполняемых задач, чтобы найти узкие места и улучшить производительность сборок. Поддерживает разные интеграции с системами для сбора метрик. 📊 Кароче, очень полезная штука!
Каждый из этих инструментов может реально упростить жизнь и ускорить разработку!
А какие еще CI/CD инструменты используете вы? Напишите любые, мне очень интересно! 💬
#podlodka #CICD #android
Очередной день Podlodka Android Crew 12, а это значит — новый инсайт дня от меня!
Сегодня мне зашёл круглый стол про CI/CD, где мы пообщались с Сергеем Боиштяном, Андреем Берюховым и Алексеем Хайминовым. Было много интересного, но я решил поделиться тремя инструментами, которые вам точно пригодятся в работе:
1. Dependency Analysis Gradle Plugin
Плагин для Gradle, который анализирует зависимости в проекте. Он помогает находить неиспользуемые зависимости и неправильно настроенные зависимости (например, когда вы путаете api, implementation и compileOnly). Плюс, он следит за "здоровьем сборки" и помогает чистить проект от лишнего мусора. 📦 Для меня самое ценное — это проверка корректности зависимостей!
2. Danger
CI-инструмент, который автоматизирует код ревью. Он проверяет ваши pull requests на наличие изменений в Changelog, ссылки на таски в Trello/JIRA, описательные лейблы и многое другое. Настраиваешь правила под свою команду, и Danger становится вашим помощником в CI. 🕵️♂️ Я сам не пробовал этот инструмен. Кто пробовал, напишите, как вам?
3. Talaiot
Библиотека для Gradle, которая отслеживает время сборки и выполняемых задач, чтобы найти узкие места и улучшить производительность сборок. Поддерживает разные интеграции с системами для сбора метрик. 📊 Кароче, очень полезная штука!
Каждый из этих инструментов может реально упростить жизнь и ускорить разработку!
А какие еще CI/CD инструменты используете вы? Напишите любые, мне очень интересно! 💬
#podlodka #CICD #android
🔥8👍2🤩2
🔥 Как нашаблонить кучу файлов за 5 минут 🔥
Очередной день Podlodka Android Crew 12, и вот мой инсайт дня.
Сегодня Евгений Мельцайкин показал, как с помощью плагина Geminio автоматизировать создание файлов, когда у вас сложная архитектура и куча файлов, разложенная по папочкам 📂
Чтобы не писать по 10-15 файлов вручную под каждую новую фичу, можно настроить шаблоны. Вот как это работает:
Настройка конфига
Создаем файл geminio_config.yaml и указываем путь до папки с шаблонами. Теперь Geminio подтянет их в меню Android Studio.
Использование шаблонов
Шаблоны доступны через меню Generate и New в Android Studio. Выбираем шаблон и создаём сразу несколько файлов за раз.
Рецепты шаблонов
В каждом шаблоне прописаны "рецепты" — инструкции, какие файлы создавать, куда их класть и какие зависимости подключать. Можно настроить шаблоны как для файлов, так и для модулей.
Если у вас сложная архитектура, слои, Clean, MVI с кучей сущностей, Decompose, UDF и другие модные слова, то этот плагин сэкономит кучу времени. 💻
Пробовали Geminio? Или вы шаблоните чем-то другим? Напишите в комментах!
#podlodka #android #template
Очередной день Podlodka Android Crew 12, и вот мой инсайт дня.
Сегодня Евгений Мельцайкин показал, как с помощью плагина Geminio автоматизировать создание файлов, когда у вас сложная архитектура и куча файлов, разложенная по папочкам 📂
Чтобы не писать по 10-15 файлов вручную под каждую новую фичу, можно настроить шаблоны. Вот как это работает:
Настройка конфига
Создаем файл geminio_config.yaml и указываем путь до папки с шаблонами. Теперь Geminio подтянет их в меню Android Studio.
Использование шаблонов
Шаблоны доступны через меню Generate и New в Android Studio. Выбираем шаблон и создаём сразу несколько файлов за раз.
Рецепты шаблонов
В каждом шаблоне прописаны "рецепты" — инструкции, какие файлы создавать, куда их класть и какие зависимости подключать. Можно настроить шаблоны как для файлов, так и для модулей.
Если у вас сложная архитектура, слои, Clean, MVI с кучей сущностей, Decompose, UDF и другие модные слова, то этот плагин сэкономит кучу времени. 💻
Пробовали Geminio? Или вы шаблоните чем-то другим? Напишите в комментах!
#podlodka #android #template
👍11🔥3⚡1
Сервис автоматизации — это не страшно
Закрываем Podlodka Android Crew 12 постом о самом интересном сегодня!
Сегодня выступал Миша Левченко с докладом про сервисы автоматизации. И вот что самое главное надо знать:
- Не боимся писать сервисы автоматизации — это проще, чем кажется! 🚀
- Пишем на Kotlin. Мы, Android-разработчики, вполне можем сами написать такой сервис на Kotlin.
- Берем Ktor и не паримся. Заходим на Ktor генератор, выбираем, что нужно, и получаем готовый шаблон проекта. 🔧
- Для планирования задач можно юзать Quartz — отличный вариант для cron задач. 📅
И вишенка на торте — Миша зафичерил меня в своем докладе, как видно на картинке! 🎉
А как у вас с автоматизацией? Свой сервис уже написали? 😏
#podlodka #android #automation #Ktor #Kotlin
Закрываем Podlodka Android Crew 12 постом о самом интересном сегодня!
Сегодня выступал Миша Левченко с докладом про сервисы автоматизации. И вот что самое главное надо знать:
- Не боимся писать сервисы автоматизации — это проще, чем кажется! 🚀
- Пишем на Kotlin. Мы, Android-разработчики, вполне можем сами написать такой сервис на Kotlin.
- Берем Ktor и не паримся. Заходим на Ktor генератор, выбираем, что нужно, и получаем готовый шаблон проекта. 🔧
- Для планирования задач можно юзать Quartz — отличный вариант для cron задач. 📅
И вишенка на торте — Миша зафичерил меня в своем докладе, как видно на картинке! 🎉
А как у вас с автоматизацией? Свой сервис уже написали? 😏
#podlodka #android #automation #Ktor #Kotlin
🔥7👍1
🔥 Kotlin 2 и прощате, Backing properties!
Всегда раздражало, что в Kotlin считалось нормальным делать backing properties, пишешь 2 проперти вместо 1. Выглядело как недодизайн. Но теперь в Kotlin 2 это решено! 🎉
Наглядный пример есть в посте от Android Good Reads.
Всегда раздражало, что в Kotlin считалось нормальным делать backing properties, пишешь 2 проперти вместо 1. Выглядело как недодизайн. Но теперь в Kotlin 2 это решено! 🎉
Наглядный пример есть в посте от Android Good Reads.
Telegram
Android Good Reads
Самые интересные статьи, видео и новости, связанные с Android разработкой. Не больше трёх материалов в день.
Размещение рекламы: @tanyasanovna
Автор канала: @Lamprof
Размещение рекламы: @tanyasanovna
Автор канала: @Lamprof
👍5🤩3
Forwarded from Android Good Reads (Anton Kondratiuk)
Одна из причин перейти на Kotlin 2.0 это уменьшение количества кода ради кода. ExplicitBackingFields, как хороший пример
class SomeViewModel {
val city: StateFlow<String>
field = MutableStateFlow("")
fun updateCity(newCity: String) {
city.value = newCity // обрабатывается как MutableStateFlow
}
}
fun outside(vm: SomeViewModel) {
vm.city // обрабатывается как StateFlow, вызов геттера
}👍17🔥11👏1
🚀💻 Из джуна в сеньоры за полгода: миф или реальность?
🔥 С таким заголовком будет проходить дискуссия на канале AI4Dev через 15 минут, в которой меня пригласили быть участником!
⏰ Если есть время — заходите или смотрите потом в записи.
Мне самому интересно, куда зайдёт дискуссия! 🤔
Как бы вы ответили на этот вопрос из заголовка?
#talk #youtube
🔥 С таким заголовком будет проходить дискуссия на канале AI4Dev через 15 минут, в которой меня пригласили быть участником!
⏰ Если есть время — заходите или смотрите потом в записи.
Мне самому интересно, куда зайдёт дискуссия! 🤔
Как бы вы ответили на этот вопрос из заголовка?
#talk #youtube
😁7🔥2🤡1
This media is not supported in your browser
VIEW IN TELEGRAM
🎨 Главное — чтобы было красиво!
Тесты, шместы, архитектура — это всё прекрасно. Но в итоге главное — чтобы было красиво! Я вот вспомнил одну нашу фичу, где надо было сделать кастомный контрол типа табов, которые плавно анимировались, центрировались на выбранном, а потом обратно схлопывались. Всё на Compose, конечно. 💻
И что вы думаете? Контентные паддинги в LazyRow не помогли, игры с отступами тоже. Даже использование horizontalScroll не дало результата. Пришлось думать дальше. 🤔
А как в итоге сделали? Ну, это можно назвать костылём (или нормальным решением, если вам так больше нравится). Добавили "фейковые" элементы в начале и в конце списка и анимировали их размер. 🙃
Используем LazyRow и делаем первый и последний item просто прозрачные Spacer, чтобы создать видимость отступов. Плавно и красиво анимируем их ширину, и всё! 💫 На самом деле не совсем всё: это тянет за собой много всего, чтобы учитывать эти элементы по-особенному (чтобы не кликались, не анимировались, не участвовали в выборе и т.д.).
Как заметили в комментариях, это создает дополнительные рекомпозиции 🫣, что не может радовать. Такой трейдофф решили взять. Но в итоге всё выглядит плавно, аккуратно, ну и просто красиво! 🌟
В комментах я добавлю скриншот кода и видосик — там видно, как это анимируется и центрируется. 🎥
А у вас какие были проблемы из-за красоты? Поделитесь! 😎
#android #compose #ui #lazyrow
Тесты, шместы, архитектура — это всё прекрасно. Но в итоге главное — чтобы было красиво! Я вот вспомнил одну нашу фичу, где надо было сделать кастомный контрол типа табов, которые плавно анимировались, центрировались на выбранном, а потом обратно схлопывались. Всё на Compose, конечно. 💻
И что вы думаете? Контентные паддинги в LazyRow не помогли, игры с отступами тоже. Даже использование horizontalScroll не дало результата. Пришлось думать дальше. 🤔
А как в итоге сделали? Ну, это можно назвать костылём (или нормальным решением, если вам так больше нравится). Добавили "фейковые" элементы в начале и в конце списка и анимировали их размер. 🙃
Используем LazyRow и делаем первый и последний item просто прозрачные Spacer, чтобы создать видимость отступов. Плавно и красиво анимируем их ширину, и всё! 💫 На самом деле не совсем всё: это тянет за собой много всего, чтобы учитывать эти элементы по-особенному (чтобы не кликались, не анимировались, не участвовали в выборе и т.д.).
Как заметили в комментариях, это создает дополнительные рекомпозиции 🫣, что не может радовать. Такой трейдофф решили взять. Но в итоге всё выглядит плавно, аккуратно, ну и просто красиво! 🌟
В комментах я добавлю скриншот кода и видосик — там видно, как это анимируется и центрируется. 🎥
А у вас какие были проблемы из-за красоты? Поделитесь! 😎
#android #compose #ui #lazyrow
👍15💯4🥰1
⚙️ Kotlin in GitHub Actions ⚙️
Совсем скоро Мобиус 2024 Autumn, и я там выступаю с докладом Kotlin in GitHub Actions. Расширяем горизонты KMP. 😎
Я расскажу, как написать свой кастомный GitHub Action на Kotlin/JS: что для этого нужно, как всё работает и какие подводные камни могут встретиться.
Если вы никогда не писали кастомный GitHub Action на Kotlin/JS, но вдруг захотели до моего доклада, то, уверен, потратите прилично времени, чтобы разобраться. 🕵️♂️
А после моего выступления вы точно сделаете это намного быстрее! 🧠
А вы писали когда-нибудь на Kotlin/JS?
#android #kmp #kotlinjs
Совсем скоро Мобиус 2024 Autumn, и я там выступаю с докладом Kotlin in GitHub Actions. Расширяем горизонты KMP. 😎
Я расскажу, как написать свой кастомный GitHub Action на Kotlin/JS: что для этого нужно, как всё работает и какие подводные камни могут встретиться.
Если вы никогда не писали кастомный GitHub Action на Kotlin/JS, но вдруг захотели до моего доклада, то, уверен, потратите прилично времени, чтобы разобраться. 🕵️♂️
А после моего выступления вы точно сделаете это намного быстрее! 🧠
А вы писали когда-нибудь на Kotlin/JS?
#android #kmp #kotlinjs
🔥11👍3
🤩 Билет на Mobius! 🤩
Я разыгрываю билет на Mobius 2024 Autumn!
Условия участия просты: написать сообщение под этим постом, какой доклад вам больше всего хочется послушать!
Чтобы выиграть не обязательно писать, что мой доклад Kotlin in GitHub Actions самый интересный 😅 Победит чистый рандом! 🎰
Билет может быть как онлайн, так и оффлайн, как вы захотите.
Итоги подвожу в четверг 10 октября! 📅
#mobius
Я разыгрываю билет на Mobius 2024 Autumn!
Условия участия просты: написать сообщение под этим постом, какой доклад вам больше всего хочется послушать!
Чтобы выиграть не обязательно писать, что мой доклад Kotlin in GitHub Actions самый интересный 😅 Победит чистый рандом! 🎰
Билет может быть как онлайн, так и оффлайн, как вы захотите.
Итоги подвожу в четверг 10 октября! 📅
#mobius
🔥9👍4😁1
⚡ “Смотрим” на Compose через <clinit>
Я хочу вам рассказать про 2 метода: <init> и <clinit>. 👇
<init> — это метод-конструктор. Каждый раз, когда мы создаем новый объект через new, JVM вызывает этот метод, чтобы инициализировать объект и его поля. 📦
<clinit> — это статический инициализатор класса. Этот метод вызывается, когда класс впервые загружается в память. И да, это происходит только один раз при первой загрузке класса. 🔄
Когда и кем вызывается?
JVM автоматически вызывает <clinit> при первой загрузке класса в память.
А вот <init> вызывается каждый раз, когда вы создаете новый экземпляр класса.
Теперь к интересному! 💡
Смотрите на картинку. Здесь показан запуск Compose-экрана, когда он открывается впервые в приложении, и до этого никакие Compose-функции не были вызваны.
На диаграмме чётко видно, как активно срабатывают <clinit> методы. Это часть подсвечена. Это как раз и есть свидетельство того, что Compose — это unbundled library. Я как-то рассказывал про это на Mobius, но эта картинка показывает это наглядно.
А вот при повторном запуске? Никаких <clinit> уже нет. 🎯
Да, конечно, тут не только классы Compose, но если порыться в методах, то большинство из них типо такие:
androidx.compose.foundation.layout.RowKt.<clinit>
androidx.compose.foundation.layout.ColumnKt.<clinit>
Вывод: При первой загрузке Compose через класс-лоадер загружается больше количество классов. 🚀
P.S. Не забывайте, в закрепе розыгрыш БЕСПЛАТНОГО билета на Mobius! 🎁
#android #compose #kotlin #jvm
Я хочу вам рассказать про 2 метода: <init> и <clinit>. 👇
<init> — это метод-конструктор. Каждый раз, когда мы создаем новый объект через new, JVM вызывает этот метод, чтобы инициализировать объект и его поля. 📦
<clinit> — это статический инициализатор класса. Этот метод вызывается, когда класс впервые загружается в память. И да, это происходит только один раз при первой загрузке класса. 🔄
Когда и кем вызывается?
JVM автоматически вызывает <clinit> при первой загрузке класса в память.
А вот <init> вызывается каждый раз, когда вы создаете новый экземпляр класса.
Теперь к интересному! 💡
Смотрите на картинку. Здесь показан запуск Compose-экрана, когда он открывается впервые в приложении, и до этого никакие Compose-функции не были вызваны.
На диаграмме чётко видно, как активно срабатывают <clinit> методы. Это часть подсвечена. Это как раз и есть свидетельство того, что Compose — это unbundled library. Я как-то рассказывал про это на Mobius, но эта картинка показывает это наглядно.
А вот при повторном запуске? Никаких <clinit> уже нет. 🎯
Да, конечно, тут не только классы Compose, но если порыться в методах, то большинство из них типо такие:
androidx.compose.foundation.layout.RowKt.<clinit>
androidx.compose.foundation.layout.ColumnKt.<clinit>
Вывод: При первой загрузке Compose через класс-лоадер загружается больше количество классов. 🚀
P.S. Не забывайте, в закрепе розыгрыш БЕСПЛАТНОГО билета на Mobius! 🎁
#android #compose #kotlin #jvm
👍8🔥6
📜 Ваш любимый логгер! 📜
Мы в своих Android-проектах давно логируем через SLF4J/Logback Android. Да, да, это тот самый проверенный временем логгер.
🎯 У него есть плюсы: Надежный (не считая истории с CVE-2023-6481, но там речь про классический, а не android), стабильный, с хорошей поддержкой форматов логирования. Работает без сюрпризов, настройки для форматирования и фильтрации логов. В общем по функционалу всё нравится.
❗ Но есть главный минус: Увы, только для Android. Не подходит для KMP, да и по гибкости проигрывает более свежим решениям.
Я понимаю, что SLF4J/Logback — это не самый гибкий и современный подход, особенно если ваши проекты уже идут в стороны Kotlin Multiplatform.
А как у вас с логированием дела обстоят? 😎
- Logback Android, как у нас?
- Может быть Timber?
- Или уже думаете о будущем и логируете с помощью 🦸♂️Napier или 🐸Kermit?
- Или, может, у вас есть свой подход?
Поделитесь, очень интересно узнать! 👀
P.S. Не забывай! В закрепе БЕСПЛАТНЫЙ билет на 🟢Mobius🟢! 🎁 Успейте до четверга!
#android #kmp #logging
Мы в своих Android-проектах давно логируем через SLF4J/Logback Android. Да, да, это тот самый проверенный временем логгер.
🎯 У него есть плюсы: Надежный (не считая истории с CVE-2023-6481, но там речь про классический, а не android), стабильный, с хорошей поддержкой форматов логирования. Работает без сюрпризов, настройки для форматирования и фильтрации логов. В общем по функционалу всё нравится.
❗ Но есть главный минус: Увы, только для Android. Не подходит для KMP, да и по гибкости проигрывает более свежим решениям.
Я понимаю, что SLF4J/Logback — это не самый гибкий и современный подход, особенно если ваши проекты уже идут в стороны Kotlin Multiplatform.
А как у вас с логированием дела обстоят? 😎
- Logback Android, как у нас?
- Может быть Timber?
- Или уже думаете о будущем и логируете с помощью 🦸♂️Napier или 🐸Kermit?
- Или, может, у вас есть свой подход?
Поделитесь, очень интересно узнать! 👀
P.S. Не забывай! В закрепе БЕСПЛАТНЫЙ билет на 🟢Mobius🟢! 🎁 Успейте до четверга!
#android #kmp #logging
✍5🤓1
🔥 Топ ожидаемых докладов 🔥
Недавно я запустил конкурс на бесплатный билет на Mobius (у вас еще остался 1 день, завтра днем крутану рандомайзер 🎰), и я попросил написать, какие доклады вы ждете больше всего. Кто-то написал 1 доклад, кто-то несколько. Я учел и посчитал все упоминания.
🎤 И вот самые ожидаемые доклады по версии подписчиков Мобильное чтиво:
Первое место разделили:
🥇 Не два байта переслать: эмуляция бесконтактных карт на мобильных устройствах
Павел Васильев, Positive Technologies
🥇Что не так с мобильными сервисами в Android и iOS
Кирилл Розов, Android Broadcast
🥇Kotlin in GitHub Actions. Расширяем горизонты KMP
Максим Качинкин, Dodo Engineering
Эти доклады набрали по 5 голосов.
Могу предположить, что мой доклад упоминали, потому что я веду этот канал 😏. Поэтому вот доклады, которые на 2м месте — они набрали по 4 голоса. Тоже очень ожидаемые!
Второе место:
🥈 Compose и SwiftUI: найди 10 отличий
Алексей Панов, Контур
🥈 Опасности в Android: уязвимости и защитные меры
Юлия Стекачева, Райффайзен Банк
🥈 Предпринимательство для инженера: как запустить свою компанию
Евгений Мацюк, MarathonLabs
🥈 Суперапп с чистого листа
Сергей Балалаев, Ozon
Все вышеперечисленные доклады я тоже хочу посмотреть. Но я еще добавлю от себя, что мне интересно.
Я жду вот эти 2:
🚀 Заезжаем в KMP. Но какой ценой?
Денис Александров, Яндекс 360
🚀 Последнее слово в Android-навигации
Данил Колесников, Дзен
#Mobius2024 #Android
Недавно я запустил конкурс на бесплатный билет на Mobius (у вас еще остался 1 день, завтра днем крутану рандомайзер 🎰), и я попросил написать, какие доклады вы ждете больше всего. Кто-то написал 1 доклад, кто-то несколько. Я учел и посчитал все упоминания.
🎤 И вот самые ожидаемые доклады по версии подписчиков Мобильное чтиво:
Первое место разделили:
🥇 Не два байта переслать: эмуляция бесконтактных карт на мобильных устройствах
Павел Васильев, Positive Technologies
🥇Что не так с мобильными сервисами в Android и iOS
Кирилл Розов, Android Broadcast
🥇Kotlin in GitHub Actions. Расширяем горизонты KMP
Максим Качинкин, Dodo Engineering
Эти доклады набрали по 5 голосов.
Могу предположить, что мой доклад упоминали, потому что я веду этот канал 😏. Поэтому вот доклады, которые на 2м месте — они набрали по 4 голоса. Тоже очень ожидаемые!
Второе место:
🥈 Compose и SwiftUI: найди 10 отличий
Алексей Панов, Контур
🥈 Опасности в Android: уязвимости и защитные меры
Юлия Стекачева, Райффайзен Банк
🥈 Предпринимательство для инженера: как запустить свою компанию
Евгений Мацюк, MarathonLabs
🥈 Суперапп с чистого листа
Сергей Балалаев, Ozon
Все вышеперечисленные доклады я тоже хочу посмотреть. Но я еще добавлю от себя, что мне интересно.
Я жду вот эти 2:
🚀 Заезжаем в KMP. Но какой ценой?
Денис Александров, Яндекс 360
🚀 Последнее слово в Android-навигации
Данил Колесников, Дзен
#Mobius2024 #Android
❤5👍2🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
🔥15👍1😁1
🤣 Пятничный мем 🤣
Сегодня выступил на Mobius на online дне. Про само выступление напишу потом. Сегодня просто легкий пятничный пост.
Как я готовился к выступлению с визуальной части. Есть 3 момента:
- Мне нравится рассказывать стоя. Так я чувствую себя более динамично и бодро. 💪
- Хочется, чтобы фон был красивый. 🎨
- У меня нет стола с регулировкой высоты, поэтому приходится что-то придумывать. 🤔
Для этого я нашел стену, обустроил её как надо (бахнул на телек красивую картинку), а чтобы встать рядом с ней стоя, пришлось соорудить конструкцию из того, что попалось под руку (включая коробку из-под обуви). И, конечно, надо поставить кружку воды, мобилу и прочее. 📱☕️
И получился мем:
Frontend - Backend 😄
#mobius #meme #пятница
Сегодня выступил на Mobius на online дне. Про само выступление напишу потом. Сегодня просто легкий пятничный пост.
Как я готовился к выступлению с визуальной части. Есть 3 момента:
- Мне нравится рассказывать стоя. Так я чувствую себя более динамично и бодро. 💪
- Хочется, чтобы фон был красивый. 🎨
- У меня нет стола с регулировкой высоты, поэтому приходится что-то придумывать. 🤔
Для этого я нашел стену, обустроил её как надо (бахнул на телек красивую картинку), а чтобы встать рядом с ней стоя, пришлось соорудить конструкцию из того, что попалось под руку (включая коробку из-под обуви). И, конечно, надо поставить кружку воды, мобилу и прочее. 📱☕️
И получился мем:
Frontend - Backend 😄
#mobius #meme #пятница
😁29🔥6👍4🤣4❤1
📅 Как проходит мой рабочий день 🏃♂️
Вышла статья из рубрики “День с экспертом” на SkillFactory Media. Там я рассказываю про свой типичный рабочий день.
Из интересного и про мобильную разработку я рассказываю, что:
• у нас есть правило на короткие PRы 📝
• мы работаем по Trunk-Based Development 🌳
• я люблю парное программирование, но удается применять его редко 👨💻👩💻
• подставка под ноут — это маст 📦
• каждый день кормлю уличных котов🙂
Заголовок и тон статьи может вызвать подозрение на тупые понты или что я собрался продавать мастер-классы “Эффективная эффективность: успевайте всё как я”. Знайте, такого намерения не было. 😅
💬 Мне интересно, а что у вас любимое в вашем рабочем дне? Или наоборот, что вас бесит?
Вышла статья из рубрики “День с экспертом” на SkillFactory Media. Там я рассказываю про свой типичный рабочий день.
Из интересного и про мобильную разработку я рассказываю, что:
• у нас есть правило на короткие PRы 📝
• мы работаем по Trunk-Based Development 🌳
• я люблю парное программирование, но удается применять его редко 👨💻👩💻
• подставка под ноут — это маст 📦
• каждый день кормлю уличных котов
Заголовок и тон статьи может вызвать подозрение на тупые понты или что я собрался продавать мастер-классы “Эффективная эффективность: успевайте всё как я”. Знайте, такого намерения не было. 😅
💬 Мне интересно, а что у вас любимое в вашем рабочем дне? Или наоборот, что вас бесит?
Please open Telegram to view this post
VIEW IN TELEGRAM
Skillfactory media
«Большую часть времени я занят программированием, и это приносит мне удовольствие»: техлид Android-разработки из Dodo Brands о…
Велосипедные прогулки по Алании и семья котов
👍8🔥2🍌2😁1🙈1
🇦🇲 Увидимся на DevFest в Ереване 🇦🇲
В это воскресенье, 20 октября, в Ереване пройдет DevFest Armenia 2024!
Я буду выступать там (да, оффлайн) с докладом:
Compose as an Unbundled Library: What It Means for Your App.
Подписчики этого канала знают, что на эту тему я делал посты здесь и ни раз. Вот теперь расскажу целиком вслух:
🐣 Что значит unbundled library
📏 Как замерять UI перфоманс
⏱️ Как можно оптимизировать Compose, если все-таки столкнулись с долгой первой загрузкой
Если вдруг кто есть в Ереване, го на DevFest, пообщаемся!
#devfest #yerevan #compose
В это воскресенье, 20 октября, в Ереване пройдет DevFest Armenia 2024!
Я буду выступать там (да, оффлайн) с докладом:
Compose as an Unbundled Library: What It Means for Your App.
Подписчики этого канала знают, что на эту тему я делал посты здесь и ни раз. Вот теперь расскажу целиком вслух:
🐣 Что значит unbundled library
📏 Как замерять UI перфоманс
⏱️ Как можно оптимизировать Compose, если все-таки столкнулись с долгой первой загрузкой
Если вдруг кто есть в Ереване, го на DevFest, пообщаемся!
#devfest #yerevan #compose
🔥12❤2👍1