Как устроен Android. Частый вопрос на собеседованиях.
Сегодня посмотрим на то, как внутри устроена ОС Android. Этот вопрос частенько задают на собеседованиях. Мне правда задавали его только один раз, но ходят слухи, что в хороших компаниях это спрашивают.
Специально для вас нарисовала картинку. В душе я дизайнер, так что надеюсь, вы оценили сочетание цветов. Не бойтесь, если она выглядит страшновато из-за непонятных слов (не из-за дизайна!). :)
Мы смотрим только основные элементы. Если хотите ещё подробнее разобраться, то пишите. Мб когда-нибудь посмотрю.
Каждый верхний уровень использует нижний уровень, который находится под ним.
Начнём снизу:
• Ядро Linux — ОС Android основана на ОС Linux. Что тут происходит? Это собственно ядро ОС, которое позволяет приложениям (которые мы пишем) использовать всякие функции устройства: звук, видео, сеть и т.п. Также тут происходит управление потоками и процессами. Каждое приложение создаётся в своём процессе и в своей среде выполнения. Внутри одного процесса может быть несколько потоков. Именно на этом розовом уровне решается, сколько времени получит процесс и потоки.
• Среда выполнения — это такая среда, которая выполняет скомпилированный байт-код в виртуальной машине Android-приложения. У каждого приложения своя среда выполнения. Раньше это был Dalvik, а теперь ART (после API 19).
• Системные библиотеки — тут всякие библиотеки, которые работают с графикой, базами данных, системными ресурсами и т.п. Эти библиотеки обычно написаны на С/С++. Мы, как разработчики обычных Android-приложений, напрямую не работаем с системными библиотеками. Прикладная среда (фиолетовый слой выше) даёт нам для этого обёртки, которые написаны на Java. Это то, что мы обычно используем в нашем коде.
• Прикладная среда — подходим уже ближе к самому андроиду. Тут различные классы Android для работы со всем, что нужно для написания приложения (ресурсы, компоненты и т.п.). Здесь определяются жизненные циклы и взаимодействие компонентов друг с другом. Тут же у нас находятся всякие интересные штуки для асинхронного выполнения: Handler, IntentService, AsyncTask, Loaders и дп.
• Ядро Java — библиотеки Java, которые мы используем в наших приложениях и которые используются в прикладной среде. Например, java.lang и java.util.
• Приложения — наши обычные приложения, которые мы пишем. Тут мы можем использовать уровень ниже: прикладную среду и ядро Java.
Как видите, всё гораздо проще, чем могло показаться. Если совсем кратко: наши приложения используют прикладную среду для написания самого кода и ядро Java, которое предоставляет нам обёртки для системных библиотеки. Системные библиотеки написаны на си и там происходит работа с графикой и другими сложными вещами, которые как-то взаимодействуют с системой, т.е. с телефоном/планшетом и т.п.
И чуть-чуть в стороне есть среда выполнения, которая заставляет наше приложение работать. И создаётся эта среда выполнения на нижнем слое в ядре Linux.
Сегодня посмотрим на то, как внутри устроена ОС Android. Этот вопрос частенько задают на собеседованиях. Мне правда задавали его только один раз, но ходят слухи, что в хороших компаниях это спрашивают.
Специально для вас нарисовала картинку. В душе я дизайнер, так что надеюсь, вы оценили сочетание цветов. Не бойтесь, если она выглядит страшновато из-за непонятных слов (не из-за дизайна!). :)
Мы смотрим только основные элементы. Если хотите ещё подробнее разобраться, то пишите. Мб когда-нибудь посмотрю.
Каждый верхний уровень использует нижний уровень, который находится под ним.
Начнём снизу:
• Ядро Linux — ОС Android основана на ОС Linux. Что тут происходит? Это собственно ядро ОС, которое позволяет приложениям (которые мы пишем) использовать всякие функции устройства: звук, видео, сеть и т.п. Также тут происходит управление потоками и процессами. Каждое приложение создаётся в своём процессе и в своей среде выполнения. Внутри одного процесса может быть несколько потоков. Именно на этом розовом уровне решается, сколько времени получит процесс и потоки.
• Среда выполнения — это такая среда, которая выполняет скомпилированный байт-код в виртуальной машине Android-приложения. У каждого приложения своя среда выполнения. Раньше это был Dalvik, а теперь ART (после API 19).
• Системные библиотеки — тут всякие библиотеки, которые работают с графикой, базами данных, системными ресурсами и т.п. Эти библиотеки обычно написаны на С/С++. Мы, как разработчики обычных Android-приложений, напрямую не работаем с системными библиотеками. Прикладная среда (фиолетовый слой выше) даёт нам для этого обёртки, которые написаны на Java. Это то, что мы обычно используем в нашем коде.
• Прикладная среда — подходим уже ближе к самому андроиду. Тут различные классы Android для работы со всем, что нужно для написания приложения (ресурсы, компоненты и т.п.). Здесь определяются жизненные циклы и взаимодействие компонентов друг с другом. Тут же у нас находятся всякие интересные штуки для асинхронного выполнения: Handler, IntentService, AsyncTask, Loaders и дп.
• Ядро Java — библиотеки Java, которые мы используем в наших приложениях и которые используются в прикладной среде. Например, java.lang и java.util.
• Приложения — наши обычные приложения, которые мы пишем. Тут мы можем использовать уровень ниже: прикладную среду и ядро Java.
Как видите, всё гораздо проще, чем могло показаться. Если совсем кратко: наши приложения используют прикладную среду для написания самого кода и ядро Java, которое предоставляет нам обёртки для системных библиотеки. Системные библиотеки написаны на си и там происходит работа с графикой и другими сложными вещами, которые как-то взаимодействуют с системой, т.е. с телефоном/планшетом и т.п.
И чуть-чуть в стороне есть среда выполнения, которая заставляет наше приложение работать. И создаётся эта среда выполнения на нижнем слое в ядре Linux.
Мы упорно игнорировали вирус и говорили, что всё в порядке, но он всё равно к нам пришёл. Весь день в голове одна мысль: "Ты можешь уйти с удалённой работы, но она всё равно найдёт тебя". Последние 5 лет я работала удалённо, поэтому специально искала работу, чтобы ходить в офис и общаться с людьми. Плюс, как джуниору, мне мега-важно, чтобы я могла подойти, показать что-то и спросить в стиле "Ну вот тут какая-то непонятная штука. И показывает вот это. Что делать?". И мне помогают, потому что видят, что у меня происходит.
Сейчас нас переводят на удалённую работу. Это не только мы. Во многих компаниях принудительно уже перевели. В некоторых только начинают. У нас вот, например, даже есть выбор: можно дома сидеть, а можно ездить в офис. Конечно, я предпочла второй вариант. Но теперь беда в том, что мой любимый ведущий программист, которого я всегда мучаю вопросами, решил работать из дома (надеюсь, не из-за меня). Немного радует, что есть всё-таки разработчики, которые тоже будут ходить в офис.
Немного почитала новостей и пишут, что планируют чуть ли не комендантский час внедрять и запрет транспорта в вечернее время. Да и всеобщая паника вокруг начинает передаваться. Даже на хабре статьи про вирус начали писать. Я теперь на каждого человека в маске теперь смотрю с подозрением, хотя и понимаю, что это просто не самые умные люди, которые абсолютно здоровы. И немного рада, что испытательный срок уже прошел и есть дмс. Хотя бы не так страшно теперь болеть.
А вообще: не болейте, пожалуйста. И будьте осторожны. Пусть учёные побыстрее найдут лекарство и всех вылечат.
Сейчас нас переводят на удалённую работу. Это не только мы. Во многих компаниях принудительно уже перевели. В некоторых только начинают. У нас вот, например, даже есть выбор: можно дома сидеть, а можно ездить в офис. Конечно, я предпочла второй вариант. Но теперь беда в том, что мой любимый ведущий программист, которого я всегда мучаю вопросами, решил работать из дома (надеюсь, не из-за меня). Немного радует, что есть всё-таки разработчики, которые тоже будут ходить в офис.
Немного почитала новостей и пишут, что планируют чуть ли не комендантский час внедрять и запрет транспорта в вечернее время. Да и всеобщая паника вокруг начинает передаваться. Даже на хабре статьи про вирус начали писать. Я теперь на каждого человека в маске теперь смотрю с подозрением, хотя и понимаю, что это просто не самые умные люди, которые абсолютно здоровы. И немного рада, что испытательный срок уже прошел и есть дмс. Хотя бы не так страшно теперь болеть.
А вообще: не болейте, пожалуйста. И будьте осторожны. Пусть учёные побыстрее найдут лекарство и всех вылечат.
Не могу не поделиться. Вы только посмотрите, какая потрясающая вещь. Карты для разработчиков, чтобы оценивать время для задач. Сегодня меня учили это делать в игровой форме. Было интересно и продуктивно. И даже когда я называла завышенные цифры, то все было ок и ответ принимался как будто это и ожидалось.
После стажировки я немного боялась, когда меня начнут просить оценивать время. Потому что там тимлид был очень прямолинеен и прямо сразу просил конкретные цифры. А когда я один раз рискнула назвать, то в ответ было «И это столько времени всего на две кнопки?!». Он очень хороший руководитель, но немного жесткий для меня. Ну не умеют начинающие точно понять, сколько времени понадобится. Все-таки как мне повезло с командой в этот раз ❤️
После стажировки я немного боялась, когда меня начнут просить оценивать время. Потому что там тимлид был очень прямолинеен и прямо сразу просил конкретные цифры. А когда я один раз рискнула назвать, то в ответ было «И это столько времени всего на две кнопки?!». Он очень хороший руководитель, но немного жесткий для меня. Ну не умеют начинающие точно понять, сколько времени понадобится. Все-таки как мне повезло с командой в этот раз ❤️
Как здорово, что даже во время карантина продолжается какая-то активность. Ура. :)
Forwarded from Android Dev Virtual Meetups
Первый митап понедельник 23 марта в 19-00 по московскому времени.
Денис Неклюдов об IoT хобби:
Эфир уже доступен для подписки: https://youtu.be/_tDcYDUNr3c
Денис Неклюдов об IoT хобби:
Internet of Things-хобби в связке с Android. Разберем что такое ESP8266, Raspberry Pi, Arduino, MQQT и как это все контролировать с Android за 30 минутЭфир уже доступен для подписки: https://youtu.be/_tDcYDUNr3c
YouTube
Денис Неклюдов об IoT хобби: IoT хобби в связке с Android.
Денис Неклюдов о IoT хобби:
IoT хобби в связке с Android. Разберем что за ESP8266, Raspberry Pi, Arduino, MQTT и как это все контролировать с Android за 30 минут
Организовано при поддержке Android Broadcast и Android Dev Podcast
Полезные ссылки:
- Слайды…
IoT хобби в связке с Android. Разберем что за ESP8266, Raspberry Pi, Arduino, MQTT и как это все контролировать с Android за 30 минут
Организовано при поддержке Android Broadcast и Android Dev Podcast
Полезные ссылки:
- Слайды…
https://zen.yandex.ru/media/id/5ddd77e9f4882e4380666d35/kak-peredat-v-metod-neopredelennoe-kolichestvo-parametrov-vararg-v-kotlin-5e761363aed81f64b076be69 Про vararg в Kotlin. Возможно, кому-то тоже будет полезно.
Яндекс Дзен
Как передать в метод неопределенное количество параметров? Vararg в Kotlin
Бывают ситуации, когда в метод нужно передать какое-то количество параметров одного типа, но мы не знаем, сколько их будет. В Java это возможно сделать: В method1 принимается String... names — вот эти три точки как раз означают, что в метод можно передать…
Уже неделю наша команда работает удалённо. Я ужасно боялась этого момента. Мне важно взаимодействовать с командой и общаться. Плюс, как джуниору, мне надо задавать миллион вопросов всем подряд. Я очень боялась, что в итоге немного останусь в стороне и не смогу полноценно работать и познавать новое. Что получилось в итоге:
— Первые дни и правда тяжелые. Сложно проснуться и заставить себя одеться и идти работать. Постоянно хотелось отвлечься на помыть посуду/помыть пол/приготовить еду. Немного помог таймер помодоро;
— Очень важно не бояться писать вопросы в чате. Вот раньше я подходила ко всем, а теперь можно эти вопросы писать. Иногда так даже удобнее. Никого не отвлекаешь и тебе ответят, когда будет время;
— Очень помогают ежедневные созвоны. Это помогает остаться в рабочем ритме;
— В скайпе нужно выключать микрофон, если не разговариваешь. А разговоры одновременно — кошмар. Но зато мы научились слушать друг-друга;
— Сложно остановиться и не работать, если время закончилось. Но отдыхать надо. Не стоит смотреть всего один маленький баг/PR в час ночи;
— Работу вполне получается выполнять удалённо, но мы все безумно скучаем по офису и общению. Быстрей бы вернуться.
— Можно играть в удалённое бинго. Я близка к победе. :)
— Первые дни и правда тяжелые. Сложно проснуться и заставить себя одеться и идти работать. Постоянно хотелось отвлечься на помыть посуду/помыть пол/приготовить еду. Немного помог таймер помодоро;
— Очень важно не бояться писать вопросы в чате. Вот раньше я подходила ко всем, а теперь можно эти вопросы писать. Иногда так даже удобнее. Никого не отвлекаешь и тебе ответят, когда будет время;
— Очень помогают ежедневные созвоны. Это помогает остаться в рабочем ритме;
— В скайпе нужно выключать микрофон, если не разговариваешь. А разговоры одновременно — кошмар. Но зато мы научились слушать друг-друга;
— Сложно остановиться и не работать, если время закончилось. Но отдыхать надо. Не стоит смотреть всего один маленький баг/PR в час ночи;
— Работу вполне получается выполнять удалённо, но мы все безумно скучаем по офису и общению. Быстрей бы вернуться.
— Можно играть в удалённое бинго. Я близка к победе. :)
Немного информации про то, как создать модуль buildSrc. Помню, что у меня далеко не с первого раза получилось это сделать. Надеюсь, что кому-то будет полезно. :) https://zen.yandex.ru/media/id/5ddd77e9f4882e4380666d35/kak-sozdat-modul-buildsrc-i-zachem-5e7f5297587fbc169934d873
Яндекс Дзен
Как создать модуль buildSrc и зачем?
Я этот модуль использую, чтобы создать красивые зависимости и чтобы не засорять основные build.gradle лишней информацией. Учитывая, что я фанатка многомодульности, то это ещё и помогает повышать версии, не заходя в каждый модуль. В Android Studio нажимаем…
https://zen.yandex.ru/media/id/5ddd77e9f4882e4380666d35/voprosy-djunioram-na-sobesedovanii-android-5e80888d93baaa4efffe9f6d о том, какие вопросы мне задавали на собеседовании на джуниора.
Дзен | Статьи
Вопросы джуниорам на собеседовании. Android.
Статья автора «Блог Android-разработчицы» в Дзене ✍: Я уже 4 месяца как работаю, но в моей голове свежи воспоминания о собеседованиях. Итак, какие вопросы мне задавали.
Я тут подсела на https://leetcode.com. Так как карантин и делать нечего, то сначала я вспомнила про https://www.hackerrank.com. Его я тоже очень люблю, но вы только посмотрите какой литкод красивый! А ещё мне очень нравится, что он считает скорость. ❤️
Leetcode
LeetCode - The World's Leading Online Programming Learning Platform
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
https://zen.yandex.ru/media/id/5ddd77e9f4882e4380666d35/sozdaiu-svoego-telegrambota-chast-1-5e8757f401822a01b722b0ee вторая попытка создать своего бота. Теперь без сторонних библиотек. Наконец-то получилось настроить прокси, чтобы запросы проходили. Ура :)
Яндекс Дзен
Создаю своего телеграм-бота. Часть 1.
Впереди выходные и я подумала, что было бы неплохо чем-то полезным заняться. Я думаю сделать простого бота, который будет генерировать какие-то предложения на тему, чем заняться дома. Я уже пробовала создавать бота и основная информация есть здесь: https…
Вчера я участвовала в https://leetcode.com/contest/biweekly-contest-23. Само соревнование длилось 1,5 часа. За это время надо было решить 4 задачи: 1 легкая, 2 среднего уровня и 1 сложная. И у меня ушло минут 15 просто на то, чтобы перестать пугаться заданий и понять их. Кстати, за это время многие уже решили все 4 задачи. У первого места время 14:15.
Я смогла решить две задачи: лёгкую и сложную. Причём начала я сначала зачем-то со сложной, потом остановилась и сделала лёгкую, а потом вернулась к сложной. А вот на средние не хватило времени, да и я не особо старалась их понять.
После окончания соревнования можно посмотреть, что написали соперники. Было интересно видеть, как победители в несколько строчек элегантно вместили мой код на 500 строчек.
Качество решений, конечно, сильно хромает, потому что было ограниченное время. Но я всё равно довольна. Это очень полезный опыт.
В целом, мне очень понравилось и я буду пробовать ещё! 🏆
Я смогла решить две задачи: лёгкую и сложную. Причём начала я сначала зачем-то со сложной, потом остановилась и сделала лёгкую, а потом вернулась к сложной. А вот на средние не хватило времени, да и я не особо старалась их понять.
После окончания соревнования можно посмотреть, что написали соперники. Было интересно видеть, как победители в несколько строчек элегантно вместили мой код на 500 строчек.
Качество решений, конечно, сильно хромает, потому что было ограниченное время. Но я всё равно довольна. Это очень полезный опыт.
В целом, мне очень понравилось и я буду пробовать ещё! 🏆
Leetcode
Contest - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
Почему не получается придумать красивое название для метода
Вчера я очень сильно злилась, потому что с ревью вернулся код уже второй раз. И снова были комментарии про названия. При этом я стараюсь называть нормально, а не в стиле abc15. Конечно, сначала я психанула. Ну ведь очевидно, что метод делает вот это, а потом вот это. Ну что тебе ещё надо от меня? Уже вечером, после бокала вина, я успокоилась и посмотрела комментарии ещё раз. И тут до меня дошло, почему я не могу придумать идеальное название. Да просто потому что мой метод занимается двумя разными вещами, которые в принципе не совместимы. Не могу же я его назвать methodDoThisAndThenDoThat. И вот так вот просто комментарий про название привёл к большому рефакторингу. Зато теперь из названия сразу видно, что именно происходит.
Пока что у меня есть такой недостаток, что я иногда забываю, что один метод должен заниматься чем-то одним. Постоянно кажется, что если добавить ещё одну маленькую детальку, то ничего не изменится, но нет. Вероятно, надо всё-таки начать читать "Чистый код". Как раз карантин и самое подходящее время для этого.
Вчера я очень сильно злилась, потому что с ревью вернулся код уже второй раз. И снова были комментарии про названия. При этом я стараюсь называть нормально, а не в стиле abc15. Конечно, сначала я психанула. Ну ведь очевидно, что метод делает вот это, а потом вот это. Ну что тебе ещё надо от меня? Уже вечером, после бокала вина, я успокоилась и посмотрела комментарии ещё раз. И тут до меня дошло, почему я не могу придумать идеальное название. Да просто потому что мой метод занимается двумя разными вещами, которые в принципе не совместимы. Не могу же я его назвать methodDoThisAndThenDoThat. И вот так вот просто комментарий про название привёл к большому рефакторингу. Зато теперь из названия сразу видно, что именно происходит.
Пока что у меня есть такой недостаток, что я иногда забываю, что один метод должен заниматься чем-то одним. Постоянно кажется, что если добавить ещё одну маленькую детальку, то ничего не изменится, но нет. Вероятно, надо всё-таки начать читать "Чистый код". Как раз карантин и самое подходящее время для этого.
Наткнулась я сегодня на LeetCode на, казалось бы, простую задачку: Given an array nums of integers, return how many of them contain an even number of digits. Надо просто из массива чисел найти сколько из них имеют чётное количество цифр.
Думаю, многие решат эту задачку обычным делением. Я тоже изначально так сделала, а потом начала искать более оптимальные способы и нашла статью: https://www.baeldung.com/java-number-of-digits-in-int#3-repeated-multiplication
И вот интересные выводы, которые я сегодня сделала:
1. Это мне посоветовал друг. Чтобы оценивать, что сложнее: умножение, деление или логарифм — надо взять листочек, два числа и выполнить каждое действие с ними. Будет очевидно, что умножение самое простое и экономит примерно 30% времени;
2. Логарифм самый сложный. И это не только на листочке. Во-первых, даже смотреть на формулу сложно. А во-вторых, там внутри есть ещё перевод int в double и обратно;
3. Варианты со String и сравнением я сразу отбросила. Они даже выглядят не очень. Если я в проекте применю где-то такое сравнение, то, боюсь, моего тимлида потом придётся отпаивать вином и валерьянкой;
4. Даже самая простая задачка может привести к интересным выводам.
А ещё я тут познаю codeforces и topcoder. Визуально они выглядят намного хуже чем литкод, но я решила дать и им шанс.
Думаю, многие решат эту задачку обычным делением. Я тоже изначально так сделала, а потом начала искать более оптимальные способы и нашла статью: https://www.baeldung.com/java-number-of-digits-in-int#3-repeated-multiplication
И вот интересные выводы, которые я сегодня сделала:
1. Это мне посоветовал друг. Чтобы оценивать, что сложнее: умножение, деление или логарифм — надо взять листочек, два числа и выполнить каждое действие с ними. Будет очевидно, что умножение самое простое и экономит примерно 30% времени;
2. Логарифм самый сложный. И это не только на листочке. Во-первых, даже смотреть на формулу сложно. А во-вторых, там внутри есть ещё перевод int в double и обратно;
3. Варианты со String и сравнением я сразу отбросила. Они даже выглядят не очень. Если я в проекте применю где-то такое сравнение, то, боюсь, моего тимлида потом придётся отпаивать вином и валерьянкой;
4. Даже самая простая задачка может привести к интересным выводам.
А ещё я тут познаю codeforces и topcoder. Визуально они выглядят намного хуже чем литкод, но я решила дать и им шанс.
Baeldung on Kotlin
Number of Digits in an Integer in Java | Baeldung
Learn different ways of getting the number of digits in an Integer in Java.
Недавно мне дали две задачи, которые я никак не могу сделать. Обе на изучение и в обеих мой ответ: без понятия что тут происходит.
На фоне этих задач, которые бесконечно вводят меня в печаль, когда я их вижу, вспомнились мне дни работы в техподдержке. К нам часто приходили пользователи с багами. Мы эти баги относили разработчикам, а в ответ довольно часто было "Хз. У меня не воспроизводится". И тогда я злилась, потому что ну как так? Вот же пользователь! У него всё плохо! Чините давайте. Не воспроизводится у них видите ли.
А вот теперь я встала на позицию разработчика и теперь у меня не воспроизводится. Но в моей компании я не могу ответить "Хз". Надо решить проблему и помочь, чтобы никто не остался расстроенным. И вот уже второй день мой диалог с коллегой выглядит примерно так:
— Слушай, а может это? У меня воспроизвелось с такими настройками.
— Нет. У клиента правильные настройки.
— Блин.
И это циклично повторяется примерно каждые пять часов. Я даже попыталась сделать перерыв, чтобы с новыми силами потом вернуться к задачам, но и это не помогло. Просто какой-то тлен и безысходность. Надеюсь, завтра я проснусь и придёт озарение, что именно могло пойти не так.
На фоне этих задач, которые бесконечно вводят меня в печаль, когда я их вижу, вспомнились мне дни работы в техподдержке. К нам часто приходили пользователи с багами. Мы эти баги относили разработчикам, а в ответ довольно часто было "Хз. У меня не воспроизводится". И тогда я злилась, потому что ну как так? Вот же пользователь! У него всё плохо! Чините давайте. Не воспроизводится у них видите ли.
А вот теперь я встала на позицию разработчика и теперь у меня не воспроизводится. Но в моей компании я не могу ответить "Хз". Надо решить проблему и помочь, чтобы никто не остался расстроенным. И вот уже второй день мой диалог с коллегой выглядит примерно так:
— Слушай, а может это? У меня воспроизвелось с такими настройками.
— Нет. У клиента правильные настройки.
— Блин.
И это циклично повторяется примерно каждые пять часов. Я даже попыталась сделать перерыв, чтобы с новыми силами потом вернуться к задачам, но и это не помогло. Просто какой-то тлен и безысходность. Надеюсь, завтра я проснусь и придёт озарение, что именно могло пойти не так.
Озарение не пришло. Но зато поняла, что если по логам ничего не понять, то всегда можно попросить ещё логов. И ещё. Больше логов! К сожалению, это не помогло. Думаю, это возмездие за то, что работая в поддержке я вечно относила подобные проблемы разработчикам 😭
Заметка для себя. Все время забываю, как в студии отменить последний коммит, который ещё не запушен, но оставить изменения. Все-таки проще это делать в терминале: git reset --soft HEAD~1
https://zen.yandex.ru/media/android_junior/unittesty-osnovnye-metody-kotorye-ia-ispolzuiu-chast-1-5e885339587fbc16993564ae Немного про unit-тесты. В последнее время я довольно часто их пишу. Прошла все стадии: и отрицание, и гнев, и принятие. 😆
Яндекс Дзен
Unit-тесты. Основные методы, которые я использую. Часть 1.
Думаю, каждый начинающий разработчик встречается с тестами. Я помню свою первую встречу и она была ужасна. Я вообще не понимала, что происходит. Что ещё за мокито и почему нельзя создать нормальный объект? Как тестить многопоточность? А базу данных? Даже…
http://Hyperskill.org — это определенно один из лучших курсов, которые я встречала. И сделано очень красиво + бесплатный. А ещё мне интересен пункт "Hypercoin 800: Get a code review for a stage of your project. Our mentor will give you personal feedback on your architecture and code style." Попробую его достичь и посмотреть на CR :)
hyperskill.org
Hyperskill - Learn to code and break into tech
Hyperskill is an educational platform for learning programming and software development through project-based courses, that helps you secure a job in tech. Master Python, Java, Kotlin, and more with real-world coding challenges.
Забавно получилось. Последнюю неделю я разбиралась с даггером и сейчас искала картинку для статьи. Ввела Dagger, а в ответ появились всякие ножи. Так я узнала, что Dagger переводится как кинжал :)