Android | Михаил Белый
310 subscribers
272 photos
32 videos
127 links
Авторская песочница о карьере в IT в роли Mobile Dev (Android, Kotlin, Multiplatform) и разных вещах, которые мне интересны.

Посты каждый день в 5 вечера.

Автор: @michaelbel

Забустить: t.me/boost/foundout

Задонатить: boosty.to/michaelbel
Download Telegram
🐗🐗 Обновление карьерного роадмапа

Из визуального:

Новые иконки и сочные обложки для каждой страницы. Единый стиль заголовков. Ссылки на статьи и видосы стали меншенами и теперь сопровождаются датой публикации.

По разделам:

🐗 Job Interview
Список ключевых навыков для резюме.
Вопросы по cultural fit.
Вопросы будущему руководителю.
Больше моков по system design + вопросы/ответы.
Асимптотика алгоритмов сортировки.
Задачи «‎что произойдет»‎ на лайвкодинг.

🐗 Kotlin
Битовые операторы: shl, shr, ushr.
Функции валидации аргументов: require, check, error.
Все варианты применения Object.
Про корутины: supervisorScope, withTimeout, Channel.
Про StateFlow: update, collectAsState, collectAsStateWithLifecycle.
Бестпрактисы по KMP, как пересесть с Java, какие androidx-библиотеки уже переехали.
Инструкция как генерировать мультиплатформенные ресурсы, запускать и паковать WebApp.

🐗 Java
Иерархия исключений.
Примеры лямбд.
Iterator в коллекциях. HashMap vs Hashtable.
Young vs Old Generation в мусорке, подробнее про StrongReference и PhantomReference.
Java Memory Model, Happens Before, стек, куча, мьютекс, монитор, семафор, deadlock, race condition, stop the world и другие страшные вещи.

🐗 Compose
Аннотации Stable и Immutable.
compositionLocalOf vs staticCompositionLocalOf.
nestedScrollConnection.

🐗 Android
Добавились 2 графических роадмапа.
Параметры манифеста.
Вопросы про пермишены и сервисы.
Новые коллекции: ScatterMap, ObjectFloatMap, IntIntPair.
Вопросы и ответы про отрисовку и состояние View.
Про RenderThread и частоту отрисовки UI.
Плюсы/минусы/различия MVP/MVI/MVVM.
Про подключение зависимостей и модулей: implementation, api, compileOnly, runtimeOnly.
DI vs Service locator.
Добавилась страничка для ExoPlayer.

🐗 Jetpack
Подробное описание Hilt: Multibindings, Singleton, Subcomponent, Binds vs Provides, Component vs Module.
Про SavedStateHandle у ViewModel.
Аннотации в Room.

🐗 Studio
Инструкция как выделить под студию больше памяти.

🐗 Git
Ссылка на бесплатный курс по Git.
Инструкция как развернуть свой web-проект на Github Pages.

🐗 Samples
Тип и краткое описание для всех проектов и библиотек.
Добавились новые проекты.

Дальнейшие планы:

• Оптимизации в Compose.
• Внутренности корутин.
• Многопоточность в JVM.
• Алгоритмы и структуры данных.
• Мультиплатформа: iOS, Desktop и Web.

🐗 ОТКРЫТЬ В NOTION

#roadmap@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
11631
🐗 Несколько новостей про эмодзипак

1. Cтарый набор со 160 иконками в формате PNG перестает обновляться.

2. Ему на замену приходят новые эмодзипаки: РАЗ и ДВА. 400 эмодзи в высоком разрешении. Первый набор про мобильную разработку, второй про техсферу в целом.

Если грузить эмодзи в форматах PNG или WEBP качество будет страдать. Чтобы это исправить, в телеге придумали собственный формат TGS для анимированных стикеров и эмодзи (по сути переупакованный плагином SVG). Грузим статику под видом анимации и на выходе получаем уже не стыдный материал. Также у телеги обнаружилось ограничение на 200 эмодзи в одном паке, поэтому теперь их два.

Новинки:

Apple:
🐗🐗🐗🐗🐗🐗🐗🐗🐗🐗

Microsoft:
🐗🐗🐗🐗🐗🐗🐗🐗🐗🐗

Производители техники:
🐗🐗🐗🐗🐗🐗🐗🐗🐗🐗

Клепатели смартфонов:
🐗🐗🐗🐗🐗🐗🐗🐗🐗🐗

Игровые студии:
🐗🐗🐗🐗🐗🐗🐗🐗🐗🐗

Крипта и эквайринг:
🐗🐗🐗🐗🐗🐗🐗🐗🐗🐗

Языки:
🐗🐗🐗🐗🐗🐗🐗🐗🐗🐗

IDE-шки:
🐗🐗🐗🐗🐗🐗🐗🐗🐗🐗

#emoji@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
5221
Media is too big
VIEW IN TELEGRAM
🐗 Сайт MobileDevEmoji

У эмодзипака появился свой сайт! Работает во всех браузерах 🐗🐗🐗🐗🐗🐗.

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

Главная фича – возможность кликнуть на эмодзи и получить название продукта. Например, тебе не понятно, что за голубой хомчик 🐗 затесался слева в шестом ряду. Тык и вуаля – перед нами маскот языка программирования Go. Пойман и опознан.

michaelbel.github.io/MobileDevEmoji

#emoji@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
4211
Настроить айфон

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

НастройкиЗвуки и вибрацияОтклик клавиатурыТактильные сигналы🐗
Поразительно, что такая великолепная вещь как виброотклик клавы при наборе текста появилась в iOS только в 2022 году! Я когда перешел с андроида, недоумевал как можно без этой штуки печатать текст.

НастройкиУниверсальный доступКасаниеТактильное касаниеБыстро
Лонгтап во всей системе станет быстрым. Наша жизнь ускоряется, нет сил ждать целую секунду пока интерфейс одумается.

НастройкиЭкран и яркостьПоднятие для активации🐗
Экран будет включаться, когда берешь айфон в руки. Если можно не делать лишний тап по экрану - я его не делаю.

НастройкиКамераУровень🐗
Горизонт на фоточках будет ровным.

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

НастройкиЗвуки и вибрацияБезопасность наушниковГромкость аудио тише🐗
Хочется, чтобы во время тренировки музыка наваливала погромче. А эппл со своей гиперзаботой не мешал.

НастройкиApp StoreОценки и отзывы🐗
Больше ни одно приложение не будет клянчить себе оценку в сторе.
Please open Telegram to view this post
VIEW IN TELEGRAM
511
🐗🐗 Обновление карьерного роадмапа

• Список вложенных страниц переместился наверх.
• Добавились вопросы с собесов в те разделы, где их не было.
• Алгоритмическая секция переехала в отдельный раздел.

🐗 Job Interview
Добавлен роадмап тимлида.
Как себя вести на лайвкодинге?
Добавлены новые задачи на лайвкодинг.
Добавлены решения для существующих задач на лайвкодинг.

🐗 Algorithms
Временная и пространственная сложность.
О-Нотация.
Оптимизация алгоритма.
Структуры данных.
Бинарный поиск.
Бинарное дерево.
Красно-черное дерево.
Подробное описание решения 13 задач с литкода:
Строки: Longest Common Prefix, Roman to Integer, Valid Anagram, Reverse String.
Массивы: Two Sum.
Связные списки: Linked List Cycle, Merge Two Sorted Lists, Reverse Linked List.
Математические задачи: Palindrome Number.
Манипуляция с битами: Single Number.
Бинарный поиск: Sqrt(x).
Префиксные суммы: Running Sum of 1d Array.
Стек: Valid Parentheses.

🐗 Kotlin
Channels переехали на отдельную страницу.
Описание Rendezvous, Buffered и Conflated channels. Операторы send, receive, offer, poll.
Kotlin Contracts.
Оператор ::.
Делегаты: observable, vetoable и map.
Дженерики: star-projection.
Логические битовые операции: and, or, xor.
Битовые методы: inv, countOneBits, countLeadingZeroBits, countTrailingZeroBits, takeHighestOneBit, takeLowestOneBit, rotateLeft, rotateRight.
Локальные функции.
Data Class: сопоставление с образом.
Coroutines: Жизненный цикл Job и описание методов: start, join, cancel, cancelAndJoin, isActive, isCancelled, isCompleted, invokeOnCompletion.

🐗 Java
Boxing и Unboxing примитивов в обертки.
Object: описание методов wait, notify, notifyAll.
ReentrantLock.
HashMap: сложность операций.

🐗 Compose
Функция mutableStateListOf.
Снапшоты: SnapshotStateList, Snapshot, snapshotFlow.
UI Components: полный список всех Compose-компонентов.

🐗 Android
Отдельная страничка для Fragment.
Описание всех видов Drawable.
Как сделать обмен данных между Activity и Service.
Зачем нужен Choreographer.
Как работает Bundle в транзакциях.
Подробно про метод onMeasure у View.
Network: SSL pinning.
Build: Компоненты APK, структура, как уменьшить размер, как взломать. Zygote. Doze Mode, различия miSdk, compileSdk и targetSdk.
XML-теги <merge> и <include>.
LayoutInflater.
Явный и неявный BroadcastReceiver.

🐗 Jetpack
Обновилась страничка про ViewBinding.

🐗 Studio
Инструкция: отключение отображения имен параметров в коде.

🐗 Git
Команды поделены на разделы: настройка, работа с репозиторием, работа с ветками, работа с удаленным репозиторием, история и отмена изменений, работа с тегами, продвинутые команды.
Подробное описание файла .gitignore: расположение, формат, настройка для android-проекта.

🐗 Samples
Список библиотек и приложений разделен на android и kotlin-multiplatform.

🐗 ОТКРЫТЬ В NOTION

#roadmap@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
13111
Как делать сайт на Kotlin + Compose

С какими проблемами придется столкнуться. И как их решать.

Обо всем этом в небольшом посте с картинками, видосиками и кусками кода.

🐗 Читать на Boosty

#emoji
Please open Telegram to view this post
VIEW IN TELEGRAM
1133
🐗 Обновление эмодзипака

200 НОВЫХ ИКОНОК

Новинки:

🐗 Duolingo

🐗🐗🐗 Такси

🐗🐗🐗 Работа

🐗 Apple Pkl

🐗🐗🐗 Android

🐗 Google Wallet

🐗 Google I/O

🐗 Google Play Services

🐗 Fuchsia

🐗 Kubernetes

🐗🐗🐗 Microsoft

🐗🐗🐗 CI

🐗🐗 Obsidian

🐗 Airtable

🐗 Calendly

🐗🐗🐗🐗 Крипта

🐗 Solidity

🐗 Codewars

🐗 LeetCode

🐗 HuckerRank

🐗 Haskell

🐗 Qt

🐗 SyanogenMod

🐗 LineageOS

🐗 HarmonyOS

🐗 Mi Home

🐗 Eclipse

🐗 Buy Me a Coffee

🐗 DonationAlerts

🐗 Clubhouse (забыл про него)

🐗 Proton Mail

🐗 Medium

🐗 Redis

🐗 Gitea

🐗 Dependabot

🐗 Atlassian

🐗 Ruby on Rails

и другие.

НАБОР 1НАБОР 2САЙТ

#emoji@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
521
🐗🐗 Обновление карьерного роадмапа

• В блоке «вопросы на собесе» добавились вопросы с вариантами ответа, чтобы нас запутать (+ правильный ответ). Также добавились новые вопросы и лаконичные ответы на них.
• Ускорилась загрузка страниц за счет оптимизации картинок.

🐗 Job Interview
Новая страница – Скрининг от HR c вопросиками про прошлый опыт и будущую работу.
Пополнился список ключевых навыков для резюме.

🐗 Algorithms
Решение 10 задач с литкода:
• Строки: Find the Index of the First Occurrence in a String, Length of Last Word, Valid Palindrome.
• Массивы: Remove Duplicates from Sorted Array, Remove Element, How Many Numbers Are Smaller Than the Current Number, Sum of Unique Elements, Merge Sorted Array.
• Связные списки: Remove Duplicates from Sorted List.
• Бинарный поиск: Search Insert Position.

🐗 Kotlin
Обновлено описание Sequences: отличие от коллекций, методы asSequence, map, filter, generateSequence.
Обновлено описание Coroutine Dispatchers, CoroutineName, билдеров launch и async, функций runCatching и runBlocking, suspend и Continuation.
Функция suspendCoroutine.
Синхронизация в корутинах, класс Mutex.
Обновлено описание метода collect у Flow.
Обновлено описание inline-функций и reified.
Обновлено описание sealed class.
Ограничения у Extension Functions.
Подробнее про методы data-класса.
Обновлено описание аннотаций @JvmStatic, @JvmOverloads, @JvmField и @JvmInline.
Добавлено описание аннотаций @JvmName, @JvmSynthetic и @JvmDefault.

🐗 Java
GC: Reference Counting.
ThreadPool: FixedThreadPool, CachedThreadPool, SingleThreadExecutor, ScheduledThreadPool.
Что такое String Pool.
Инфа про алгоритмическую сложность операций доступа/вставки/удаления элементов в ArrayList и LinkedList.

🐗 RxJava
Операторы управления потоками: doOnNext, doOnComplete, doOnError, doAfterTerminate, doOnDispose.
Операторы трансформации: just, fromIterable, filter, skip, skipLast, take, takeLast, concat, combineLatest, join, onErrorResumeNext, onErrorReturnItem, retry, retryWhen, delay, debounce, scan.

🐗 Android
Обновлен раздел про ООП - теперь с примерами кода: class, abstract class, interface, наследование, композиция, агрегация.
Обновлено описание принципов SOLID.
Что такое сигнатура метода.
Как работает UDF.
Reducer и Middleware в MVI.
Приоритеты процессов в Android.
Аннотации для потоков @MainThread, @UiThread и @WorkerThread.
View: методы invalidate, postInvalidate, requestLayout, forceLayout, onLayout.
MotionLayout.
ViewStub.
WebView.
Сервисы: Bound, IBinder, onBind, onUnbind.
Activity: ActivityManager и его методы, taskAffinity, OnBackPressedDispatcher, TaskStackBuilder, Launch Modes.
Фрагменты: методы add и replace.
AsyncLayoutInflater и параметр attachToRoot.

🐗 Jetpack
Обновлен раздел про Hilt: Scopes, ленивая инициализация через Lazy и Provider, аннотации @Named, @Qualifier, @IntoSet, @IntoMap, @Subcomponent, @Binds и @Provides.

🐗 Compose
Adaptive Layouts: BoxWithConstraints, NavigationSuiteScaffold, ListDetailPaneScaffold, SupportingPaneScaffold, NavigableListDetailPaneScaffold.
Обновлен раздел про рекомпозицию и жизненный цикл Composable-функций.
Обновлено описание SideEffects.
BackHandler.

🐗 ОТКРЫТЬ В NOTION

#roadmap@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
6321
🐗 Месяц решаю литкод

Стал ли я умнее? Отнюдь.

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

Задачи на алгосы редко спрашивают на собеседованиях. Чаще дают лайв-кодинг а-ля джун накостылял и ушел в отпуск - разбирайся. Но спрашивают. Например, в Озоне, Авито и Сбере. Попутно с собесами начал готовиться. Каждый день по задаче уровня изи. Первые откровения:

• Алгоритмы работают со структурами данных: массив, связный список, стек, очередь, хэш-таблица, дерево, граф, куча и др. Логичнее сначала минимально разобраться в их устройстве. Например, в связном списке элементы хранят ссылку на следующий/предыдущий элементы. А в очереди элементы добавляются в конец и удаляются из начала.

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

• Чтобы упростить себе жизнь, для вычисления сложности придумали О-Нотацию. Я на начальной стадии ее понимания.

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

В категории изи на литкоде в первой сотне преобладают задачи на массивы, связные списки и деревья. Вопреки ожиданию, "вертеть деревья" оказалось весьма просто: поиск минимальной глубины дерева, определение сбалансированности. Моя любимая категория теперь.

Непосредственно о собесах: если мне сейчас дать поискать самый длинный палиндром в строке, только зря потрачу время интервьюера. Но со второго раза мой велосипед поедет. Проблема в том, что время не бесконечное, как и количество вакансий на рынке. Поэтому работающая рекомендация: сделать минимальный предтрен ChatGPT (язык, код с комментами, воды поменьше, оплаченный лимит) и быстрыми ручками скормить ему скриншот алгоритмической задачи из яндекс кода или куда направят на интервью. Только не копируй условие, а делай скриншот.

Если времени на выявление общих закономерностей и структур больше: плейлист тренировка по алгоритмам яндекса, курс основы алгоритмов, курс подготовка к алгоритмическому собеседованию.

Увидимся через месяц 🦕

#leetcode@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
5211
🐗🐗 Обновление карьерного роадмапа

• Теперь для всех 682 вопросов в блоке Вопросы на собесе доступны правильные ответы.

🐗 Algorithms
Решение 20 задач с литкода:
• Строки: Add Binary.
• Массивы: Plus One, Pascal's Triangle, Pascal's Triangle II, Best Time to Buy and Sell Stock, Majority Element.
• Связные списки: Intersection of Two Linked Lists.
• Математика: Climbing Stairs, Excel Sheet Column Title, Excel Sheet Column Number.
• Манипуляции с битами: Reverse Bits.
• Деревья: Binary Tree Inorder Traversal, Same Tree, Symmetric Tree, Maximum Depth of Binary Tree, Convert Sorted Array to Binary Search Tree, Balanced Binary Tree, Minimum Depth of Binary Tree, Path Sum, Binary Tree Preorder Traversal, Binary Tree Postorder Traversal.

🐗 Computer Science
Новый раздел.

🐗 System Design
Упорядочены текущие задачи.
Добавлены 2 новые задачи.

🐗 Live Coding
Упорядочены текущие задачи.
Добавлено 14 новых задач.

🐗 Soft
Добавлена 1 новая задача.

🐗 Java
Отдельная страница для Object.
Отдельная страница для атомарных классов: AtomicInteger, AtomicLong, AtomicBoolean, AtomicReference, AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray, AtomicMarkableReference, AtomicStampedReference.
Виды клонирования.
ReadWriteLock.
CountDownLatch.
CyclicBarrier.
Обновлено описание коллекций: Set, HashSet, LinkedHashSet, TreeSet, SortedSet, NavigableSet.

🐗 Kotlin
Функции высшего порядка.
Анонимные функции.
Coroutines: joinAll, yield, ensureActive, limitedParallelism.
Flow: chunked.
Scope: takeIf, takeUnless, repeat, todo, this, it.
Улучшено описание null safety, if, varargs, lateinit, const, var, val, get, set, tilerec, do, while, for, break, continue.
Обновлена страница Object: data object, companion object, анонимные объекты, объектные выражения.
Добавлены операторы для коллекций.

🐗 Kotlin Multiplatform
Переехал в отдельный раздел.

🐗 Android
Обновлено описание Intent: Intent Resolution, Intent Filters, мутабельный и иммутабельный PendingIntent.
Отдельная страница для RecyclerView.
Добавился контент про тестирование.
Network: REST, Header, Body, Path, Query, Get, Post, Put, Patch, Delete.
Архитектура: DRY, KISS, YAGNI, Trunk Based Development.
BroadcastReceiver: системные типы.
Activity: isFinishing.

🐗 Jetpack
Новая страница Media3.

🐗 Compose
Отдельная страница для CompositionLocal.
Описание Layout.

🐗 Gradle
Отдельный раздел.

🐗 Samples
Добавлено 7 Android-библиотек.
Добавлено 6 KMP-библиотек.

🐗 ОТКРЫТЬ В NOTION

#roadmap@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
15211
Вышел на рынок

Первая статья про собеседования на мобильного Android-разрабатывателя в 2024 году.

Месяц назад вышел на рынок. Прошел собеседования в 29 компаний. Везде просил полную удаленку, печеньки и минимальную зарплату 400 000₽. Что из этого получилось, ожидания от рынка, что хотел, где искал, процесс, личная статистика, экономическая картина и предварительные выводы в статье:

🐗 Читать на Boosty
Please open Telegram to view this post
VIEW IN TELEGRAM
2222
✍️ Что спрашивают на первичном скрининге и зачем

Вторая статья про Android-собеседования. А именно про этап hr-скрининга.

Статистика, описание формата, все вопросы которые спрашивают, что хотят услышать в ответ и какие вопросы можно задать самому.

🐗 Читать на Boosty
Please open Telegram to view this post
VIEW IN TELEGRAM
10211