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
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
Результаты конкурса + новый конкурс
1 место @SergeyFilichkin
2 место @QAconqueror
3 место @michaelbel

(больше никто вопросов не закинул, хотя была возможность бесплатно оказаться на 4 и 5 месте или получить 50usdt. Они возвращаются в общий пул аукциона менторов)

Конкурс на следующий месяц:

Репост моих видео на ютубе себе в каналы телеграма

Можно репостнуть пост из ОМ целиком. Можно написать свой текст и опубликовать его, вставив ссылку на видео. Если вам удастся разместить ссылку на видео в чужом крупном канале и вы сможете это подтвердить, мы засчитаем эти голоса.

Результат будет подсчитываться сложением счетчика просмотров телеграмма. Например:
1. Репост одного видео — 4395 просмотров
2. Репост трёх видео — в сумме всех репостов 4028 просмотров
Победил канал под №1

5 победителей по большему количеству просмотров получают на выбор что-то одно:
- место в топе таблицы менторов
- 50 usdt (5к рублей)
- подписку Волчара на сообщество на полгода

За Анонсами видео следите в телеграм канале Осознанная меркантильность
IT менторы - отзывы на офферы
Результаты конкурса + новый конкурс 1 место @SergeyFilichkin 2 место @QAconqueror 3 место @michaelbel (больше никто вопросов не закинул, хотя была возможность бесплатно оказаться на 4 и 5 месте или получить 50usdt. Они возвращаются в общий пул аукциона менторов)…
🥉Занял 3 место в конкурсе ОМ. Для этого в октябре добавил в бота 15 собеседований и 542 вопроса. Почти все с ответами. Успел устать от темы трудоустройства, скоро переключусь на новые идеи!
Please open Telegram to view this post
VIEW IN TELEGRAM
5321
🐗 Два месяца решаю литкод

За этот месяц решена 31 задача уровня изи. 9 решений выбили 100% по времени выполнения. Удивительным открытием стало наличие задач: «Напиши SQL-запрос, чтобы вытащить фамилию человека из таблицы Person» или «Напиши bash-скрипт для вывода телефонных номеров из текстового файла». Пока такое пропускаю.

Поднялся (или опустился) в рейтинге с 3 000 000+ места до 1 408 767. Также мне влепили почетный бейдж 50 Days Badge 2024 за полтора месяца решения задачек.

Многие задачи решаются при помощи рекурсии. Хотя в обычной практике ни разу ее не применял. Знаешь ли ты про такой оператор в котлин как tilerec?

Еще мне написал какой-то тип, чтобы заскамить на покупку футболки с моими квадратиками на гитхабе. Разве этим кого-то впечатлишь? Статистика там рисуется одним скриптом. Приглашаю через год посмотреть на мой литкод.

#leetcode@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
521