Собеседование в Яндекс. Платформа Android

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

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

  • [музыка] Всем привет С вами Android broadcast и я Кирилл Розов как всегда мы встречаемся с Вами чтобы снова посмотреть как проходит собесе продолжаем собеседование как раз-то в этот раз снова с Яндексом продолжим потому что секций у них всегда много интересно и про их собеседование всегда ходит очень много всяких тайнов мифов и конечно же алгоритмы это слово всегда упоминается рядом с ним вот делаем мы всё это вместе совместно с ребятами из Яндекс которых сейчас как раз проходит Mile Team Fest ребята знакомятся со

    00:00:06 - 00:01:15

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

    00:00:53 - 00:01:51

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

    00:01:22 - 00:02:37

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

    00:01:59 - 00:03:12

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

    00:02:36 - 00:03:46

  • подключится к нам интерьер наш кандидат Извините кандидат Вот и я вам расскажу покажу должно быть всё красочно и интересно да давайте самое интересное непростое сегодня что кандидата тоже зовут свой опыт И что ты сегодня ожидаешь Да всем Привет ещё раз у меня не такая длинная речь я начал стал Android разработчиком чуть больше 2 лет назад работал в одной команде на одном проекте это один из проектов X5 ril для внутреннего пользования и из этих вот двух лет один год я проработал один Ну вот такая моя история сегодня хочу

    00:03:10 - 00:04:37

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

    00:03:58 - 00:05:09

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

    00:04:34 - 00:05:32

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

    00:05:03 - 00:06:09

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

    00:05:36 - 00:06:49

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

    00:06:12 - 00:07:22

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

    00:06:51 - 00:07:58

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

    00:07:24 - 00:08:34

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

    00:08:01 - 00:09:12

  • давай три а смотри котлин 3 то есть пообщаемся про котлин и здесь мне интересно вот в этой секции Расскажи пожалуйста что такое вообще дата классы в котлине и силд класса Зачем они вообще нужны Так ну дата клас - это у нас класс данных и он предназначен для того чтобы хранить в нём какие-то данные соответственно в нём уже переопределение Ну в целом его Суть в котле для упрощения чтобы не писать шаблонный код в нём переопределение equals ш Code и Copy э методы А что ещё Ну в принципе если коротко то

    00:08:38 - 00:09:58

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

    00:09:17 - 00:10:30

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

    00:09:54 - 00:11:11

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

    00:10:32 - 00:11:49

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

    00:11:11 - 00:12:34

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

    00:12:01 - 00:13:14

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

    00:12:37 - 00:14:04

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

    00:13:34 - 00:14:55

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

    00:14:17 - 00:15:38

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

    00:14:58 - 00:16:20

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

    00:15:39 - 00:17:09

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

    00:16:26 - 00:17:33

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

    00:17:01 - 00:18:29

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

    00:17:50 - 00:18:57

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

    00:18:28 - 00:19:46

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

    00:19:07 - 00:20:08

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

    00:19:36 - 00:20:49

  • версиях я там смотрел и оттуда и почерпнул основную информацию Хорошо разобрались Давай куда-нибудь дальше Ну давай 2 я ещ не трогал Да это ще опыт с вьюшка есть какой-то писал свои может вьюшки ну именно ка вю я Нет я не писал их у нас в моём по крайней мере рабочем проекте их всего две и я там чуть-чуть их расширял я больше наверное даже с компом поработал чем с Custom viw так получилось Поэтому вот О'кей давай пока непер кастом ёжки вот у нас здесь получается знакомы тея все тут лоял все попробовал Да ну relive я с ним не

    00:20:13 - 00:21:40

  • работал я знаю что он есть но я вот у устаревает его забирает супер меня тут интересует производительность их Сможешь ли ты можешь ли ты рассказать ну или аранжировать их там от самого лёгкого леау к самому сложному И в чём вообще измеряется производительность леау отно каких величинах относительных Угу Так а ну давай с ранжирование Наверное начну первый я поставил й лейт в принципе да его нет Лучше наверное начать с чего порассуждать Почему производительность кушается Ну то есть чем больше вложенность внутри леау

    00:20:56 - 00:22:23

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

    00:21:42 - 00:22:53

  • корем и в самый конец поставил р но я прор скажу Почему мне кажется что он самый ТЛ Потому что часто там приходится использовать веса то есть и для там какого-то корректного расположения То есть я видел прямо нагруженные макеты где у тебя внутри L ещё один чтобы просто расположить элементы так как ты хочешь то есть и он чаще всего тяжелее всего получается то есть а const да Ну давай в конце поправь а ко у них в принципе похожий смысл то есть ну Con это в принципе такой тягучий макет моз самы удоб в пне для какого-то

    00:22:21 - 00:23:41

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

    00:23:02 - 00:24:34

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

    00:23:51 - 00:25:02

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

    00:24:27 - 00:25:42

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

    00:25:05 - 00:26:33

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

    00:25:49 - 00:27:10

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

    00:26:30 - 00:28:01

  • находиться А хороший вопрос об этом я даже не задумался давай подумаем Так ну что у нас делать Синай не пускает Ну то есть суть по крайней мере методички в том что он не пускает в себя другой тред и ставит его в очередь когда он делает запрос но в данном случае Java умная мне Мне кажется что она должна понимать что это тот же самый тред который сам себя вызывает то есть Ну я бы ну я бы поставил именно на это а не на то что ты опять в очередь упадёшь и всё это встанет намертво наверно Ja умная как и вот и безусловно она пойм

    00:27:17 - 00:28:47

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

    00:28:03 - 00:29:36

  • кладём эти айдини подписываемся на неё опять возвращается нам что возвращается нам опять ли заказов так сейчас секунду Так ладно давай посмотрим All orders так ещё раз он получает листа ашнико проходится по каждому из них мат их Order by ID где он ага ну всё я понял что это просто название я на секунду завис Да в общем Он загружает получается ордеры э мапи их в лист и возвращает нам так что там происходит наш результат мы берём наши айди ники и уточняем Равны ли они А с мапле Ага классу Угу Ну тут хитрость в том что фактически

    00:28:50 - 00:30:44

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

    00:29:52 - 00:31:14

  • [музыка] Угу Так ладно хорошо так о Угу Так он сравнил по значению Так и что мы делаем мы мам каждый ord SP ID Ага ну тогда тут следующий момент встаёт Ну по крайней мере в общем я буду говорить что Меня смущает в этом для начала для начала о Не факт что они лежат во-первых в том же порядке в котором нам адини приходили так как ниже используется то есть нам тогда здесь нужен был чтобы мы точно в правильном порядке это использовали и это опять Т момент который может нам вернуть Если он просто их

    00:30:34 - 00:31:53

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

    00:31:26 - 00:32:36

  • будет работать дольше и на больших данных это прямо сильно дольше будет прямо в разы и непростительно вот для производительности давай подумаем без контак без контакт МПа как можем это ещё реализовать есть два подхода один хитрый а другой из знанием языка Угу Нет ну наверное тогда ладно я не знаю какой я сейчас первый мне пришёл на ум Ну Первый из вариантов - это закидывать вло All orders именно по одному то есть и прогонять их параллельно то есть таки а потом что делать Подожди если по одному зане

    00:32:02 - 00:33:28

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

    00:32:45 - 00:34:13

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

    00:33:38 - 00:35:04

  • момент её первого вызова то есть таким образом экономя свою память м и второе Когда мы можем от наследоваться Ну допустим у нас есть какой-то класс и есть какой-то интерфейс этот класс X наследуется от интерфейса и пере определяет его метод и наш класс Y может отнал от класса X бы там как там by что-то там Я забыл как это пишется прямо ну то есть мы можем взять уже реализованы этот метод из другого класса то есть таким образом тоже сократить количество кода где надо Понятно Знаешь ли ты вообще на каком

    00:34:28 - 00:35:53

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

    00:35:10 - 00:36:34

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

    00:35:56 - 00:37:28

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

    00:36:42 - 00:37:56

  • работал с mvvm как с тем что проматис и Ну с mvp для меня это был больше как сразу Legacy То есть я видел его у нас в коде но вот уже на стадии переписывания его на и я читал про MV то есть использовать мне его не приходилось То есть в принципе знаешь как расшифровывается MV Model viw intent да чем он характерен относительно других двух Ну там Получается вся суть в том что у тебя идт цепочка вызовов То есть у тебя вьюшка отправляет своё намерение инту интент его ловит передаёт его в модель модель

    00:37:19 - 00:38:47

  • то есть выступает Как т я так понимаю она обновляет вьюшку то есть присылает ему уже обновлённую модель тем самым гарантируя что это точно правильные единые данные с одного места то есть там такая цепь идёт Ну да как раз название вот этой ин там у тебя очень сильно реактивный подход тебя очень много реактив ГТО чтото меняется [музыка] так хорошо так пока побить А яю лиш почали классно так [музыка] три currency 4 А да немножко ещё subs Угу jav Если бы ты наверное не работал с jav я бы тебе рассказал как

    00:38:04 - 00:39:57

  • они работают Т больше наверно понимание что происходит Давай смотри вот у нас есть такой код Get Origins нам отдаёт соответственно сингл какой-то список внутри поток мы там не меняем никакой вот вопрос На каком выполнится потоке код Ну то есть мы указываем он то есть это сейчас а в итоге он начнёт выполняться то что мы указали в subscribe о то есть на SH но обр он вот suc выполнится именно то Что указано в обн то есть на компь то есть ну так работает там где бы неть то есть так как он у нас один То

    00:39:10 - 00:40:21

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

    00:39:46 - 00:41:20

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

    00:40:33 - 00:42:16

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

    00:41:27 - 00:42:47

  • каком потоке запустили Да ну мы указали в поток subscribe on то есть на каком потоке мы э Да мы уже в начале цепочки поменяли на ИО действительно и дальше мы ничего не меняли поэтому здесь будет у нас Ио хорошо а в таком кейсе Здесь тоже ИО нет стоп сейчас да ИО то есть последнее нет стоп сейчас секундочку перестану азр фон мы можем много раз указать и он будет менять сабскрайб Он по-моему отрабатывает один раз первый то есть оста остальные должны игнорировать то есть Поэтому будет computation Да ты абсолютно прав будет

    00:42:13 - 00:43:29

  • работать тот который находится ближе к источнику самой первой то есть в итоге у нас будет супер так здесь Да но здесь будет и так как наоборот вызывается вместе вызова то есть мы сначала указываем потом сразу меняем на А почему и он последний идёт то есть обф Именно там он запоминает последний То есть он как он там не имеет значения куда мы его поместим нашем он имеет есть даты прав у нас наоборот работает который позже указан то есть ближе непосредственно к [музыка] нашему супер осталась парочкам потоке вызове

    00:42:51 - 00:44:24

  • код так вызове на потоке [музыка] делаем затем меняем поток И уже потом есть вот задаёт поток не для последующих операторов Для непосредственно функции исполнения есть что будет в данном случае будет исполняться на том потоке который у нас был в [музыка] сабскрайб получается Здесь будет ко всё вону про Вот смотри у нас получается вот это интересный вопрос здесь мы см в проде как-то в Маркете и ловили баги пока не разобрались Как ты думаешь что будет происходить Don't subscribe то есть сделай как

    00:43:44 - 00:45:30

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

    00:45:06 - 00:46:28

  • нас был там до спе может быть даже мы там прогрес показывали не помню что мы там делали То есть когда у тебя начинался запрос Вот и рыкс такой хитрый что поток для до сабскрайб задаёт subs О как ты правильно отметил но важно что задаёт не тот который задаёт основной цепочки а только тот subs который первым указан после досс Вот то есть в данном случае это будет и и мы здесь соответственно ловили неправильно потоки падали Вот такая штука здесь Ну так Ладно ну это хитрый вопрос Если честно а ну вполне Ну да то

    00:45:59 - 00:47:12

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

    00:46:35 - 00:48:01

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

    00:47:18 - 00:48:36

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

    00:48:00 - 00:49:15

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

    00:48:37 - 00:50:09

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

    00:49:24 - 00:50:41

  • пользователем взаимодействовать с операций Действительно это какой-то проблема с О супер пойдём дальше так давай VI 1 что-то [музыка] простенькое можешь рассказать разниц да Ну px - это пиксели DP пиксель по-моему Глу Ладно я не буду их расшифровывать Я просто расскажу что они делают я да да В общем Суть в том что у нас есть классические пиксели то есть то мы можем указать теоретически в них размер то есть и размер будет соответствовать пикселям экрана но в Андроиде так не делают так как у нас есть свои размеры то есть

    00:50:03 - 00:51:34

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

    00:50:51 - 00:52:06

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

    00:51:32 - 00:52:42

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

    00:52:08 - 00:53:34

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

    00:52:52 - 00:54:04

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

    00:53:30 - 00:54:55

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

    00:54:13 - 00:55:24

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

    00:54:49 - 00:56:28

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

    00:55:46 - 00:57:04

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

    00:56:29 - 00:57:57

  • посмотреть вырастили из него пря Мон Ну не са тя Саша тоже Мон Окей так так А можешь по удалять Я всё забыл что мы что мы прошли самое простое сделал перед интервью мы прошли мы сечас архитектуру ответили я не помню третью поему VI 1 точно было и Android 3 я кажется брал или нет ну наверное да это было приложение супер Поехали дальше куда-нибудь так давай котлин 2 поговорим про кот экшены зачем они нужны иш такая так Ну extens функция - это функция для расширения класса то есть мы можем дополнить даже неизменный код то есть

    00:57:24 - 00:59:13

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

    00:58:30 - 00:59:47

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

    00:59:10 - 01:01:19

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

    01:00:19 - 01:01:38

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

    01:00:58 - 01:02:31

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

    01:01:46 - 01:03:17

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

    01:02:49 - 01:04:16

  • дата сй У нас есть там какой-нибудь entation сй какая у них зависимость кто от чего зависит то есть так так Ну по идее entation слой знает о дате но дата не знает о презен она просто куда-то отдаёт свои данные то есть а дальше делает с ними что хотите да Безусловно у тебя получается модули верхнего порядка не зависит от Нижнего то есть действительно ты просто получил данные и дата сло ему без разницы как они там дальше будут отображаться Это уже потом у тебя будет дой слой который может быть в твоём приложении который их

    01:03:43 - 01:04:53

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

    01:04:19 - 01:05:47

  • одно активити один а йу Угу и в этот йу мы соответственно размещаем линер layout вертикальный Угу а в linear layout мы кладём два Edit текста Вот Угу А кладём сейчас а двади текста давай не два давай пока один пока один по давай кладём один текст вводим туда Hello Яндек и делаем переворот экрана вопрос А что у нас произойдёт с текстом вди текста Так ну в реалиях современного андроидам сохранится То есть сейчас не подожди А что мы используем для сохранения сейчас мы когда создаём Банку в Android студии по-моему по дефолту

    01:05:03 - 01:06:25

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

    01:05:48 - 01:07:09

  • хватает памяти она может зачистить кши то есть и теоретически видимо если мы храним это в биндинг то может зачистить то что мы там ты правильно раздаешь тут вопрос А как мы в бандл сохраняем что нужно нам чтобы в бандл сохранить А ну в данном случае чтобы бандл сохранить У нас есть два отдельных мето Activity это on Save instant State и он on Restore instant State Ну да это мы самостоятельно сможем сохранить Хорошо а когда ты будешь в bandle класть ты как туда кладёшь данные в зависимости от типа данных Я

    01:06:35 - 01:07:46

  • создаю Bundle и ну точнее мне сама Activity предоставляет в этих методов bandle в который я помещают мы получаем рингу мы говорим Put string положить в чём за хорошо ладно давай давай с другой давай с другого конца как ты потом эти данные получать будешь из этого бандла ну у меня есть орит который тоже предоставит мне бандл из которой я скажу Get string Ну то есть по какому-то ключу А у тебя там может быть много стрингов в Банд У меня есть ключ и мы пришли ключу этой задачи это действительно ключи и как ты думаешь

    01:07:11 - 01:08:31

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

    01:07:55 - 01:09:01

  • сказал что поворачиваем биннинг сохраняет но нужен дишни чтобы он понимал куда сохранить Да Дада Вот то есть если у нас одини не будет Ну соответственно там не сможет ни сохранить ни восстановить если будет дишни то базовый Android это всё нам сделает Окей Пошли ко второй части этой задачки на схожие То есть у нас соответственно та же пустой у нас проект там у нас одно активити один лейт в леау у нас НИР лейт вертикальный также остаётся важно что мы кладём внутрь линер леута а внутри мы будем класть

    01:08:28 - 01:09:37

  • компаунд в юшку Ну ты говорил что расширял вьюшки у тебя какой-то опыт был Угу смотри что у нас собой представляет наша компа вшка это какая-то viw которая унаследовала там от какого-то простого контейнера пусть будет там фй лейт вот то есть мы от наследовался от фй леута и в разметку compound View мы кладём Edit T задаём ему Edition вот удалось представить что у нас с собой я понял да ну то есть уложен у нас уложен Да я понял у нас получается да те вложен какой-то поставляет у нас свой тип вишки

    01:09:02 - 01:10:17

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

    01:09:42 - 01:11:12

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

    01:10:30 - 01:11:44

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

    01:11:11 - 01:12:28

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

    01:11:51 - 01:13:17

  • верхнего или у Нижнего Так подожди сейчас на всякий случай У нас у нас в comp viw два текста сразу внутри ложных или один То есть у нас две каж изго здесь у нас д в каждой из которых вложен А ну у нас получается будет два одинаковых дишни и соответственно будет два одинаковых текста то есть вот в ЧМ проблема поне и поэтому мы в этой задаче завернули это всё в com viw потому что иначе нам два одинаковых дишни на экране не получить А теперь вопрос Что будет происходить после поворота экрана ну после поворота экрана у нас будет текст

    01:12:52 - 01:14:20

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

    01:13:39 - 01:14:57

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

    01:14:20 - 01:15:41

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

    01:15:00 - 01:16:13

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

    01:15:44 - 01:17:18

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

    01:16:37 - 01:18:22

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

    01:17:35 - 01:18:55

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

    01:18:15 - 01:20:01

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

    01:19:20 - 01:21:23

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

    01:20:28 - 01:21:59

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

    01:21:14 - 01:22:43

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

    01:22:00 - 01:23:17

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

    01:22:39 - 01:23:49

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

    01:23:14 - 01:24:24

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

    01:24:00 - 01:25:13

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

    01:24:39 - 01:26:08

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

    01:25:30 - 01:27:15

  • зрения написание было не очень хорошее но в целом то есть мы можем Ну что-то вроде такого то есть сделать Ну вернуть то что было то есть If Order Items Ага тогда это всё равно пройдёт нет всё равно нравится Ладно давай пока Дальше сейчас я это чуть-чуть отложу хорошо Так мы получаем и начинаем мапить данные но во-первых Я бы всё-таки сделал вот так потому что чтобы разделить Как разделить наши стримы так ещё раз чтобы я мы говорим поднять карты А что мы отсюда получаем Ну предположим что мы получаем об или Single как у вас

    01:26:30 - 01:27:56

  • принято sle L там sle L там Single L sle пить по-моему нельзя так Ладно давай я не буду торопиться сначала на словах Пусть пока будет Map Так у нас есть Map мы айтемы проверя как it First on Now для каждого проверяем то есть здесь мы [музыка] можем у нас Order Items сейчас и Card Items это ну я говорю здесь просто непонятно потому что не написано это одинаковая у нас моделька или нет Ну вот именно то что лежит в Order Items и C Items Нет это разные модели разные [музыка] модели и отсюда мы получаем

    01:27:13 - 01:28:51

  • карт Так мы ещё раз меня очень смущает этот кусок Сейчас я придумаю как его заменить ещ один мап Смотри ты можешь создавать новые классы ты можешь создавать новые методы ты можешь делать что хочешь можешь экн создавать можешь как тебе так хорошо Ладно Да я ещё раз [музыка] так и таким образом Мам у нас Остаются только те которые есть в Card Items Угу А можешь сказать Вот с тринадцатой по пятнадцатую строчку результат какой у нас будет после пятнадцатой строки результат Что будет в результате перед

    01:28:09 - 01:29:24

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

    01:29:08 - 01:30:33

  • только что получили в ЛТЕ если он есть там то мы его оставляем То есть у нас здесь будут те которые нужно оставить то есть Order Items сейчас Всё Подожди Я всё наоборот тут будут те которые нам нужно удалить далее получается и мы их дальше мам в некую вот модельку кар it ID хорошо до маппинга в модельку карта у нас какой тип данных будет м так зачем нам Ну но у нас будет тот же лист скорее всего Я так Ну тут Хотя не указа из карт айтемов или из ордера амов из ордера айтемов то есть мы мам ордер айтемы то есть

    01:29:50 - 01:31:30

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

    01:30:40 - 01:32:12

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

    01:31:34 - 01:33:12

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

    01:32:26 - 01:33:48

  • делаем а ниже соответственно мы удаляем или если пустой то коптим просто есть никаких совпадений нет Да всё так Ой что теперь хочется в этом коде поменять Так ну что мне не нравится то есть это в принципе вот этот кусок нано Вот это где начинается Ну вот этот мап и всё что внутри него по идее здесь мы должны запускать Так у нас есть Items давам сго и менять сначала что там нехорошее было это один рочка кода так а с самого начало Order Items it это восьмая строчка кода А где-то здесь ещё ну название прекрасно название - это же

    01:33:12 - 01:34:51

  • важная штука какие они нехорошие давай сразу их поправим може А я могу здесь работает сейчас нет не работает ладно тогда нам я хотел Shift F6 думал Вдруг оно везде изменится но так сработало Так давай назовём это C некий Ага и соответственно здесь уже у нас будет вот так Ну всё сейчас ты теперь немножко ломаешь архитектуру проложения там Мы работали с с кейсами А ты хочешь работать с репозитория А ну да понял шику нейминг можем менять а тип данных Пока нет не надо Всё я понял хорошо так кейс поведение Ну здесь же мы их

    01:34:12 - 01:35:55

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

    01:35:12 - 01:36:57

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

    01:36:07 - 01:37:53

  • конца тут не будем задачку доводить уже Мы много времени на теорию потратили вот не потому что мы долго шли потому что у на такой формат сегодня вот Давай Просто обсудим ещё до одиннадцатой строчки большая проблема этого кейса Так ладно что Меня смущает да execute checks Ну ладно Так ну мы получаем некий из которого мы используем только Items Интересно что там ещё в рете Ну допустим нам нужно вот именно так что-то мы возможно дальше там с ним делаем а возвращаем но это тоже нормально то есть мы при удалении

    01:37:09 - 01:38:38

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

    01:37:58 - 01:39:30

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

    01:38:54 - 01:40:22

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

    01:39:45 - 01:41:05

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

    01:40:33 - 01:42:05

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

    01:41:27 - 01:42:42

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

    01:42:04 - 01:43:41

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

    01:43:05 - 01:44:25

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

    01:43:46 - 01:45:04

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

    01:44:25 - 01:45:26

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

    01:44:55 - 01:46:00

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

    01:45:28 - 01:46:40

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

    01:46:03 - 01:47:14

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

    01:46:39 - 01:47:53

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

    01:47:22 - 01:48:26

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

    01:47:56 - 01:49:01

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

    01:48:28 - 01:49:38

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

    01:49:03 - 01:50:23

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

    01:49:44 - 01:50:49

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

    01:50:19 - 01:51:30

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

    01:50:55 - 01:51:49

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

    01:51:22 - 01:52:22

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

    01:51:51 - 01:53:11

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

    01:52:32 - 01:53:28

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

    01:53:00 - 01:54:06

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

    01:53:36 - 01:54:32

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

    01:54:04 - 01:55:07

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

    01:54:35 - 01:55:36

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

    01:55:06 - 01:56:02

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

    01:55:34 - 01:56:52

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

    01:56:13 - 01:57:18

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

    01:56:46 - 01:57:47

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

    01:57:16 - 01:58:21

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

    01:57:48 - 01:59:05

  • во с инструменту нужно обучиться я вот сразу в кину У меня есть курс на канале подар 2 Посмотрите его Вот вы задаёте вопрос не проще ли они проще ли немного поучить дагер понять поработать с ним и спокойно идти то есть с пониманием уже хотя бы каким-то чем просто То есть я не знаю И что мне делать Давайте расскажу ответ на этот вопрос см дагером посложнее Ну то есть Если вы крутой специалист в койне если можете на интервью соответственно показать свою экспертизу безусловно это будет также классно если бы вы были

    01:58:27 - 01:59:31

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

    01:58:59 - 02:00:08

  • который знает всё про жа и кандидат может спросить любые вопросы которые у него сейчас возникают в моменте я ему обязательно На все отвечу в моменте то есть здесь и как бы у кандидата полная база есть и здесь мы проверяем как кандидат умеет работать с новым РМ который он не знает но у него есть там бесконечное количество вопросов Ну в рамках времени то есть тоже классный навык который проверяем кандидатам вот да О'кей давай двигаться дальше Да тут все вас задают вопрос один вот прошёл Дима совес ты бы его дальше

    01:59:33 - 02:00:34

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

    02:00:07 - 02:01:31

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

    02:00:50 - 02:01:49

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

    02:01:22 - 02:02:28

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

    02:01:54 - 02:03:23

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

    02:02:39 - 02:03:44

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

    02:03:11 - 02:04:18

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

    02:03:45 - 02:04:39

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

    02:04:12 - 02:05:19

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

    02:04:46 - 02:05:57

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

    02:05:27 - 02:06:34

  • рефакторинг и приведя в порядок то есть плюс всё так же там типа ребята Опять же типа вы там от рефлексии избавились тоже типа одна всё она там быстрее но соответственно всё равно там типа есть точки оптимизации то есть Поэтому не нужно думать Кои типа что он так прям Классно Хорошо написан типа AP у него неплохое и то вопрос возникают Но вот под капотом там есть ряд вопросов Это изначально ребята сначала пошли и думали кону сварить потому что были вопросы увидели там много открытых шью увидели

    02:06:09 - 02:07:06

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

    02:06:38 - 02:07:46

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

    02:07:12 - 02:08:09

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

    02:07:40 - 02:08:40

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

    02:08:14 - 02:09:27

  • формате пря в рамках будет там на двух выходных опять большой на от Яндекса приходите с вами там тоже пообщаемся кто хотел быть на месте Димы вот а так спасибо большое всем кто был с нами Спасибо Кирилл за возможность пообщаться поделиться чем-то Спасибо Дима было интересно так я бы зам тоже ва побрить Здорово Я доволен результатом и процессом Спасибо вам бом всем Да переходите по ссылке в описании ещё раз да про Mobile Team Fest там много всего ещё интересного будет идти до конца октября А и Совсем скоро будут новые

    02:08:50 - 02:10:09

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

    02:09:31 - 02:09:55

Менторы

Специалисты своей области, которые смогут помочь вам

  • Нигма Нурия
    Нигма Нурия

    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

© 2024 HireGuru. Сделано в Санкт-Петербурге с hireguru.ru