Подготовка к собеседованию на 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 бродкаст и сегодня у нас супер классная цифра классный выпуск интервью спонсором это выпуска является обито тех это очень классная компания них много открытых вакансий а не делает очень много для open source комьюнити при для комьюнити солнечной конференции кита проекты поэтому посылочки переходите и смотрите обязательно вот по стечению обстоятельств со беседующая сторона у нас сегодня как раз и завита поэтому вы как раз можете сегодня вживую убедиться какие крутые профессионалы там
00:00:00 - 00:01:47
работают так что за сергеем понаблюдаете наслаждайтесь евро интервью так что сергей привет 5 долл же так завуалирована представил но sergey b штанг сегодня у нас в роли интервьюера он будет управлять исправления оса беседуем и сегодня это автор всего замечательного канала кирилл розов кирилл привет эм привет ребят как ты выглядишь напряженным немножко немного есть скажем тогда я самое первое что да вот на самом деле мы давно уже ничего не упускали в прямом эфире а еще я вообще то есть полил был в отпуске и
00:01:09 - 00:02:37
водки реально понял карась в него весь выстраивался подготовился тут к записи все я вот понял что целый месяц тут уже ничего не делал толком вот и для меня прям еще такой вот немножко 5 возвращение но было ли это отпускной сезон так что я думаю это простительно вот я хотел представиться кажется на зовут даниил попов ну вот не все знает наверняка хорошо давайте сейчас сохрани зиру и мся про позицию на который мы собираемся наверное сергею слова как кого он ожидает увидеть на этом and view да я уже очень много наверное лет своей
00:01:54 - 00:03:19
жизни со беседую мне нравится такой подход когда все интервью начинаются примерно одинаково со всеми кандидатами и только да она заводит зависит не только того кто задает вопросы но этого кто отвечает и вы вместе пытайтесь понять какой уровень у кандидата и другого бывает так что приходят medley а у них там сеньор ский уровень и поэтому ну или наоборот приходит сеньор а у него там миловский уровень поэтому начинается точно у всех все одинаково поэтому мне кажется что я буду начинать каких-то практических
00:02:36 - 00:04:00
задач которые наверное все умеют решать в зависимости от ответов и предложенных решений мы там будем идти куда-то в глубину или не будем идти там и все такое поэтому я думаю что это такое все короче как-то это собеседование пройдут все уровни но кто то просто где-то больше деталей может рассказать а кто то нет я даже не представляю как кирилл будет его проходить если честно ну я сам если если подытожить то мы ищем какого-то android инженера на уровень мы определим в процессе кого-то джуниора да да
00:03:18 - 00:04:35
сеньоры данная уверен что кирилл я думаю я всё таким образом мы определяем меня устроит если что норм но не завышайте планку так криво чего ты ожидаешь до чего ты ожидаешь что-то интервью почему ты согласился я на самом деле я в принципе люблю проходить интервью это очень такой хороший чек твоих скиллов и в принципе все очень хорошо понять что особенно сходить какую-то компанию крупную прочим чтобы понять что сейчас вообще на рынке спрашивают и выйти немножко за пределы ватта ватой как скажем болотца где-то
00:03:58 - 00:05:21
сел своей компании вообще понять вокруг мне еще очень интересно вообще понять потому что я уже фактически так 9 месяцев без пробок вот да практически скоро уже 9 месяцев и фактически то есть хочется вот именно как раз оценить потому что вопрос часто которая слышал был ко мне это вот ты не боишься там потерять скилл и вообще как это все будет прочим вот я на самом деле не боялся потому сейчас у меня больше получается всего чего то делать но вот я думал хороший способ показать всем и самому себе что из этой затеи заходит
00:04:40 - 00:05:51
может пора уже просто возвращаться обратно но то есть если опять же подытожить это такого рода эксперимент ты хочешь проверить насколько важен production опыт прямо сейчас как англия хочу проверить себя просто по большей части по не доказать кому-то важно ли production опыт или не будет доказать кому-то вот имена провести эксперимент на себя насколько для тебя во рту надо хорошо тогда я скину тоже небольшой спойлер про себя ну и спойлера к такая история из жизни я уже один раз был сергей на собеседование у меня со
00:05:16 - 00:06:22
беседовал и честно говоря это было одно из лучших моих собеседований потому что как минимум я ушел для себя с какими-то новыми знаниями которых я до этого не знал вот я в итоге в компании так и не попал попал по разным причинам вот но интервью было очень крутое вот но не буду вас никак фрейме и нагар за кольцевым мнение думаю что сами убедитесь и сделайте своими буду сами насколько крутой сергей себе следующий вот но я в него верю так что серега удачи тебе удачи меня селевые пугали перед собеседованием кстати те кто не так
00:05:48 - 00:07:01
давно проходила у это собеседование и она она не страшно интересно то что я думаю что люди оторвут интересно а заберем должно быть интересно вдвойне втройне так что не буду больше болтать тогда я ухожу пока за кадр ребята вам слово погнали да так меня давно не хвалили публично поэтому да спасибо данил за теплые слова всем привет я смотрю тут много людей в чате пишет мне очень приятно что пришли посмотри ведь ты что смотреть вообще не буду я прям вот fullscreen себе сделал все гости я вижу только себя серегу и
00:06:25 - 00:07:41
вообще в камеру внутрь у напрямую поэтому я буду посматривать вы спасибо большое сергей вот прям имеешь поддержать в ответственный момент еще раз да продублирую сегодня будет именно платформенная секция это значит мы будем говорить чисто про android не будет про какие-то дикие кишки сама джи-ви вот но если вдруг кирилл захочет что-то про это рассказать я конечно же послушаю и по задаю уточняющие вопросы но такое бывает иногда ты спрашиваешь одно вы как то приходите куда-то там совершенно не туда
00:07:03 - 00:08:19
такое бывает это помогает проверить глубину понимание человеком от в общем как будет строиться собеседования я выделил основные типы я обычно всегда человеку рассказываю что сейчас будет чтобы мог было понятно что сейчас будет вот и я выделю какие-то блоки из android платформы и по ним вопросы сгруппировал и в итоге мы будем как-то плавно переключаться явно или неявно но в целом мы будем говорить только про android и какие-то практические примеры я попытался это собеседование ну я на самом деле его вид а сейчас пытаюсь все
00:07:43 - 00:09:12
начинает каких-то практических задач чтобы это не было оторвано от реалий каких-то вот если есть какие то вопросы вначале то можешь задать например кандидатов добывают какие-то вопросы если нет тогда можем начинать нет единственно что хотел бы уточнить что в конце мы дадим фидбэк по всему сергей расскажут свои свое мнение я расскажу какие то свои впечатления вот поэтому смотри до конца вот ну начнем со всеми любимого до всеми это жизненный цикл и вот это вот все но я подозреваю что кирилл разбирается в
00:08:28 - 00:09:46
жизненном цикле activity там и вот это вот все поэтому мы не будем начинать с какого-то такого вопроса расскажет о у меня жизненный цикл чего-то вопрос будет такой вот часто бывает такое что наша view в какой-то нашей архитектуре это какой-нибудь activity ли какой-то фрагмент и у неё там есть какие-нибудь от отсидит а че ну или короче мы понимаем что там you как-то прикрепилась куда-то как-то отцепилась от чего-то и вот у нас приложение в котором мы пишем на кастомных мешках например у нас есть
00:09:11 - 00:10:32
кастомной ушка и мы считаем это каким-то большим куском чего-то и вот у нее есть свой презентер да не как у нас обычно бывает на activity фрагмента вот у кастомной вьюшки есть presenter и нам нужно реализовать точно также какую-то отмену например запросов которые были в прогрессе юшка у нее из презентер как и куда пропал и возвращайся я здесь я здесь момента это меня до низко друга да и вопрос такой что вот у меня есть кастомное view шко а у нее есть презентер вот и понятно что в этой вьюшки из кнопки есть какие-то поля и
00:09:50 - 00:11:14
они все каким-то образом могут стартовать какие-то запросы и вот когда это в юшка уходит с экрана мы хотим отменять все запросы чтоб они не шли в бэкграунде и вот вопрос к тебе как мы можем написать это типа какие у нас есть механизмы для того чтобы отменять запросы для презентеров вьюшки ну насколько я помню у вьюшки есть столбики он а то что он а то что то что видно в общем вот касательно от этого ли здесь кубики вот который соответственно показываться когда в юшку при сыну когда в юшка добавляется куда-то окно это
00:10:36 - 00:11:52
может ну ок но это может быть там у окно есть любой activity диалога пак винду можно создать вот минске туда в юшка я точится фактически если мы создали факт и если брать таким прям вот простым простым вариантом то есть именно на то время пока она существует вот где то при а то что то можно брать такой сном хочется типа создавать что-то больше то там принципе нам уже нужно делать что-то хитрей понимает вообще типа жизненный цикл спираль а там как вот свою моделью такой типа сделать из коробки нельзя потому что типа понимания
00:11:13 - 00:12:21
ритейл инстанция типа вьюшек нету они просто могут жить как это можно конце лиц ну банально можно концерт по старинке типа в презентом прокидывать callback который будет что-то проходить реакция будет концерт со если там что-то построить на основе жизненного цикла то в принципе мы можем создать кастомный lifecycle займ клементе свой для вьюшки который как раз то будет стартовать из топится на события от которой я рассказал ранее потом есть можно крутим скоб создать если для крутим тоже опять же с
00:11:46 - 00:12:57
аналогичными штуками который будет стартовать заступаться вот с и ржавой но в принципе там только будет строк жабой цикламена есть библиотека насчет никогда не implements ничего подобного но скорее всего ти вопрос нужно будет собирать де стол был самый простой вариант и просто консоль из на соответствующий callback который там не будут извилину примазываться или с президентом опрокидываться есть презент про вызываться вот ну надеюсь что понял вопрос тогда такой вопрос то есть я понял да как это применимо что у нас есть два
00:12:23 - 00:13:37
метода и мы сейчас с тобой примерно по нему но я понимаю что ты понимаешь как это сделать там для картин для рыкса я думаю он загуглил справился с лиственным кем-то тоже вот у меня вопрос по самому контрактов вот как ты думаешь метод он detach например from windows я не помню точно там что-то вот-вот он вызывается когда я наверняка не помню но думаю логично было бы что если бы он вызывался когда брюшка отсоединяется от окна тасс грубая remove происходит и и вот я думаю типа это не на сокрытие окна может не влиять на нее
00:12:59 - 00:14:30
вот то есть фактически типа если у нас там вон стоп переходят состоянии сейчас фрагмент или фрагмент для activity то скорее всего этот клубок не вызовется сразу то есть она будет визит ну типа не будет считаться видимости но я не уверен до конца в этом я честно не знаю вот и копался в этой части даже грубо говоря мы точно знаем но ты точно уверен что если делать сыр и мув то он вызовется если это например какой то брюшка в activity и и activity вызвался там он стоп то нет уверенности сейчас вызовется он или нет ну по
00:13:49 - 00:15:06
крайней мере я так думаю да а если это юшка которая ну допустим у нас иерархия такая если юшка а в нее вложено в юшка б а в юшку б вложено в юшка c да я вот удаляю верхнюю самую а и у меня там по цепочке есть мои дети как ты думаешь у них вызовется этот метод логично было бы что вызвался not android языки можно ожидать все что угодно вот окей как ты думаешь есть еще какие-то механизмы чтобы понять статочно оливьешка сейчас куда-то на windows например ну синхронный способ банально это можно попробовать взять ее
00:14:27 - 00:16:01
есть этот в юппер он по-моему называется эта штука грубо говоря это как раз то кто хочет в юшку вот это при этом про как она вложенного activity то это будет activity в который сейчас расположена но вот фрагмент мы таким образом не получим вот до фрагмент он таким образом не получим у только если ну типа можно банально проверить спецназа точно куда-то там будет saves набью парень не будет на лом вот он однозначно будет каким-то значением вот этот но это синхронный способ это грубо говоря типа чекнуть
00:15:21 - 00:16:29
уммы калба через него никто не получим [музыка] я вот думаю внутри observer по-моему он есть но он там полный чок подобных call back of не содержит которая способна нам что-то там подсказать он только про отрисовку калмыки сообщает но вот каких то типа что происходит дотащили прочим нет наверное я вот честно не знаю больше способов выкопал эту тему да у меня как раз был вопрос следующий и ты не упомянул view 3 обзор вот возможно тебе это поможет так я что-то сказал viewtrip серверную не помню что там были калмыки ну да я имею
00:15:56 - 00:17:13
он по можете предъявить на следующий вопрос вот следующий вопрос то есть такие мы разобрались чтоб у нас есть примерное понимание как мы там можем сделать реагировать на кита detach и или как мы можем если у нас более сложная логика и мы почему-то там не смогли как-то отписаться то как то мы там можем проверить с помощью бибером то вот если у нас происходит какое-то изменение дерево до вьюшек и нам нужно что-то при добавлении вьюшки как-то на это отреагировать вот как это можно реализовать вот ты
00:16:46 - 00:18:08
упомянул калби вот помнишь ли и вообще детали какие то какие у нас я возможности да я помню что во viewtrip севере можно получать ивенты касательно отрисовки то есть там грубо он придумки поля он при дроте поесть перед прямой отрисовкой тут можно типа что-то там внизу раньше кубиками там раньше тут такие как х коми использовали зачастую по большей части я помню там что-то с изменением дерева есть ну вот точно не скажу то есть там там помнишь того роста можно но разные события вот как раз та об изменении структуры
00:17:29 - 00:18:38
в.ю. отследить и соответственно их среагировать вот ну конкретно прям вот топе не помню а ты можешь привести пример вот какой он сценария для чего это раньше использовали эти viewtrip сервера you try observers для чего раньше использовали ну или можешь сейчас использовать сейчас вот я знаю там есть прямо метод кадр мне попался это типа немножко отложить splash screen показ вот в андроиде двенадцатом вот это сделали там через него прям очень не нравится потом раньше я помню это использовали чтобы как раз тапом по
00:18:04 - 00:19:29
моему использовать чтобы следить когда в ухо уже помериться чтобы соответственно основе и там что-то сместите помню даже такое делали ту сумму ждали когда в юкатан cessna получит какой-то размер уже их на продам что-то сместить или что-то сделать из ну грубо говоря понять что когда у меня появились размер уже реальный когда произошел между рик и и размещение чтобы что-то сделать на основе ее положения или размеров окей ну да звучит логично что нас изначально нет ее размера на примере стеноз была анимация и мы хотим в конце
00:18:47 - 00:19:46
анимации что-то сделать так окей свой списочек вопросов сам буду посматривать мы обсудили немножко то какие у нас есть возможности отслеживать жизни ну так называемой жизни цикла видюхи вот следующее что меня наверное волнует и она немножко связано с жизненным циклом это то как правильно пережить переворот экрана вот смотри такой кейс что мы написали какой-то уют в нем пользователь заполнил кита поля что-то сделал потом мы перевернули краны все данные потеряли вот какие у тебя из гипотезы почему так
00:19:18 - 00:20:49
может быть почему так может быть ну по умолчанию слетит это стандартный идет текст то он должен сохранить внутри себя то есть у вьюшек есть метод а - но не могут сохранять состояние и восстанавливать средств по дефолту он должен у восстанавливать но она будет восстанавливать только если у мушки есть то едишь к то есть если одышка не зацеп на то состояние сохраняться не будет вот соответственно прав а капец а вот это наверное такой вот вариант который при мысли вот конкретно переворот экрана смотреть вот и не
00:20:04 - 00:21:09
ничего не ломать там самостоятельно не мешать 100 вот наверно это вот такой вариант который не знаю что не должно сохранить для эти тексты из лего стандартный брать этот текст из из детей давайте подумаем что еще может влиять на сохранение состояния [музыка] что еще может влиять на сохранение и она не сохранилась он мы смотрим на пример и у нас есть эти увидеть текст что еще возможно можно пометить спиц флагом помой помню там был кто-то спец флаг игнорить вот это можно типа вьюшки по месяц что не сохранить состоянием xml
00:20:40 - 00:22:01
по комнатам есть куб атрибут специальный тему чтобы и convallis охране состояния это мы сейчас говорим про намерение когда мы намереваемся это уже вода это намеренно типа как она еще может не сохранится в стандартно типа если все это за им при меньше но если не вызывался метод очэс на самом деле даже не знаю даже интересно узнать ну смотри первое давай начнем издалека тогда обсудим как происходит это сохранение как до грубо говоря банально типа создается когда activity перед перед он пал спамом или передана стоп и
00:21:28 - 00:23:00
не помню конкретно там немножко менялся вот метод вызывается метод он сайт данстон state то есть на передается банду созданный снаружи в которой складываются все состояния то есть этот банк был он такой комплексный короче получает фактически туда складываются состоянии activity фрагменты все вьюшки которые сейчас прикреплены так титушко это такое получается какая матрешка бандл bangle такой который собирается изолирована вот потом этот бандл соответственно стерилизуется то есть этот специальный формат котором можно
00:22:23 - 00:23:18
сходить только данный который можно может стерилизовать android там примите выпрыгну короче их там очень ограничено вот фактически все это реализуется и потом может восстановиться по моему только не то что там есть ограничения на 1 мегабайт что это не может превышать одного мегабайта раньше по мы там был крыш вообще типа не знаю как сейчас кстати я как-то давно уже эти лимиты не переходил а вот но вот это то есть магом было происходить проблемой завод как слишком большого объема данных которые до запихнули про
00:22:51 - 00:23:55
там банально тебя и зале к нему данные которые пришли из базы данных из реализовали туда все огромный список вот а потом когда соответственно происходит перед в основном смена конфигурации происходит создание нового инстанция activity система вытягивает банду котов который был сохранен на диске и соответственно распихивает его по всей иерархии после того как она восстановится грубо говоря передается бонк бонк рейд сигнал стоит бандгруппы activity совместного фрагменты и вьюшки когда они совместно отрендерится на
00:23:23 - 00:24:33
иерархии и хадиш ники будут проче каяться совпадет айдишники соответственно нее передаются во вью шкаф вон restore вон restore степун и или украсть что-то как вот как-то так называется метод да и туда тоже приходит там только не бомбил тампон парселл приходит добавишь к пумапард потом нужно создавать и по сво этот чел давлю всей встык вот и фактически но он он проявленным клементе парсел был и соответственно историческом спросил объектом работать [музыка] так значит рассказа еще один кейс у нас есть
00:23:58 - 00:25:19
который мы явно не проговорили но его можно уже достать из твоего рассказывает а то что если у нас есть например и гид текстом и сделали там не знаю своего наследника с каким-то полем дополнительным ну или любую вьюв указ тонну и не реализовали этот метод то тоже будем терять эти данные до небес грн сохранен состоянии потому что он всегда состоит он реста он restart это не вызывается и споры из-за родительского класса и практически не проникал если у нас есть своя еще визуальная составляющая ну типа мы можем
00:24:38 - 00:25:49
потерять ну если мы ям дается фактически мы создали свою вилку которая есть там state и которую мы не сохранили в это состояние да естественно будет теряться все что мы не сохраняем она теряется и ты проговорил грубо говоря это все про связка с activity вот а что с фрагментами происходят вот у нас может быть завёрнут весь your love какой то фрагмент вот может ли быть потеря 100 это связано как с фрагментом но фрагмента получается не все насколько помню сохранят свой стать через fragmentmanager что там хранится весь
00:25:13 - 00:26:38
стек вот эта привязка их поедешь ником какие то ну грубо говоря дефекация фрагмент кого хищнику стоит и прочим то есть вот он там все внутри заведует когда у нас происходит восстановление фактически он становится только те фрагменты которые нужны то есть не все типа как они могут потеряться как они могут страну что они будут теряться на самом деле я честно не не не очень представляю как они будут теряться есть такой популярный workaround фрагментом чтобы потерять его состояние такой костыль что потерять его
00:25:57 - 00:27:22
состояние то есть давай даже так обсудим вот фрагмент менеджер хранит у нас все типа фрагменты каким-то добавить его в добавить его без какого-то тега li идиш ника чтобы он интенсифицироваться не мог не уверен что это важно но вы просто гонец на самом деле интересно несколько инстанций фрагментов одного и того же типа все добавлены без тега друг друг другом грубо говоря и как-то понять какому вернуть вас на лето что инсцент это разные сирин у них то типа нет никакого т.к. там прочим типа не ну легко могут
00:26:49 - 00:28:15
фактически создать коллапс типа да да но у них есть яндекс вот тут смотри я сейчас другую те дома на водку что чтобы мы к этому пришли что у нас есть поверх добавление фрагмента некая сущность он с помощью которой мы эти фрагменты добавляем же кладем стек каким-то образом ну или не кладем стать просто вот так добавляем типа нельзя просто так взять и сказать вот фрагмент я его добавляю нужно ещё кое-что сделать и вот этого кое-чего есть такой метод к стильный который все я понял про что ты про транзакции и элул стоит луз типа
00:27:33 - 00:28:59
называется да ну да да тип такой есть можно делать гриппа что короче фактически ты можешь выполнить транзакцию фрагмента после того как произошел вызов функций quentin state если вот не сделать к металлу стоит луста у тебя будет крыш тебе скажу что ты пытаешься выполнить транзакцию после того как сохранилась состоянии уже фрагмент фрагмент менеджер типа и она не будет сохранена типы ты потеряешь это все а вот ну и сам фрагмент потеряешь даже вообще ничего жизнь ставить если ты сделаешь i'll stay
00:28:16 - 00:29:17
close to он за к метается то есть покажутся но фактически да типа сохранить состояние у сохранится уже не может потому что этап сохранять состояние уже произошел но в бег стеки тип он будет да то есть получается у нас есть какие сценарии это не доедешь ника например касторное вьеха не реализовывает мы явно в фрагменте завернули estate и зака метильный позволив потерять какой-то state но на самом деле тут мы тут вопрос какой стыд мы теряем да потому что этот это короче более глубокий вопрос что вот мы что-то уже сохранили она
00:28:47 - 00:30:15
что-то сохранилось и вот потом мы что-то меняем и вот мы меняем и говорим комитет теряя и вот что конкретно теряется все или какие-то кусочки это уже другой вопрос но мы не будем это обсуждать потому что я сам уже забыл вот и я задам другой вопрос из-за чего обычно происходит вот эта проблема что нам нужно этот commit a уинстэд лосс вызывать да то есть ты сказал что уже сохранили состояние и тут почему-то нам опять нужно что то делать вот вопрос как так мы написали код что носились какой-то фрагмент и мы почему то что то
00:29:34 - 00:30:59
там делаем после сохранения состояния и под какой год может приводить к такому там получается все транзакции они выполняются через хендлер они фактически друг за дружку одна за другой идет и соответственно все вклиниваются в хендлер main потока типа тоже все там call бейки соответственно когда выполняется и прочим фактически может произойти такая ситуация что мы можем вызвать первых сама явно типа 1 потому что мы можем вызвать его слишком поздно грубо говоря когда уже идет процесс уничтожения и какой-то callback может
00:30:17 - 00:31:24
сработать асинхронной операции тут явным явно был даже явно был crash я помню в ударах это старая pioneer мало кто помнит вот когда ты вон not finished пытался делать транзакцию выполнять он прям крышу со говорил что нельзя сделать и pascal там по металлу статус неявно даже вообще не зависимо по стопам должны в начальном там все даже с любой транзакции падал то смотрел все типа нельзя потому что типа вон тот финиш типа это нельзя обрабатывать вот явная самая ситуация до пуска до этого синхронной какой-то операция делается и
00:30:50 - 00:32:00
соответственно не треки вается типа в каком состоянии сейчас находится все когда еще до опять же наверное в очередности то есть грубо говоря потому что всем один хендлер пихается и факт гипотетически может произойти так что процесс начался когда уже соответственно мы поместили наш события но уже в очередности события лежала пашу типа будет кружиться итерации тоже потеряется вот какие то еще наверное идей нету больше не приходят вот исходя из за этого мы могли бы как-то системно решить эту проблему чтобы нам
00:31:25 - 00:32:39
не пришлось ловить этот краж а потом в том месте касты ведь это методом к металлу instead лосса как-то по-другому короче гарантировать что мы не получим такой ситуации во фрагмент куинджи там есть проверка им по как параметрам зато мы круче с типа находятся ли сейчас фрагмент менеджеры в парк и там пол из короче находится ли он сейчас процессе сохранения состояния то есть фактически что уже нельзя или не находится наоборот вообще ну короче сейчас выпрыгну той же можно узнать вот в каком состоянии
00:32:01 - 00:33:04
сейчас все это происходит и можно ли безопасно комитет туда или нет вот еще правильный вариант конечно типа при уничтожении вьюшки начинает де строить не устроить консоль из операций асинхронные либо делать их через какие-то калмыки которые явно привязаны к жизненному циклу который не позволит нам выйти за пределы безопасные зоны да ну все равно даже с этими кубиками может случиться такой вариант что лучше всего конечно же проверять непосредственно перед вызовом этой транзакции который потенциально опасная
00:32:33 - 00:33:44
в каком состоянии сейчас находится у нас фрагмент и можно ли вообще там закомитить ну fragmentmanager даже в которой к месяца будет [музыка] вот я думаю что я получил все нужные ответы вот пойдем дальше дальше меня интересует то как обрабатываются туши вот такой кейс получается ну понятно что пуше и есть практически в каждом приложении вот и начнем там с простого что вот нам пришел какой-то push и как нам в обработке этого пуша открыть нужную activity ли фрагмент ну зависимости от того что ты чаще использовал что те pro
00:33:08 - 00:34:47
studio проще рассказать вот как из пуша открыть нужны нужную activity или фрагмент как из pusha t мой прадед пленки какие-то что-то говорим или как вообще принципе просто это наверняка хорошая гиблинг а может быть какая-то логика фактически банально типа у нас до самый важный момент чтоб уж у нас может прийти типа в двух состояниях дух состояниях приложениями в dota 1 когда приложение запущено и соответственно что-то приходит нас есть какой-то стек возможно даже что-то активно и на экране второй момент что
00:33:58 - 00:35:11
когда наше приложение на процесс нашего приложения остановлен этого два важных момента типа 1 и соответственно нужно понимать типа в первой ситуации мы должны понимать как мы открываем этот экран то есть и потом в текущем back stack или прочим либо мы открываем в новом приложении соответственно там немножко хитрее вот для того чтобы если мы вот у нас приложение наши мертво приходит push с бродкаст ресивер наша нет сервис уже сервис томаса весна приходит вот этот ивент кута что push пришел то соответственно нам тогда нужно
00:34:39 - 00:35:51
запустить его обязательно либо в новом тоски потому что фактически типа столкнуть activities бродкаст ресивера напрямую нельзя потому что activity должны в каком татарский обязательно быть вот если мы этого не сделаем то будет crash причем такое крепком будто 8 android там потом дальше не стали то разруливать как-то самостоятельно под капотом или может другой версии но фактически типа нужно помещать именно intent который запускать будет activity он должен быть помечен флагами там new task вот и
00:35:15 - 00:36:19
соответственно там выбран каком формате он нам должен запуститься вот так же вообще по правилам рекомендуется чтобы мы там делали не не просто даже а именно только самой the activity запуска в принципе со найдете кого-то частью иерархии там и соответственно создавали bags т.к. запускали весь его то есть фактически запустятся наше последнее activity но будет создан тасс в котором сразу есть бег activity по которым будем проходиться например если это не знаю ч какого-то заказа и чтобы дать ему дойти
00:35:47 - 00:36:44
нужно зайти грубо говоря там зайти в мой профиль потом в заказы и вот получить информацию об этом за качество фактическому снова без т.к. не так что откроется информация заказе и на про нас просто выкинет назад если мы нажмём бег вот то есть это рекомендация возможно по логике кого-то не будет подходить вот если у нас приложение уже активно я вот тут как бы этот кейс тоже не заработать фактически тип у нас происходит открытие в новом тоски которая оля наверное правильная и соответственно чтобы на как
00:36:16 - 00:37:16
раз то типа просто открылась показалась им и когда нажали бэк что мы вернулись то место где мы были вот это важный аспект да вот наверно как то банально так плюс там еще есть ограничение что в принципе права android 12 уже вообще не можем так делать то есть он бродит двенадцатом мы можем делать только notification или по моему упал в 12-м да мы сможем только notification показывает с activity из бэкграунда нельзя напрямую запустить только пользователь может инициировать своими действиями [музыка]
00:36:45 - 00:37:57
но в целом меня бы устроило и да и и знаки шина вот вопрос такой не получается если но я услышал типа следующее что нам обязательно нужен новый task но какой-то task если у нас в этот момент приложения была запущена работала мы не можем как-то в текущей task положить просто сверху activity а можно можно положить там есть типа спец флаг который кладет до который полон там типа есть писание по который кладет в последней текущей task но если он позволяет если он там не сингл activity какой-нибудь как помечен
00:37:23 - 00:38:52
впрочем тонн соответственно у него постарается положить вот если бы у нас был фрагмент грубо говоря как бы это для нас убежден как бы свои моментом это хитрее потому что нам нужно запустить какой-то хвостовой activity потому что фрагмент без хвостовой activity в котором он и все хранится делается не может если это как раз то у нас какой то фрагмент который у нас лежит каком-то стыке глубоко то там нужно советом будет каким-то либо своими какими-то костылями делать типо что то свое решение которое
00:38:09 - 00:39:14
позволит нам соответственно вот этот стек создавать из фрагментов ту игру говоря какой-то он такой debling в рамках activity вот который позволит нам это распознается собрать the task банально типа но я не думаю что это массовое решения которые для всех подходите по езжу так новейшим который умеет это делать сразу сам вот но это типа скорее более низшего решение для тех кто это использует типа не общепринятое но смотря как фактически это будет если у нас уже есть activity с какими-то фрагментами с каким-то стеком и вот у
00:38:45 - 00:39:58
нас появился фрагмент и мы хотим как-то его куда вставить ну и нам тогда нужно как минимум делать чтобы у нас это activity не при запустилась у нас там опять же помню в intense есть и по спец флаг для этого чтобы доставить как в on you intend они запускать не войск 9 сразу же существует ли батон специальный танк мог поставить у activity который так и делаете по single tap соответственно вот is no single tap либо можно в манифесте то просто вид либо в intense можно просто есть этот след activity есть там не и он
00:39:21 - 00:40:36
придет ванги нтв only intense мы на этом можем соответственно распарсить инфу и получится отвесно организовать уже какой то проход по фрагменту посуду опять же то есть скорее всего нужно делать вручную потому что для фрагментов типа нет ничего стандартно чтобы вот взять сделать мы можем просто сделать какую-то либо транзакцию в текущем контейнере где там все наши фрагменты хранятся либо можем какой-то собрать стек и соответственно то есть несколько сделать добавлений фрагментов под которым просто нужно
00:39:58 - 00:41:09
стать восстановить из фрагментов рамках одной транзакции и включить оптимизации которые просто проски поют допустил создания intent-а фрагментов который был полностью перекрыт и другой глаз фактически как типа искусно back stack создать который будет вот по ним проходить [музыка] так окей про оптимизации я знаю что у транзакции есть оптимизации которые позволяют грубо говоря склеивать операции до что если мы где-то добавили а удалили а дальше по стыку то мы можем это склеить и ничего с ней не делать ты а ты про
00:40:34 - 00:41:50
какие говоришь оптимизм а там фактически грубо говоря есть один и тот же контейнер и ты на программках одной транзакции делаешь там риплейс риплейс и плести по несколько фрагментов он просто типа оптимизирует опять же понимаешь что ты фактически только последний фрагмент будет оставаться там последним и добавлять добра первые там несколько просто сделал то этого не нужно это не имеет смысла потому что они фактически другая будут добавлены сразу же ухожу заменены фактическим простых back stack помещает но если ты там добавил этот ну
00:41:15 - 00:42:13
эту back stack и фактически только добавляет последним который в этом контейнере останется [музыка] смотри какой кейс вот мы знаем что из нотификации когда ты делаешь какое-то действие у тебя появляется модификация искушает и хочешь по нажатию на дефекацию что-то открывать ты используешь какой-то pendingintent меня вопрос а почему мы не используем просто intent зачем вообще появился какой-то pendingintent в этом сценарии проблема в том что intent а так метко брюшном тифе кей шины это вообще другое приложение и туда передать
00:41:44 - 00:43:20
объект который создан из каких-то наших типа впрочем так просто нельзя фактически этот бензин контент это обертка которая специально запускается в в процессе нашего приложения с нашим там классами прочим чтобы все это могло завестись потому что фактически мы нам даже можем положить какие-то данные которые что-то не складываются или прочим и не держать ссылок ничего общего то есть фактически intent типа более жесткая связка красно поединка нд вот это типа такой силе зум и меж процессный формат наверное для типа для передовой к раза
00:42:35 - 00:43:39
для запуска каких-то элементов из другого процесса это опять же банально типа эта вот и виджеты который на рабочем столе и the notification это аккаунт-менеджер которым тоже такая есть все что работает в системе в другом процессе прочь мной передается чувство форман туда intent напрямую получить вообще типа его запустить не получится просто потому что он будет intent он должен он должен опускаться в правильном контексте например если intent мы положили кто-то приватный компонент нашего приложения
00:43:07 - 00:44:06
там грубая к нибудь activity когда мы хотим запустить и она является типа не экспорт экспорт от фолз у неё стоит то мы не запустим не мы не сможем запустить из контекста другого приложения только из нашего и графствах pendingintent фактически позволяет вот это делегировать контекста этого приложения запуск вот этого интента с которой в него зашивается получается такой механизм чтобы другое приложение могло потом как чтобы другое приложение до могло вызвать все это корректно и запустить не нарушив никаких
00:43:37 - 00:44:41
прав то есть по безопасности по изоляции процессов по изоляции приложений друг от друга так дальше у меня следующий такой вопрос по поводу назовем то навигации что то типа того вот мы с тобой уже обсуждали сегодня транзакции всякие стеки фрагментов ты там упоминал сценарий что у нас может быть например один и тот же фрагмент как-то добавлен в разных транзакциях и там что-то как это обрабатывается у меня вот такой вопрос как мы можем например одновременно на экране отобразить вот один и тот же фрагмент ну то есть им
00:44:09 - 00:45:49
тип класс один и тот же вот мы хотим одновременно что нас два таких фрагмента показывались на экране там сверху и снизу например как это можно сделать ну банально выдали поправил лучше иметь чтобы для каждого был свой контейнер у грубо грязью групп в которой не помещаются со своим айтишником и фрагментом лучше задавать когда выполняется их транзакции мы там и 3 place что ни будь то есть добавлять им так уникальный который соответствует их там средств чтобы цифра внутри фрагмент manage не с помощью этих тегов корректно
00:45:02 - 00:46:09
разрули вались вот ходите по если они в разных контейнеры будут это та же ситуация по и нормально разливается потенциально можно также поместить в один контейнер вот типа особенности по если нет бэкграунда то будет такая страна штук что фактически вас типа будет лежать ну просто в один тот же контейнер поместите два фрагмента не важно 1 класса вот пусть они просто грубо говоря будут как во фрейм loyalty вьюшки друг на друга наложены и фрагмент который снизу в юшку он будет показываться но steam нельзя будет
00:45:36 - 00:46:36
ничего делать интерактивный только верху последний который добавился вот это типа вот такой как бы штуковина которого час остается спотыкались разработчики когда вызывали не replace it на новых ну да новых транзакциях тот же контейнер и перекрывает тот ну поверх него лежит если проезд бэкграунд полный там гру буря если у фрагментов врут о во вью есть полный баграм бел этого видно по нибудь это фактически да то есть потому что грубо говоря типа фрагменты тонул он набор отвертка на движкой это в юшка создается
00:46:06 - 00:47:15
добавляется вот этот viewgroup в которой у нас пользы как контейнер для фрагмента и грубо говоря со ну любая любое viewgroup если какое-то кастомный конечно по способен выдержать там больше 1 view то есть мы просто потом банально очень часто для фрагментов краски используют фрейм layout который просто по сути своей есть то есть для одной вьюшки которые просто друг поверх друга раскладываются на sony to match parent если потом брат контента который может быть немножко по-другому это выглядеть после match parent а будет вот прям
00:46:44 - 00:47:41
полностью перекрыть и [музыка] ok [музыка] следующий вопрос по поводу того что как можно рисовать вкладке докажи со своим бег стеком на фрагментах многие на фрагмент вот тебе надо было сделать как бы ты это сделал вкладку не просто не доводилось такие тянуть и бог стеки диас если вкладку каждую со своим независимым банально можно типа взять что каждая вкладка это какой-то фрагмент и в нем все навигацию внутреннего осуществлять через child фрагмент менеджер то есть грубо говоря так практически каждый фрагмент это
00:47:13 - 00:48:50
будет хвостом табор и у каждого будет свой вложенный стек внутри вот переключениях происходит независимость фактически мы когда вытягиваем то будет восстанавливаться чем child фрагмент менеджер с текущим состоянием и соответственно с его стоит там который внутри него хранится вот я помню там были какие-то проблемы раньше вот этим чаем фрагмент рожу сохранен состоянии вот этих ложных фрагментов не знаю насколько него сейчас есть вот я бы обязательно чекнул бы это потому что есть сомнения по поводу
00:48:09 - 00:49:09
работоспособности этого подхода окей ну да недавно появилась из коробки это это еще появится этап следующий навина виднейшим библиотеки дата стёпа фактически fragmentmanager сейчас пилится чтобы поддерживать несколько мульти-пульти back stack но и новейшим тоже будут поддерживать вот на этом счете повалите пока окей так но пошли дальше дальше вопрос такой что у нас есть задача загружать файл на backend и вопрос как мы бы это сделали как бы ты это реализовал но однозначно это нужно делать чтобы файл грузится независимо от тела и
00:48:38 - 00:50:04
приложения независимо от его я это либо тогда либо сервис либо work менеджер а то есть учитывая как сейчас этот тренд вообще во всем этом это скорее всего только word менеджер уже потому что ограничение контроль 12 долл там еще сильнее чтобы это было больше гарантий того что он выживет это был бы foreground сервис 0 и x 5 the job work менеджере который как раз типа ну фактически типа будет вот таким аналогом этого всего вот в рамках него соответственно это будет все выполняться единственное что
00:49:27 - 00:50:37
сварг менеджером там типа нужно будет повторно делать и там есть гора короче если приложение которым редко пользуется есть шанс того что им не даст ничего делать вот просто потому что есть up стенд бай бо кита который регулирует но как часто приложение может запускать джо бы и соответственно ограничивать его в этом вот так что самый гарантированно в варианте по это вот именно foreground сервис каким-то исключений в какой-то попадающий исключительную категорию и соответственно вот его запускать прочим
00:50:01 - 00:51:12
типа даже с ним нужно все но сохранять состояние когда-то перезапускать потому что for ground сервисом на слабых устройствах имеют приоритет ниже чем activity foreground activity короче может быть убит все равно поэтому типа нужно сохранять state быть готовым к тому что это восстановите перезагружать файл в идеале типа если имеет нагрузку на сервер тоже говорят что можно загружать файл частями и продолжить какого-то места ну либо перезапускать если сервер такого не умеет как бы мы сохраняли это состояние при
00:50:37 - 00:51:39
смерти сервисом там есть прям у сервиса есть политика типа рестарта его там можно прямо при создании сервиса по моему я не ползком на методом типы обожает все флаги там типа есть прости кисть там вот разные тихой если честно уже не помню их вот то есть этим можно соответственно регулировать как будет возвращаться сервисы там будет зависим бутыли доставляться intent который изначально вот пришел для которой инициализировал запуск сервиса или не будет он приходить сохранять состояние загрузки нужно
00:51:10 - 00:52:20
какой-то persistent storage ну банально это можно самый простой способ взять какой-нибудь шарик profile там и через дата столь библиотеку ну или врун если нужно что-то более структурированно и тяжелая сохраняется о комплексом стоите эти загрузок нам несколько прочим вот там или какой-то другой ну в общем это pure system storage который позволит вот этот стоит сохранять между стартами при стартами процесса [музыка] окей почему мы не можем просто взять поток и отправить файл поток во-первых ну поток как минимум
00:51:46 - 00:53:12
откуда-то должен стартануть поток он никоим образом не повышает про приоритет работы приложения и фактически как только наше приложение свернется в нем не будет активных компонентов ну который находится там сейчас они прочим то системный менеджер памяти просто может наш наше приложение в дом момент кинуть жестко процесс клянусь приложение и соответственно наш поток тоже жестко прибьется вот и соответственно мы ничего толком не сможем этого сделать это можно сделать конечно но шанс того что наше приложение
00:52:28 - 00:53:39
проживет очень долго минимален вот то есть скорее всего мы просто так ничего не успеем загрузил тонн если файлы большие возможности прямо супер скорость и маленькие файлы мы еще сможем успевать загружать но на практике типа мы не можем гарантировать не хорошую скорость интернета него стабильности не повторов ничего поэтому нужно что-то именно более долгоживущая которая система android может анализу понимать что в этом приложении есть сейчас активны и задачи и соответственно повышать пролить этому прилож не давать
00:53:04 - 00:54:05
ему жить дольше [музыка] ok смотри получается мы определились что у нас был бы какой-нибудь вак менеджер тоска или там service for грамм сервис вот и мы бы хотели потом на верный результат работы как-то вернуть оттуда откуда она стартовала да скорее всего это нажать и наконец кнопку было вот и вопрос как мы бы возвращали результат туда например нажали на кнопку там что-то прогресс копыта пошел сделали notify кашку for brown сервисом вот все завершилось мы захотели в кнопке там поменять куни галочку отрисовать там
00:53:35 - 00:55:11
красиво как это как бы мы этот передали результат ну типа способов несколько может быть там самый такой наверное один из распространенных это бантинг сервису то есть фактически когда activity у нас стартует мы боимся к сервису и треком его состояние это грубая мая организован какой-то там pointer интерфейс и соответственно таким образом это происходит взаимодействие если у нас work менеджер work менеджер по моему помню там был какой-то способ подпрыгивать состоянии работу джо бы понимать что там на в
00:54:22 - 00:55:33
каком состоянии вот поводу камбека я не помог тоже что-то было я я честно не помню вот еще банальный конечно есть типа такой создать какое-то просто не знаю менеджер состоянии загрузки и соответственно куда-нибудь там когда загрузка is worth менеджер сервиса заканчиваются туда пулять это состояние наш activities и может на него подписываться чтобы получать грубо говоря такой и какой-то ивент бас вот для именно для загрузочной части который грубо говоря то может это может быть там знала их даты рэкс и какие-нибудь это может быть
00:54:58 - 00:56:08
flow и скрутим с горя каким-то образом им получать но это в принципе способ близки к тому что я рассказывал тип она просто ну через бантинг вот но просто избавиться банить зданий грузить просто бандит ну не не самая такая простая очевидная штука которую нужно делать там побольше кода нужно будет а как мы смотри ты отговорил что система может нас прибить до грубо говоря и потом она может нас перезапустить если мы с правильным флажком сервис запускали в какой момент вообще система перезапустит этот сервис
00:55:33 - 00:56:57
когда в ней будет достаточно ресурсов вот этот момент когда мне будет достаточно ресурсов очень зависит опять же от имплементации менеджер управлением памяти в прошивке вентр оон перезапускает только сервис или в целом восстанавливает там процесса что соответственно то есть сервис нельзя запустить без процесса то есть создается новый процесс в рамках него стартует сервис точно про те же activity которые там были упились если они должны показаться на экране прочим то не будут показаны вот то есть но сервисы рестарта
00:56:18 - 00:57:27
нуца и даст возможность им средства продолжить свою работу вот этот момент он не понятен как он быстро наступит там яркий пример помню раньше мы еще когда был android 2 3 можно было google плюс запустить и прям все убивалась даже foreground рпц это был прямо такой о р м и киллер типа просто всего вот и соответственно потом на прежнего выходишь то мы же загадил на слабых устройство даже лаунчера пробивался вот там первую очередь запускался launcher а потом уже запускал субботу в системе есть приоритеты для
00:56:54 - 00:57:57
приложений то системные приложения определенную имеет вес вот есть приложение которое необходимо про лаунч который должен тоже работать и потом уже соответстви начинается restart приложения которые возможно то есть но в первую очередь конечно же пытается до тся при те чтобы этого не убить то есть расчищается память у системы есть у системы есть определенный типа алгоритм м.н. управление память систему android здесь мне определенный как она выставляет приоритеты процессу должен жить или должен умереть но
00:57:26 - 00:58:36
соответственно выставляете приоритеты и площади от наименьшего к большему оставляет то предварительно типа еще дает шанс им сохранится там предупреждаю что вы сейчас там будете убиты почистите память возможно вас не убьют тогда вот и средства проходят старается то есть идти от наименьшего к наибольшему ты сначала там будут пустые процессы которые просто живут они за нужно ли это рассказываю сейчас вообще не коротко но в целом наверно можно сейчас остановиться вот я хотела уточнить сценарий что вот у нас была был какой-то
00:58:04 - 00:59:22
activity стек ну activity task какие-то нас там были activity был какой-то сервис вот она остановилась и получается правильно ли я понял что система восстановит создаст новый applications и создастся сервиса что будет вот со старым activity если они должны показаться на экране то они просто будут дождаться момента когда пользователь там рестарта нил приложение говоря там иконку лаунчер нажмет или ну каким то образом пойдет приложение вот это момент типа там ничего снасти будет вопрос то будет хоронить то что был стек и стоит
00:58:42 - 00:59:52
от него сохранить то есть бандлы которые были сохранены как стоит вот если нужно их соответственно будет восстановить говорят нам показатели что-то кто создаст новый солнца вернется с той они все там будут восстанавливаться состоянии свое с нуля потому что сохранить произвольные объекты в памяти не внук android не может он только сохраняя то что есть стоите средства нужно вот почему типа сохраняется стоит он горазд и нужен на смерть процесса чтобы восстановить состояние максимально ну как-то максимально близко к тому что
00:59:18 - 01:00:18
было до смерти процесса ok если у нас получается вот activity стартует после сервиса то есть сервис перезапустил сначала там что-то загружать потом мы зашли в activity много смогли переменится к этому сервису да фактически бантинг сервис он существует сам по его инстанцию и на при запустить два сервиса на мой солнца нельзя то есть он будет он либо то есть базинг работает как если этот сервис уже запущен он к нему бензис и а если этот сервис не запущен то можно там тесно выбирать то есть можно собирать кто-то
00:59:47 - 01:01:07
биндер кстати помечать флагом там автостарт проще там разные флаги опомнились совместно то есть ну влиять на это поведение как он будет запускаться и он соответственно может запуститься может не запуститься вот таким образом поэтому механизме значит фактически даже к одному серверу может прибавиться несколько объектов одновременно тоже несколько activity окей про вспомнить короче про реализацию передачи какого-то прогресса через bennett мы обсудим следующий кейс был ты говорил что можно там как менеджер
01:00:30 - 01:01:34
создать вот есть создали cap and bass какой-то wenn du passe типа да как у да да вот как по факту бы он передавал нам на результат фактически просто получается он бы висел типа независимо такой 3 сущностью между activity и activity и сервисом сервис давнего пушил бы данные новые а соответственно activity бы подписывалась на апдейт что может быть будто реактивной подводку to call back то есть там не столь важно каким образом будут происходить точно фактически это был бы такой типа коммутатор другой сервер сушил минтай какие-то
01:01:07 - 01:02:22
заинтересованы в этом на него событие подписано вы заинтересованы события о загрузке различные там максивите ли кто-то другой мог на него подписаться весна получать стоит так можно было бы избежать бантинга но проблема встает тогда если сервис работает в отдельном процессе вот как раз та тут только тогда с bazinga можно обойтись вот это вот очень важный аспект он чтобы механизм байден как сервисом к роста сделан для мест процессного взаимодействия между различными приложениями или в рамках одного приложения
01:01:45 - 01:02:51
если этого в разных в разных процессах запущены компоненты смотри следующие в чем мы должны разобраться мы допустим что у нас там картине ржава грубая под капотом там бы юзался м лиры loopier поэтому опустим эту часть и вопрос вот каким образом мы в целом можем получить сообщение на нашем главном потоке с помощью этих двух штук как это работает как мы можем получить сообщение на главной стокер говоря у нас есть task manager он мы пушем результат с одного потока тот кто подписался получит на главном потоке вот я говорю что мы
01:02:17 - 01:03:48
опустим то что но под капотом там у нас есть хендлеры лупер до чтобы так делать с одного потока на другую передавать вот и у меня вопрос сразу следующий что как это вообще работает что мы с одного потока на другой с помощью камеры и loopier что-то можем передавать ну фактически типа лупер этот выпуск но наверно здесь правильно понял просто паха и лук против это способ организации как раз эти по бесконечные очереди событий фактически хендлер работа с кем-то лупером в которых все это загружаются события и злу кто то можно
01:03:06 - 01:04:24
этот лутер подписаться соответственно получать эти события а это все делается в рамках одного тока то есть грубо говоря то есть хендлер он может с кем можно работать множество потоков но он все это грубая синхронизируйте по делает очередь событий краст очередного toupper этой с это очередь событий и кто-то может тойоте по соответственно выгребать то есть фактически внутри можно просто это только бесконечный цикл который ждет когда что-то появится в нем и выдает эти события есть забыть серьезной если мы привяжем к main поток
01:03:46 - 01:04:51
грубо горя будет hinder рупперс main потока который все это принимает и пусть это все кто в лупили когда грубая будет приходить эвент будет 20 callback типа что пришел новый винт или прочим это соответственно будет вызываться в рамках этого потока в котором работает loopier а как вообще супер связывается с потоком лупер связываться с потоком так банально loopier j должен жить в рамках какого-то но прямо в комнату потоки живет типа там или какой-то водка хендлер трек есть типа что ним прям сразу создается этот лупер
01:04:18 - 01:05:36
инициализируется стартует он работает так ему привязать к то хэндлер который в него постит то есть супер же по умолчанию сразу в каком-то потоки работы после организации лупер сразу работает в каком-то потоки но он же должен нужно запустить вокруг петлю чтобы она пошла чтобы начала работать смотри такой вопрос что есть какой-то лупер и есть какой-то хендлер вот их in version саперам лупер связан с кем-то потоком вот когда ты какое-то сообщение fender кладешь она каким-то образом как-то долетает до
01:05:00 - 01:06:25
этого лупер а передал ему ссылку на этот нужный loopier вот и получается что есть какой-то поток запущенный до в котором внутри этот лук начинает работать вот и получается они связаны так что ты стартуешь какой-то поток и в этот момент связь и происходит ну да фактически хэндлер типа может быть в одном потоке лупер в своем каком-то потоки окей вопрос а как знаешь есть там типа проверка такая что мы проверяем если вы этого потока лупер вот как эта проверка работает вот тут не расскажу я помню что называется лупер мой лупер в
01:05:51 - 01:07:51
потоке там он вытягивается вот вполне возможно типа к потоку потока какая-то пометка возникает из-за этого фактически множество типа хундертвассера тип обычный тракт и возможно типа проверяется что является ли текущий поток хендлер трендом хотя в принципе лутер можно так запустить просто свой поток сделать там по ул упирать и поездкам какой-то . потоку возможно типа какой-то там есть вот вот не скажу типа гадать не буду прямо мне кажется песок это linking типа с потоком должен быть возможно типа как то система
01:06:59 - 01:08:20
трек от ну в рамках процесса трека ица какому сейчас там потоки с операми но думаю что это не очень идея [музыка] так ok следующий момент получается отпра хендлеры loopier и это про то что мы что-то кладем туда в этот лупер очередь до и вопрос вот этот поток который разбирают эта очередь когда очередь пустая он честен происходит вообще приход он простаивает ничего не делает просто вот такой я понимаю просто бесконечный типа петля он так и ходите по ничего не делал так он не дает потока умереть но
01:07:44 - 01:09:21
фактически не имеет никаких событий то есть фактически типа он уходит он ждет события когда к нему придет какой-то жаждут канал вот пополнился событиями основе два варианта либо мы блокируем ся и ждем какой-то там видно тифа и либо мы просто крутимся каждый раз бесконечное бренда мы не знаем мы мы так далее сносим бесконечно крутится знаешь поток всегда будет занят туда не попасть то есть скорее всего только выйдете файл кости по что он ожидает игра да ему приходится быть попадать и у нас есть какая-то очередь к
01:08:42 - 01:09:59
у это просто какой-то список да и он как-то синхронизированы между двумя потоками то есть другого потока ты можешь положить туда и с этого же потока ты сам можешь положить разве не так ну да да ну типа бесконечно ходить по циклу не красивое решение скорее типа лучше ждать события до типа им наверное вот тут у этой просто более правильным решением на ждать чтобы не бесконечна не ходить куда то получается лутер бесконечно будет работать просто ходить ждать что то есть но принципе так тоже делают это тоже
01:09:20 - 01:10:39
принципе вариант в одно блокировка типа то сразу не варианта тогда мы получим типа да блок который мы просто не сможем положить а поток который пытается забрать что будет заблокирован то есть в конечном итоге мы блокируем вся или крутимся в цикле крутимся в цикле я думаю скорее всего не красиво решили но на более простое типа такое ok следующий вопрос так как мы тут обсуждаем всякие фоновые штуки это вот у нас есть какой-то библиотека для аналитики вот и она требует чтоб мы ей извне передали какой that red bull сконфигурированный
01:10:00 - 01:11:29
вот вопрос как бы ты сконфигурировал thread пул для такой библиотеки аналитики как бы ему сконфигурировал вопросы типа конечно требований типа nude скорее всего однозначно я бы хотел чтобы это было что-то не факт что нужно быть синхронным потому что фактически события имеет таймс темпы и будут посылаться говоря по нему лучше производить как это по ним произойти синхронизацию на бэг-энде вот просто потому чтобы не нарушить правила даже передачи данных может происходить дольше где-то быстрее соответственно то есть
01:10:50 - 01:11:58
нужно иметь что-то гарантированное в плане отправки события да ты его опять в принципе вопрос можно ли доверять времени на устройстве вот тут можно типа как и в один поток экзекутор брать так и в несколько практически говорю про сложно четко понимать типа как это все будет работать вот то есть сложно этих требований оттолкнуться чтобы понять внешне каких то типа специфичны таких и я я просто не очень понимаете какие то спас личные вещи чтобы для этого задавай да но смотри 1 1 получается параметр количество
01:11:29 - 01:12:53
потоков то количество потоков которых актив которых работает потом пул пул потоков который может быть там задач хранится ну то есть ожидать выполнение то есть до которой могут ждать там пока освободятся потоки ну смотри давай сначала определимся мы еще прелесть количеством отыгрыш есть один поток если мы хотим все последовали ладили ни один в если мы решили что нам ни один поток нужен поскольку как нам выбрать сколько нам нужно но обычно отталкиваются на количество ядер в процессоре вот считают от него чтобы эффективно то
01:12:13 - 01:13:36
есть для циpкa интенсив знать что считают с не большее количество я тёр то есть для аналитики в принципе можно там у больше фактически так близко к ее и можно подбирать принципе характеристики наверно какой у dice но как моя этих вот с кедров то есть обычно и берут полон насколько я помню там два раза больше я der потому что зачастую не долго ожидают потому что они прямо сетевые такие вот тут про сложно типа выбирать баланс то есть именно от специфики аналитики ну я я просто не особо вижу почему ее стоит
01:12:55 - 01:14:01
взять в один поток то есть этот скин эти пони взять несколько потоков ну вот основываясь на том количестве процессора количество йозеф процессоре прочь вот то есть тут поэтому я я возможности куда не знаю каких-то специфических решений в этом плане окей то есть мы бы выбрали если мы хотим несколько потоков то мы бы выбрали основываясь на кадрах процессора так то есть на то чтобы явно там не перегружать его либо можно было бы выбрать но можно же было зафиксировано сдать потому что в принципе там не критично
01:13:31 - 01:15:00
вопросы по какой-то снова 5 огромный что 100 потоков не имеет смысла делать это был обычно либо вот но обычно всегда отталкиваться от как раз та вот количество ядер в процессоре из того что я видел на если у нас такое требование что мы хотим отправлять как можно быстрее просто все чтобы у нас всегда ну то есть очередь разгребала максимально быстро вот как под такую задачу фигурирует дэдпул максимально быстро у количество потоков мы тоже не можем сделать огромный потому что фактически мы тогда можем либо просадить просто всю
01:14:18 - 01:15:36
производительность либо вообще out of memory получить потенциально типа создав слишком большое количество потоков на устройстве которым потому что любой поток это все ресурсы такая-то память оперативная вот лимитировать их нужно вопрос тут наверное тебя понимать нужно сколько у нас интенсивно могут лететь события мы все равно там грубо говоря смотри почему много потоков можете могут снизить эффективность ну потому что начинается псевдо парализации множество фактически ну реально по-хорошему как это чтобы прям они
01:14:59 - 01:16:18
работали отдельно нужно что-то был один поток одно ядро когда у нас потоков больше чем я div то начинается уже такая псевдо параллельная работа то есть нас начинается выделяться кванты на процесс игру гайку скит времени в котором выдает с разным потоком работа на основе их приоритета впрочем и фактически у нас грубо говоря как пытают ну вот это банально типа там не знаю с кассами можно было с 8 класс и восемь человек обслуживание обсуждаться мгновенно а если у нас есть восемь концы этих же он там просто
01:15:46 - 01:16:53
клиентов в разных своих приоритеты прочим типа не соответственно могут попадать праздную очередь причем еще перескакивать между ядрами вот в процессе своего там с на выполнение поочередного вот и это короче может случаться типа не что у нас одни ну задачи будут выполняться дольше какие то какие то быстрее до сна гарантирован типа быстрого выполнения мгновенного их можем не получить просто потому что я про перегружены работой плюс надо учитывать что я др еще не только в рамках нашего приложение работают в
01:16:20 - 01:17:24
рамках всей системы то есть все приложения на них кладутся смотри же понимаем что отправка аналитики это же в первую очередь нагрузка и и и мы а да да вот поэтому и говорю что принципе вот можно было бы брать коранический близкий к ю к ю экзекьютора dispatcher и в excel и прочим то есть канаде они обычно берут их там два раза больше чем я dirt потоков вот но как бы все равно огрузка на циpкa есть вот там простой езда обычно сетевыми операциями особенно есть простой вот мы создание потока это ресурс даже если это его все будут
01:16:52 - 01:18:11
операции сам сама зажигание потока инстанция потока эта память мы тоже поэтому не можем их создать огромное количество про то мы можем создать пул там вот два раза больше количества ядерно пример или там в три раза больше но мы не можем там создать вот сколько нам захочется абсолютно любом устройстве мы не можем потому что это неэффективно и потому что это много по и неэффективной потому что можно получить проблемы с памятью да смотрите там привел пример того что там у нас на самом деле ядерном 6 потоков гораздо
01:17:31 - 01:18:40
больше из-за этого они там по очереди получает какое-то время на обработку свое за своих задач а почему это целом неэффективно типа почему вот ну получил бы свои там пол метну миллисекунду свою или там 5 но отдал другому типа вас просто потому что есть потоки более приоритетные которые будут получать это чаще есть приложение которое 5 же более приоритетной которые тоже будут получать то чаще вот фактически просто задачи с низкими приоритетами могут очень долго выполняться из-за этого потому что
01:18:11 - 01:19:38
просто они будут простаивать это типа это не то чтобы не эффективный механизм то есть это механизм замка которого позволяет нам создавать потоков столько сколько мы хотим то есть ну если не считать там память если просто этого бу механизма не был наш ибо потоки просто будет ждал . я каждый выполнялся друг за другом то есть фактически у нас бы наша параллельность реальная сводилась бы количеству ядер это доступно только для выполнения вот этих вот задач поэтому у нас бы происходило именно такое что вот
01:18:55 - 01:19:53
просто идем из другая всем и сводились и ждали когда каждый поток обслуживаться и один из какой-то потоков могут быть очень долгим фактически мира заблокировать ядро надолго фактически из-за своего долгого выполнения вот ему грубо горя не было такого механизма псевдо параллельности то есть фактически hydra выполняла бы его без остановки пока не выполнит весь этот поток а когда вообще система понимает что можно освободить ядро передать кому-то другому есть атомарные операции которые позволяют это выполняет говоря
01:19:24 - 01:20:35
любая пир ну типа в любом потоки любой ну либо поток все так бродите по фактическому даже не поток программы то есть набор шагов которые выполняются вот в рамках неё типа есть атомарные операции как раз та гарантируется что выполнится вот безопасные прочь вот в рамках него не за один шаг выполнение на ядре выполняются вот циклическая операция на полу нас может произойти переключение другой поток это вот грубо говоря там яркий пример почему нельзя доверять там инкремент у потому что фактически инкремент он может быть разделен на три
01:20:09 - 01:21:20
отдельных операций выполняется не сразу другая сначала может считаться значение потом она взяться за добавится единица по что с новой после записаться практически это может разбиться на три отдельных шагов в рамках которых могут произойти выполнен других трех потоков которые могут там что-то модифицировать то есть грубо говоря у меня есть тело функции какой-то и вот я построчно что-то делаю на любой строчки система может забрать у меня ну если если самому не синхронизировать до явно я не делать
01:20:45 - 01:22:00
потока безопасны эту секцию и получается если мы делаем потока безопасно это гарантирует нам что это в одном у нас никто не заберет ресурс пока мы не доделали что туда другие потоки не попадут чтобы что-то там не наворотить вот она может приостановиться выполнение на другие потоки туда просто не смогут попасть из потому что нам придут объект блокировки захвачен например и соответственно не будут поэтому безопасно делаться следующий кейс про настройку тот план допустим вот ты говоришь что вот чтобы
01:21:24 - 01:22:37
максимально эффективно сделать мы там что-то сделали какую-то настройку оказалось что у нас по одному событию в минуту а мы тут много потоков выделили под эту работу как можно было бы еще настроить до 3 тб ул чтобы у нас не было лишних потоков они могли по дну можно настроить его так можно самому создать фабрику потоков то есть ему еще перегрузить когда будто 20 создавать всем потоком в рамках нее высокий приоритет которые происходят там я помню есть это вот штука чтобы меня создавать вот потоки которые стартуют
01:22:07 - 01:23:36
трек factory или как я не не уверен я я я не знаю серёга я прав там есть такая штука да типа контролирует процессе его не and factory есть но по факту вот но ван дротик orchestra то он любит сбрасывать да он любит сбрасывать приоритеты потоков вот поэтому типа там опять же то есть самый гарантированно способ за прям хочется очень четких отправлять все делать хорошо и прекрасно это наверное выделение какого-то сервиса с отдельным процессом рамках приложения 2 прим будет отправлять их и жить отдельно и на него
01:22:51 - 01:24:02
не будет эффекте память основного приложения вот [музыка] так зафиксировал окей мы вроде настроили все отдавай посмотрим что дальше у меня есть вот дальше такой вопрос у меня что мы видим что у нас прошли текке прилетает крыши out of memory какие-то крышей что наше приложение почему то падает memory вопрос как бы ты делал поиск и решение такой проблемы что вот здесь как раз и out of memory чтобы ты искал на чтобы смотрел первую очередь я бы собрал по максимуму информацию с крыш lithic это там устройства на которых происходит крыши
01:23:30 - 01:25:32
устройство которых происходит крыши до места где все это происходит ой извините просто еще раз вот и соответственно попробовал бы понять пользоваться диски сценарий где это просто но и места желательно где это происходит то есть по тем кускам информации которые есть в краж lithic подписчик дети по произошел краше где происходит накопление чтобы это вообще проанализировать прочим банально типа для старта я бы сделал что приложение за интеграл были камере ну это вообще бы я сделал так в принципе в
01:24:34 - 01:25:34
целом чтобы отслеживать такие объекты как потенциально висят в памяти и соответственно не умирают вот и потом естественно нужно пособирать дампа памяти если но это опять же точно это полезно только если ты знаешь куда идти копать и понимать ищем каплица желательно это делать на с устройством которого мало памяти выделяется из вот этот объем памяти для мы для приложений небольшой то есть фактически это устройством 2 3 мегабайт 23 giga пиратишки чтобы быстрее получить эти проблемы вот известно позволит быстрее следить даже
01:25:12 - 01:26:21
банально на графике по если вот анализировать там впрочем там в реальном времени в через android можете друга как инструмент это позволит быстрее отследить вот эти вот всплески где это происходит и где копится то есть мы бы попытались что-то потыкать и пособирать дам ну сначала проанализировать информацию где происходят крыши что перед этим происходит в каких местах происходят крыши вообще что там накапливается и потом соответственно уже постараться то информации идти проверять да действительно ли это наша гипотеза то
01:25:48 - 01:26:59
что фактически типа это может быть просто и при определенном наборе действий то есть когда пользы дела грубая там вот реальным пользованием приложения фактически скорее всего типа тестировщиков такая ситуация может возникать вот потому что они больше пользоваться рири как реальный вот со мной тестовыми сборками и вот тут соответственно можно попробовать эти найти объекты которые висят в памяти не умирают долго и накапливаются постоянно the cookies вот ты упоминала ли генри да что он помогал нам что-то найти вот как лик
01:26:25 - 01:27:46
анри понимает что утечка произошла о хороший вопрос аликина и он фактически я потом используете это api связано с этим строки нгам памяти который есть в андроиде подписываться на вот такие все объекты и соответственно коллекции дамб и когда происходит паузы в приложений там паузы активистам просачиваться он сразу делает дамб и позволяет его посмотреть вот фактическом имеет дампы памяти делать и вот анализировать что сейчас там происходит ну банальный то подделок примитивный анализ вот получается я свернулся собрал дам
01:27:07 - 01:28:21
как мне понять что в этом дамбе есть утечка как понять что в этом дампе есть утечка фактических хранится ссылка значит должна храниться сильная ссылка на объект который никем не используются там банальны этот яркий пример ли кинерета на сцену информацию трек этом про там activity в юхи вот который в принципе сами уже не были уничтожены но ссылки на них все еще где-то хранятся за хардкор директом через контекст или что-то вот банально такие объекты обычно накапливаются то есть они накапливаются смысле или всплесками происходят это
01:27:48 - 01:29:10
прямо там при перезапуске то есть такие штуки видно да как еще это в дампе анализировать вот тут прям остановимся здесь какие-то объекты которые где то есть ссылка но они не используются вот можешь привести пример какого-то объекта который мы понимаем то есть нам нужно понять две вещи первое что он уже не используется он давайте поймем как по объекту понять что он не используется но это нужно такой объект на которых мы то можно понимать рынок тевис мы можем это мои брали типа если activity была
01:28:35 - 01:29:49
сзади стройно то есть на уже не отображается ничего не показывается все пользователи из него вышел но объекты и висит вот это явно мертвого объекте но произвольном объекте так нельзя делать с ноем опять же нужно понимать мне нужно быть какой-то критерий понимание того что нам этот объект больше не нужен там явно это можно например быть с картинкой то есть но опять же мы картинку не можем как вот мы можем bitmap и привязать условии что вам больше не нужно искать по наше личное понимание типа что вот оно больше не
01:29:15 - 01:30:12
нужно потому что мы ушли с того экрана что она не используются там ну ссылкам него фактически мысли хранится то это может быть типа скорее типа подозрение может быть что на большой очень объект памяти хранится ссылка жесткая как пакте ведет окей у нас есть activity да как теремки мы явно понимаем типа что она была уничтожена как мы можем по activity понять что она была уничтожена у нее есть там чеки то есть у нее там можно просто проверить и по что она там в этом месте по разные стоит и который
01:29:43 - 01:30:56
позволяет что проверять разным портом и я честно не помню точно помню что они вот есть фактически наверное возможно может еще через activity менеджер можно достучаться и чекнуть может там что-то есть интересное окей тогда следующий вопрос что вот мы знаем по activity например что она там из destroid грубо говоря а как нам как вообще легко мере находит ссылку на эту activity что он по факту воду дедом да и чё-то как-то в этом дамбе надо искать как ты представляешь себе это происходит ну да фактически это набора ну там
01:30:22 - 01:31:58
память это все там есть информация об объектах об их типах то есть такой комплексной ну типа след слепок памяти который там был взят сейчас приложение в нем там здесь вся информация фактически он скорее всего просматривает те объекты которые его интересуют не все подряд и имел только те которые его интересуют то есть другая под из коробки антон сразу следит за activities за android компонентами вот он за ними следит естественно скорее что-то сказано входят такие компоненты в дампе время анализа
01:31:12 - 01:32:12
он их проверяет нужны ли они еще потому что на них он нашел hard ссылки ну смотри получается у нас там есть в каком-то виде объекты с какими-то типами вот как нам понять что у кого-то есть на него ссылки как непосредственно начать этот поиск в этом перечне большому разных объектов но обычно это анализ стандартно то есть вот этих собака называется то есть ну ну ты крут и практически типа все объекты это фактически такой граф огромный и вот и сортов графа происходит анализ то есть как вот примерно делает это горбач
01:31:41 - 01:33:05
коллектор с него есть рут и и он соответственно смотрит что там живо что нет вот если на него на кого то есть ссылки то и значит он их оставляет память ссылок нет убивает не фактически вот если находятся ссылки грубо говоря вот мы находим ссылку хотя бы одну на такой объект значит он кто-то его на него хранить ссылку и соответственно вот его нужно проверять вот то есть тут нужно проводить еще анализ фактически из всех root of которые срут и это обычно ну для android это могут быть поток ну потоки
01:32:27 - 01:33:38
запущенные потоки или я забыл честно вот что рутами считается для garbage collector а вот на магическое понятия root of таких должно быть откуда происходит этот анализ чтобы из корня дерева вот этого смотреть и на какие куда ссылки хранят с на проходить смотреть получается такой у нас кейс что мы начинаем крутов искать мы шли какой-то объект в котором есть поле в котором это поле ссылкой на activity и мы знаем что это activity уже уничтожилась да и получается что garbage collector просто например не
01:33:02 - 01:34:29
успел собрать еще то есть он же мне garbage collector соберет только те объекты на которых нет ссылок если него ссылка если не соберет если hard ну hard reference is garbage collector не сможет в россии горел именно про ахнул жесткие ссылки гнули обычные ссылки nokia если у нас ссылок нет да ты типа как нам падает на эти объекты если моя трудов скажи получается начну фактически все объекты которые есть ссылки не помещаются грубо говоря те на кого ссылок нету а и считаются ненужным и убиваются вот
01:33:53 - 01:35:02
именно вопрос тип остается не том чтобы найти кого убийц тут не ставится вопрос найти кого оставить вот для корпишь коллектор если минуту совета находит все те которые нужны помечаете что не нужны все те кто в этот список не попали они попадают в лист для для горбач коллектора для соответственно очистки памяти мы верим брать чистку мусора если мы говорили про поиск утечки получается если на неё нет ссылок ну то есть значение отсылок значит наскоро почиститься горбач коллектором то есть это не принципиально для себя что он
01:34:28 - 01:35:39
просто не успел почиститься на него можно не обращать внимание если мы нашли ссылку значимы точно знаем что он не почиститься потому что если не цикличная только ссылка но наверное какие то ну в общем ладно тоже про детали реализации того что ты должен быть ну тут вот фишка в том что это давид напрямую связана с горбач коллектором потому что фактически типа нужно понять те объекты которые у нас не нужны и garbage collector их не почистит там при ближайшем запуске которые у него будет окей ну смотри допустим мы поняли что у
01:35:03 - 01:36:26
нас действительно есть утечки так мы вроде бы понимаем как их там искать у нас есть какой-то да что там этом в нем каким-то образом нашли руты в этом дамбе наверно там есть какие-то признаки что-то мы там поискали нужные типы окей сейчас я думаю что там еще мы могли не обсудить ну такой вопрос на всякий случай если мы все-таки понимаем что нам бы хотелось этот объект на какое-то время при хранить что мы могли бы сделать чтобы его сохранить держать на него ссылку жесткую не чистите самостоятельно когда нам это
01:35:46 - 01:37:29
не нужно больше что еще мы можем использовать три типа просто тур про типы ссылок но жители не за вт навек тут не подойдет потому что big фактически для garbage collector не считается русская ссылка и при подсчете он и прочистит сразу вот как раз часов и фантом reference этого те которые используют там уже вот софт в кижах используется обычно с которой роста пул создает и чтобы переиспользовать эти объекты и потом там их подчищает вот но софт я помню там нет раньше особого ворти этой проблемы нету как там он
01:36:45 - 01:38:00
работал софт reference это было раньше в android с детей там давно реки чу прав фантом reference вообще честно не помню знаешь только что они есть но честно вообще ничего не помню давно давно читал про них мы могли бы заюзать на все ли кэш какой то можно еще и лукаш создать из них но это опять же там будут привязывать ибо там софт референса прочему грубо говоря какими-то опять же образом управлять ссылками на такие объекты на всякий случай уточню что как вообще мы понимаем что как система понимает что викарий fence можно чистить
01:37:23 - 01:38:40
и в какой момент времени она это делает ну фактически big reference он просто не засчитывается как жесткой ссылкой то есть эта ссылка так ты можешь хранить на объект если горбатко на коробочка эктор проходит и видя что на объекте нет жестких ссылок он его чистит вот соответственно если вик референта вас содержится big reference вы храните microphones на какой-то объект и до жестких ссылка него нет garbage collector ого почистят и при запросе следующий раз будет просто вращаться to play all [музыка]
01:38:09 - 01:39:16
ok так с утечками вроде разобрались получается мы бы добавили кинари и чё то вы с помощью него нашли когда следующему и как и memory аналайзером какой-то android studio или внешний [музыка] так ok следующий вопрос такой допустим у нас в приложении много списке используем и у нас список тормозит при скроле вот как мы бы искали причину почему этот список тормозит как этот список тормозит почему это список тормозит да как бы мы искали как бы мы искали то есть тут нам нужно посмотреть рендер и где он тормозит где он
01:38:42 - 01:40:19
осыпаются фреймы вот на каких частях мышь детальный посмотреть рендеры ты что имеешь ввиду но грубо говоря то есть ну чтобы вас ничто не тормозило нам нужно понять это то там было sap удалось частота развертки экрана ну или хотя бы минимум 60 кадров выдавалась с если мы видим лаги значит у нас что то ниже 60 кадров то есть что-то у нас не успевает отрисоваться отрендерится то есть вот соответственно нужно понять эти вот проблемы типа как понять именно самый проблема места по моему тоже помню там был какой-то
01:39:37 - 01:40:54
анализатор для этого для всего вот таких вещей как раз таки по что там происходит да я помню что он был какой-то анализатор есть банально этот забыл как он называется круче но есть анализатор тоже опять же и в android studio часть android из детей который позволяет это вот запускать и про прикажете вещь банально ну самый банально можно понять есть надо же на девайсе банально тузы который позволит понять где там переходит отрисовка порог наш там можно прямо эти как эти спайками такие сделать график вывести ковру прямо будут
01:40:14 - 01:41:30
показывать грубо курян там в какие моменты происходят это ну банально причина там просто просто потому что обычно много очень управляется рендерится на canvas отрисовывается вьюшки то избрали либо нужен по максу нужно все вместе асинхронно не рисовать большие куски домбры там два часто я видел ну встречал проблема что пиратам рисовали очень огромный текст в textview запихивали огромный текст на сотни строк которые соответственно не мог быстро бренды рица вот особенно еще выходил за пределы экрана там короче
01:40:56 - 01:42:01
вообще это на самом деле тяжелой операции там опять же то есть для этого есть и возможность асинхронно его асинхронного его включать синхронно текстом если помню называется и я не пункт как класс точно называется но фишка должности потом можно полностью все до отрисовки во синхронно провести только отрисовку же будет синхронной да да да да да да да есть а sing-sing layoutinflater но он не самый удобный потому что фактически нужно будет какой-то контейнер тип это тоже может спасти им такси вопрос типа при использовании view
01:41:29 - 01:42:41
оптимизации в еще может смотреть можно банально смотреть какая насколько у нас сложная иерархия то есть насколько в несколько в ней уровень вложенности потому что тоже в принципе эффекте вот сам уже крайне способ типа оптимизации это именно уже какие-то кастомные view для элемента списка что прямо оптимизировать там все очень-очень хорошо что прямо иметь полный контроль над отрисовкой вот мы это скажем такой 2 с trace когда все это делается смотри ты сказал самом начале про тормоза что мы не укладываемся и мы там
01:42:12 - 01:43:25
не укладываемся потому что типа что-то на моем потоке а то что мы слишком загружаем ментатов да вот почему вообще у нас такое ограничение что вот у нас есть там fps и мы хотим типа 60fps они там 50 fps например ну 60 fps это принципе стандартам сейчас все принципе кран отвечает это такая для человека в принципе чистота где чувствуется как это все быстренько то есть вот этот типа такой 30 fps это уже похоже на 60fps и повторных а сейчас очень активно типа там экраны 90 и 120 даже там есть отдельный телефон индии
01:42:54 - 01:44:21
больше могут ну типа android главное чтоб мог вывозить вот этот соответственно вся привязка идет как раз вот к этому желаемой частоте кадров которая должна быть хорошей при отрисовке вас отвесно у нас есть 60 fps на секунду мы должны 360 кадров нас есть 16 шесть миллисекунд на рендеринг одного кадра если соответственно мы этот кадр бренда red не можем нас происходит skip фрейм и мы выполняем следующий кадр у нас частота снижается на эту секунду снижение частоты то во-первых задержка в реакции на то как пользователь будет действовать
01:43:38 - 01:44:45
ну то есть грубо говоря банального не будет отвечать что-то потому что не будет меняться и и наверно принципе все да как вообще систему гарантируют это чистоту как происходит и когда фактически фактически весь буфер который а ну-ка групп говоря вся картинка которую нужно отрисовать на экране на складывается вот в этот вот экран который нужно произвести отрисовку банально и каждые 16 6 секунд от ложатся и это создается к типа очередь фреймов который нужно тренда ведь фактически она помещается и следующее окно которое
01:44:11 - 01:45:36
будет происходить отрисовка но средства этот вот тут рисуется то что нужно обновить вот соответственно если это отрисовка ой да спасибо если происходит это изменение но а если у нас изменение произошло но мы не успели подготовить кадр то соответственно это начинается уже происходить что мы не попадаем не очень хорошо объяснил вот такое наводящего просто как вообще мы можем автоматически детектировать что у нас не успевает отрисовка отрабатывать как можно там тактически детектив [музыка] под не знаю
01:44:53 - 01:46:24
ну наверное наверно вот мне не знаю не буду даже сказать да да давай вернемся назад и зафиксируем какие шаги мои в итоге бы сделали что вот мы понимаем что тормозит список вот ты горел что есть там какая-то тулза у нас и мы бы пошли и так понял да подергали список увидели что у нас там занимает дольше всего миллисекунд и там разобрались бы чтобы это не занимало на мистику паттерн такой в принципе ok ok вот у меня остался последний блок небольшой он про хранение данных вот представим вот есть там статейки про room когда там
01:45:48 - 01:47:34
примеры приводит там всяких питомцев и хозяев хозяек вот и вот представим на какие данные что у нас есть реально хозяин и его какие-то питомцы давай сначала обсудим как бы в итоге они хранились у нас в базе вы бы вид эти данные мт с точки зрения о п у нас есть некий владелец и у него есть список его питомцев фактически в таблице чтобы это было в руме ну то есть грубая sql базы данных в которой две таблицы это был одна таблица с владельцами одна таблица с питомцами а мы говорим что одно в питомца один владелец а
01:46:54 - 01:48:22
не заглянут что одного владельца несколько питомцев а питону питомца один владелец но у питомца 10 донца один владелец хорошо а вот тогда в это было две таблицы отношения получается один ко многим фактически то есть у каждого питомца было бы ссылка на одну найди жку их владельцы из таблицы с владельцами а у владельцев не было каких получается своей таблице не ты мне нужно окей тогда давай представим что вот у нас есть такие две таблицы питомец и владелец и мы хотим сделать запрос в который возьмет и
01:47:39 - 01:49:28
соберет нам всех владельцев и их питомцев как примерно выглядел бы сбор такого запроса данных для этого забросы результата какой был бы алгоритм обхода таблиц к сложность обхода таблиц сложность обхода было бы н.м. где n это количество владельцев м количество питомцев всех в таблицах с элементов да потому что фактически мы каждого владельца к работам проходить нужны пройти всю таблицу и соответственно схватить данных ну я не учитываю индексирование там всякие оптимизации которые можно skylight применить если
01:48:35 - 01:50:02
банально в лоб без вот этих вот всех а как бы тут индексирование на могло помочь индексирование нам бы могло помочь в плане того что следишь ники очень большие посредством и бы могли уменьшать рейндже поиска то есть соответственно выбирать грубо говоря банально типа из ну из меньшего диапазоном бы искать то есть банально групп горят он привез у нас было бы там сотни владельцев точек ну прям это магнит по десяткам распевать то есть происходило бы оптимизации снуд деление просто на меньшие куски и более
01:49:28 - 01:50:29
быстрый поиск типа но он не не настолько прямо категоричным словно поедишь никому только лишь никита как принципе мари кей они и когда это будет типа кей в другой таблицы хранится ссылка наниматься не так по умолчанию уже идут с этими с оптимизация mysql чтобы быстрее из конца вот на типа в лоб это будет типа m на n до то это будет полный обход типа по каждому владельцу каждого соответственно другой другой таблицы как мы ещё могли бы оптимизировать такой запрос структуре с какой структурой могли бы
01:50:00 - 01:51:14
или нет с какой структурой чтоб на меньше обходить чтобы меньше обходить [музыка] тут фактически нужно как-то уменьшить объем прохода нет не скажу так сходу давай да да дальше пойдем по кейсу что если было появились питомцы разных типов например мы там понимаем что у нас раньше там собаки с бы появились там кошки не знаю попугаи и собаки вот и у нас бы появилось у каждого типа питомцев свои какие-то уникальные поля попугая там цвет клетки у кота там любимый вид молока а у собаки не знаю любимый пруд где она любит гулять вот то
01:50:39 - 01:52:32
есть у нас есть главное то что у каждого питомца есть что-то уникальное вот как бы мы могли такую структуру сохранить традиционных таблицах есть но мы банально общей информации могли бы также хранить вообще таблица а специфичную соответственно сохраняется вот ту грубо говоря по подтипом то есть чтобы не руни хотя в принципе на самом деле учит дублирование нет ни прочего типа даже создать три отдельные таблицы для каждого это было бы наверное проще чем иметь одну ночь и потому что он пересечении все равно не будет и прям
01:52:00 - 01:53:12
категорически в размере мы не выиграем вот единственно что это будет хуже при поиске да но типа если для поиска можно просто создавать виртуальную таблицу в которой будет оптимально искаться посмотреть для поиска насколько я понимаю здесь будет просто 3 отдельной таблице как мы то есть мы можем оптимизировать поиске по центру тогда по каждый питомец грубо говоря хранит на своего владельца нас был бы такой 3 таблицы а ну это типа не очень масштабируема вот на самом деле типа это хреново тип если будут больше количество
01:52:37 - 01:53:56
питомцев появляться по нас каждый раз будут разрастаться таблицами вот тут типа ab ну просто речке под общей таблице тут типа да есть преимущество того что у нас не будет нарастать таблицы но фактически типа мы все должны будем для каждых спец опции типа создавать отдельную таблицу где соответственно будем ссылаться на общую таблицу плюс дополнительно эти вот свойство будем хранить появится типа сложнее запрос эти поля мы должны будем делать join и в которых выбирать и соответственно все это делать потому что
01:53:17 - 01:54:15
на при виртуальные таблицы здесь будет ну проще в этом плане типа сайт собирать да то есть возможности под такие делать виртуальной таблицы из двух таблиц типа чтобы меньше скину меньше дубляжа делать меньше ту ближе делать но на самом деле лишь мы не выигрываем ничего на уровне как это на уровне размера базы данных мы там ну если выиграл кто прямо минимально вот в плане поиска опять же то есть тут нужно типа вот то есть если типа прямоту они поиска по отдельной таблице конечно будет проще но вопросах там балансировки опять же
01:53:46 - 01:54:56
будет вот ты много говорил про разное отображение там в юхи виртуальной таблицы какой вообще у них минус есть но виртуальная таблице они все хранятся в памяти то есть они не персистенции вот соответственно это происходит даб это нагрузка на память на оперативном имею ввиду что они не хранятся persistent на виртуальные таблицы вот они хранят в какой момент они наполняются в памяти фактически тип они служат как таким пунктам я могу ошибаться конечно поедем настолько типа силён теории с акулой то они просто служат как референс сами то
01:54:21 - 01:55:59
есть фактически типа не следят за обновлением таблицы просто пополняются не может фактически они типа витки reference он и какие-то записи из другой таблицы вот такие под таблицы вот я понимаю до примерно тут вопрос в том что если она у тебя хранится только в памяти то тебе в какой-то момент нужно йодом инициализировать наполнять вот это может какие то нам сложности приносить если это так вот но это на самом деле уже не важно так окей в целом я думаю что я спросил все что хотел вот спасибо тебе
01:55:14 - 01:56:58
за то что ты а хватило сил пробежаться по всему по чуть чуть вот думаю можем перейти к подведению итогов вот может быть у тебя есть какие то вопросы конкретные на которые я вам вот это не мне интересно уже разбор услышишь хорошо всем спасибо кто досидел до конца вот я частично когда-то какие-то видео тексты от людей когда-то не видел вот я видел что надо было включить свет но я честно во первых не знаю где он включается и не хотелось вставать вот во вторых да мне было ли это сложно сделать короче
01:56:05 - 01:57:46
я тогда могу единицах перебью тебя я слила чате к большинству не большинство очень много было обсуждений насчет право должен интервьювер говорить ответы на свои вопросы на интервью как ты считаешь мы просто пояснить свою позицию моя позиция что я никогда не говорю свои ответы просто потому что это может как и в положительно так и отрицательную сторону влиять во-первых потому что если человек что-то ошибся и ты ему говоришь что он не прав то он будет нервничать если опять же он там прав ты говоришь что он баров то он
01:57:06 - 01:58:28
почувствует там излишней уверенности расслабиться поэтому я предпочитаю какой-то фидбэк давать в конце или там уже отдельным письмом когда если нас несколько человек обычно как происходит один человек ведет интервью другой делать заметки потом они должны что-то обсудить сделать куда полезный фидбэк и отдать его кандидата поэтому я не против чтобы давать эти ответы но я за чтобы давать их после чтобы но не отвлекаться еще часто бывали у меня такие практики что ну как бы я знаю ответ правильный но
01:57:47 - 01:59:01
я там готовлюсь человек там думает что знает правильный ответ ему говорит что он неправду начиная с тобой спорить горит да я знаю как ну и короче и в итоге всё становится плохо ну то есть хорошо что мы увидели счетчик неадекватный шон типа не умеет воспринимать критику начинает там агрессировать что мы там не правы что мы брали что-то понимаем вот но понятно что все могут ошибаться вот поэтому лучше избегать таких моментов когда есть лишняя возможность свой поджечь свои пятое место и излишне расстроится
01:58:24 - 01:59:43
тогда я предложил бы чуть позже с вас еще остались силы ответить на некоторые вопросы которые такого навали жди в чатике пока наверно иметь смысл подвести итог днр с среде проспери 5 что доги с кириллом берем его не берем или ты берешь его теперь ешь ты оцениваешь давай вот так в целом даже импульс куда мне понравилось как отвечал кирилл видно что у него есть большая осмотре ность по всяким штукам видно что он пытается следить за всем и там где если он не знал что так глубоко он точно понимал и
01:59:03 - 02:00:25
я он бы любую задачу смог решить там погуглил бы и там вот это вот все вот поэтому учитывая что у нас с вами это обычно там несколько секций есть помимо платформы секции например еще проектирование явно этой секции сказал что ну давайте проверим как он там проектирует ну и там зависимости от команды на могут еще какие-то секции но в целом мне понравилось и я думаю что я бы сказал что все хорошо но более детально там какой-то уровень я бы поставил мы бы там подумали а скорее всего это между ну точно вне junior
01:59:46 - 02:01:08
точно не какой-то middle что-то ближе на верных сеньору я бы поставил мне так кажется то есть наверное точно сеньор но чтобы сказать точно мне надо там подумать было бы но точно ближе к сеньор по моим ощущениям сначала сеньора потому что от 1 до 10 разряда до неё 5 разряда и есть ткач 5 разряд он тракторист 8 разрядов сеньор 5 разряда хорошо кирилла как твои ощущения поделись пожалуйста были но по моим ощущениям хреновато прошло вот я бы все-таки ожидал фермы из мер я бы ожидал большего от серега ко мне снисходительны отнес а тем
02:00:27 - 02:02:04
она была часть вещей которых я типа знаем про вот про искал я типа понимаю это мне не настолько глубоко знаю эту теорию прочим как бы никогда мне не копался и что-то никогда не тянуть к чтобы прямо проектировать там будем проблем поэтому я типа скорее всего за своих там небольших знаниях с многопоточность опять же тоже я в теорию когда ты копался типа при мне не доводилось не вот так очень низко уровней работать поэтому я зашел а серёга спрашивал много таких вещей именно порой вот специфичны которые не так часто
02:01:21 - 02:02:22
приходится работать я не что-то я даже если буду надо быть даже писал бы сейчас все бы это бы делал я бы вряд ли бы на них opel просто потому что я буду ну не тот фокус на которой я беру тебя в плане изучения и которой в практике приходится сталкиваться думаете по сергей вот там по его типа сдачи больше приходится сталкиваться чем мне силу направленности команды ну работы его команда но я не знаю почему не такое ощущение что типа что-то было плохо тут вопрос я всегда себе категоричен это как поэтому
02:01:50 - 02:02:53
я уже проблема тут вопрос еще такой на самом самозванца а сколько тебе было комфортно проходить не было интересно не было интересно потому что вопросы такие были типа не в не совсем в лоб на реальных примерах таки хороший порассуждать вот мы немножко не хватило диалога вот конечно я я я люблю немножко подискутировать когда вы человек то есть немножко по-другому провожу собес и [музыка] есть у вас еще силы поотвечать на вопросики сейчас чем проблема чат затерся была там несколько наверно сотен сообщений там очень жаркий
02:02:25 - 02:03:50
там же пошли свои собеседования в комментариях по этому какие-то вопросы я уже потерял из виду я просто предлагаю вывести чат на экран зрителям по задавать свои вопросы которые на и взгляд остались не отвеченными на которым было бы интересно ответ получить вот мы можем совместно ли там кирилл или сергей ответят на эти вопросы 10 лет и или прямо пишите кому вопрос будет вообще идеально да вот тут еще ребята пишут что просит меня одну более детальный фидбэк дать я могу еще рассказать по своим заметкам которым не
02:03:11 - 02:04:36
получилось сделать понятно что я не везде их успел сделать где-то где кирилл просто отвечал я там шел дальше я не успевал по что обычно это действительно делается ну делают два человека вот то что у меня записано я могу они мере прочитать возможно это будет полезным вот-вот но мы начали с жизненного цикла там каких-то компонент вот тут грубо говоря нигде не было каких то на мой взгляд там проблем понятно что там не обязательно помнить и пятью 3 обзоры рай что конкретно там ты можешь там то что ты про него знаешь это уже да хорошо
02:03:54 - 02:05:31
показывает что кейт и дам понял что можно было бы посмотреть на него при решении какой-то задачи вот ты упомянул в utorrent proview peronda там была не совсем точно вот что является компонентом вот я сейчас точно бы не сказал бы сколько какой прям супер точный ответ но из того что я услышал я понял что я бы сам перепроверил на ti под под мои воспоминания в пензе совсем другие вот нам просто интерфейс который много кто может им клементе да да но я бы типа не считала опять же этот ответ там типа критичным потому что мой взгляд главное
02:04:42 - 02:06:13
понимать что есть это поле в paint его можно использовать проверить на нал чтобы смотреть за атаку на ли куда-то в ухо и вот это вот все это типа на самом деле практически никакие кандидаты которые со беседуют но не отвечают но не не упоминают юппер and i типа никто там не помнит что он в принципе вообще есть поэтому моя планка устроен шесть человек называет view прн ты про него что-то говорит это уже вообще супер классно то есть это уже выше рынка вот дальше про мы говорили про потерю состояния то есть
02:05:27 - 02:06:45
тут я бы сказал так ты все знал да не было какого-то системного ответа в котором ты бы все кейсы раскрыл но в целом то как прошел диалог это что мы обсуждали ты быстро схватывал немало какие-то могут быть сценарии например и поэтому тоже можно сказать что мои требования были удовлетворены понятно что наверное мало людей у которых есть системный ответ там нак на каждую проблему что если не восстановился state это abcd но главное что мы к этому быстро пришли много там не задерживались вот потом были мы потом мы говорили про
02:06:07 - 02:07:39
прошлый пропушим насколько я вижу вот там вкратце там ты упоминал всякие специфичные вещи которые обычно никто не любит погружаться в детали это всякие там флажки там activity тоски и вот это вот все вот в целом я иногда могу зависимости от кандидата поглубже то поспрашивать когда-то там не спрашиваю вот так как у нас ну у меня еще стояла задача попытаться побольше тем покрытия не погружался и опять же меня устроило то что ты адекватно называл нужное состояние он new intent и там всякие флажки то есть мне на моем уровне
02:06:51 - 02:08:26
ожидания этого было достаточно учитывая то что действительно кто-то в чате писал сейчас in a single activity большой упор поэтому там могут люди вообще отходить от использования глубоко activity вот это вот все про pendingintent опять же ты все сказал правильно обычно редко люди могут понять ну типа могут ответить что типа зачем нужен pendingintent обычно говорят что но в документации pendingintent поэтому pendingintent вот и весь ответ поэтому тоже видно что ты опытный человек ну там типа либо сам уже
02:07:40 - 02:09:03
со беседовал готовился поэтому понимаешь либо там в любом случае это просто говорит об опыте каком-то и на смотре насти больше до практические навыки там написании кода и проектирования про другую секцию тут ключевая задача на смотре ность человека есть человека большая на смотре ность вероятность того что он решит задачу какую-то очень большая буш он сможет загуглите то есть когда-то давно у меня были ожидания шевчик 2 чек этом от зубко должен все вскакивать данным должен все помнить но я понял что главное чтобы
02:08:21 - 02:09:38
была большая на смотре ность и понимание вообще почему так сделано в принципе да чтобы у человека эта связь первое наверное где мы где ты споткнулся я себе отметил это по поводу там loopier а связи с потоком вот это но опять же это такое спотыкание скорее я его выдавил специально там по делу было я эту тему не особо глубоко копал типа игру многопоточная система я как-то снимет копал сам опять же то есть ты плену я просто очень как расскажу скептически отношусь к знаниям таким который вот теоретически
02:08:59 - 02:10:30
которую ты знаешь да типа что как работает но практически тебе использовать их вообще недовольстве типа искусственного поддерживать их вот эту теорию да да да я согласен что обычно на к такому вопросу я прихожу там зависимости от реакции на канделя да тут скорее я увидел что кто-то на самом деле там люди начали писать там в чате кишор типа блин сколько можно там что-то про его и там про вот это все я подумал ну там типа давайте спросим про вот это вот это точно подписчики которые меня смотрят это кучу сумме не любят
02:09:45 - 02:11:06
про rx не писали там типа давайте еще рэксом ну подписали не про это писали что хендлеры loopier и никому не нужны не зачем чипа не спрашивать и я понимаю я считаю на самом деле я считаю вот если мой лично позицию взять что android разработчик должен понимать что это за штуки где они там применяются как обществу плане работать ну прям вот как этом своим организовать прочим я что это как бы крутые знания но очень часто они могут быть бесполезными если ты не проектирует что-то или прочим и вот типа
02:10:28 - 02:11:41
я отношусь то есть я считал должен знать что это за вещь и что это за класса день используется типа для чего используются но типа прям вот глубже явно просто на вас ну в общем если отметил да если кому то интересно да есть такая штука как предлагал переменные предлагал переменные это механизм с помощью которого ты можешь прирезать какую то ссылку на пример к конкретному потоку и поэтому когда ты гришь мой лупер то он у этого потока там в 32 ккал переменной берет и там либо есть что-то либо там нал и так мы можем
02:11:05 - 02:12:20
понять например вот это если кому-то интересен был правильный ответ вот мусорку скажет вы можете купить мою новую книжку и там найти ответ вот ну потом на говорили про мастерскую там блокируем сянь и блокируем ся вот тут опять же я не ожидают человека что он точно знает потому что точно знать нужно там наверно бороться с какими-то проблемами и просадками fps то есть нужно прям пойти в код чтобы понять что там если в мисочку какие там есть call бейки как она там все написано чтобы отлавливать какие-то зависания или
02:11:42 - 02:13:00
еще что-то да обычно там когда кастомные какие-то когда applications pounding отлавливают там идут что-то смотрит чтоб чет написать вот поэтому у меня не было каких-то ожидания но мне хотелось послушать получится ли мне там где запутать чтоб ты там блокируем себя там не блокируем ся вот это вот все вот в целом мне понравилось твои рассуждения и там то что в конечном итоге мы не определились мне короче мне как-то было норм то что ты говоришь я типа понимал суда там ты не смотрел в исходнике да ты
02:12:26 - 02:13:53
вроде бы понимаешь что происходит если не блокироваться что мы там можем крутится и вроде бы это как-то странно если блокируем ся это тоже что то короче ничего не понятно это вот все вот опять же правильный ответ что мы блокируем ся там и на тифа и мся и все такое и как раз благодаря это все хореографию происходит у нас что он нас если надо разбудит вот и так и гарантируется fps и вот про хореография тоже ожидал это вот мы там прыгаем вперед когда мы говорили про детектирование просадки но пора лаги про детектирования лагов тут я
02:13:09 - 02:14:38
ожидал конечно что ты что-то слышал про хореографы рабы чно все отвечают ну там что-то хореографии опять же там детали никто не знает этого хореография те кто не писал курить отправку performance метрик или вот это вот все дано по факту вот хореография это ну такой единственный двое яркий для меня пример шутки про меня было странно что там про него ничего не я про него помнил ну вот честно я вот не копался поэтому даже не знал я пришел прямо слышал ну вот наверное вот я про него слышал давным-давно и и вот только
02:13:54 - 02:15:12
сейчас вот что-то припоминает у даже не знаю что в нем есть внутри поэтому можно сказать что это я не знал типа возможна как на собеседовании принялся просто дальше мы когда обсуждали трек пулы но тут я просто сразу понял что ты не делал ничего такого там не понимаешь какой и пьют ред булла да и но опять же это не супер плохо ну типа если мы смотрели тебя конкретно в команду спидов татарам бы перекос больше было вопросов там специфичных немножко в сторону джавы потому что одну или там катлер а потому
02:14:33 - 02:15:51
что для нас платформа там не android только до но и целом тебя как мы используем потоки многопоточность нами просто одна из самых сложных тем вот так как у нас было чисто android секция то на этой секцией об этом сильно не грустил что ты не знаешь и перед пулов но в целом если человек знает то что интересно было бы услышать там просто очень большой перечень параметров вот и там есть возможность и задавать idol the time для потоков чтобы они автоматически прививались и там и всякие стратегии кэшировать не кэшировать их создавать
02:15:14 - 02:16:46
новые потом убивать короче там много всяких флажков и просто в целом я понял что на утятам большого бы то ни было и задач не было ну не страшно я попытался просто как-то эту тему развить чтобы копнуть вообще что ты знаешь вот ты примерно понимал всякие там проблемы с контекст свечу вот но я по-моему явно не услышал такой формулировке но я понял что ты понимаешь вот это все там штуку связано с ядрами процессора опять же если там с супер весело я могу там покопать еще там что-то поспрашивать по эту тему но тут у меня этого было
02:16:00 - 02:17:30
достаточно вот единственное что ты ошибся когда говорил про то что поездки dollar и ограничивают количеством я деру множим на 2 вот это обычно классический типа то что я везу ночь потом их могут выставлять да вот мы просто еще недавно ну как недавно может полугода назад два вида там делали небольшой research и о использовании короче рыкса против картин и что у крутим что у и рэкса следу лиры неграми чины то есть там просто трек пул который платит максимально потоки если ты делаешь 500 запросов параллель у тебя
02:16:46 - 02:18:12
будет 500 потоков выбранная ёске врачу можно out of memory получить вот новая рэкс этом есть и там есть такая штука называется 3d и виктор то есть эта штука которая ходит и убивает потоки то есть они настроили это так вот а в картинах на их dispatch или там нет никакой оптимизации там у тебя просто создастся очень много потоков и они будут жить вот и мы може там есть какая-то настройка а и dual time а ну вот тот кто делали все что он увидел что вы рекси довольно быстро потоки по чистились она коротенькие спать черри они короче
02:17:28 - 02:18:43
привели к раз таки проблемам вот это но опять же это мелочь типа такой штуки общая картина не строится дальше вот когда мы обсуждали что-то у нас когда происходит с процессором когда он там может передать какой типа момент временем может передать контекст ядра какой момент исполнения вот опять же ты начал там говорить разные вещи про товарность нет хотелось наверно услышать более еще простые вещи про конкретной точки там синхронизации про там хоббс be for she типа вот у нас есть там же в моду да и там вот это вот все и
02:18:04 - 02:19:50
она как-то там все нам гарантирует чтобы там у нас было меньше проблем и наверное я сам есть честно не знаю точного ответа в какой как в джаве точно по текущей этом спецификации или какой-то спецификации какая есть гарантии у нас про исполнению построчно я бы наверно ожидал чтоб кандидат просто сказал что типа есть жало вымрем отдал все остальное очень сложно и лучшими там никаких гарантий не ожидать а просто вот это же ты горишь явно ну там в любой момент что-то может произойти главное было да морана вот
02:18:58 - 02:20:17
опять же если бы в целом не было положительного впечатления о предыдущем всем обсуждениям это можно было сесть как там ты сделку это допущение типа допущений это там сигнал какой то он так как в целом допущение было очень мало на собесе это я типа не считаю критичным обычно знаешь есть кандидаты которые делают допущения на каждом вопросе вот он типа точно не знает но он не говорит что но я точно не знаю да поэтому он начинает что-то допускать вот когда очень много допущения это плохо но это и рассказывают типа тем кто нас смотрит
02:19:38 - 02:20:54
вдруг кто-то тоже любит делать допущения вот я лично не люблю люди которые делают допущение больше люблю когда могут честно сказать первым я точно не знаю тебя я знаю про вот такое и вот про такое вот от четкого представления у меня нет вот и остался там последний а вот два осталось блока поиску и я на самом деле никаких конкретных пометок не сделал вот у меня опять же есть bass line того что на рынке происходит ибо и zloy на рынке он довольно вообще занижен люди вообще не представляют как в таблицах это там что
02:20:15 - 02:21:38
создается вот и на самом деле было не очень много сил вот поэтому у них и мне уже не хватило сил чтобы по задавайте вопросы какие-то поэтому если просто отметил в целом что то что ты ответил было нормально типа мне было норм опять же я не услышал то есть я понимал что там мы все гипотетически обсуждаем вот но мне было норм потому что я сам уже начал уставать и вот это вот все и вот и по поводу оптимизации ресайклер view поиска наверно мне не хватило но опять же это не было супер критичным каких-то базовых
02:20:57 - 02:22:22
оптимизации ресайклер а например каких-то стратегии решения что мы обсудили стратегию поиска проблем но не обсудили стратегии решения проблем что типа у нас есть там вы решаете или довольно много разных оптимизаций всяких к шиитам и вот это вот все это можно было бы упомянуть вот но это опять же не критично скорее всего просто задач оптимизации скролла ресайклер а но редкая задач вот но мы иногда что-то подобное спрашиваем потому что нам нужно в этом в платформенных командах нам нужны люди которые
02:21:39 - 02:23:09
могут там что-то за оптимизировать если надо вот ну вроде бы я все упомянул что хотела типа то что по-крайней мере у меня что-то записалось вот-вот может теперь пока я говорил люди что-то там база давали там совершил полет идут какие-то собеседования друг друга технические вопросы тут расскажу о самом деле интересный вопрос вот сейчас попробую вести да вот вот и сказал что если кандидат чет не знает то лучше не гадать но не не даешь это ему возможности порассуждать как он бы сделал будь он так разработчиком android как бутон решил
02:22:24 - 02:24:00
там какую-то конкретную проблему примерчик вот не знает что происходит там blu перед ждет эти бесконечно молотит вот почему бы и так эту проблему не предложить кандидаты решить как бы он сделал и уже посмотреть на ход его рассуждений да это хороший кейс я так тоже люблю делать чтобы но обычно это помогает либо человеку вспомнить что он оказывается знает но забыл дай когда ты ему говоришь давай порассуждаем то это как раз как минимум может помочь вспомнить может увидеть что он умеет рассуждать потому что помимо
02:23:14 - 02:24:46
каких-то знаний на заученными вопросы на самом деле мы хотим все увидеть что кандидат умеют рассуждать он умеет строить диалог свой рассказ поэтому да это классно но я как раз говорил про то что я люблю когда кандидаты рассуждают с оговоркой что они рассуждают когда кандидат просто помолчать начинает отвечать ты не знаешь он рассуждает или он на сто процентов уверен вот поэтому мне просто нравится когда кандидат это явно декларирует чтобы мне не приходилось там переспрашивать его потому что если перес
02:24:03 - 02:25:19
прошу он точно он скажет да нет да я рассуждал это не просто дам рассказал а это я на самом деле рассуждал поэтому это неудобно пойдете к серёгину со беседую надо как это когда расскажут про сериал или фильм и внимания рассуждения почему спросил потрошили на это тоже как со беседующего больной вопрос когда камень отбивать я не знаю и молчит и обычного явно говорю ну да порассуждаем как бы ты это сделал будь ты вот на позиции помог тогда разрабатывает проектируем можно мне тоже интересно как чакр обсуждает ну да да ну это вообще на
02:24:41 - 02:26:00
самом деле плохо очень марголис простая я не знаю типа даже не подумав ничего типа просто вот так rejected типа я принципе тоже как интервью всегда пытаюсь людям там по задавать наводящие вопросы какие то ли вода типа вот смотри вот там есть вот это вот это вот как бы вот это вот ты бы решал если бы стояла такая задача даже боксом и типа там не оптимально живот банально в лоб цыпа как решить можно было бы если подытоживает сергей да очень исчерпывающей фидбэк я ответил на все вопросы которые чате были технического
02:25:26 - 02:26:33
характера и [музыка] которая там вы заказа которых были споры у часов в конце чатиках споры про как градацию проводить junior middle сеньор мы так слишком отдельная большая тема сейчас наверное не очень стоит ее обсуждать потому что я не знаю правильного ответа и знаю сергея знаешь ли ты мне кажется вы не правильного ответа в каждой компании по разному я могу сказать только то что у нас сейчас конкретно в нашей команде и скоро это будет на всем и вида есть свое пространство confluence вот и чё там
02:26:04 - 02:27:30
есть вот есть там блог про платформе на разработку там есть странички например есть страничка фоновая работа если на нее зайти там будут вопросы всякие хорошие которые мы там задаем вот из разряды таких которые я например не который задавал кириллу либо какие то другие но там их много например вот по фоновой работе и снизу есть ожидания и там написано типа basic ожидания dns ожидания эксперт ожидания и грубо говоря когда кандидат поотвечал бы просто идем в эту conference табличку смотрим про basic адвент эксперт понимаем отмечаем у
02:26:46 - 02:28:09
кандидата где у него было больше чего больше бейсика больше днк или больше эксперт а вот исходя из этого плюс исходя текущего положения на рынке текущего кого-то положение там в компании этот уровень формируется вот но сейчас я бы сказал так что очень мало хороших кандидатов даже такого эдвенсд уровня и многие сеньоры которые приходят и проходятся без они типа на мой взгляд как будто как мидуэй вот и точно так же наоборот бывает такое не придет хороший middle который middle в какой-то компании например в
02:27:28 - 02:29:04
яндексе да но ок называется что по меркам того что мы эту секцию провели он довольно там экспертные знания может иметь но это зависит короче может и я человек поэтому когда не сложно вот без какой-то помощи какого-то документа где ты можешь это зафиксировать чтобы не выдумывать каждый раз это еще сложнее но опять же так как нет всегда четкого ответа да где ты плюсик минусик ставишь а это какой то развернутый ответ то и получается что очень сложно четко прям сказать течет так ценить обычно это что-то примерно и
02:28:15 - 02:29:42
получается что типа но выглядит как там ближе к сеньора вот как я и сказала или там выглядит что вроде бы похож на такой тасйа я реальность не кто-то попросил себя оценить ска скажи мне я синьор или нет я посылая и я не знаю я не хочу потому что я сам типа субъективный человек и банально могут мои какие-то законы или наоборот мои какие-то анти загоны и влиять на то что я слишком оптимально или слишком пессимистична тебя оцениваю поэтому все тут же все еще зависит от потребности компании допустим если
02:28:59 - 02:30:18
разрабатываешь какие-то прошивки для android девайсе на основе android делаешь совсем другой набор знаний нежели тех кто верстает магазины тонкие клиенты какие-то и мне кажется совсем разный набор знаний и в первом случае ряда того пирах enderbro критически важны во втором может быть и не очень [музыка] я согласен с тобой окей тогда наверно я предлагаю закругляться 20 полчаса уже мне кажется это больше чем нужно о собеседовании но а сама собеседование закончилось мужа обсуждаем другие вопросы вот на тем не
02:29:40 - 02:31:16
менее предлагаю сворачиваться если сергея тебе напоследок сказать напоследок хочу сказать что я старался чтобы это было интересно смотреть вот если у меня не получилось то пишите пожалуйста не знаю мне куда-нибудь например в telegram или в twitter я бы я бы как-то см из модифицировал свой опыт чтобы там лучше собеседовать если вам понравилось то тоже пишите вот что будет приятно потому что я старался но в целом я понимаю что трудно наверное как-то удивить какими-то вопросами я скорее старался приблизить собеседование сейчас
02:30:30 - 02:32:10
максимально к тому который я пытаюсь проводить на платформе на секции единственно чем она может отличаться тем что мы берем охватом меньше тем и скорее чуть больше каких-то моментах можем вглубь погружаться вот но это потому что у нас есть конкретно специфика там в команде speed да и мы конкретно знаем что нам надо вот когда мы собеседовать android-разработчиков продукт то тут скорее важно чтобы человек много чего знал много чего понимал вот поэтому я пытался тут как бы как можно больше всего охватить чтобы увидеть что человек
02:31:20 - 02:32:49
реально имеет классную на смотре ность как потому кирилла вот что детали уже не так важны вот как так поэтому всем спасибо это кирилл красавчик спасибо мне понравилось реально было классно хорошо и очень разнообразна прям вот хорошее интервью премного чё за тронулась нашел даже какие-то у себя пробелы которые надо подтянуть так что спасибо тебе я я страз и тебе спасибо за то что так сам вначале вроде там выглядят напряженно но ничего критичного конечно же в твоих знаниях пробелов неких критичных
02:32:04 - 02:33:37
нет поэтому все классно было поэтому приходил лета маску как перевезете сюда придут окей тогда дай я беру кирилла право заканчивать выпуск пускает кредит отдыхает тогда я с ребятами прощаюсь пока сергей пока кирилл пока перри отдыхает я за него напомню что есть канал в телеграме новости в android разработке заходите подписывайтесь если вы это еще не сделали также проект можно поддержать на бусте или если вам удобнее то можно поддержать проект на патреоне вот надеюсь вам понравилось сегодняшнее интервью сегодняшние собеседование еще
02:32:51 - 02:34:32
раз напомню что можно прийти выбито живьём и пообщаться может быть даже с сергеем в том числе если попадете на него вот на этом все пока до новых встреч
02:33:46 - 02:34:19