Собеседование Middle Android разработчика

Подготовка к собеседованию на Android Developer

Транскрипция видео:

  • [музыка] Всем привет Android broadcast вернулся с собеседованиями в этот раз я решил что почему-то слишком много я собеседую нужно нам как-то диверсифицировать наш разделить вот опыт весь и иметь представление о разных интервью в разных компаниях от разных специалистов и в этот раз его буду проводить не я его проведет другой Эксперт Никита Куликов Никита привет Привет достаточно собеседование он будет такой разговорный большой формат Никита В этом расскажет подробнее Но прежде чем мы стартанём я конечно должен рассказать

    00:00:10 - 00:01:23

  • про нашего Ген партнера Авито тех классные ребята делают крутой софт вообще команда инженеров очень сильно Если Вы хотите подробнее узнать про них переходите по ссылочке из описания к этому видео сможешь найти себя много полезного как для своих проектов а также возможно сможете подцепить интересного классного них прямо внутри все по ссылке в описании Ну а теперь можем точно стартовать отработали эфир скажем так вот Никита Давайте Сначала расскажи про себя про свой опыт и что на сегодня ожидает Да я сейчас занимаюсь Android

    00:00:58 - 00:02:07

  • разработкой в Android приложение в Flipper девайсес делаю флиппер приложения для флиппер Зира Компаньон и до этого я работал в снапчате занимался там тем что приклеивал овечкам лица людей Ну в общем это такое deface Real Time там очень много работы было с кодеками так далее до этого я успел поработать mail.ru если кто-то кому если кто-то работал когда-то mail.ru ВК то вы наверное знаете профай именно эту библиотеку я делал Ну и в Яндексе Я работал в Яндекс браузере [музыка] вот и кстати я тут вспомнил что в

    00:01:32 - 00:03:00

  • какой-то момент Я участвовал в запуске Android академии первой в Москве и кстати ты упомянул партнеры Авито тех это Vita это те кто откликнулся когда мы просили Ну когда Android Академия просила площадку именно Авито откликнулась на то чтобы предоставить поэтому я даже без рекламы Присоединяюсь к тому что Авито тех очень крутые ребята и реально стоит посмотреть много людей вышли оттуда Сколько сейчас поколение разработчиков точно есть которые оттуда вышла что-то работают знает Ну они всегда как бы родились сообщество

    00:02:17 - 00:03:37

  • свод та компания с которой приятно работать честно искренне приятно и что-то рассказывать Давай тогда погрузимся теперь формат Что у нас сегодня ожидает Да сегодня у нас собеседование на Middle разработчика Это не совсем типично собеседование если собеседование на Junior стажерские позиции На позиции начального уровня они больше связаны с Хард скиллами по крайней мере в моем представлении потому что именно этим чаще всего грешат условно разработчики начального уровня что они там не доучивают чего-то недопонимают каких-то

    00:03:02 - 00:04:11

  • фундаментов основы то при собеседовании на позицию Мидл разработчика это больше такое общение больше узнавания про его опыта про его уровень про то сколько всего он повидал Какое потом умеет и какие решения в каких ситуациях он принимает штат должен разработчика ожидается что он сможет принимать решение в рамках своего компонента которому он так сказать за которым он видит за которым он следит и с этим нужно какой-то поэтому мы вначале поговорим про больше про теорию про болтовню Я немножко по спрашиваю завуалирована Андроида и затем

    00:03:36 - 00:04:58

  • мы поговорим мы попробуем написать какой-то маленький компонент часть компонента это будет типичный whiteboard это больше про систему дизайн маленького компонента и между этими этапами я буду останавливаться и рассказывать а что ожидалось услышать В этом моменте что я бы ответил и какой ответ Меня бы удовлетворил и разберу ответы собственно Кирилла Вот как то так не меня кандидата тоже Кирилл зовут сегодня да да [смех] Да Классно Ребят вы также можете накидывать свои вопросы комментарии соответственно Когда будет фидбэк с

    00:04:19 - 00:05:45

  • Никита я их озвучу спрошу в конце после Мы тоже все это будем подробно разбирать Если вдруг вас Лайф чат не работает попробуйте перезагрузить страничку потому что я включил прямо перед эфиром Возможно вы подключились раньше чем я успел это сделать вот но сейчас мы встречаем нашего гладиатора Кирилла должны быть громкие Аплодисменты в чате Да сегодня будет так немножко путаницы вот Кирилл Расскажи пожалуйста чтобы ребята понимали Кто сегодня будет у нас собеседоваться да всем привет еще раз меня зовут Кирилл

    00:05:05 - 00:06:10

  • работаю я Android разработчикам где-то около 3-4 лет сначала работал в небольшом стартапе потом через стажировку попал в Яндекс и вот в Яндексе вырос позиции Я занимаюсь я карточкой товара чекаутом оформлением заказа и какими-то там User generated Контент это то есть отзывы комментарии фотки вот плюс ввиду команду стажеров тоже погружая их во все эти процессы потому что это все сам изначально прошел и понимаю как что куда нужно свернуть чтобы стажеру было чуть легче Вот ментарю тоже стажеров и много стараюсь Где выступать по крайней

    00:05:37 - 00:07:20

  • мере сейчас вот могли там меня заметить на подлодки скоро буду выступать на мебели все И еще будет школа мобильной разработки от Яндекса Вот как то так какой вопрос Окей Ладно поговорим в этом после знал бы это на уровне отбора кандидатов Ладно самом деле это никак не влияет это так кто-то красит классно возможно Для вас Если вдруг хотите выступить поделиться опытом и получить момент плане выступления доклад Вы можете писать мне в личку Кирилл собак Android broadcast.df звучит кстати интересно надо как-то не собака озвучивать а

    00:06:30 - 00:07:39

  • по-другому но в принципе Можете писать мне на почту или в личку если где-то в телеграм то есть какую-то идею даже может придумать или поработать Ваш автомобиль Свет вот на этом канале и вы соответственно на огромную аудиторию будет шарить свои знания постепенно всегда это будет распространяться на всех они в закрытом доступе как на популярные конференции с лодкой Ну да ладно Поехали дальше Вот принципе я вас оставляю Вот Все Не забывайте что Можно оставлять комментарии писать то есть комментировать все это будет весело

    00:07:16 - 00:08:25

  • Я своему буду вращать эти ребята тут пока будут соответственно обсуждать Если вдруг что-то случится вы меня зовите я тут я слышу что поехали Ну собственно первый вопрос обычно который сдается на собеседовании которые я планировал тебе это рассказать про себя а ты немножко кратенько сейчас рассказал перед этим расскажи пожалуйста про свою текущую работу чем-то сейчас занимаешься Я как услышал что это юзер generated контент Ну мне интересно как именно ты взаимодействуешь с этим То есть более технической точки зрения какой ты

    00:07:50 - 00:08:55

  • используешь и так далее Окей смотри у нас приложение mvp и RX это технические взаимодействия У нас есть команда у нас меняются в команде Android разработчики iOS разработчики не то уходят приходят как-то ротируются в разные другие команды вот я на этом проекте являюсь ведущим типа разработчиком вот иногда заменяют их Лида когда он там в отпуске или болеет вот и отвечаю больше за мобильную часть то есть Иногда я копаюсь и в афишке в кэнде я там слегка понимаю но Отвечая больше мобильную такую часть

    00:08:26 - 00:10:05

  • это iOS Android и иногда вот фронтенд ну этот Контент это отзывы вот когда мы заказали товар и мы хотим оставить отзывы или мы хотим фотки оставить под товар или написать какие-то комментарии вот это все это я делаю Это в маркете да Или где это И ты получается я услышал что-то ведущий разработчик это значит что ты получается ответственен с точки зрения разработки за продуктовую группу или как это называется я да я то есть контролирую статусы там тикетов статусы задач менеджеры какие-то задачки там передаю

    00:09:13 - 00:10:48

  • допустим Стажеры пришли я выбираю какую задачку Кому дать Кому полегче кому посложнее или Отвечая за то чтобы наши фича там попала в doded Line там релиз Мы раскатились хорошо эксперименты были все зелененькие и так далее То есть вот за это часть это почти ответственность им Лида прикольно и ты как разработчик какие вещи ты ходишь прямо непосредственно никак руководителя Как разработчик тебе с тем что у нас ты будешь больше кодить чем больше брать ответственность на себя Точнее за других людей в плане у нас ну окей давай так когда

    00:10:06 - 00:11:44

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

    00:11:01 - 00:12:27

  • разрабатывать что для тебя Middle как бы если у тебя амбиции руководителя и так далее Как как быстро ты бы хотел дорасти иметь свою команду Там и так далее условно кем ты себя видишь в будущем Понял Вопрос большой на первый вопрос тем что я буду пробовать больше они уходить куда-то в бизнесе продукт но хотелось бы конечно больше уходить как бы параллельно знаешь больше процентов типа кодить и чуть Ну как бы какое-то количество процентов решать какие-то бизнесовые такие задачки вот так еще что там было очень много все

    00:11:45 - 00:13:25

  • накидал Да да по поводу Расскажи пожалуйста что ты кодишь на работе то есть точки зрения обычный бизнесовые фичи типа там кнопочки не знаю списки логика основная экранов взаимодействия там с бэкендом Какие параметры отдавать Какие возвращать какие-то архитектурные решения еще Принимаю как это можно оптимизировать еще такое обычные В общем понял ты скорее видишь себя в роли кодера который берет еще и ответственность два других разработчиков да Ну да я думаю да это Это скорее ближе к сеньору но вилки и грейды могут быть разной в

    00:12:36 - 00:14:14

  • разных компаниях Я в целом понимаю почему-то Middle в Яндексе Я думаю что это скоро изменится но тем не менее все равно буду как Metal Вот и в данном случае если у меня попался такой бы кандидат несколько раз я бы уточнил насколько ли он готов работать в качестве разработчика А насколько ну точнее насколько он готов работать без команды нас например во флипере всего два разработчика это я и мой коллега Вот и естественно у нас руководить какой-то амбиции такие руководства их не получится сделать и на

    00:13:36 - 00:14:52

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

    00:14:16 - 00:15:48

  • она уже была впроде все эксперимент раската на сто процентов все окей и вдруг внезапно а когда я скачиваю qa и сборку Она работает и все окей когда я скачиваю релизную сборку она крашится а и ничего не работает а я всегда хочу есть сборку типа я когда и тестировщики тоже скачивали сюда к весь сборку и мы типа не замечали этого Бага все было Окей И вот я как-то один раз скачал приложение средиземной сборки она упала я начал раскапывать я ну типа думаю все капец там типа у всех пользователей наверное все попадала вот

    00:15:07 - 00:16:37

  • сейчас слава Богу была подтогам и короче очень долго копал и оказалось что я просто забыл в дотошке прописать сериал и короче она не парсилась и все там падала Вот это большой самый факап про то сразу как бы вот смотри я вижу Давай так сначала как бы ты чтобы ты сделал что-то Сделал такое в будущем Я бы написал какой-нибудь кастом детектор л который у нас до сих пор Вроде нет На вот это вот поле дотошки что типа надо ребята проставлять Наташку или мы просто упадем детектив Ну что такое вот или как-то по-другому можно через

    00:15:55 - 00:17:48

  • такое сразу скажу про тут немножко сразу немножко поясню скорее я бы не стал говорить на собеседовании но в общем целом мы перейдем к следующему этапу что в данном случае это вот как раз вот на метла Это хороший ответ А если бы сеньора то я бы скорее ожидал ответ услышать процесс потому что баги ошибки в коде возникают постоянно а условный процесс можно поменять здесь я бы как скорее как человек более опытный В этом делах Я бы скорее предложил вести риск кандидат за релизной сборки какой-то который тестировались бы релизная сборка

    00:17:00 - 00:18:38

  • со всеми включенными флагами и так далее и на ней бы прогонялись тесты мануальные какие-то тесты и потом если бы все хорошо было ее пускали бы в прод то есть Сися и сиди с промежуточным этапом то есть сборка и дальше прямо перед самым релизом там еще что-то и по тому как дебажить Да как бы ты дебажил это дело как ты дебоша в принципе это дело там но я сначала разбирался вообще почему она упала и раскапывал типа мою фичу мой кот вот ничего не смог найти толкового и потом увидел влог эти что там падает какой-то

    00:17:49 - 00:19:41

  • Ну и начал просто трассу смотреть и увидел что там вот здесь падает та строчка и потом посмотрел туда там оказалось что тоже там долго копал смотрел не понимал что здесь вроде все нормально и потом только вот увидел что там поле одно не без Наташки вот так Окей окей а если бы там был бы краш непонятный или бы ты не понял что там произошло Чтобы ты делал краж непонятный Ну вот хорошо вот смотри у тебя есть дебажная сборка в ней все работает есть релизный сборка довольно часто на самом деле ситуация в которой

    00:18:44 - 00:20:13

  • чего-то не работает и при этом например там логов нет вот и краше нет Чтобы ты делал В таком случае Ладно краш предположим есть но ты приходишь по тому месту этого года например просто нету и так далее В общем код релизм и башня сборки отличается И падает как раз тот кот который отличается я бы наверное посмотрел куда-нибудь на метрике и посмотрел Типа вот этот юзер посмотрел бы его шаги которые он делал там зашел на морду зашел в корзину и упал и мы смогли бы отследить вот эти шаги последовательность вызовов и

    00:19:29 - 00:20:58

  • соответственно Потом можно попробовать воспроизвести этот Баг и как-то раскопать вот если этих метрик Нет ему вообще просто чистую смотрим и мы понимаем что там краш я бы наверное попробовал посмотреть на то как мы а пустируем код Возможно там что-то не так И если у нас квее все работает А в релизе нет то возможно в этом проблема вот как бы ты смотрел как русифицируется код Ну там есть правило специальные мапперы смотрел Ну да Хорошо окей ладно успех еще Ну смотри если есть Exception и он релизе и мы он понятное дело будет

    00:20:17 - 00:22:23

  • зашифрованы можно вот эти маперы опять достать который мы ассоциируем код и по ним уже посмотреть Точку где мы успех Ну затащил большую фичу она была связана с картой нужно было показывать на карте точки и это как раз связано с сафакапом это одна и та же фича Вот и надо было на карте нажимать точку выбираем тип товары это товары 1 категории это была медицина и соответственно далее мы должны были как все товары сгруппировать и перекинуть чекаут в оформление заказов корзину чтобы они красиво там отображались А чекал у нас был на Джаве

    00:21:22 - 00:23:15

  • и тяжелый там много Legacy Вот и таких запутанных типа шагов туда этим сюда и короче нужно было все это синхронизировать что все работало классно то есть две такие разные параллельные фичи и вот как раз на этом проекте я научился такой командный коммуникации между разными командами и между разными даже наверное платформами То есть я там и понял как работает и бэк Как работает как правильно Какие правильные вопросы задавать другим командам чтобы они правильно отвечали такое общение вот этот проект меня очень

    00:22:25 - 00:23:47

  • хорошо поднял и мои скиллы не только это круто И да сразу скажу что этим вопросом в первую очередь проверяется Ну не проверяется я хотел узнать у тебя то что для тебя считается успехом больше всего это к чему-то стремишься и Судя по всему тебя приносит удовольствие выполнение челленджей больше менеджерских чем программистских чем программерских вот а и тогда собственно Да дальше у нас будут сильно более технические вопросы Давай начнем с первого из этой серии смотри обычно спрашивают на собеседованиях про архитектурный паттерн

    00:23:10 - 00:24:47

  • Я считаю это очень скучно и на собеседование голов обязательно спрашивать архитектуру но давай немножко зайдем с другой стороны вот Какие архитектурные паттерны в Андроиде Ты знаешь который используется в Android фреймворке и Приведи пример пожалуйста Ты про UI паттерны архитектурные паттерны в Android фреймворке То есть например там я могу для примера назвать один но он самый простой у тебя тогда не останется его вот так что ты сам решай или не то архитектурный фреймворки Это скорее Солид вот это все там

    00:24:00 - 00:25:18

  • фабрика и так далее просто вот есть паттерны проектирование и поэтому Да их есть три вида это порождающие потом короче какой-то стоит и обзор каких-то три типа точно не помню их имена но в общем есть порождающие там бетонный прототай абстрактные протокол вот Ой просто так давай давай тогда ладно я поближе чтобы смотрел Ты назвал Factory ты можешь вспомнить какой-нибудь пример из Android фреймворка когда Android Framework использует паттерн Factory Да наверное из прямо Android из детей или в целом из

    00:24:41 - 00:26:36

  • Android разработать за Android лучше всего то есть прямо из Android фреймворка но мы можем потихонечку к этому прийти Откуда ты хотел назвать я хотел разработки этого из Android [музыка] Так ну Факторе это в общем такая Такой классный который на каких-то условиях может вернуть тебе объект вот может создать тебе объект из Android фреймворка Какой может быть пример так вот я так не могу сказать направь меня куда Ну смотри что такое Factory Builder по-другому называется ты можешь вспомнить билдера какие-нибудь в

    00:25:52 - 00:27:32

  • Андроиде она смотри есть эти модельки Как мы можем создавать Vim модельку там же через Builder можно проводить Интересно а вот сейчас Окей Это скорее пример можешь рассказать в чем в чем смысл билдера В чем смысл Факторе Ну сейчас я просто хотел попросить Привести примеры Факторе но чтобы в Андроиде иногда это называется как Билдер То есть просто вопрос терминологии и есть конкретный класс который по сути выполняет роль факторы хорошо ладно давай так давай начнем Ну вот по этому поводу вот что для примера на тикетч когда

    00:26:57 - 00:28:35

  • уведомление создаешь ты создаешь Билдер и потом параметры вызываешь Ну окей Вот примерно такого я хотел Хорошо можешь тогда Привести примеры go tobject в Андроиде это тоже архитектурный наверное какой-нибудь какая-нибудь большая Activity который у нас много всего напихано или там орки [музыка] почему-то мне сразу приходит вьюшка Вот но на самом деле наверно нет потому что там типа все методы и там все крадет вот так начали замечать что у нас терминологии используется неправильно мы где-то называем Билдер где-то факторы где-то

    00:28:08 - 00:29:59

  • называем паттерны где-то конструкции и так далее В целом Мы вроде поняли друг друга О чем речь потому что называется Да по поводу общих то вот Представь класс который ты вот открывал за Android исходников ты скорее всего открыл я уверен что Господи Почему здесь так много строк это была вьюшка OK мы когда говорим про какие-то архитектурные решения нас речь идет про а что Про то что мы ответственность храним Да ну то что у нас ответственность большая и год обжиг это как раз нарушение его проблема нарушения что нарушение

    00:29:33 - 00:31:12

  • синглареспансибилити Ну ответственности Да вот и в йошка она плоха еще потом Почему почему у нее слишком много [музыка] Она наверное [музыка] вот Представь что ты сейчас сказал что большая А я тебе скажу что Юшка еще больше еще больше ответственность Как ты думаешь почему ее наследует много кто она Чего нет это тогда не будет работать Потому что она-то сама не наследует ничего или чего ну она сама какой то на нашем экране У меня есть какие-то метки Да но еще хотел сказать про то что она еще несет функцию контекста

    00:30:27 - 00:32:09

  • функция контекста несет в себя очень много всего и это очень яркий паттерн готов вот Окей Ну ладно с паттернов с архитектурой немножко перейдем к Приборку Андроида чуть больше если что-то что ты бы хотел улучшить в Андроиде вот Представь что ты архитектор Андроида условного принимаешь решением потому как что делать следующий год чтобы ты улучшил там я был лучше наверное мне мне после после того как я научился Объявлять списки в компост Мне теперь вообще никак не хочется трогать я бы наверное взял его как

    00:31:28 - 00:33:15

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

    00:32:30 - 00:34:00

  • обычный список с текстом с картинками какой-то там возможно анимацией это все нужно настолько сильно оптимизировать заботиться там о всяких ссылках Это все что а еще сразу в голову почему-то пришло пересоздавание активити когда мы делаем какие-то конфигурации эти все жизненные циклы Я вроде знаю что в iOS этого нет Там все гораздо легче с этим Нет там на архитектура другая а как бы это изменило архитектура Андроида чтобы эти проблемы не было наверное Ну точно пришлось бы заново писать потому что

    00:33:20 - 00:35:02

  • не сделаешь как бы я изменил архитектуру Слушай я не знаю как бы я это сделал Потому что так глубоко и типа какой-то вообще без понятия вот этом примерно знаю но вот настолько глубоко типа А почему это почему Там пересоздается и так далее сложно ответить и как это изменить тем более понял Понял тебя Окей А вот с точки зрения Lazy списка Если я правильно понял что ты говоришь только списки медленный Ну смысле Они нуждаются в оптимизации да Ну компост списки Да и сакрави тоже как бы ты подошел к этой задаче то есть

    00:34:18 - 00:36:05

  • Представь что тебе дали деньги и сказали сделай Android лучше что бы ты сделал деньги время как бы я улучшил вот этот лези колум в Android в compose например да да вот Представь что у тебя есть сообщество которое говорит что медленный И ты как разработчик ответственность за этот компонент сидишь думаешь блин Чтоб такого сделать чтобы так не думал что что ты сделаешь для этого Я бы в первую очередь я бы наверно посмотрел на сообщество и понял бы типа Почему и какие-то примеры взял то есть если мы

    00:35:14 - 00:36:54

  • если мы видим что сообщество говорит что типа списки тормозят мы можем посмотреть на их код и посмотреть Почему Они тормозят из-за этого сделать какие-то выводы типа Почему так нельзя Почему так плохо рассказать про это Да чтобы люди знали что так делать нельзя и попробовать сделать так чтобы люди это сами не писали то есть разработчики не писали сами то есть какие-то улучшения А это уже сделано было под капотом и люди также типа писали был Lazy colum и все бы сразу быстро работало вот сначала в эту сторону покопал ты вот как

    00:36:05 - 00:37:42

  • человек который писал на Lazy cally com Если не ошибаюсь да Вот чтобы ты улучшил с точки зрения фреймворка чтобы для твоего кода этот список работал быстро Я бы я бы наверное вот я знаю что когда мы хотим чтобы Наш наши элементы понимали В какой они позиции находится в списке Мы хотим туда пробрасывать айдишники там есть специальное такое такой параметр Кит называется вот это пробрасываем какой-то айдишник вот и Ну ты можешь его иногда забывать А можешь помнить о том что нужно его пробрасывать вот и я сделал так что как-нибудь

    00:36:55 - 00:38:46

  • оптимизировал все это и типа разработчик не заботился о том что вот мне нужно еще думать о том что нужно поставлять и как будто это сделал в коде Еще раз что ты передавал бы сам объект или который выступает в качестве ключа в коде ну здесь хороший вопрос потому что ключик то нужен Наверное мы как обычно Передаем мы Передаем какой-то айдишник и можно принципе это доставать типа из нашего списка который мы прокидываем то есть не самому руками доставать этот айдишник или ключик А типа автоматом внутри

    00:37:50 - 00:39:34

  • комповском пайлора доставать из списка что нам нужно и прокидывать туда смотреть Какие параметры используются и эти параметры использовать в конструкции ключа возможно тестировать тестировать как бы ты это тестировал Я бы тестировал это при помощи каких-нибудь метрик типа скорости повесила бы там метрики сколько отрисовывается За сколько секунд пользователь может взаимодействовать со списком вот какие-то фрезы фпс и все откуда-то сохранял и при каждом следующем релизе Я посмотрел что Вот типа у нас что-то сломалась или что-то

    00:38:48 - 00:40:35

  • улучшилось [музыка] Окей давай немножко я не планирую это сдавать но я тут вспомнил одну невероятную историю всего Android сообщества ты не помнишь случайно когда в Андроиде появились лямбда С какого Android API лямбы присутствует в байт-коде в смоле коде Ну примерно они пришли к нам из джавы Мне кажется это какая-то восьмая Java наверное нет и что происходит когда мы пишем на код ли не лямбдам например или на javil лямбду на остеохондроидах номера ругается и фронт-энд компиляторы говорит что типа

    00:39:53 - 00:41:32

  • Здесь нельзя лямду старый старая версия Используйте более свежие Что такое окей ладно а что ты бы использовал на старых версиях старых версиях вместо лямт не использовать бы какие-то типа обертки объектов Что такое ты не хочешь создавать отдельный класс Чтобы ты делал отдельный объект не хочу вставать отдельный объект Ну класс хорошо ты кланешь К анонимному объекту анонимному классу Вот и в общем ладно чтобы не затягивать я да я хотел сказать что была такая же история с анонимными классами с лямбдами Когда при переходе

    00:41:07 - 00:42:56

  • разработчики не понимали на какой версии запускается их приложение на какой версии Андроида запускается приложение и дело в том что лямбды по-разному работали на comple даже на comple тайме в Андроиде свежим и Android дышу горинг работал по-разному и да душу знаешь а что это Ну это когда мы разворачиваем вот это вот типа лям точку в анонимный класс В общем так именно и работают лямбыды на остеохондроидах То есть ты пишешь лямбдул но на этапе компиляции он разворачивается анонимный класс и раньше

    00:42:24 - 00:43:43

  • была проблема что разработчики все не понимали Какие конкретно объекты прокидываются в эту лямбду и из-за этого ловили утечки памяти например они создавали лямбуду внутри Activity и удивлялись Почему у них это лямбда попадает из Ну убивается коллектором или наоборот не убивается например пока у тебя живёт запрос у тебя ссылка на контекст жива и разработчики не понимали Почему у них Почему они например в лям где там проверяют на Ну например текущий активити но при этом у них активити все равно держится на страх Андроидах А все

    00:43:05 - 00:44:23

  • дело было в том что там не явно передавался в аргументы анонимного класса объект Activity и Activity сохранялся это к истории про комфорт я просто вспомнил что там тот же самый подход применили и в конце концов это ни к чему хорошему не привело Ну к неявщине то есть Чем более неявщины чем более неявный код тем легче там сделать баги вот а это просто я чтобы не выглядеть идиотом зачем эти 15 минут расспрашивал про лям Вот Но все тем не менее я тебя поспрашивал такие верхние уровни вопросы но от низкоуровневых совсем уж не уйти можешь

    00:43:44 - 00:45:03

  • рассказать про структуру данных которые ты знаешь структуры данных Ты про лист Да например Расскажи пожалуйста как работает в общем это такая большая табличка с ключом и значением под ключом у нас обычно говорят Бакет для значения тоже какой-то значение подробно есть ключ значение Ok что нужно делать чтобы работал что каким критериям ключ должен соответствовать ключ должен соответствовать Это должен быть ссылочный тип то есть мы не можем флешме положить кстати вот по Раз уж мы затронули а в Андроиде у нас существует хэшмэп в

    00:44:24 - 00:46:20

  • котором мы можем получить премии мэпы вообще в котором можем засунуть примитивные типы ну Ты про Рэй мэп что-то такое который Android да ты его знаешь это отлично Вот и в общем по поводу ссылочных типов каким критериям должны эти ссылочные типы соответствовать каким критериям должны соответствовать ссылочные типы не понимаю вопрос Смотри я разработчик Я хочу например у меня есть не знаю там профиль и профилю фотка Я хочу сделать шмапу из класса профиля к классу каким критериям должны соответствовать

    00:45:30 - 00:47:05

  • мой класс фото что О чем я должен подумать Прежде чем сделать такую хэшмапу а фото это велью да для значения да да профиля такие у меня есть два класса например или просто фото это Street string То есть это просто URL а ну то есть мапа со стрингом и значение это какая-то фотка нет ключ это профиль это класс профиль это Например стринга я понял вопросы к чему ты идешь в общем в котлине Есть такая тема типа да ты классы и если это дата класс Мы объявим Вары и значит для ключа положим наждатый класс и потом где-то да ты

    00:46:23 - 00:48:16

  • класс Вар поменяем то поменяется хэш код и мы если в следующий раз будем брать это значение поэтому ключу мы ничего не найдем потому что баки только другой и там ничего нет ты про это Ну я скорее про Ну прямо скажу что я скорее про то что у класса должен быть хэшмэп функция переопределена и equalse функция переоделена хашко одна почему-то класс нас освобождает от этого Ну потому что у него генерится как раз этот хэш-код и они автоматы вписываются А есть какие-то ограничения на дата Класс Такие переменные то можно

    00:47:22 - 00:48:58

  • использовать Какие перемены то можно использовать вроде любые Просто нужно чтобы дата класс был не пустой там было какое-то поле обязательно какие-то проблемы со списками может быть [музыка] если у нас поле это список а да одно из поля это список Ну хорошо Представь Представь что есть Почему могут быть проблемы со списками Как ты думаешь наверное потому что когда вычисляется хэш-код это же список и мы должны как-то понять какой там хедж код будет возможно с этим связано Я думаю Да и какой у списка по

    00:48:15 - 00:49:54

  • умолчанию код у списка по умолчанию у хорошего наверное просто ссылка в памяти окей Да ну это правда правда тут то что это не хешкод настоящий не тот который мы ожидаем он не зависит от контента который содержится в реалисте и это то почему надо смотреть что добавляешь пятый класс благо умный Android Studio IDE она подсвечивает тебя Если ты добавляешь какую-нибудь список водота класс но об этом все равно стоит держать в голове что по всей иерархии дата класса используемый параметры должны корректно

    00:49:18 - 00:50:27

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

    00:50:10 - 00:51:39

  • Однако Я заметил у тебя то есть если бы я был сейчас например в Яндекс или какую-нибудь крупной компании Я бы тебя отправил еще на часок технического собеседования на знание фреймворка и на знание Вот и если мне нужен если у меня тайм Слот одно собеседование если не нужен Технический специалист который разбирается в технических вещах то я предпочел послушать других специалистов Вот потому что мне очень сильно смутило что ты не смог рассказать Точнее не смог а не рассказал очень важный момент что

    00:50:53 - 00:52:04

  • тут всегда присутствует риск неправильного собеседования заданных вопросов Но в данном случае меня я не услышал ничего про то как устроен дети то Как устроены BC вот это все это то чего я бы на самом деле хотел услышать когда спрашивал тебя про то почему почему поворот на Андроиде нужно обрабатывать и почему Например на йосе нельзя обрабатывать То есть это хорошо что мне очень понравилось что ты упомянул слабые места Андроида вот Хотя при этом мне не очень понравилось что они скорее менеджер скоро характера То

    00:51:29 - 00:52:40

  • есть как верхнего уровня пользователь который только начинает знакомство с Андроидом потому что у большинства опытных разработчиков скорее накопится там a b там словно там давайте передавать дефолтное значение там какой-нибудь при создании что-то такое то есть вполне какие-то конкретные мелкие предложения какие-то они верхнеуровневые менеджерские и в целом Это понятно но вот в случае с песком Я попытался раскрутить и понял что ну с точки зрения технического совершенствования у тебя как если я буду

    00:52:05 - 00:53:19

  • с тобой работать могут возникнуть проблемы То есть может возникнуть проблема с помощью тебе для того чтобы довести какую-то фичу сделать какой-то дизайн ревью и так далее То есть за тобой нужен чуть больше контроля за разработчиком который например самостоятельно может представить себе систему и самостоятельно может принимать решение по этому компоненту Вот то есть точки зрения мидла здесь потребовалось бы поддержка с этой точки зрения что вот и про Да про это и еще Да тут в чате писали что хватит смотреть в телефон Я смотрю в

    00:52:42 - 00:54:00

  • телефон что я записывал как раз и про Да сначала тогда давай начнем про декомпиляцию Я бы хотел услышать во время факапа то есть я очень долго подводил не знаю что это или нет но мне кажется что это один из очевидных таких моментов Я не стал это раскручивать но в целом мне кажется что да прямо можно было спросить имеешь ли ты вообще опыт декомпиляции приложений таким а декомпиляция это когда это что реверс Инжиниринг когда ты берешь собранную какашку и смотришь Какой код там внутри содержится Да нет был А вот в

    00:53:19 - 00:54:51

  • общем да тут можно было развернуть эту тему и поспрашивать еще по этой теме но я не услышат когда рассказывал про релизную сборку при этом это одно из первых я бы сделал именно против компилировал приложение посмотрел бы какой там по факту код располагается вот ну это не то что прям сильный минус просто А есть же вот эти маперы которые позволяют это сделать когда у тебя релизный релизная сборка там один код ты при помощи вот этих мапперов которые у тебя пустуют код можешь тоже посмотреть не обязательно

    00:54:07 - 00:55:25

  • покажут код который не существует где бак сборки или покажут код который наоборот существует дебокс сборки но не ну в общем они не показывают они мапятс депажному коду то есть они скорее символы Маппет но они тебе не покажут Например если у тебя в тайме происходит Вот пример Android Studio подкладывает эти башню сборку вместо всех строковых там констант который используется в композе специальные литералы и ты об этом не узнаешь если не декомперируешь собранное предложение не разберешь на этапе сборки

    00:54:45 - 00:55:54

  • сборка больших проектов сложно может подкладываться какие-то Конфи пара какие-то флаги когда у тебя 1000 флагов то нереально невозможно разобраться глазами тебе нужно просто открыть и посмотреть и такие навыки могут сэкономить потенциальные компании много много человеко-часов И поэтому специалисты которые этим владеют они тоже не ну в общем это было бы плюс если ты про это упомянул про это не упомянул это не плюсы не минус это просто то чего я бы еще хотел услышать это может быть полезно для людей которые смотрят стрим

    00:55:19 - 00:56:35

  • про архитектурные компоненты паттерны я давно чат не очень внимательно читаю но я видел там что люди говорят что мы с тобой не разобрались что такое паттерны что такие компоненты и так далее Мне кажется главное что мы друг другу поняли что мы речь была оборота Факторе условный про год и так далее и Ну и конечно в данном случае мне показалось что у тебя присутствует знания этих атомов но оно теоретическое и этим вопросом Я как раз проверял насколько практическое твое знание паттерна Вот соответственно с точки зрения

    00:55:56 - 00:57:21

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

    00:56:41 - 00:58:00

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

    00:57:20 - 00:58:31

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

    00:57:56 - 00:59:15

  • посчитал что все хорошо Всегда собеседование найти какие-то не то что слабые места кандидата а скорее какие-то такие вещи в которых Он плавает и такие вводные собеседования могут быть хорошими чтобы там решить Если тебе там точно нужен человек Хорошо знающий архитектуру библиотеку делаешь Я бы Например еще одно собеседование бы сделал где еще раз бы там на час тебя проверил насколько ты хорошо знаешь вот это все просто это один из путей векторов а вот про фреймворк экрана про поворот экрана я рассказал уже что я здесь бы

    00:58:35 - 00:59:54

  • ожидал глубоко технический ответ вот и мне показалось что ты так не ответил потому что не присутствовал глубоко технологическое понимание Как это работает общее Как ты думаешь мои правильные впечатления про переворот экрана Ну например да про переворот экрана Да я согласен что концептуально я понимаю вот а Как глубоко это устроено не разбирался Ну в общем Здесь был бы плюсом Вот и да Это хороший повод поспрашивать про базу какие-то вещи про жизненный цикл Activity про банду и так далее ну знаю как это все работает Как это

    00:59:14 - 01:00:47

  • хендлить как это это типа обходить до переворот экрана Что такое PC бандалы и так далее жизненный цикл Какие они бывают в разных сценариев к этому уходим на homebaton или когда в рисенс кладем наше приложение как бы это все я знаю просто Как именно типа система переворачивать наш экран это я не знаю в общем мне кажется что это полезное знание честно говоря не в рамках собеседования Я советую почитать на мобиусе по моему был доклад или а в общем есть доклады про то как устроен Android и там про саму вот эту штуку

    01:00:06 - 01:01:37

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

    01:00:51 - 01:02:27

  • тебе кидать А блин Да я не подумал об этом что у тебя сейчас открыто Какой какая вкладка вот я тебе скинул в чат нашего созвона вот и я не знаю куда тебе еще можно кидать может быть Telegram закрыт Telegram Вот вот есть там на самом деле Можно даже было без этого кода закомментирует я не был уверен что это пишется именно так Ну пусть будет тогда просто это пометка мне скорее тебе там что эта функция вызывается только условно один раз ну не может два раза параллельно вызываться эта функция Вот давай задачу перейдем смотри у тебя

    01:01:48 - 01:03:41

  • есть интерфейс команд exeder это некий интерфейс в который я как разработчик засовываю URL И получаю ответ ну для простоты здесь URL это стринга строка ответ Это собственно лямбда в которую приходит строка это собственно ответ и твоя задача написать им презентацию этого интерфейса так вот у тебя есть Да вообще изначально ЛОР какой что у нас есть устройство например Bluetooth Ну может быть другое просто я решил эту задачу переформатировать под мой профиль нас есть устройство Да и тебе нужно из нескольких

    01:03:00 - 01:04:37

  • экранов например получить процент зарядки батареи Представляешь если что будет если мы с нескольких экранов которые параллельно открыты из всех трех запросим каждый раз состояние батареи Он каждый раз будет запрашивать запрос делать запрос и возвращать ответ у нас получается три экрана из-за того что мы там внутри не оптимизировали что-то у нас получается три запроса и твоя задача сделать такой будет такие запросы объединять в один и ответ на них распространять по всем собственном по всем по всем лямбам

    01:03:49 - 01:05:11

  • которые мы ожидаем увидеть ответ вот иначе говоря с точки зрения Кода да тебе нужно имплементировать команд экзекетор который с помощью был я девайс интерфейса то есть неважно Откуда у тебя приходит Представьте что у тебя откуда-то приходит выполняет запрос Да запросы кстати Ну можно и синхронно можно не синхронно Не суть важно а и затем ответ возвращает он дублирующие запросы соединяет вот понял окей погнали из средств по точности Можешь использовать что тебе что тебе нравится Так нам нужно там видно да А можешь еще побольше или

    01:04:30 - 01:06:06

  • я больше не это и так когда не надо так У нас есть функция Значит она принимает URL и какой-то response и этот эта функция Да вот этот имплементация она соответственно у нас где-то на трех экранах типа Это не имплементация вызов этих функций вызов этого запроса скорее нам нужно их как-то смёрзжить в один результат общий а как мы это будем делать Ну а Наверное мне сразу в голову приходит решение через то что мы смотрим на URL если это URL одинаковый то мы его Будем отдавать уже какое-то имеющейся response

    01:05:42 - 01:07:38

  • а остальные просто отменять Вот это первое решение второе решение это через какие-то наверное делать а Наташки то есть мы можем по идее создать какой-то пробрасывать Хотя нет то же самое Я просто хотел сделать опять же какую-то ключик которому мы можем сравнивать и пропускать или вызывать Вот еще один вариант это через какой дополнительный класс который мы будем прям здесь Объявлять [музыка] квест блогер Что такое вот и это будет класс который в которой мы Передаем наши запросы и он уже является

    01:07:05 - 01:09:01

  • такой прослойкой [музыка] принимает себя несколько запросов и отдает на выходе один запрос вот можно сделать так так это два варианта Давай сделаем наверное первый через что мы сравниваем URL и как-то его проверяем и пропускаем какие-то другие запросы которые нам не нужны вот ну очевидно что нам нужно куда-то сохранять этот URL Я бы Опять наверное отдельный класс наверное даже блогер типа сохранял какое-то поле [музыка] условно вот и соответственно его обновлял то есть мы идем request Blocker обновляем

    01:08:21 - 01:10:26

  • смотрим на текущее сейчас короче будет метод очевидно чтобы он выполнил который вызывает что-то и дает ответ вот и он респондент мы весь вызов нашей функции он проходит через дополнительный класс типа который мы хотим передавать наш URL а и уже там сравнивать его И теперь мы здесь будем сравнивать Если получается если текущий URL который мы Передаем равен предыдущему который мы Передаем равен предыдущему Это значит что мы хотим вернуть за кэшированный результат Если получается мы вызвали функцию

    01:09:40 - 01:11:34

  • URL у нас впадает мы не хотим заново вызывать не хотим заново вызывать запрос Мы хотим просто отдать если Мы хотим заново вызвать какой-то Ну типа request поэтому мы там ну короче request да я тебе дал интерфейс ты можешь прям этот интерфейс вызывать я понял так вот Окей Так этот интерфейс нам нужно куда-то пробросить Ладно и в целом я понял принцип и как бы ты Ну вот такое решение пока что Ну да такое черновое смотри Давай попробуем Вот посмотри на интерфейс пожалуйста который я прислал верхний самый команд за компьютера

    01:11:36 - 01:13:37

  • Давай предположим вот если ты увидишь этот интерфейс как ты думаешь какое ожидание что-то ожидаешь от функции то что функция будет что-то по урлу запрашивать синхронно а синхрон а у тебя сейчас как у меня на ничего не запрашивает Но вообще синхронно все Да давай попробуем переделать на синхронную Окей Так значит нам нужно научиться это как-то синхронизировать наверное здесь будет синхрон Айс Так у нас будет какой-то Лог локер блок попробуем или можно попробовать через This наверное [музыка] далее Можно попробовать

    01:12:48 - 01:14:55

  • это все сделать нам эти поля нужно уметь мы здесь если они не равны Мы хотим значение обновлять давайте так они равные закашированный результат если они не равны мы обновляем значение и соответственно вызываем там белый девайс Вот Но это решение Да но не работает несколько потоках потому что типа эти штуки они могут вызываться где-то там в разных потоках соответственно может быть проблемы Вот и нам нужно научить этот класс request Blocker делать так чтобы мы могли вызывать хоть каких потоков и ничего не ломалось вот

    01:14:04 - 01:15:50

  • здесь есть несколько решений можно делать через атомики можно сделать через синхронность блок с локерами вот можно попробовать посмотреть сторону корутин и мьютекс и вот это все вот я наверное пойду Через синхрона из блок и попробую этот метод вызывать блог Так у нас есть метод request который наверное нам нужно сделать синхронайст и как это делаем так OK вот здесь еще нужно учесть то что бывают разные Локи есть Рен тренд Lock redride Локи Вот это тоже нужно учесть и в зависимости от того сколько мы будем

    01:15:03 - 01:17:00

  • читать или сколько мы будем записывать нам нужно выбирать разные подожди я все еще синхронно происходит запросы да Да я еще не доделал Что хорошо Так мы это все телефон [музыка] Так нам нужно теперь request A sing вызывать как-то синхронно так смотри получается Если у нас несколько экранов и каждый экран вызывает вот этот метод Да Он значит идет вот сюда и вызывает метод request на вот в этом блокере и возвращаюсь сюда response этот request вызывает нам request нам нужно его не у тебя Смотри вот давай так представь

    01:16:26 - 01:18:19

  • что request осинки я вызываю зимой поток Я не хочу чтобы его вызов блокировал поток текущий понял Тогда наверное здесь нужно добавить какой-то типа Ну короче здесь можно через рутинные какие-нибудь хендаллеры или RX Я наверное через ты уверен что хочешь использовать для этой задачи сам решил здесь будет ну и соответственно мы можем этот метод мы вызываем request этот request нам нужно на него он должен что-то вернуть Так значит мы должны сделать это символ Да и потом мы на него подписываемся В общем

    01:18:05 - 01:20:00

  • типа происходит подписка Skype он обзор он это все вот потом типа нам нужно получить результат вот сделать Как через наверно и в [музыка] прочем у него есть несколько методов у него есть не помню короче я потом типа он комплит и мы соответственно он respons Передаем результат Ну писаться да а где-то здесь подпишешься Ну где-то вот здесь вот Ну в смысле как-то запустишь этот чей в я понял это Чейн будет запускаться лучше конечно это сделать по-другому вот это все убрать и просто вызвать типа request вот

    01:19:44 - 01:22:15

  • который будет асинхронный и мы будем него подписываться и тридерить уже где-нибудь там презенторе или модельки где мы хотим не здесь а я все что засунул нужно это вынести куда-то наружу а здесь просто типа что ты предлагаешь чтобы request A sing вызывал сингл Ну да почему нет Потому что потом мы сможем как раз может поменять давай так она возвращает сингл и соответственно эту штуку здесь вот это не надо вот Окей возвращает [музыка] туда Окей вот так Окей Теперь если у нас получается есть какой-то экран скрин А

    01:21:40 - 01:23:45

  • давай с экраном пока не надо вот по поводу с кеду Лера Смотри ты вызываешь функцию репозитория по сути проговорился команда за компьютера некий репозиторий Да И вот случае сжалой что как ты думаешь Как ты думаешь на каком потоке выполнится вот эта функция она выполнится на том потоке на который мы сказали выполнить Ну типа где мы говорим Ну мы хотим это выполнить синхрон то есть этот путь А где где мы это говорим Ну типа на экране где вызываем цепочку начинаем цепочку Мне кажется что в общем да по поводу безопасности кода Как ты

    01:23:11 - 01:25:01

  • думаешь Безопасен ли этот код вот давай представим ситуацию в которой придет разработчик со стороны и сможет ли он по интерфейсу Вот открой интерфейс сейчас по интерфейсу понять как надо использовать Ну возвращать символ теперь как как по этому интерфейсу Сможет ли разработчик понять поэтому интерфейсу как надо использовать эту функцию Сможет ли разработчик понять как нужно использовать функцию а я понял Типа На каком потоке Нужно обязательно вызвать например э-э которая Ладно я имел ввиду что тебе

    01:24:06 - 01:25:27

  • нужно указать На каком потоке вызывать Ну типа в RX прямо внутри команд игрыкютера Я не вижу ни одной причины Зачем бы это не сделать То есть ты шедоулер ну сделать этот скрип он внутри экзекьютера Потому что так очень много багов проекте появляется человек вызывает методы в executре и например каком-нибудь он не знает о том что ему нужно там назначится сетапить какой-то Поэтому правило номер один если ты делаешь какую-то операцию которая должна быть синхронно в этом же месте в этом же месте помечаешь что она должна

    01:25:11 - 01:26:41

  • быть на йошдуллер или где там еще Ну давай представим что вот в этом месте На каком Шатуре ты бы это выполнял [музыка] Почему а ну Нам нужен типа поход в сеть это не такая это во-первых не компетентаска то есть там он не нагружает особо CPU это все и у computation вот есть ограничения потоков то что он ограничен [музыка] количеством ядер а для инаута нам типа неважно там понятно дело что он какой-то ограниченный ограниченное количество вот и Ну в каком-то смысле да типа Ну тебя же ресурсы не безграничны

    01:25:55 - 01:27:49

  • ядрами Смотри Я скорее больше спрашиваю Вот какие стратегии страда зекютеры ты знаешь какие стратегии шатуллер Ты знаешь чем вообще отличается что дуллеры а шедоллеры в RX javi и стратегии трудов Ну да да то есть по какой логике мы Почему мы используем вообще что дулер и какая там стратегия внутри Почему мы используем shaduller Ну потому что нам Мы хотим научить типа на разных потоках запускать дело типа вот [музыка] Нет не обязательно насколько это потоков Да хоть сколько может быть есть какие-то шадуллеры в которых

    01:27:08 - 01:28:52

  • ограниченное количество потоков [музыка] и почему мы здесь используем ее а потому что нам нужно Ну типа сходить в сеть нам не нужно никак там нагружать CPU вот мы просто ходим всей и все окей и народ хорошо В общем я скорее хотел сказать что [музыка] Да я хотел сказать что тут у тебя есть блок это значит что ты блокируешь полностью весь трек и это значит что ты используешь живого примитива не ирисовские то есть вообще по-хорошему этот блок надо переписать на риксовский примитивы а это значит что ты блокируешь

    01:28:21 - 01:30:06

  • весь трек этот трек может быть переиспользуем из-за этого нужно проследить в данном месте что ты используешь шеделлер который позволяет создавать новые потоки в runtime а не шадуллер с фиксированным количеством потоков фиксированным количеством трейдов Вот и я этого хотел узнать на самом деле но Я как понимаю ты это знаешь Ты сказал что compitation фиксированное количество трендов это то что мне нужно было Да теперь давай попробуем посмотреть на Corner кейсы А представь что у тебя экранов например 3 и у тебя сначала у

    01:29:22 - 01:30:30

  • тебя одновременно все три экрана запрашивают вот твои текстовой этой комментарии Давай сейчас Нарисуем у тебя три экрана Screen A Screen B Screen C например и скринце и скрин А запрашивают одни и те же запросы делают одни и те же запросы вот да Ну типа того а скрин б запрашивает другой вопрос Screen B запрашивает другой вопрос как ты думаешь Давай попробуем они одновременно это делают посмотрим как твое поведет себя как твой он переадресовал все это в наш блогер в блогере мы сказали что мы типа

    01:29:58 - 01:31:38

  • лочим вот этот блок кода по вот этому локу значит здесь Да здесь будет Бага то что когда мы вызовем типа вот это этот код и отправим туда запросы он заблочит соответственно скажешь что ну типа урла нету он его вызвал с единичкой а на самом деле Ну и типа ответ какой-то там с единичкой а для реквеста синка сверлом 2 там другой ответ ожидается вот здесь будет проблема нам нужно как-то решить так Ну короче я думаю что Я хотел сказать что давай примерно еще 15 минут не выбиваться из там слота А вот не надо чем это сказал короче Прости

    01:31:11 - 01:33:04

  • Расслабься забыть Ну короче проблемы ясна Да я правильно понял да да Ну она у тебя перезаписывает запрос Хотя при этом ты мог бы третьему запросу ответить ответом на 1 потому что все три запроса пришли одновременно да В общем это проблема может решиться через операторы совы операторы и она может как раз автоматом давай попробуем Да на автоматом может принять себя какие-то запросы и если они одинаковы вернуть один и тот же результат Вот Но какой там оператор я не помню тогда Используйте технологии которые ты

    01:32:23 - 01:33:58

  • помнишь так OK я бы наверное сделал так нам на вход приходит URL так вот этот Лог нам точно не нужен вот [музыка] еще в рыхляве я помню была какая-то штука связанная с тем что она умеет хранить эти запросы блин как называется что-то экзекьютор что-то такое даже я использую но тоже я не знаю как она там не помню как она реализуется он представь что я попросил Именно его и написать Да да я понял вот как он реализован Так я наверное скажу сначала словами мы смотрим на request assing сверлом 1 далее вызываем request 2 request

    01:33:19 - 01:35:16

  • один Короче нам нужно как-то вызвать их параллельно все три Ну типа к ним обратиться параллельно Вот и если мы видим что там они одинаковые условно вот Screen I Screen C мы должны как-то схлопнуть в один а реквест б скрин б мы должны соответственно вызвать и про него ну его не скипать вот да Давай подумаем Давай лучше на словах мы тогда сейчас попробуем сформулировать решение не писать код и уже будем подходить немножечко к концу Ну вот как раз я так полагаю что это можно сделать как раз через если своя имплементация без каких-то там

    01:35:09 - 01:37:01

  • типа RX и так далее мы получается вызываем все ну типа мы куда-то складываем все три запроса вот понимаем что типа понимаем что первый и сейчас на словах это понятно В общем я бы сделал так у нас есть какой-то опять же вот request Blocker который умеет принимать себя хоть сколько синглов условно Вот и на выход он отвечает типа ну он принимает себя N количество синглов вот а умеет возвращать другое количество символов м количество Да я попросил это написать если посмотришь на изначальную задачу она

    01:36:08 - 01:38:10

  • ровно так и сформулировано было да то есть и внутри request блокера получается будем по каким-то там правилам которые мы условно можем задать даже request блогеру или если дефолтная то по параметрам Вот как ты их сравнить по нашему правилу или дефолтному и соответственно в зависимости от этого возвращать нить там не requesting URL один два раза а request A sing URL один раз вот а рекой Ассасин с урлом 2 он соответственно будет ну типа уникальный Вот его и он его соответственно и вернет у нас будет не

    01:37:44 - 01:39:18

  • три сингла Один два сингла и мы их уже потом будем на них как-то подписываться там вызывать То есть я бы сделал какую-то обертку типа вот такой вот типа слой в которой я даже я бы даже наверное вынес куда-нибудь в корр или что такое можно написать само это обертку собственно в этом вопрос Да я согласен Но мы же сказали что типа сейчас словами или написать Ну вот словами как написать эту обертку то есть изначально вопрос Если ты посмотришь то по сути я тебя попросил написать эту обертку То есть если посмотришь интерфейс Какой из

    01:38:31 - 01:39:53

  • блокера и команда execuitter то они один и тот же интерфейс так рекой То есть это один и тот же интерфейс и он делает одно и то же тебя сейчас команда просто перебрасывает запросы только блоки и мне очень хотелось как раз посмотреть как ты бы написал такой пробрасывайте и не нужно понимание того как он устроен В смысле как в каком месте он лежит в приложении хочу понять как Конкретно этот компонент Ты должен писать то что я сказал как словами попробуй написать короче будет дофига синглов Вот откуда мы эти силы

    01:39:14 - 01:40:27

  • будем брать будем синглы Ну короче можно эти синглы Да у нас за это все с разных идет скринов а там один нам нужно короче как-то собрать типа можно сделать так ну мы короче вызываем значит и Квест сингл Вот складываем его складываем его вот в это поле типа singles [музыка] Вот это будет список Окей и типа потом когда мы соответственно вызываем прикос блокере типа Save request или лучше переименовать это типа научиться его как-то вызывать и внутри сохранять чтобы как бы не было отдельно но пока вот сейф

    01:39:57 - 01:41:58

  • request мы сохраняем это все сюда [музыка] В какой момент мы удаляем сингл Ну наверное при когда мы хотим отписаться типа или даже когда мы вызвали и мы их можем типа отсюда Удалить а если нам больше не нужен ответ нам больше не нужен ответ символ Вот Мы научились их сохранять и соответственно Когда у нас будет блогер вызываться на разных экранах мы будем проходить сюда он будет где-то сохранять рекой с блокер скорее всего у нас будет опять же там на какой-то сколп экранов возможно то есть не на все приложения

    01:41:32 - 01:43:00

  • вот тоже какой-то наверное он должен быть [музыка] Ну это можно доработать и сделать типа каким-то общим решением чтобы он был на все приложения и вообще без разницы там когда и где вызывает но сейчас это будет плохо работать потому что получается будем складывать все сюда [музыка] которая берет все эти синглы и понимает по параметрам какие нам нужно скипать какие нет и возвращает нам не N количество синглов типа вот здесь будет количество синглов вот мы вернем потом по этим синглам мы сможем пробежаться на них подписаться и все

    01:42:44 - 01:44:19

  • а да давай потихонечку подводить концу Это большой молодец очень крутое собеседование Спасибо тебе большое Ты прям классный классный разработчик Я бы хотел с тобой работать вместе И я думаю что тебя ждет большое будущее Вот и я уже говорил по интро по задачам Мне кажется ты изначально пошел не туда использовав Эрик Джал потому что Мне кажется это одно из твоих слабых мест по крайней мере то что я понял за собеседование что у тебя не очень хорошо получается представляете абстракции что стоит за этим самое может составить код

    01:43:39 - 01:45:05

  • если открытый В общем что что стоит за этими абстракциями потому что ну по сути сингл это Chain какой-то уже запросов которые как бы уже сформирован и мы может возникнуть очень много проблем концептуального характера понимание того как мы будем объединять это в какой момент так далее на самом деле она больше Про проверку многопоточности и я ожидал увидеть решение некоторые которая в котором ты будешь сохранять лямбды которые тебе приходят и если вдруг условно Каждый раз при получении запроса смотреть на то каким лямбды

    01:44:23 - 01:46:02

  • содержатся в там хашмапе какой-нибудь и удалять из этой хашмапы значения а потом оповещать всех слушателей там еще есть нюансы с тем как это все делать как все это многопоточно организовывать и так далее и Честно говоря у тебя эта задача не получалось Я думаю что в первую очередь это произошло из-за времени собеседования то что она длилась 2 часа такого времени собеседование очень большое и Честно говоря ты большой молодец вообще Дожил до конца и я думаю что тут скорее так просто сложилось вот с

    01:45:12 - 01:46:27

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

    01:45:50 - 01:47:17

  • именно Ну с точки зрения сервисами Это очень сложный инструмент Я очень удивился когда узнал что ты его хочешь использовать Я думал ты им владеешь совершенстве но ну нет Мне кажется что в таком случае лучше использовать более простые технологии там видел в чатах что люди говорят что было на корутинах сделать вот в целом если если Кирилл попросят Розов Я наверное могу скинуть свое решение этой задачи на крутинах вот если будет интересно но там не сильно много будет крутину и так далее принцип примерно такой что мы используем

    01:46:33 - 01:47:58

  • хашмапу там какую-то тоже опять же там Желательно использовать или что-то потока защищённое и в этом месте мы будем рассылать подписчикам события Вот и к сожалению из того что видел до этой талонной реализации тебя было далеко То есть у нас был возникли проблемы с пониманием того как замерзать эти синглы что нам с каждым синглом нужно передавать URL ключ по которому мертвым по пониманию того как уже разрушать текущие составленные цепочки и так далее потом формировать новые и на это ушло очень много строк кода и много

    01:47:15 - 01:48:32

  • времени сейчас который был изначально можно было его сравнить и положить Не он респонденса URL то есть хашмапу из запроса и списка спонсоров то есть ключиком Был бы URL Да а value список ответов ой список подписчиков Ну например Это можно было бы народжаве решить то есть здесь я вижу проблему того что вот текущим решении концептуальную в том что есть очень много нюансов вот этих вот которые тоже не понятно как решать будет сложно и долго а во-вторых то что у тебя этот список синглов формируется динамически А

    01:47:55 - 01:49:14

  • тебе хорошо бы ну и там будет куча проблем с синхроничной мы будем кучу проблем тратить на одну кучу времени тратить на то чтобы понимать как синхронизировать мы уже имеем фреймворк для синхронной работы мы еще будем работать для того чтобы правильно работать синхронный фреймворком для того чтобы билдить запроса синхрон вообще Понятно зачем здесь нужна и как она тебе поможет если ты вот вспомнил какие-то методы которые бы все это делали за 2-3 хода то мы бы собеседование скатились скорее в понимании того А расскажи как работают

    01:48:46 - 01:49:55

  • эти методы Я понял что действительно понял это работает не просто выучил функции документа очень сложный инструмент меня он сам пугает достаточно вот поэтому в данном случае да то есть первое использовать другой инструмент второе концептуально подойти по другому к этому к этому к этой задаче Вот я думаю у нас все Кирилл который собеседующий здесь какие-то вопросы может быть и возможно мы потом перейдем к вопросу на слушателей если они есть тебя не слышно Кирилл У тебя есть вопрос сейчас Прости блин

    01:49:21 - 01:50:50

  • нам нужно придумать как-то Хорошо тогда Кирилл У тебя есть вопросы ладно тогда Ну давай как-то так меня можете называть меня просто Говорите когда Эй ты вопросы да на самом деле Спасибо за Собес много чего нового я узнал вообще и Собес реально ну типа необычный не тот который все привыкли да про там типа что такое Application Contex такой активный контекст там Какие компоненты существуют это все а более такой прикладной что ли Вот это прикольно да Я бы попробовал еще такие собесы пройти и наверное даже

    01:50:16 - 01:52:04

  • вот такие собесы такого типа они наверное даже лучше чем Ну типа Можно можно смешивать как раз Хордовые собеса и вот такие практически это будет вообще кайф И тогда все кандидаты которые приходят Да новые они будут Ну типа их полностью проверят вот а не то что ты там типа выучил ответы на популярные вопросы собеседований Это первое и второе было как бы я заметил много наверное не такой типа критичная но я просто заметил что есть какие-то недопонимания иногда с терминами вот допустим про паттерны или что-то еще я

    01:51:14 - 01:52:45

  • думаю про одно а ты хотел услышать вообще другое вот это было такой недопонимание вот а так себе крутой Мне очень понравилось [музыка] Спасибо ставьте лайки подписывайтесь на канал Я надеюсь я надеюсь то что ребятам из чатика и в трансляции потом записи будет полезно типа услышать вот эти всякие вопросы которые сегодня прозвучали и тоже много кто полезного для себя вычеркнет Да я по поводу терминологии А да Это хорошо что ты заметил это правильно так и было мне кажется что это тоже один из пунктов собеседования собеседование Это

    01:52:00 - 01:53:44

  • не то что проверка человека это скорее общение с ним чтобы понять потому что в разных командах разный момент может быть такое что человек просто не подходит по твоему типу там по твои терминологии тоже один из вариантов использования и на собеседовании бывают ошибки тут невозможно сформулировать вопрос так чтобы совсем не было ошибок Вот и чтобы мы друг друга поняли С полуслова это какая-то химия должна образоваться тогда очевидно это человек должен работать в команде есть между какими образовалась

    01:52:52 - 01:53:54

  • но иногда этого не бывает это нормально Вот я думаю у меня все Уважаемый Android broadcast удостоверился что RX не надо Кто написал Да там вообще чат читать там столько негатива какие-то злые Все я ничего не видел записи Надеюсь будет чат я потом буду смотреть именно [смех] окей Да так Самый наверное главный большой запрос который есть сейчас Никита чтобы ты показался потом ретростное решение мы сейчас уже не будем это делать этого Никита просто какой-то Джин сделает И я его соответственно выложу потом Telegram

    01:53:23 - 01:54:52

  • чеки и соответственно будут хорошо будет видно что хотелось на карантина Да да я могу сделать как ты хочешь [смех] сделаю Ну там посмотрим там может быть не так много открутин Да а подробное описание задач кстати тоже будет Можно мы его тоже скинем сможете тоже попробовать свои решения сделать типа сравнивать Я думаю просто телеграме почему хорошо выложить решение там можно классно его обсуждать вот в комментариях тебе ссылочку но его не пообсуждаем а там прямо мы сможем классно пообсуждать по накидывать Никиты сможете что-нибудь

    01:54:11 - 01:55:32

  • попросить до свои какие-то решения показать вот прям классно срач покруче здесь какие-то вопросы накидывайте Мы еще немножко поотвечаем вопросы и будем уже расходиться Вот Но я думаю Такой формат вот когда я буду звать какого-то опытного разработчика уже не на другого опытного разработчика отправлять а именно на кого-то из сообщества я оставлю потому что действительно мне кажется будет полезно видеть разные форматы разные взгляды на собеседование как это может происходить На какие-то позиции будет довольно интересно то есть

    01:55:00 - 01:56:01

  • Будем пробовать разных и джуниоров и всё сейчас активно пытаюсь Договориться с ребятами из Больших компаний чтобы они показали свои реальные собеседование [музыка] с кем первым я смог договориться это Тиньков странно почему именно с ними Ну да ладно на следующий день покажем свое боевое собеседование То есть те кто не знает я работаю Тинькофф Да и как останется Скоро мы будем показывать боевое собеседование то есть скрининг свой боевой это полностью действительно реально я эту драйв инициативу и тем

    01:55:30 - 01:56:30

  • будет все очень честно если хотите регистрировать по ссылочке там пост для регистрации есть в Telegram канале Android broadcast все действительно честно хорошо без всякого сливаться можете то есть ну весь процесс Я слежу смотрю и если доверяете мне то можете смело попробовать зарегистрироваться и попробовать пройти будет классно интересно и хорошо Вот однозначно если инициатива зайдёт мы другие собесы покажем в принципе там нацелены то чтобы всё это открывать Я хочу чтобы другим компаниям тоже стараюсь заходить чтобы они это делали

    01:56:01 - 01:56:59

  • или на своих каналах или ко мне приходили но в принципе вот стараюсь что мы открывали и могли видеть понимать что главное просто понимаете даже если вы знаете всё собеседование если у интервьюера есть желание вас завалить он завалит поэтому кстати хотел тебя завалить в том плане что Кирилл ты Отлично все очень прошел Я считаю это может быть доволен То есть ты показался довольно сильно разработчик класс Спасибо Я рад Да так сейчас я считаю что у нас тут накидывали [музыка] какого-то как-то ничего толкового не

    01:56:29 - 01:57:46

  • накинули вот да Кирилл Расскажи как тебе вообще формат впечатления стресс у тебя был какой-то повышенный Ну формат я говорю про формат мне очень понравился потому что он необычный То есть он никак обычный Собес Где вас спрашивают типичные вопросы да собеседование а он такой нестандарт вот я думал сначала что будет типа System designs как вот тоже кубики вот это все вот оказалось не это потом я подумал что будет Лайф кодинг типа нужен вот на писать какое-то приложение такое могло и приложение с походом все что такое там Показать

    01:57:13 - 01:59:01

  • список выбрать какие-то технологии которые ты хочешь там компот или xml или что-то еще вот и этого тоже не было Вот и было очень интересно что будет Вот так что формат мне очень понравился А по стрессу Ну сначала я вообще не переживал вот ну и типа сейчас не переживаю особо как бы все нормально Я же говорю я сначала перед этим сходил покачался У меня все нормально ты говорил что не поможет Я не знаю как-то либо я просто привыкать ну как-то не знаю чем если бы вот эти вот 260 человек вокруг стояли бы такие типа как работают

    01:58:07 - 01:59:45

  • Ну еще Кстати прикол в том что ты особый ты не видишь здесь публику если бы здесь был бы открытый чатик потому что начать вообще не смотрел или был бы был бы какое-то количество вот зрителей какой-то там количество наверно было бы так я вижу только Никиту и доешку и все кого-то обычный собес е прямо Но кстати но все равно ощущается что типа есть какая-то публика и все равно как будто знаешь типа кто-то сзади стоит И вот так вот дышит и там типа 200 человек были на там типа сыну же смотрит и все это

    01:59:22 - 02:01:01

  • ощущаешь и знаешь типа есть какое-то волнение небольшое что-то не заметил либо что-то пропустил но в любом случае мы уже будем подходить концу Да Никит Кирилл большого Вам спасибо что вызвались поучаствовать Всем нашим зрителям Вы тоже опять же можете побывать в двух ролях либо побывать в роли соответственно того кто это будет проводить либо побывать в роли того над кем это будут проводить Я понял что то есть идея довольно неплохая хорошая концепция заходит и будем соответственно переходить такие

    02:00:12 - 02:01:17

  • форматы вот все тогда Всем большое спасибо спасибо

    02:00:51 - 02:01:01