Подготовка к собеседованию на Android Developer
Менторы
Специалисты своей области, которые смогут помочь вам
Middle .Net Developer
Senior Product Manager
Middle Python Developer
Ведущий программист
Backend Software Engineer (PHP)
Senior .NET/C# developer
Middle DevOps Engineer | Tbilisi, Georgia
Middle C# .NET
Senior PHP-разработчик
Middle python developer
Каналы
Полезные Telegram каналы и чаты
Транскрипция видео:
Илья грузится я переживал что у меня будет плохой интернет о о Ну как минимум Наши лица там появились А я не на стримчики а мён у тебя картинка двигается если ты открыл Стрим э чья Картинка Ну на стриме картинка двигается двигается Да я даже сейчас если включу Звук есть о и звук есть Да я даже себя слышу кайф Супер Тогда э у нас технические неполадки мы опять м пропустили все наши дедлайны как обычно это уже становится нашей традицией а хочу вам представить сегодня Семёна Синь Android разработчика Семён очень приятный
00:00:57 - 00:02:45
молодой человек у которого есть тоже свой подкаст Я думаю что про всё это он расскажет позже и у нас есть Илья в другом углу Ринга Сегодня он будет интервьюируемый джуном на нашу несуществующую вакансию Android разработчика я вас Представила Ребята вы уже познакомились Так что я пожалуй удаляюсь А вы начинайте там вот это вот всё да всем привет э привет всем кто в чате напишите что вы весь день делали Кто смотрит в записи Напишите откуда смотрите вот Всем привет из солнечного Тбилиси из Грузии Меня зовут Семён
00:02:38 - 00:04:05
Задорожный Я работаю Android разработчиком там порядка 6 лет уже наверное до этого я работал на бэнде вот сегодня мы проведём небольшое МОК интервью наверное на час-полтора максимум ко мне сегодня сейчас секунду у меня много тут организационных вопросов потому что надо переключаться между всем вот ко мне пришёл сегодня Илья у нас не будет сегодня такого обычного жёсткого хардкорного технического собеседования Вот потому что уже ну и везде это посмотреть можно и немножко скучно становится вот мы
00:03:21 - 00:04:40
сегодня немножко иначе проведём но для начала мы познакомимся вот Илья можешь рассказать пожалуйста о себе э про свой опыт про свои проекты Как долго ты разрабатывает И что тебе нравится делать Да я увлекаюсь Android разработкой уже больше года С недавнего времени начал заниматься аом Ну так на полста вочки имею п 4-5 месяцев коммерческого опыта работал в двух фирмах уже успел поработать над двумя проектами достаточно интересными так Ну и в принципе всё Если два проекты то уже на медла сейчас будем со бесить А что вы
00:04:00 - 00:05:21
использовали на проектах своих какой стек и на проектах первый а первый был достаточно большим это было приложение для встреч для того чтобы находить создавать какие-то встречи оно было достаточно комплексным там были и ты и трансляции оно было написано полностью на композе самого нуля и в принципе всё я там занимался как J разработчик поддержкой в целом ЮА в основном некоторых вопросов которые касались ещё и серверного взаимодействия тоже Ну чуть-чуть и рефакторинга старого кода Ну старым его назвать нельзя он был просто
00:04:40 - 00:06:05
немножечко нечитаемым сейчас я занимаюсь разработкой клиентского приложения для сети сех гах Ну там функционал Разумеется разительно меньше его сейчас можно найти в Google Play но я работаю над новой его версией с дизайном где будет чуть получше функционал Ну вот в принципе всё и про проект рассказал могу ещё про ту рассказать если интересно а к этому мы сейчас придём вот собственно Да я посмотрел твоё резюме и меня пря первое что поразило это состояние твоего гитхаба и по количеству наверное проектов и по разнообразность стека то
00:05:24 - 00:06:46
есть да то что там не только Android но ещё по-моему иб даже был и IOS я прям поковыряться попал это прикольно ты ты много вообще занимался разработкой Ага разработкой ботов занимался там есть пара репозиториев но я на лансе этим занимался Да вот меня и захотелось наверное с тобой провести назовём это github собеседование сейчас пока что нам надо будет переключиться на новую сценку вот собственно из чего будет состоять собеседование мы действительно возьмём просто один из твоих проектов и поговорим про него вот ничего особо
00:06:05 - 00:07:30
страшного не будет онь интересненько да А ну поэтому Давайте нам смену экранов Мы не в эфире Кстати да мы в эфире всё отлично так вроде всё хорошо видно в чате если кто-то есть да Всё всё спасибо А в чате Напишите пожалуйста видно ли вам Android studia в которой мы будем сейчас работать и насколько хорошо видно если кто-то есть в чате Если нет то мы начнём И тогда уж смотрите вам будет удобно или неудобно Не знаю собственно Да это один из твоих проектов Это срмка для рекрут вот а мы особо не будем касаться дизайна мы
00:06:49 - 00:08:27
поговорим именно про наполнение и про код а и наверное первый вопрос тут стой подожди пока ты не начал я хочу сказать немножечко про это приложение предупредить что оно там вст это приложение было Разно в рамках и я успел только замокать то что у нас должно приходить сервера Ну и нане не был дописан Потом с эндером потерялась связь и короче допил я этот проект ради принципа и вс ситуация То есть я не буду оценивать это как финальный продакшн какой-то проект а наоборот мы здесь чтобы ну его не то что переосмыслить а просто
00:07:45 - 00:09:22
разобрать Почему вещи сделаны таким образом каким образом их можно сделать ещё иначе и Исходя из этого Вот мой первый вопрос ты сам сейчас видишь экран Да ты можешь обозначить дискорде могу посмотреть Да в дискорде отлично хорошо вот у нас слева есть файловая система в этой файловой системе мы видим три пакета один называется второй называется дата и третий дой Расскажи почему ты тут выбрал именно такие названия модулей ну для начала то поскольку я использую почти во всех своих проектах с начала
00:08:39 - 00:09:59
ноября прошлого года Клин архитектуру Эти пакеты названы по её принципам по принципу разделения слоёв то есть содержится логика работы сервером с внутренней базы данных в с Up находится на самом деле с presentation Где находится вся работа с ЮА в том числе и интерак ну такие межуточный сло виде VI моделей и в доме слое находится логика обработки того что поступило из сервера и подготовка для отображение U Угу А как ты понимаешь чистую архитектуру зачем она используется в моих проектах Хорошо если рассматривать саму
00:09:19 - 00:10:46
чистую архитектуру она используется как архитектурный паттерн для улучшения расширяемость проекта я это вижу прежде всего так то что если условно скидывать всё в кучу в одном файле то через некоторые количество внедренного функционала этот файл раст на очень много строчек его будет очень трудно поддерживать а при распределённой архитектуре в виде клина можно расширять проект Сколь угодно много плюс ещё А в современной Android разработке набирает популярность фича модули это ещё более распределённая такая архитектура когда
00:10:04 - 00:11:35
каждая фича условно закидывается в свою капсулу она инкапсулировать в своём собственном модуле и там уже идёт своя логика с ней работы так ещё можно было в теории сделать ли архитектуру в виде папочек в модуле Up но я не стал так делать поскольку так мне кажется ещё более изолировано за счёт чего например за счёт чего например за счёт того что эти модули насколько я знаю я ну не углублялся пока в систему сборки Ну опять же за счёт чего не знаю время сборки уменьшается скорее всего за счёт того что эти три пакета они
00:10:49 - 00:12:30
компилируется параллельно и каждый сам за себя по сути время сборки уменьшается Окей хорошо да такой тезис меня пожалуйста если я что-то не так сказал нет но льно Ну типа в плане твоего проекта тут скорее всего нет такой прям сильной Я не знаю распределённое чтобы это как-то влияло на сборку Да и проект небольшой но да то что ты говоришь имеет место быть когда многомодульная условно слой и это был у меня второй вопрос почему ты не выделил это в отдельный модуль вот а но Раз уж так можно просто дальше двигаться я хотел Обсудить с
00:11:42 - 00:13:16
тобой следующий файл можешь рассказать для чего он нужен и что у тебя тут вообще происходит это Файлик Android чем он нужен для того чтобы система Android понимала Что за приложение находится на ней в её памяти Какие оно использует пермишен разрешения А и В принципе всё в манифесте регистрируются основные компоненты Android приложения то есть Activity сес Котен провайдер и broadcast ревер с двумя последними Я практически не работал в принципе так что рассказать о них Мало чего смогу Угу Так угу угу ну в
00:12:39 - 00:14:10
принципе всё А вот э про Main Activity можешь немножко уточнить почему она отличается например от Activity которая про про просмотр фото и про просмотр Трик Угу она отличается тем что она является Launcher Activity то есть то именно это активити является по Су Алло М Подожди подожди секунду у тебя немножко Интернет пропадает Ало сечас слышно да сейчас слышно оно даме понять что именно это точка входа в приложение а остальные акти они просто регистрируются из-за того что того требует Android Окей немножко про них прояснить зачем
00:13:31 - 00:15:12
они нужны Ну например вот эти Зачем тея Ну как я это понимаю это нужно для того чтобы Android понимал насколько потенциально опасно Это приложение для пользователя Ну если в Android 6 эти разрешения они все лились просто при установке приложения то сейчас Практически во всех новых версиях Аида есть такая штука Как Перми То есть когда приложение само запрашивает разрешение на некоторое Ну потенциально супе опасные действия для пользователей типа локации чтения хранилища вызовов с помощью телефона и так
00:14:31 - 00:16:03
далее Ну и всё в принципе здесь мы Ну точнее конкретно здесь мы провозглашая так сказать что приложение будет ис состояние интернета подключение к нему А вот если говорить сейчас я открою параллельно вот у нас есть ещё один Android в домене Я сейчас [музыка] сделаю ложение расскажи вообще почему И зачем нам Тут ещё вот в домене манифест Он пустой абсолютно А что с ним случится там при сборке Ну и вообще что знаешь м про это рассказать мало что смогу Но точно знаю что в каждом модуле должен быть свой манифест
00:15:17 - 00:16:55
как показатель того чтобы система Android понимала что это тоже модуль И что он тоже причастен к какому-то конкретному приложению де манифесте Ну перво-наперво это модуль который определён как библиотека в Build gradle Так что в него не получится записать что-либо в манифест насколько я знаю А насчёт активити м можно насколько я знаю но тако не если это вдруг будет Android Да ну в смысле Android модуль Мм по сути аэ система будет думать Ну я имею в виду Android stud она будет думать что это отдельное приложение и там должен быть
00:16:20 - 00:17:52
объявлен te Application и какой-нибудь Launcher Activity Угу О'кей Ну если в проекте находится всего одно приложение то насколько я знаю Оно не соберётся просто если какой-то другой из этих модулей с пустым манифестом указан Как ещё одно приложение Угу Угу Ну да будет конфликт скорее всего Окей хорошо Сейчас я секунду запишу себе [музыка] заметок проваливаться в наш Application вот у нас тут указан класс можешь рассказать Зачем он нужен и что вообще вот в этом файлики у нас происходит по сути App это точка входа
00:17:38 - 00:19:13
приложение которое по стандарту генерируется сама то есть конкретно в этом проекте этот класс создан Для того чтобы H понимал Ну Hilt система для интеграции зависимостей понимала где точка входа в приложение само находится вообще класс в классе Application есть собственный Life cycle который похож на life cycle Activity То есть у него есть on Create on ST и так далее Я лично использовал А подозрительны я лично использовал Ну только для того чтобы инициализировать какие-то глобальные библиотеки типа окей Да давай поговорим тогда про
00:18:28 - 00:19:59
чуть-чуть [музыка] подробнее бите какие есть аналоги да и всё наверно пока с этими двумя вопросами так всё вроде нормализовалось да слышал вопрос Нет расскажи пожалуйста вот про зачем эта библиотека используется и какие у неё есть аналоги о которых ты знаеш H - это библиотека Для внедрения зависимости по-английски dependency injection Di а она создана преимущественно для того чтобы полностью покрывать принцип инверсии зависимости который определён в солиде и конкретно в случае моего проекта H как и впрочем любой Di frw он
00:19:21 - 00:21:18
только увеличивает его вес по сути но он нужен для того чтобы прокиды какие-то нужные зависимости в нужные файлики Угу а почему он увеличивает вес потому что генерирует ну там происходит кодо генерация в на этапе сборки приложения и за счёт этого создаётся много классов которые впоследствии увеличивают размер самого приложения но незначительно Какие аналоги знаю это кой отличается от Хил тем что он в ран тайме генерирует зависимости То есть когда уже приложение запущено А ну и дагер Угу А дагер как
00:20:27 - 00:22:01
работает дагер работает по схожем с хитом принципу Ну по сути хилт - это дочерняя библиотека от дагера а только упрощённая Угу Окей хорошо давай тогда вернёмся в манифест и тут первым делом вот у нас первоя активити с которой всё начинается это Main Activity Расскажи немного вообще что такое Activity в Android мире и Давай обсудим наверное только один метод on Create что в нём обычно происходит так алло-алло А ты думаешь я просто это Можешь повторить вопрос пожалуйста да Давай обсудим Что такое активити вот в
00:21:14 - 00:22:34
Android мире что это из себя представляет и что происходит в методе on Create обычно Угу Для чего Activity Как я могу объяснить Это абстрактное такое представление экрана приложения а х БН Ну активити ещё из того что знаю Оно Да обязано провозглашать в манифесте что оно есть какие фильтры оно принимает и так далее ещё активити можно открыть с помощью нка А раньше на зари Аида все приложения состояли из нескольких а но потом их вытеснили фрагменты То есть когда на всё приложение есть только одно и в НМ переключаются только
00:22:04 - 00:24:00
фрагменти так метод это один из компонентов жизненного цикла то есть Когда оно какой контент должен быть отобран на экране инициализируется ческие перемен и подготавливается в общем смысле UI для отображения пользователя Окей хорошо ещё немножко про sle ти почему Ну давай кратко Что такое фрагменты и почему удобнее использовать фрагменты вместо множества можно сказать упрощенные активити у которых есть собственный жизненный цикл но они отличаются от активити тем что их не нужно указывать в манифесте и они гораздо меньше занимают
00:23:14 - 00:24:47
в памяти устройства и мне кажется это их основной плюс поскольку активити может занимать вплоть до нескольких мегабайт как постоянной попити так и оперативной памяти устройст она больше занимает а фрамен они и ну в сущности онот себе только плюс так вот переключение между фрагментами то есть навигация происходит Ну в случае моего проекта с помощью Биб она определяется пути для навигации определяются с помощью графа и в принципе всё Угу А какие способы есть вот да я вижу что ты используешь библиотеку
00:24:09 - 00:25:55
навигации вот здесь чуть ниже прямо а Какие есть способы ещё делать навигацию в приложении кроме вот библиотеки навигации [музыка] Ну скажу сразу что Я использовал для навигации только уже готовые заранее написанной библиотеке Но точно знаю что если брать просчёт Ну если говорить с точки зрения си а паттерна то у а есть собственные методы переключения между фрагментами Ну в принципе и всё без библиотек можно реализовать навигацию только на Саппорт ГТ менеджере но библиотеке это ну честно говоря не смогу дать
00:25:16 - 00:27:04
определение Окей А если у нас приложение из множества активити состоит если из множества то в принципе здесь проще а переключаться между ними можно с помощью встроенного в контекст метода Start Activity и Finish Activity Угу О'кей хорошо А в принципе тут мне всё понятно пойдём дальше А хотел поговорить с тобой немножко просто обсудить вот сорок Пятая строчка вот этот вот блок можешь описать что тут происходит и какие тут условно фича языка используется Так а ну сейчас я вспомню как писал так фичи
00:26:17 - 00:27:53
собственно котлина Да ну здесь на самом деле клади во-первых это а не знаю точно как это назвать лямбда функция которая по сути является реализацией интерфейса то есть а угу Destination CH есть такой интерфейс код от него наследуется Ну можно было это в принципе сделать с помощью анонимного объекта Но таким образом получается слишком много ненужного так ещё здесь изич используется это по сути замена ске для Но более лаконичная и простая в [музыка] использовании а путях навигации м а функция она делает то что показывает э
00:27:07 - 00:29:04
Bom Navigation ба то есть э делает эки Firewall список исключений где ну точнее только на каких экранах можно показывать этот Bottom Navigation View Угу О'кей Хорошо да давай тогда чуть-чуть ниже спустимся Тут ещё одна есть приватная функция что в ней происходит И что в ней используется Угу Так ну как я вижу сейчас это достаточно плохой подход для того чтобы проверять авторизацию Ну как я вижу с позиции собственного опыта сейчас а ну здесь берётся Эля SH preferences встроенной встроенного хранилища
00:28:13 - 00:29:37
которое хранит информацию в кше приложения То есть если очистить к приложение то и очистится тоже здесь в принципе функция идёт просто проверка того авторизован пользователь или нет И в зависимости от этого идёт его навигация либо на фрагмент авторизации либо на главный экран А если бы ты это переделал сейчас где бы это было сечас Яло реализовано Так что Ну с точки зрения клино архитектуры это было бы реализовано так что в дата сло у меня лежало бы соответствующая функция которая ходила бы в рум и проверяла есть ли у пользователя
00:28:55 - 00:30:26
токен Ну возможно это не самый лучший подход с точки зрения безопасности потому что рум можно в ран тайме прочитать насколько я знаю И тем самым просто украсть токен пользователя но для этого есть шифрованные хранилище но я пока с ними не хорошо Хорошо ты мне накидывает слов короче правильно делаешь Вот тут понял Давай тогда сейчас я найду свой план так это мы поговорили навигация вот есть короче один фрагмент который бы хотелось [музыка] обсудить это фрагмент по метрике Да вот кажется что это одна из таких
00:29:43 - 00:31:23
один из Больших экранов и тут много чего происходит во-первых для начала хотел спросить тебя про адаптеры Вот и про то вообще зачем это всё используется так какшка используется для отображения списков которые поддерживают динамическое изменение самой своей сути То есть можно вставить или удалить элементы с середины списка и пользователь не Особенно это замети они пришли на Ну пришёл на замену и отличается тем что для него есть собственный класс адап Это первое и во-вторых он подгружает не весь спиною видна пользователю и несколько
00:30:33 - 00:32:23
элементов сверху или снизу экрана чтобы пользователь не замечал того что они у него динамически загружается так в для для каждого recycler viw нужно писать свой адаптер где м определяются некоторые методы которые дают системе понять что это вообще за Rec viw что он будет отображать и как если здесь конкрет здесь рассказать про эти методы Я вот их показал на вот можешь рассказать что это за методы и что они де если по очереди идти то первый класс у нас это холдер который определяет то в каких вьюшка должны храниться данные
00:31:31 - 00:33:12
отображаться точнее в нашем случае так или ина он принимает который ему и в класс Родите в метом нужно определить какую вьюшку должен быть какую вшку должен использовать [музыка] как который нужно определить это в котором нужно явно дать понять сколько элементов у нас в списке изначально ещё один метод и ещё Да который который кстати и определяет в каких вьюшка должны храни Какие данные но у меня это вынесено в отдельный мето так да то есть да в есть вот этот вот Ага я уже не очень помню сечас Я уже не очень помню xml и
00:32:21 - 00:34:32
Ну потому что я уже 5 месяцев пишу на [музыка] композе Ну я имею в виду сам подход к этой верстке А окей Ну тут Я не думаю что это прямо к вёрстке как-то относится Ну ладно если ты больше на композе сфокусирован допустим что там в нашу компанию Рога и копыта тоже комс нужен Ну тут ещё тогда так пока мы здесь хотелось бы немножко вверх и немножко поговорить про коллекции вот тут чтобы этот список создать мы используем какой-то лист что из себя вообще списки представляют и Угу А ну списки это упорядоченная
00:33:42 - 00:35:14
коллекция элементов которые могут храниться Ну если брать и в которых могут храниться элементы только одного типа и сейчас хочу сказать чем они отличаются от арея насколько я помню в аре нету метода копи чтобы скопировать какие-то конкретные Поля из списка в другой список наверное есть или нет Ладно не буду в это лезть вот в принципе а под капотом вот да а здесь лист - это что здесь лист - это плане что это ла Ну конкретно Здесь он используется для того чтобы дать ресайклер понять какой именно список будет в него
00:34:33 - 00:36:20
загружен или я не очень понял вопроса Ну ладно я хотел услышать Просто про что это интерфейс А илист - это Интерфейс Да который Ну genic интерфейс который принимает какой-то тип а функция встроенная в cotl она создаёт список определённый чего-то в Джаве это было бы Так что создавался бы экземпляр класса насколько я помню который имплементировать интерфейс и в него уже задавались значения собственно списка здесь с точки зрения котлина мы эту коллекцию можем добавлять сюда Эмен обычно нельзя добавлять элементы
00:35:32 - 00:37:15
динамически то есть Ну поскольку Здесь оно сделано изменяемой переменной то её можно изменить просто на другой лист в сам список нельзя вносить элементы в лист можно и Ну да да то есть если мы сделаем листов то сюда мы сможем заносить Ну поскольку у нас тип указан вли оно будет превращен в лист насколько я знаю Угу а то есть Нам нужно явно в кот по сравнению свой Сейчас секунду мы синхронизируется в котлине по сравнению с двой коллекции стали делиться ещё на какие-то типы Что ты имеешь в виду ну вот я например не могу сюда
00:36:28 - 00:38:18
добавить ничего Да неважно Ray лист это лист просто что ну потому что здесь явно определён лист как тип если а если удалить именование типа то он будет Арей листом если явно Указать тип лист то он будет собственно тоже арестом так вот мы делаем Рикс типа да ну в обычный лист нельзя вносить значение а в какие можно в лист в mutable list и в mutable Ray Ну это всё что я помню сейчас пока Да это хорошее замечание но не до А Да ничего себе можно что он под кобо он создаёт обычный ли Понятно Окей Да тут
00:37:25 - 00:39:17
согласен тогда я не знал думал что он тоже должен быть О'кей да э Тут наверное основной прикол что у нас коллекции стали А разделились на два типа основных это mutable И mutable вот и то что у тебя здесь было это была коллекция immutable Ну то есть если мы хотим чтобы что-то можно делать Мы должны её поменять на mutable так тут понятно э Следующий вопрос мой был так да возвращаемся мы обратно в то место где адаптер создаётся во фрагмент и здесь следующим идёт такая очень интересная предыдущим даже идёт штука
00:38:23 - 00:39:54
Как VI модель зачем она нужна и что обычно в ней происходит в модель работает как промежуточный слой U то есть ну если брать в общем то он подготавливает модель подготавливает данные для отображения на UI и UI уже непосредственно с ней взаимодействует для того чтобы брать какие-то данные для отображения в вю моделях происходят такие операции как а м обращение к кейсам А задача новых значений Flow Ну в данном случае здесь используется Live Data Угу а и какие-то м операции которые стоит выносить с UI
00:39:07 - 00:40:48
файлика с UI потока типа локальной фильтрации списков Угу Окей А сам принцип Да а у VI модели Ну это я уже чуть-чуть в рутины зайду у V модели есть собственный крутин скоп который живёт вместе с в моделью то есть покуда в модель жива это скоп тоже жив который позволяет запускать в нём корутины так Окей хорошо А давай тогда немножко про кейсы Что такое кейс твоём понимание а кейс - это промежуточный слой А который находится в домене который связывает слой даты и слой презентации Ну у меня конкретно в этом проекте Клин
00:39:59 - 00:41:41
архитектура определена не слишком правильно ке здесь в этом случае он просто вызывает метод из репозитория соответствую вообще в принципе до - это такая зона такой слой архитектуры который не должен быть зависит не должен быть зависим ни от чего то есть в идеальном раскладе этот модуль можно перенести в какой-то другой проект на другой платформе [музыка] Ире этот подход он называется domain driven Design Да круто если я правильно понимаю Если я правильно понимаю Хорошо хорошо Всё да хорошо и слово да и принцип всё
00:40:50 - 00:42:18
правильно описываешь А давай тогда чуть ниже перейдём Data Почему именно Data здесь используется Почему нельзя использовать какие-нибудь другие классы или просто ставить Вот этот лист чтобы он ну лежал без вот этой обёртки над ним так Data прежде всего используется для того Ну что из неё удобно получать в ЮА данные то есть её можно завить и уже А когда значение придёт в ла дату отобразить её на UI Именно из-за этого не используются списки То есть если бы мы здесь объявили из Который изначально был бы поскольку
00:41:39 - 00:43:08
для того чтобы загрузить этот список нужно было обращение к серверу А Оно занимает некоторое время то мы бы не смогли скорее всего отследить изменения на и скоре подробнее не расскажу про поскольку Не углублялся ну нет да общий принци чтоб было иначе чем отличается от в принципе Ну начнём с того что это две разные концепции из двух разных миров можно сказать из из в работать удобнее на сло UI удобнее тем что его можно Ну конкретно в композе и в случае Соф его можно просто собрать как состояние и оно
00:42:31 - 00:44:32
будет обновляться в зависимости от того как оно обновляется модельки Ага а нуж ли ка хотелось бы конечно рассказать проф как он работает под капотом но Ну окей я могу сказать что ну Фло можно иметь значение их можно коллектив это в принципе всё как и в прочем а какие-нибудь промежуточные операции можно делать м между митингом и коллектив да да на самом деле не знаю Окей А Ладно не будем особо тут глубоко вот надо ли делать какие-то дополнительные телодвижения если у нас будет объявлен О кстати он отлично он даже
00:43:44 - 00:45:32
есть не не работает чтом нравится Ладно не так важно Вот Надо ли делать дополнительно какие-то телодвижения когда мы собираемся на именно там в активи или фрагменте подписываться на обновление этого Фло я не проверял как Как ведёт себя лоу на вне вёрстки на Jetpack comp но я предполагаю что м там примерно так же ситуация обстоит то что если в случае с датой Мы осм из неё значения то ВФ мы можем его просто колективи от его изменений менять Угу А как сделать так чтобы когда мы коллек с Flow изменения вот если мы например там
00:44:42 - 00:46:18
у нас фрагмент идёт в он Stop мы там свернули приложение Как сделать так чтобы после осто у нас не поступали обновления Ну не менялся UI которого условно нету на экране если мы отследили этот онп во фрагменте то есть метод насколько я знаю примерно так он звучит и не знаю есть ли такое типа Можно ли убрать все коллекторы давай с другой стороны зайдём вот здесь когда мы начинаем смотреть на изменения в сайкл зачем мы это делаем и Ну да Просто зачем мы это делаем [музыка] конкретно к стыду своему я не знаю
00:45:35 - 00:47:14
прямого ответа на этот вопрос Но могу предположить что она используется как раз-таки для того чтобы в зависимости от состояния фрагмента что-либо делать с данными м ну если там допустим э Life сак Stop то а сервер Он убирается почти Ну да ход мысли правильный так А тогда дальше Сейчас я посмотрю где-то было тут сейчас мне надо убрать потому что у меня построчно написаны вопросы буквально А ну наверное поехали к слою есть у нас тут один как раз тоже с этой фей связанный репозиторий можешь рассказать про этот
00:46:37 - 00:48:19
паттерн репозитории если знаешь что это за интерфейс такой и почему он находится в доме слой А как я уже сказал учитывая законы чистой архитектуры в домене не может быть по сути реализации каких-то платформе на зависимых методов и поэтому всё здесь используется в интерфейсе через интерфейс точнее паттерн репозиторий используется для того ну с Ну как я это понимаю для того чтобы определить какие-то функции и реализовать этот репозиторий в каком-то другом месте написать уже платформе на зависимую реализацию и потом его
00:47:36 - 00:49:18
использовать саму собственно эту реализацию у ещё немножко про Вот эту вот модификацию sup Что это значит Это это ключевое слово используется в котлине для того чтобы понять чтобы дать понять компилятор что этот что данный метод будет должен быть точнее использован в рути какойто с вызван с помощью рутины Ну вообще на самом деле нет насколько я знаю используется для того чтобы дать котли понять что эта функция приостанавливает не смогу к сожалению ой Пойдём тогда к реализации Раскажи про в двух словах что
00:48:27 - 00:50:07
в этом ласе происходит Слим и внутренней ба данных для того чтобы производить какие-то операции которые описаны в интерфейсе Ну в данном случае это построить метрику внести е в данных удалить и так далее Ага вот да я вижу обращение копии Ну условно нашего ви общение есть вот такая вот формулировка почему она вот эти два метода нижние отличаются от вот этих трх верхних Так секундочку я пойму вспомню Ну в общем хотелось бы немножко узнать зачем тут нужны они нужны для того чтобы слой дало и внутрен данных оним
00:49:22 - 00:51:06
обм польку для создаётся свой с определенными полями которые должны заниматься в данных который помечен аннотации И для него нужно делать то есть чтобы из баз данных комфортно объекты переходили в слой который отображает чем это концептуально нужно Можно же без них делать ээ Но что влечёт за собой их не использование на самом деле не могу сказать потому что м не использовать мапе в этом конкретном случае просто нельзя потому что база данных не примет э то что пользователь пытается туда сунуть то есть не энтити
00:50:25 - 00:52:09
А ну да да По сути ты прав [музыка] Ну почему Например что у нас тут сейчас изда возвращается У нас вот это вот да с набором Почему Нам просто не брать и не возвращать его Давай сделаю чтобы так вот сэто внутренний не вызвать из другого какого-нибудь модуля он нужен для того чтобы М не прокиды в домен поскольку у нас всё вызывается там из кейсов какие-то дата классы из даты и поскольку дата зависит от домена на уровне проекта то домен не может быть зависим от даты потому что будет циклическая зависимость и это
00:51:22 - 00:53:06
ещё один плюс разбивание Клин архитектуры на модули то что м случайно не образуется то что типа А какой-то класс из домена возвращает класс из даты или класс из даты возвращает класс не из домена Угу Окей хорошо Так тут пока что всё тут особо не к чему обратиться Давай вернёмся фст а ты в самом начале говорил что помимо активити есть ещё какие-то компоненты давай про них кратко Какие и что они Для чего используются м есть сервисы Угу broadcast ресиверы и конт провара как я уже говорил о последних
00:52:23 - 00:54:07
двух Я знаю только в теории и работал только с сервисами М сервис по сути - это такой компонент который может быть э м может делать какие-то долгосрочные бэкграунд операции которые не могут быть проделаны на основном потоке Ну если брать конкретную какую какой-то конкретный пример то сервисы они чаще всего используются для того чтобы слушать уведомления сервера для того чтобы проигрывать музыку В музыкальных плеерах и в принципе это всё для чего конкретно Я использовал но но у них куча других способов применения
00:53:14 - 00:54:52
А можешь сказать Вот при создании сервиса В новых версиях Android что нам обязательно надо делать без чего сервис не запустится условно не могу сказать точно поскольку я в новых версиях работал только с м он вообще всё по сути делает за тебя генерирует соответствующий код и так далее Если говорить о кастомных сервисах то насколько я помню нужно их как-то явно вызывать из либо из Application чтобы он запустился и также для того чтобы остановился либо из активити Угу О'кей А давай всё-таки кратко про
00:54:02 - 00:55:28
ресиверы и контент провайдеры м для чего они нужны так Ну окей контент провайдер точно знаю он используется в некоторых системных приложениях для того чтобы давать к ним доступ из других приложений например из галереи чтобы отдавать какие-то данные в другие приложения чтобы они могли общаться он Возможно могу сечас ошибаться это компонент использу для того чтобы отлавливать какие-то события в бэкграундер привести будильник Мне кажется это самый Явный пример но я не уверен что именно такой подход там используется когда
00:54:47 - 00:56:13
наступает определённое время будильник собственно играет почти но не совсем слышал ли ты про такую штуку как Work менеджер м слышал но М даже к сожалению определение его сказать не могу и тем более на практике его не применял а стоп нет М насколько я помню он используется для отложенных задач чтобы запланировать задачу на какое-то время и она в это время Воспроизведи типа отправка бэкапа на сервер или тот же будильник Угу а почему нельзя например сервисы использовать для это сервисы убиваемый они привязаны к ла сайк
00:55:44 - 00:57:33
приложения то если приложение умрёт то умрёт и сервис Угу А в каком случае может приложение умереть если оно в бэкграундер только насколько я помню в случае если системе не хватает памяти она может некоторые приложения просто уничтожить в том числе и привязанный к ним сервис чтобы освободить место для приложения которое запускается а не помнишь как операционная система приоритизировать [музыка] или нет Ну насколько я знаю будильники и какие-то прочие супер срочные штучки они имеют наивысший приоритет то есть они будут
00:56:40 - 00:58:17
вызываться в любом случае в любом активити при любом стечении обстоятельств пониже приоритетам идёт скорее всего ну это я предполагаю воспроизведение видео то что поверх него могут быть только уведомления по Су и экран во время того как видео воспроизводится он не отключается Окей хорошо так А давай тогда небольшой интерактив я говорил что мы особо не будем придираться к коду но мы сейчас это сделаем я вот нашёл такую активити и хотел у тебя спросить что бы ты сейчас вот Глядя на это активити если
00:57:36 - 00:59:06
быте стояла задача что-то изменить чтобы ты поменял вот как кодре так так так так Ну я сразу вижу Ну пойдём с самого начала строчку Называть да и комментарий давать в принципе в принципе на двадцать пятой строчке объявлена глобальная перемен Я точно не помню зачем я это делано я сделал так что она бы принималась где она нужна в качестве аргумента функции так и в мето on cre на Т второй строчки здесь идёт явное указание того что параметр насколько я помню Сейчас это Ну не то чтобы сейчас и тогда это тоже было
00:58:24 - 00:59:59
есть такая специальная функция у Инта и которая которая даёт понять системе что по сути у этого бандла должны быть аргументы а не знаешь за счёт чего это работает Почему мы Вот обернули аргумент в какую-то функцию и он бац и стал нел нет сказать не смогу давай пом Даше так выт UI мне пока что Всё В принципе нравится ну помимо того что я уже говорил что metx ID будет параметром функции и в принципе здесь Поясни То есть он вот здесь вот ну условно будет Вот сюда передаваться Да здесь приниматься передаваться UI здесь
00:59:14 - 01:00:39
приниматься и всё То есть он не будет храниться на уровне а да да ага Всё понял Ну мне кажется я вынес эту перемену в глобальную не просто так что она используется больше чем в одном методе Да она ещё используется здесь в двух методах но по сути там можно было использовать параметры функции и на самом деле я бы ещё разбил и на несколько дополнительных функций чтобы следовать Завет чистого кода чистого кода чтобы какая-то одна функция выполняла свою А свою задачу Здесь всё помешан в кучу так сказать О'кей понял
01:00:24 - 01:01:55
тебя так давай листаю дальше тогда Тут ещё есть вот такие вот штуки интересные так здесь Я использовал библиотеку специальную для построение графиков уже скорее всего не вспомню как это называется [музыка] А ну не знаю что я бы здесь изменил Окей ну такого чего-то явного в глаза не бросается Угу Хорошо тогда остался последний а Ну кроме того что Верни пожалуйста на ту функцию верну Кроме того что в формате можно было сделать с помощью лямда функции Ну это просто условно почищу код бы выглядел и всё Угу
01:01:10 - 01:03:03
Ну лучше читаемость Угу как-то по эффективности по улучшению эффективности я здесь не вижу ничего а по архитектуре по архитектуре так это лучше всё вынести во вю модель вот так вот могу сказать то что ну на юе не должно происходить построение собственно самого графика Да хорошее замечание по сути он должен принимать только готовые данные уже отображать Да это хорошее замечание и Последний Метод который тут остался так здесь используется просто построение диалога насколько я вижу здесь в принципе
01:02:30 - 01:04:04
ВС тоже [музыка] не сказал бы что здесь следовало что-то менять кроме Только вынесение текста в ресурс строчек для поддержки возможно дальнейшей локализации хорошо Да тоже валидно давай тогда поговорим чуть-чуть Ещё немного про котлин сейчас я тут нашёл тоже класс Называется он application parent it Расскажи по я вот немного вида изменил вот скушаю там какие-то допы можешь рассказать что такое дата классы чем они от обычных отличаются классы отличаются от обычных тем что в них насколько я знаю не может
01:03:22 - 01:05:02
быть вообще никаких функций вне и они используются специально для хранения данных в Джаве Насколько помню насколько видел под то что нужно было при создании подобных классов писать а функции Гетеры и серы для каждого поля что разрасталась просто тем что объявляется переменная Тип и всё А функции вообще нельзя писать не Разве что Ну в ком то есть-то функции Простите пожалуйста если это было громко То есть если мы здесь сделаем фан Ну и сделаем это функции то всё сломается я на самом деле никогда так не
01:04:18 - 01:05:52
пробовал писать функции прямо в дата класе но скорее всего Я сужу по чистой логике так делать нельзя ну потому что это Тата класс он по сути должен хранить данные что так ты сказал что он условно предоставляет нам Гетеры и сеттеры для полей А вот в случае вот с этим примером у всех Полей будут Гетеры и [музыка] сеттеры так алло-алло Ильяна тут Оля Илья кто-нибудь меня слышит Алло Алло Алло О привет привет небольшие технические неполадки были всё О'кей А я передумал над вопросом пока короче ты отсутствовал У
01:05:08 - 01:06:41
меня другой вопрос появился немножко А что помимо гетеро сеттеров ещё дата классы предоставляют Угу а они предоставляют функции Ко equals и ш копи позволяет создать копию дата класса с изменением каких-то полей ставляя другие поля нетронутыми вот так вот можно скакать А equals - это функция которая проверяет объекты на схожесть полей То есть если мы сравним два экземпляра дата классов с одинаковыми значениями полей то и выдаст а шкод позволяет получить сейчас могу Возможно ошибиться адрес этого этого экземпляра дата класса в
01:06:28 - 01:08:10
памяти адрес ли точно не знаю как она называется ссылку на объект окей а функция string она тоже переопределять все объекты поскольку они наследуются все от класса equ и шд они тоже по сути находятся в класе и их должны переопределять все типы Хорошо если мы вот создадим объект э вот этого нашего дата класса и вызовем у него то string то что в консоль он нам выведет но он просто выведет строковое м значение этого объекта м Насколько помню название класса и м имена и значения полей всех всех да точно
01:07:18 - 01:09:11
Хорошо теперь я уже сомневаюсь всех ли Ну кроме прива вот для этого приме а всех которые определены в его конструкторе то есть скорее всего из expanded не будет там отображён хорошо да Да всё правильно а слышал ли ты про функции для структуризации которая называется там типа компонент 1н и так далее Нет но я встречал их в АА одном проекте Ну как я могу судить по логике сейчас предположу то что Ну а эти функции Они получают компонент под каким-то индексом номером точнее хорошо А что будет под этим что типа будет компонентом под
01:08:27 - 01:10:07
номером два У нашего объекта здесь Ага кайф хорошо так Поехали дальше тогда а есть ещё вот такой вот у нас м статус и я сделал его аналог с помощью силт интерфейса Ну и первый вопрос валидно ли то что я здесь написал и второй Чем отличается Вот вот эта запись вот вот этой записи Угу угу так ну расскажу сначала немножечко то что я знаю прок интерфейс класс интерфейс они используются как определённый такой контракт чтобы дать понять языку то что все Наследники этого объекта будут в области видимости одного файла всего
01:09:18 - 01:11:16
самого в мго рамок нельзя создать нельзя у наследоваться от этого объекта так при использование ямов Нуна и се интерфейсы они отличаются по своей структуре как классы то есть в инами можно получить во-первых вна можно сделать конструктор в который можно записать какие-то дополнительные поля и использовать его вместо села но по сути это не самый лучший подход наоборот селет классы были созданы для того чтобы заменить имы плюс ещё в ямах можно получить все его значения с помощью метода vales и если имеется индекс
01:10:19 - 01:11:54
элементы в этом инами обратиться к нему по собственно этому индексу с помощью он возвращает упорядоченную коллекцию не помню уже точно что именно вроде просто колекшн Либо лист Угу А когда бы ты стал использовать силд классы вместо е намо мм на самом деле я бы стал использовать РД классы вместо инамото Да нужно за стол сохранить что-то более кастомное чем более что-то более большое чем один параметр а они отличаются тем что поскольку сик - это тоже класс от него можно наследоваться и наследовать в том
01:11:09 - 01:12:45
числе и другие классы объекты или дата классы точно скажу что сет классы очень удобны тем что в них можно делать вложенность то есть разбивать компоненты на какие-то структу структурные элементы в зависимости от того что нужно так делать нельзя точно можно сделать жене Так что когда ты когда объявляется в него загружается какой-то тип к этому типу можно обращаться в Наследник этого класса А могу ли я делать сикс си интерфейс в си классе или интерфейсе конечно да Круто хорошо тут пока что всё Давай да последний вопрос по структурам
01:11:59 - 01:14:02
данных идм Сюда Здесь есть такая штука Как мапа можешь рассказать про эту коллекцию вот всё что знаешь Хорошо это вве в это коллекция из пары ключ значения в качестве ключа в качест знания и кастомные созданные пользователям в том числе и другие коллекции включая собственно ма а так так так Ну в принципе всё к чтобы получить какой-то элемент в мапе нужно обратиться к нему с помощью ключа по ключам и по значениям можно в отдельности оперироваться так Ну и в принципе всё А можно ли например [музыка]
01:12:59 - 01:14:39
сделать сейчас как Короче у нас среагировать программа если мы сделаем вот так вот а тут понятно слишком слишком просто вот вот так сечас Интерфейс Да не обращаем внимание тут ВС под контролем из то что у на в правильно это попат он поскольку этот тип он лабильный он попадёт собственно к получателю этой мапы и если Мы попытаемся обратиться Ну окей у Кона есть с этим всё будет класно если бы мы попытались обратиться к этому нулю в Джаве то у нас бы выкинуло Ну то есть этот по этому ключу по ключу тест просто добавится на это ок
01:13:55 - 01:15:49
а если мы сделаем наоборот если у нас есть ключ который тоже может быть нал Что будет если мы сделаем [музыка] так очень интересный кейс на самом деле я с таким никогда не сталкивался даже никогда не задумывался и точно не знаю можно ли использовать нал в качестве ключа при обращении к этой мапе Ну не заругает ли на это компилятор Ну пока что компилятор в порядке То есть он даже вот та Ага вот и так тоже разрешает всё хорошо не знаешь да как это у меня подлагивает Ага ага компилятор в порядке Да очень
01:14:54 - 01:16:29
интересный вопрос я его изучу на досуге что будет вообще При таком случае интересно вообще Но конечно сейчас я на этот вопрос дать от не смогу Ой Я предполагаю что блин ну tion вылетит только при случае если мы в классе Ну в методе Ну короче когда мы Обращаемся к этой мапе мы не укажем тельный знак такой вот бабах оператор когда мы полу у нас вылетит н Угу Хорошо вот а ты можешь ещё рассказать про коллизии в хэш мапе И на что они влияют для начала стоило спросить в принципе Что такое хэш знаю знаю ли я
01:15:48 - 01:17:30
про эту коллекцию Ну дамы пока что в ней мы вот мапа это она и есть собственно Всё хорошо Да да хш мапа Ну хэш мапа это да реализация но она тут стандартная по-моему она здесь вот шма под капотом я на самом деле удивлён так про коллизии не смогу рассказать потому что я помню об этом очень отрывисто даже скорее всего не смогу сказать что такое коллизии в принципе коллекция Угу Окей А всё у меня есть последний вопрос я его хотел задать и забыл мы когда были во вю модели на самом деле неважно В какой сейчас я
01:16:46 - 01:18:12
найду да пойдём в метрик обратно вот здесь а ты заговорил про рутины и я хотел спросить а вот View Model scope он на каком Диспетчере запускается по дефолту по дефолту на Диспетчере Main только знаю А почему мы здесь переключаем его наё чтобы разгрузить основной поток чтобы операция которая в этом скопе она производилась на отдельном выделенном потоке поскольку если производить эту операцию наме то залога пользовательский интерфейс если там будет какая-то нагруженная операция То есть если мы сделаем так то всё
01:17:29 - 01:18:47
залога Ну не обязательно что при этой операции и не обязательно то что пользователь это заметит но определённо нагрузка на поток пойдёт и если сделать все операции подобным образом то Поль заметить разниц Угу Окей А зачем почему мы здесь используем метод Post value для ну для отложенного для отложенного Ну тут можно сечас для отложенного задания значени можно было бы обратиться к мго что сделать Ну сделать и просто равно но это не самый лучший подход насколько я помню но опять же в это не углублялся А
01:18:07 - 01:19:47
вот это от да да говори также и соло работает Если есть какой-то mutable Flow в него можно у него можно просто получить переменную ю и просто туда записать Но это опять же не самый лучший подход в случае соста лучше использовать этот апдейт если функция не в Кане если в Кане то А вот здесь по под капотом что будет происходить не знаешь не смогу сказать К сожалению А давай я открою и мы посмотрим сес вот тут делегат и скорее всего кани дефолтный р вот можешь сказать что здесь происходит вот в этом
01:19:07 - 01:20:45
методе а а всё Всё я понял Для чего пост используется для того чтобы вызывать задачу значения в сирона режиме то есть для того чтобы задать значение мог один потоп и чтобы не вызывать Угу в том числе Да но и второе - это вот сюда надо обратить внимание Ну что он сделает это потом на Мейн потоке Вот кстати про cre я не смотрел интересно что она делает Ладно потом посмотрим так у меня в принципе всё можно возвращать нас на полный экран Ну либо мы можем так на фоне поговорить и я дам фидбек сейчас я у
01:20:00 - 01:21:33
себя записывал насколько мог А смотри я сразу начну с резюме потому что я первое что получил это резюме что я там видел аэ в резюме я видел что А ну оно с с хэдхантера Вот то есть мне не очень нравится сам формат резюме но О'кей А что хорошо вот начнём с того что я сразу полез на github я увидел что ты пытаешься разбираться много В чём интересуешься это очень круто что там яс и реально боты какие-то я покопался что мы могли на него опираясь чтобы ты там Какие вещи поправил Я понимаю что ты уже пишешь по-другому Я
01:20:57 - 01:22:29
посмотрел пром всё этот репа я тоже видел поэтому типа минус за leg я точно никогда не поставлю вот по резюме Единственное что смутило что там есть ссылки на приложения которые никуда не ведут и это надо просто порев вот это такое минорное сечас оно тоже но ты проверяй периодически ссылочки потому что там есть пустые и это немножко сбивает толк пере опять там две ссылки на двох приложения над которыми я работал и насколько я помню они открывались обе вот у меня не открылась я искал на сайте этой
01:22:00 - 01:23:34
компании именно этот проект Я тоже его не это Может быть я зам написано Повторить попытку что-то пошло не так вот Я даже по который эпизод Да а не знаю один из них какой-то ну с эпизодом на самом деле достаточно трудная ситуация Угу На самом деле там сложная ситуация из-за того что его несколько раз сносили несколько раз туда обратно заливали уже не знаю почему и Ну это уже происходило после того как я уволился из компании и не мог знать почему это происходит вообще ну и сейчас его Видимо опять
01:22:46 - 01:24:08
либо удалили либо он доступен только для ф вот Одно из двух вот ну просто да ни на что не влияет Но это всем совет быть внимательны у меня там тоже в резюме ссылок тысяча просто на всякие приложения и сайты и приходится чекать Каждый раз когда начинаю поис что мне понравилось очень сильно что ты себя уверенно чувствуешь И когда я задаю вопрос ты пытаешься сразу объяснить какую-то и контекст задать и объяснить информацию которая там нужна для того чтобы ответить на вопрос который я задал А из того что мы пропустили или не
01:23:27 - 01:24:54
обсудили Ну или были какие-то ошибки у тебя это когда мы говорили про манифесты тут можно просто посоветовать посмотреть в сторону того как собирается приложение и то что есть манифест который просто собирает Все манифесты по приложению и потом их в один превращает в итоге у тебя все компоненты в одном манифесте и только его операционная система смотрит то есть ну это я не знаю на тему сборки приложений какие там этапы есть Ну тоже особо не страшно если бы я там тебя собеседован на проект Я бы на это особо
01:24:11 - 01:25:22
не смотре Потому что это не такое знание которое нужно каждый день Вот кажы день это вот знать про компоненты Android и знать про них уверенно вот что надо прям чтобы от зубов отскакивает ресиверы про контент провайдеры ты вытащил тему с учётом того что ты даже не работал с ними но там ещё очень можно много чего сказать и хотелось бы это услышать сразу со Стар Что такое контент провайдеры А я использу их Тогда тогда тогда они там вот контент резол Веры там ещё крут операции для доступа а приложению Вот и то что там ты можешь
01:24:47 - 01:26:15
получить курсор другого приложения условно и по его информации проходиться и смотреть Ну это так если кратко вот а про сервисы тоже хотелось бы услышать больше и про ограничения на них что сервисы у нас в последних версиях приложения могут быть только foreground то есть мы обязательно должны уведомлять пользователя в шторке нотификации что у нас сейчас что-то в фоне работает и по-моему сейчас ещё для новой версии андроидам вопросик пожалуйста давай давай технические трудности Простите да Вопрос
01:25:30 - 01:26:47
У в таком случае если сервисы только работают сервисы которые слушают уведомления тоже например там это системный сервис у него больше прав и мы обычно его расширяем но у него заранее больше прав и система сама знает есть специальные сервисы у Андройда например там я не знаю такой же NFC сервис который постоянно слушает чип вокруг и может будить приложение которые реализует как-то Да система Android некоторым сервисам даёт больше приоритетов но не всем на приложения обычные мы тут немножко связаны По рукам и Да вот по
01:26:18 - 01:27:46
поводу ещё мы говорили про убийство приложений я хотел услышать больше приоритизации не про то там что там телефон в приоритете и всё такое там есть типа чёткая структура что сначала в приоритете и система отдаёт им условно контроль даже если памяти мало приложение которые в грауде с которыми пользователь работает то есть будет странно если система убивает приложение там ты сидишь на своей Я не знаю денежной биржи и Android система такая слушай Нет давай всё закругляйся и убивает процесс А дальше идут как раз
01:27:03 - 01:28:12
foreground сервисы им отдаётся большой приоритет они там помоему то ли на втором то ли на третьем месте Вот и дальше уже идут вещи которые частично видимо не не частично видимо а там в он и далее вот тут в принципе всё по кодре ты по классу который мы рассматривали всё рассказал что я хотел услышать Да и про вынесение там кода из UI с логика когда ты график создаёшь и про перенесение в ресурсы Ну то есть да почище Мы вроде сделали по поводу крутин последнее то что мы обсуждали ставить не обязательно именно в этом случае
01:27:38 - 01:29:08
конкретном потому что и Room и там например retrofit они при запуске запроса или транзакции в базу данных сами переключают э диспатч на свой внутренний То есть ты даже если будешь смей потока смей рутины с мей диспетчера обращаться в базу данных рум возьмёт и переключит её на свою подкапотную То есть это такие детали которые знает прикольно и код будет чище тебе не надо было нигде писать а потому что за это уже делают Ну библиотеки за тебя это делают а а Ну ещё Я не спросил короче да хотел но раз не спросил я хотел спросить про
01:28:23 - 01:29:46
то что будет если у нас там при запросе в базу данных возникнет ошибка но я видел что просто ты не обрабатывает нигде в приложении но раз не спросил на это как бы спроса нет вот ну это Ага ну это отдельная большая тема по рунам Да где можно было бы много говорить А да ещё не сказал про хэш мапу Почитай побольше есть классические прямо на хабре статьи и что где там на ключи хранятся и коллизии как они резолвится это популярный вопрос уже кучу лет и на него смотрят прям что если не знаешь то это минус это прям Я не знаю больше уже
01:29:04 - 01:30:42
какая-то Инженерная практика Ну мобильной разработке точно которую Все хотят слышать от кандидатов А да у меня всё остальное Было всё очень круто уверенно отвечал мне прямо очень понравилось общаться М спасибо говорю тут с выключенным микрофоном если можно я тоже скажу пару слов по поводу резюме действительно Я тоже хочу поддержать о том что так не годится я естественно не супер знаток андроидам очень мало написано то есть у тебя здесь два места работы написано информационные технологии системы
01:29:53 - 01:31:07
интеграции интернет дальше разработка программного обеспечения мобильный разработчик ни разработчик и дальше как бы две строчки в первом где одна строчка Это ссылка ироки втором в описании где одна из трёх строчек тоже ссылка было бы классно если бы ты тут чуть поподробнее написал Не знаю какие-то интересные задачи которые ты сделал что-то необычное Мне кажется это м ну может дать тебе плюс э в глазах Чара который будет читать это резюме что ты вот отнёсся как-то более-менее эмоционально к своим задачам может быть
01:30:38 - 01:32:02
может быть сем меня сейчас поправит кажется у нас в Андроиде совсем всё не так вы не ша мы не смотрим мы не смотрим Да мы вот если есть информационные системы леком мы сразу берём человека абсолютно валидно замечание на самом деле А и Ну не знаю это лично я Всем рекомендую хожу э чтобы люди делали своё резюме А и отправляли его напрямую Да не хэдхантер ся потому что информация в хедхантере там полстраницы - это пустая трата времени да и место собственно очень много воды мало полезной реальной информации А и тут ещё такой момент что
01:31:20 - 01:32:41
у тебя о себе написано достаточно кратко и особо тоже не информативно потому что боюсь каждый второй жуниор имеет опыт в групповой разработке пед проектов или личный опыт в разработке пед проектов А вот про побед на хакатона было бы классно Ты можешь написать здесь поподробнее о том что победили в хакатоне потому что придумали такой-то классный проект вот так его затащили клёвое решение придумали вот вместе с командой Мы молодцы Вот это всё то есть здесь можно развернуть и больше показать про твою какую-то индивидуальность и
01:32:00 - 01:33:12
твой окрас Если ты не знаешь как это сделать Кстати у нас есть трансляции с разборами с резюме А да там не Android разработчики но реальные резюме и наших подписчиков и гостя который был у нас в одном из выпусков и моё резюме там разбирается и собственно опытный HR там рассказывает где что улучшить прямо по пунктам будет Полезно если интересно и мы в том числе там обсуждаем имейлы Я не знаю реально имей ли указан у тебя в резюме но мы выяснили что некоторые некоторые чары обращают внимание ещё и на это и конечно чем
01:32:36 - 01:34:04
официаль будет у тебя рабочий имейл тем лучше а мой текущий имейл который указан там он с моим именем и фамилией нет Видимо я не очень помню Э нет Угу О'кей спасибо спасибо за замечание пожалуйста Ну какой там указан всё-таки в любом случае рекомендуйте ознакомиться с нашими трансляциями по этому поводу для всех остальных кто послушает этот видос тоже если вы когда-нибудь узнали э в моих или в комментариях семёрок семёном э своё резюме то Welcome в нашей трансляции с аром А ну или можете задать нашей группе
01:33:20 - 01:34:45
на самом деле вопросы если будет что-то много однообразного то мы ещё раз проведём трансляцию с чаром где ещё и эти вопросы разберём Я ещё на правах рекламы Э да да да на правах рекламы то что у нас есть на самом деле беланы рекламы бесплатный вот что у нас есть тоже небольшое сообщество которое называется de GM я не знаю будет ли ссылка в описании Но если что пишите тоже в комментах в группе вот там мы именно у нас больше именно по Android разработке но мы касаемся тоже очень разных тем А и кодинг интервью и другие языки и есть у
01:34:03 - 01:35:21
нас классные с спикеры которые приходят и есть у нас подкаст который собственно веду Я там тоже можно послушать интересные полезные вещи Вот мне кажется что чем больше информации тем лучше и вот собственно с этим посылом я сегодня пришёл чтобы и поделиться и пригласить всех кого хочет Мы тоже помогаем Android разработчикам Ощущение это самому то ты ничего особо не сказал интересно послушать Ну на самом деле я понял для себя очень много того что мне следует подтянуть вообще касательно разработки я по своим
01:34:42 - 01:35:58
ощущениям вышел на определённое плато где есть только изучение Ну точнее я понял что это далеко не так пото что Ну я думал мне уже на каком-то на каком-то Супер низком уровне придётся изучать систему но я понял что очень многого не знаю очень много ещ не Пахан поля того что можно было бы подтянуть учить Ну конкретно то что я для себя выделил это основные компоненты Аро системы и структура да плюс и много пото Надеюсь тебе было полезно Надеюсь остальным кто нас послушал посмотрел было полезно интересно из необычного к
01:35:27 - 01:36:45
нам в комментарии заходил человек котором нужна была помощь с ег по информатике я нагулино Я всего лишь фронтенд-разработчик и ничего не знаю про питон Я умею гуглить А спасибо большое ребята что пришли что приняли участие согласились Илья что тебя вызвал ты вызвался вообще пройти мог собеседование это смело и ты прол мне кажется его достойно Спасибо большое сем что ты прил и основную работу сегодня просо беседовал Илью и дал очень развёрнутый подробный и качественный фидбек Я надеюсь что ваш подкаст будет развиваться то ваш
01:36:17 - 01:37:54
Telegram канал тоже будет чат развиваться Всё будет классно всё будет здорово абсолютно Взаимно Приходи к нам рассказывать про фронт очень хотим тоже послушать с удовольствием это за кадром я только за люблю тш кайф Всё спасибо большое ребята что были с нами Всем пока До следующего раза
01:37:07 - 01:37:58