Подготовка к собеседованию на Android Developer
Менторы
Специалисты своей области, которые смогут помочь вам
Middle .Net Developer
Senior Product Manager
Middle Python Developer
Ведущий программист
Backend Software Engineer (PHP)
Senior .NET/C# developer
Middle DevOps Engineer | Tbilisi, Georgia
Middle C# .NET
Senior PHP-разработчик
Middle python developer
Каналы
Полезные Telegram каналы и чаты
Транскрипция видео:
так так супер Мы кажется запустили те кто нас сейчас смотрит в онлайне Напишите пожалуйста плюсик в чат Если всё хорошо со звуком и с видео вы нас видите слышите А мы пока будем начинать А сегодня у нас третий день фестиваля собеседования для мобильных разработчиков Сегодня у нас будет Собес на Junior Android девелопера А по времени мы где-то ориентируемся на полтора-два часа Всего эфира сначала у нас будет само собеседование с теоретической частью потом практика и дальше ментор даст фидбек ученику по
00:00:13 - 00:01:20
тому как всё прошло после этого ментор и ученик ответят на ваши вопросы из чата поэтому вы можете их задавать по ходу трансляции или в конце в конце на всё ответим Вот и собственно с нами сегодня здесь ментор Александр который будет проводить собеседование и ученик Рашит который будет его проходить а напомню что организатором является сори это крупнейший вре матп менторов из it для того чтобы брать у них индивидуальные занятия и прокачивать вашу карьеру быстрее также у нас сегодня есть партнёр стрима это Telegram канал
00:00:47 - 00:02:01
Комтех его ведут ребята которые уже давно погружены в мир it они регулярно отбирают набо на бесплатные эти курсы интересные стажировки хакатоны и всю эту информацию постят к себе в канал Поэтому будет очень актуально для студентов или для тех кто только начинает Погружение в Новую профессию для того чтобы отслеживать такие всякие анонсы и Также в подарок тем кто нас сегодня смотрит мы дарим вам промокод на первое занятие с ментора которые вы видите сейчас на слайде на этом У меня всё я желаю всем классного просмотра а
00:01:24 - 00:02:37
участникам удачи Всем привет передаю слово Александру Да Надеюсь меня слышно если меня слышно скажи что-нибудь всё отлично Если вдруг меня будет не слышно Напишите об этом в чатик чтобы хотя Как вы об этом узнаете Вот ладно в случае чего всё равно Пишите в чатик А так Рашид Привет Приве Приятно познакомиться в первую очередь начнём наш сегодняшний собе по процессу как это будет проходить в первую очередь мы с тобой познакомимся ты расскажешь немного о своём опыте После этого я тебя поспрашиваю по языкам
00:02:00 - 00:03:16
по Джаве по колену по платформе Android поговорим немножко об архитектуре после этого какие-то задачки я тебе задам на по и смот Потом свои вопрос понятно тогда немножко о себе о том какие ты проекты Раньше писал презентуй как-то себе Всем привет опыт в Андроиде у меня чуть больше года за это время прошёл Ну занимаюсь самостоятельно То есть я не проходил какие-то платные курсы всё изучал самостоятельно а Искал в интернете всякие ресурсы изучал проходил делал какие-то тестовые проекты я начинал с котлина Я не изучал
00:02:41 - 00:04:19
Ну не Коди нажа и ну несколько проектов уже за это время реализовал А коммерческого опыта нет хорошо так как ты считаешь достаточно ли знаний котлина без знаний Джа для того чтобы писать полноценное приложение ния нуж большие Ну надо понимать а многие компоненты потому что они пришли Вот в кот много чего ты на кот писал только под Android или ещё использовал какието такие ве нет [музыка] только который ты писал самостоятельно А что-то наверное что тебе запомнилось из наиболее не то чтобы сложного Но вот
00:03:31 - 00:05:22
ты вот решил эту задачу и получил от этого какое-то удовольствие удовлетворение от того что тебе получилось встретиться с какой-то сложной истории и её преодолеть Ну вот последний проект который я делал это был ну что-то похожее на екоммерц проекты и м ну там достаточно большой проект был с регистрацией с профилем там а сети загружаются товары там помечается выбранный Ну вот а фильтрацию по по тегам бы сложно сделать а данные ты получал со своего сервера какого-то сам писал а нет там был Ну это как бы тестовое задание от
00:04:38 - 00:06:11
одной компании и они просто предоставляли запрос Хорошо я понял пробовал ли ты выкладывать свои приложения в Google Play либо Ну в Google Play там ть проблемы у меня были с оплатой А в недавно зарегистрировался хотел попробовать выжить хорошо Ладненько давай тогда наверно перейм потихонечку к языкам я услы что ты можно встреча с этой историей в рамках работы с котлино а потому что котлин Android он там много берёт себя из двм к примеру был ли у тебя опыт работы со ссылками в котлине а видео ли ты может
00:05:25 - 00:07:08
быть виды ссылок знаешь какие-то М вид ссылок где имеются в виду виды ссылок jm которые в принципе и в две используются ски имеется в виду которая объект хранится в куче А ссылка в те Это имеется в виду виды ссылок такие какр Soft им не знаю даже хорошо Ну это на самом деле такой частый вопрос поэтому рекомендую почитать Возможно даже ты будешь что-то использовать се на практике хорошо а знаком с таким понятием как Контракт м контракты тоже не знаком а не слышал про Contract equals и Contract шкод А это про это знаю так
00:06:17 - 00:08:09
можешь ли рассказать о них что-нибудь ну ику жари получается в котлин а м д равно это вот сравнение получается объектов по структуре Угу а Аве икус - это вот эти два равно но когда мы пишем J 2 равно это уже как по ссылка мы сравниваем а в кот это уже три равно надо писать вот такие отличия есть тоже в кот Ну О'кей хорошо А работал ли когда-нибудь с грбич коллектором знаеш что он делает Зачем он нужен Угу Ну Зная как примерно он очищает там получается а у него как ну как Дерево у него будет структура
00:07:25 - 00:09:13
и А ну объект которые ни на ни на что не ссылается кроме рбш коллектора он его очищает и вот циклически зависимости он тоже их очищает Угу угу ну проходит Можем ли мы сами вызвать очистку горч коллектора Да ну а как знаешь вот не углублялся честно говоря Угу хорошо ещё есть вид с окна Я уже про них тоже забыл у так ты начал говорить про кучу расскажи пожалуйста про собственно СТК иип Ну к - это такая структура к примеру Ну ты мо сказать первый зашёл и там я имею в виду про область памяти Ну что там хранятся ссылки
00:08:19 - 00:10:23
на п есть стек я не знаю как по-русски будет стек хип по-моему куча переводится А вот к есть е раз как полка переводится как я помню вот собственно Знаешь ли ты в чём отличие этих двух видов памяти в Я слышал про ноже ю О хорошо давай тогда подскажу немножко потому что у нас будет Вопрос сейчас на эту тему п - это у нас общая память которая обращается все треды и там хранится соответственно какие-то большие сущности стек - это память труда соответственно там хранятся какие-то примитивы Ну и ссылки могут храни
00:09:28 - 00:11:14
пому Как ты думаешь зачем вообще сделали два вида памяти Почему не все работают с хим наверно Като как-то по скорости или може не знаю даже о на самом деле действительно намного быстрее чем Ну и помимо этого соответственно е а потока безопасно то есть У каждого треда свой стек соответственно другой тред свой стек не лезет А в тред в СТК другого треда хорошо слышал ли ты ключевое слово латай м да это атомарная примерно Ну да а она получается из то что потоки м ну ускоряются у них в в Шах может сохраниться как ну старое
00:10:25 - 00:12:23
значение или сейчас вспом ну короче у них вот у потоков сохранялось вот правильное значение Ну в одной литературе встретил вырожение что просто позволяет себе примитив хранить в хи и Давать ему доступ разных потоков О'кей Так [музыка] а давай тогда подам закончим м так так так так так слышал ли ты про атомик типы данных м слышал но помоему раза два использовал врем Угу хорошо предположим у нас есть такая история что у нас несколько родов изменяет одну и ту же переменную она у нас может быть либо атомик либо Лота
00:11:34 - 00:13:33
а Понимаешь ли ты в чём будет разница использования одного либо ключевого слово либо использование атоми типа переменка не знаю даже в ЧМ разница читал про это просто уже забыл хорошо а слышал ли ты про слышал если нам нужно изменить переменную да одну из разных Как ты думаешь чтобы Что лучше использовать и если мы изменяем атомарные переменную то атомик использовать лучше Почему Потому что ну латай он не даёт потока безопасности он просто позволяет получить доступ менно из разных потоков атомик он уже соответственно поток
00:12:38 - 00:14:14
безопасный А синхро Он решает эту же задачу но относительно атомик он просто работает медленнее вот собственно и всё там ничего такого сложного Так а давай поговорим про коллекции Наши Любимые В чём разница между листом илистом Ну у он получается в памяти хранится как вот получается просто как одна блок по перемены из то что у него один Эмен ссе на другой Эмен списки могут храниться в разных местах и по скорости там тоже есть различие то что чтение какой-то записи там у листа за константное время бывает а
00:13:44 - 00:15:43
алиста залинейное но добавление и удаление Уста там тоже за константное время А Уста за линейно Ну Поня наоборот потому что тебе нужно по Лин листу всё равно пройтись по нему чтобы какой-то элемент удалить а ли считается что он константный действительно такое есть мнение потому что там много достаточно оптимизации Хотя а при изменении размера листа там всё равно это такая операция тяжёлая хорошо так а Использовал ли ты шмп использовал а Наверное я давай так спрошу Можно ли использовать Нау ключ в хшм
00:14:47 - 00:16:38
м можно и что при этом произойдёт куда положат [музыка] Таны м если а ключ будет на или значение а ключ ну а скорее всего не положи на самом деле о Положи для него есть исключение специальный нулевой Бакет куда значение с ключом не знаю зачем это сделали Но зачем-то это сделали так хорошо вот теперь давай поговорим про коллекции очереди какие они реализуют пате стек какие они реализуют паттерны Ну можно сказать подход хранени объекта Ну стека получается Если ты последний зашёл Первый выше это про
00:15:42 - 00:17:24
имеете А ну вот а к получается последний элемент который мы кладём он первый оттуда и выходит ещё какие ска коллекции а очереди [музыка] очереди забыл как они работают Ну скорее всего ну там в принципе обратный сте То есть если послед зал первый очередь это первый зашёл первый вышел хорошо у нас по врем поджимает Вот ей вопросик знаешь ли что тако у О сейчас какие-то знакомые термины я что-то не могу вспомнить Но это больше из теории что лунарный оператор работает с одним параметром входным Бинар п ме бинарный - это Одиночный плюс
00:16:44 - 00:18:37
то что он принимает на вход два параметра слева и справа вы даёт результат тернарный - это вопросительный знак д точки который в котлин не перешёл А в котлине есть ключе Давай переходим Нан в нём есть ключевое слово об если мы говорим в Джаве object - это базовый класс а для всех сложных объектов то в котле Что означает ключевое слово Ob какие у него три применения ну вот получается А это как синтон получается Он создаётся один раз только и функция которые в нём они компилируется в статические методы так
00:18:01 - 00:19:36
ещё [музыка] ещё по-моему всё нуно ещё есть анонимные классы там точи А ну да и есть ещё comp object Ну да Что такое compan object А ну а Компани к - это получается м мы его только можем внутри класса прописать Ну как анонимный или нет не анонимный класс это object - Это просто статичный класс точнее это статичные переменные внутри класс это тоже перекочевал с Окей Чем отличаются Ир классы от N классов вот классами я ни разу не работал А - это получается как ну внутренний внутренний класс получается
00:18:51 - 00:20:53
ну какого-то родительский клас если мы не указываем ключевое слово какие у нас классы будут создаваться и или N если мо что не у каж специализированное ключевое слово для внутреннего класса что у нас получится Ир класс или класс Мне кажется и не тот и не тот Ну просто не знаю что такое Давай так а iner CL у него действительно пишется ключевое слово Ир перед названием класса да То есть перед iner пом класс потом название класса внутри какого-то другого класса у класса мы не пишем ключевое слово in и у нас
00:20:08 - 00:21:28
просто получается какой-то класс внутри него объявлен ещё один а зачем вообще это ключевое слово in придумали что оно даёт нам Ну можно вот и перемены родительского класса использовать Да всё верно А зачем это вывели в отдельный ключевое слово И как ты считаешь Ну зачем такие сложности какие-то делать Нест класс делать Ир классы Почему не все классы просто Ир Ну не знаю наверно там как-то по-другому на самом деле тут всё ещё даже проще и классы они действительно имеют доступ к переменам внешнего класса Но для того
00:20:55 - 00:22:32
чтобы получить доступ к перемена класса е мы передадим куда-то экземпляр и класса то у нас экземпляр внешнего класса не будет уничтожен колектором и вве это вызывало на Андроиде Да это вызывало течки памяти поэтому в выли отдельно ключевое слово чтобы разработчик о хоть как-то понимал что если он использует Ир класс он задумался почему он собственно класс использует Почему у него не ДОУ пере внешнего кла пере эз внешнего лас хорошо а являются ли м классы в котлине открытыми или закрытыми по дефолту Ну по дефолту открыты
00:21:50 - 00:23:26
Они открыты именно типа с любого места их можно вызвать а нет это тут вопрос в том Можно ли наследоваться от класса ну чтоб класс был наследуемым надо Open перед Ну приставка класс поставить хорошо Так давай поговорим про дата класс что это такое буквально пару слов какие у них есть возможности Ну дата CL - это класс который обычно использовать [музыка] для Ну использования каких-то Ну де делание какой-то структуру данную там есть методы Что такое СИ клала это такой класс которым все классы должны от него
00:22:43 - 00:24:37
и получится ограничение там то что в одном фай Окей А какие возможности предоставляют нам эти классы Собственно как мы их обычно используем входе е какой-то функционал где несколько стей то там можно прописать к примеру там ну типично там eur и когда какой-то стоит просто вот вызывать их хорошо Ну на самом деле е Хотелось бы услышать пример про использование знаком с таким оператором знаком Да хорошо и такой вопрос Можем ли мы в операторе указать не всех наследников силы класа не всех не можем Ну на самом деле
00:23:48 - 00:25:31
просто можно написать и указать папа-папа Так в чём разница между функциями расширениями LED Run also apply а ле это он возвращает получается результат вот а ну результат функции а м El возвращает сам контекстный объект правильно гово Ну вроде что-то похоже Ну можно было скать просто что отличается просто тем что они возвращают и Какие параметры внутрь передаются Да получатся там надо использовать надо использовать исполь хорошо что такое е какое-то знание функционал Ну вопрос то А да так вопрос точи Да проверка канал
00:24:50 - 00:26:59
а Тата это мы пропустим Да хорошо рядом с элвисом на тогда стоит упомянуть оператор вопросительный знак точка Что он делает он говорит то что это значение может быть хорошо если мы Обращаемся к какому-то какой-то сущности через вопросительную знак точку что мы получим какой тип мы получим или Ну если значение будет там но там не вызове исключение Там просто но выйдет А если значение Ну а если знание то значение Ну так а татата Что такое ила функции функции - это А такие функции к примеру если м мы
00:26:12 - 00:27:59
вызываем её где-то то компиляторы так оптимизирует то что этот код просто вставляется можно сказать место где мы её использовали Угу хорошо так а подумаю Стоит ли это спрашивать или нет Давай наверно пропустим знакомлю таким понятием как Алес Алес Да не знаю может видел но так не могу вспомнить Ну на самом деле Чтобы перенова вот у нас есть импорт и там можно какой-нибудь тип данных СЖ пометить простым словом коротким А собственно зачем это нужно м ну потом можно это Чёрт вы име вы имеете в виду Ас - это когда мы ИМТ
00:27:13 - 00:29:01
пишем там А И вот какой-то а ну чтоб не прописывать там ту всю строку Ну чтобы вот это слово использовать и всё Скорее всего в каких ситуациях нам это нужно Помимо того чтобы просто сократить длинное название типа я просто в других случаях его так не использовал не знаю если у нас есть два типа данных которые называются одинаково то можем один пометить одним другой вторым типом чтобы не путаться вй поехали [музыка] даль понятием как проверяемые исключение не это просто проверка Ладно тут наверное за счёт того
00:28:16 - 00:29:50
что тея не очень много опыта Там вве есть такая вещь как ты можешь написать название функции и после этого указать наме и любой разработчик который будет использовать твою функцию он должен обязательно её обернуть в TR либо пометить свою функцию которую он е использует также как TR для того чтобы обязательно проверить что эта функция она может возвращать это Exception и тебе соответственно нужно её обработать эту ситуацию и Exception прописываю про имели вду в это именно ты когда просто бросаешь но ты не поешь
00:29:14 - 00:30:37
вопрос в том Можешь ли ты вообще пометить функцию [музыка] через Могу ли я что делать ещё раз пометить функцию в кот что она может бросать какое-то исключение Да скорее всего на самом деле в кот не отказались от этой истории сказали что если у вас много функций которы по как очень сложны поэтому дали все эксепшн на разработчиков на откуп разработчиков что хотите проверяйте Не хотите не проверяйте А так про рутины Наверное мы не будем обсуждать М давай про модификаторы доступа знаком ли ты с модификатором доступа Интерно м да
00:29:59 - 00:31:29
знаком это получается А в пределах модуля можно использовать хорошо так А знаешь ли ты что означает типа данных Фин и Unit м да нит - это когда функция ничего не возвращает А naing - это получается м тоже в котли есть это SA то есть в или который может быть или который не может быть изза этого у нас допустим стрин есть ринка с вопроси ком А нафи это типа пому Ну да вот то что вот какой-то тип с вопросом это есть вот Наследники А - это родитель получается всех вот этих примитивных типов Ну О'кей так поедем тогда
00:30:48 - 00:33:08
Переключи на Android м т у мене почему-то не совсем стандартный первый вопрос Ну давай его задам а знаком ли ты с idl idl да м нет не знаком Ну на самом деле такой скажем интерфейс для того чтобы взаимодействовать между разными процессами внутри Android приложения вообще как мы можем между приложениями кидать данные в Android системе Ну с с помощью контент провайдера Ага ещё есть вариант [музыка] не знаю там раска принципе нормально Почему не вообще Конечно можно е попробовать сот поднять но я таким не пользуюсь
00:32:03 - 00:34:07
поэтому это надо проверять так хорошо давай подумаем над следующим вопросом так ресурсы Я не хочу тебя спрашивать чем наверно активити отличается от фрагментов старый вопрос Ну фрагменты они меньше памяти занимает там меньше памяти там фрагментами принципе навигацию тоже легче делать и такие основные У нас активити считается основным элементом приложения Android а фрагмент Нет почему м во сейчас я где-то уже слышал са сеча вспомню м нет не вспомнил Ну скорее всего из то что это как А из то что фрагменты вообще ну
00:33:12 - 00:35:18
добавили когда вот планшеты появились Это просто как помощь вот U вот так составлять Ну из нескольких Хорошо тогда такой вопрос почему вообще есть такое понятие как основные компоненты приложения прока контент провайдеры и сервисы почему их называют основными компонентами приложения что их надо манифесте Объявлять хорошо А зачем их надо в манифесте Объявлять чтобы вот м а Android понимал какие там настройки м а добавлять в это приложение на самом деле даже ещё проще потому что они являются точками входа в
00:34:36 - 00:36:09
наше приложение и в манифесте мы просто ну манифест - это как раз-таки Контракт о чём мы говорили когда говорим про джаву то есть контракт в котором описано Как можно взаимодействовать с нашим приложением и таким образом мы говорим в системе что ты можешь взаимодействовать с нашим приложением либо через нашу активити одну из наших активити либо через контент провайдер либо через broadcast ресивер либо Ну да либо через сервис Вопрос такой а Обязательно ли Брока ивер Объявлять в манифесте обязательно если он есть Су на самом
00:35:25 - 00:36:35
деле не обязательно А и даже я тебе больше скажу что сейчас рекомендуется Брока ресивера в манифесте не Объявлять а делать их в ранта Как ты думаешь почему такое есть рекомендация такая ю может какие-то ограничения появились уда В новых версиях Ну даже не столько ограничени посколько это рекомендация тут на самом деле история такая что тебе не нуж на всм жизненном цикле твоего приложения ты их должен Объявлять тогда когда они те нужны и выключать когда они тебе не нужны для того чтобы не нагружать
00:36:05 - 00:37:31
систе это мы поговорили м Про Сервис наверное не будем м так так Ну на самом деле О'кей Мы тоже пропустим так виды сервисов Давай наверное про виды сервисов говорим [музыка] прос что это такое Почему называется ну это такой сервиса в котором ну нас обязует отправлять уведомление пользователя Что работает сервис вообще зачем вели эрс Почему нам обычные сервис не использова сер к примеру У нас есть какое-то аудиоприложение то пользователь не будет так хорошо когда у них в моменте аудио там включилось
00:36:56 - 00:38:47
и сервисах там приоритетность высокая я зна они него не жали батарей Хорошо если нам нужно какую-то работу выполнить в фоне Какой нам лучше использовать метод опять же по рекомендациям а фони меньше сервисы использует также сервисы не обязательно сервисы Просто у тебя нужно какую-то работу выполнить фоне что ты будешь для этого использовать к примеру когда приложение у тебя основной экран Да приложение тебя не запущено свто у тебя скажем Ну можно поми что ещё можно использовать ба тоже можно использовать хороший вариант что ещё
00:38:11 - 00:39:46
можно исполь помимо сервисов какие-то Другие вообще у нас есть возможности чтобы система фо выполняла какую-то работу для нашего приложения Ну вот наверно какие-то потоки нельзя использовать потоки мы не будем использовать Я думаю на самом деле те ВЛ к использованию рекомендуется управляется системой хорошо Поехали дальше а ели У тебя опыт работы с пушами Может какие-то свои проекты внедрил м а здесь делал наверно раза два-три в своих проектах угу угу а помнишь ли ты чем отличается дата пуши от кей
00:39:20 - 00:40:47
[музыка] пуше да Может там один из этих ше там системе или приложению а другой пользователь или нет Я Поня что не на самом деле мы можем кидать через консоль поэтому они оба могут вчать се какую-то информацию для отображения P они будут приходить когда у тебя приложение выгружены и отображаться и Разница в том как ты данные с даты Pic P будешь парсить в приложение потому что аке P данные при запуске приложения Кеша даны на будет парти из интен Окей А видел ли ты in ши и да Нет не ви на самом деле их никто не
00:40:20 - 00:42:26
видел но они существуют а тоже позволяет посылать пуши в момент использования приложения к соотвественно ЕС их пользователи пользу в данный момент приложения им отобразится какой-то баннер в приложении Окей знаком ли ты [музыка] спка да так как нам в наше приложение в простейшем виде добавить deeplink Ну с помощью вот библиотеки Navigation component А если без библиотеки а там с пол так Ну да у нас есть какой-то URL Мы хотим чтобы по попытке открыть этого URL запускалось наше приложение Ну вот я это не реализовал скорее всего
00:41:32 - 00:43:18
там утебя нет не знаю даже Окей ну там на самом деле Просто в тот же манифест добавляется у тебя итен фильт всё так пам так смотри тут уже какие-то вопросы такие начинаются сложные А прежде чем мы к ним приведём Представь себе ситуацию Вот у тебя есть голый Android а на нём Нету Мм на нём нет Google сервисов и нету й сервисов как в этой ситуации мы можем сделать а получение Push от сервера сейчас так голы Android а в которых нет каких-то Google сервисов а почисть сервера [музыка] какие-то такс Като
00:42:35 - 00:44:36
пушин не знаю даже Ну давай так так подумаю хорошо давай сечас тебе предложу решение смотри Нам нужны получать данные от сервера которые пользователь сам не инициализирует запрос соответственно нам нужно какое-то соединение сервером держать чтобы сервер в какой-то момент мог нам данные Отправить знаешь ли ты какие технологии можно для этого использовать чтоб ну постоянно по хочется соединение сервером Да не не или что Ну к примеру Да мы можем использовать сот и тогда просто сидеть и слушать этот сот Когда нам сервер данные
00:43:54 - 00:45:18
пришлёт если наше приложение запущено мы можем даже просто по таймеру спрашивать сервер там каждую секунду 5 секунд запрашивать него есть ли какие-то пуши либо запустить сот либо запустить Long пон запрос Хотя он всё равно там хвалится через минуту Хорошо если наше приложение выгружены из памяти Как нам получить пуши от сервера сейчас М не знаю да на решение прямо на поверхности ещ раз скажите наше приложение выгружены из памяти и оно не запущено но мы хотим получать пуш уведомления для нашего приложения от
00:44:46 - 00:46:10
сервера Ну запустить на Ну как вариант на самом деле тут работа-то приложението Google Play он работает у него работает фоне сервиса которые получает уведомление как работат hui и в принципе как работает даже у тебя установ приложение ты ему даёшь доступы эти системные и оно может иметь системные доступ держать конект сервером получать пуши и кидать эти пуши на систему таким обм приложение имени если есть кани ру установ дееь просто полномочия постороннему приложению чтобы оно тебе прислало пуши
00:45:42 - 00:47:22
хорошо какую минимальную версию Андроидах проектах я девятую использую девятую используешь Почему девятую Какие какие функции появились девятой версии на девятого У меня просто по умолчанию стояло и уга просто не менял А какие функции А на девятом Андроиде не знаю даже не смотрел Хорошо давай тогда перейдём к общим вопросам м скажи у тебя есть опыт работы с сколи языка м Ну я только один раз Вот вместо рума писал на SQL И то это было очень давно хорошо знаешь ли ты чем отличается DM от ddl земель
00:46:38 - 00:48:39
Адель Да и что это такое вообще это у вас хотел Ладно на самом деле е когда Рим про У нас есть запросе и есть запрос такие как запрос называется Потому что ты работаешь с данными это уже работа самими таблицами хочется убля положению Да даже зря хорошо принципы Solid Что означает принцип барбар лисков м означает то что а к примеру если мы делаем какую-то иерархию наследование что мы наши сейчас ну мых не изменяли эти методы чтобы они потом некорректно работали Агу так О'кей хорошо ладно слышал ли ты
00:47:44 - 00:50:12
про принцип Кис и драй м да слышал кис это м сейчас не усложняй то есть некоторые там между слами пишут слишком всё много методов много методов создаются чтобы там было более абстрактно но в каких-то случаях это просто лишнее бывает и наоборот усложняется повторяй себя то есть логику которую ты повторяешь уже много раз несколько Лах то желательно е делать какую-то общую функцию и уже её использовать там везде хорошо Какие виды архитектур Ты знаешь знаю mvp VC там Ну я ну так плохо пронеси Там по-моему модель модель View
00:49:16 - 00:51:21
Короле Угу хорошо так какие ты можешь назвать шаблоны проектирования м шаблоны [музыка] проектирования по-моему вот MM это есть шаблоны проектирования или нет нет это именно архитектура а шаблоны проектирования немножко другое если на самом деле не встречаюсь с таким понятием крайне рекомендую тебе а его изучить потому что это какие-то общее предметные практики по построению программных продуктов А И на самом деле шаблон проектирования Ну всегда спрашивают Мне кажется подавляющем количестве собеседованиях их будут спрашивать
00:50:33 - 00:52:17
так Их достаточно много прям все знают необязательно на мой взгляд но определенное количество что Чита одном сайте Ну вот в принципе Они там все описа так хорошо давай Наверное мы с тобою какую-нибудь разберём задачку по архитек сегодня СБО тебе нужно реализовать чат в мобильном приложении у нас соответственно есть какой-то фронт это твоё приложение есть какой-то БК на котором соответственно туда отправляются Запроси туда отправляются сообщения оттуда ты эти сообщения получаешь А самый наверно основной вопрос самый первый Как нам
00:51:26 - 00:52:56
получать новые сообщения в чате наверно новое сообщение от собеседника какой-то запрос сделать на сервер и получать Как часто будем запрос делать Ну сделать какой-то обсер чтобы он сидел когда человек там отпра сейчас говоришь про RX который про потоки да А мы говорим немножко про всё-таки сетевое взаимодействие конечно же для сетевого взаимодействия мы по верхнего Можем написать тот же самый рыкс но в первую очередь нам нужно решить на уровне сети как это будет работать м ну можно м ну в принципе ну это будет
00:52:14 - 00:53:47
мо сказать пустые запросы в некоторых случаях потому что можно сделать чтобы с какой-то периодичностью там отправлялись запрос хорошо А Ну на самом деле мы се как я уже говорил об этом говорили действительно можно делать с какой-то периодичностью либо использовать те же самые сокеты а предположим Так мы используем сокеты к нам приходит новые сообщения как бы ты на своей стороне реализовал наверное удаление сообщений скажем эту историю То есть у тебя приходят новые сообщения Понятно ты их видишь в чате а как нам получить
00:53:21 - 00:54:53
информацию о том что какое-то из сообщений было удалено в рамках переписки То есть если я удаляю элементы чтоб а вместо него отображалось сообщение то что Ну Вместо вот сообщения которое мы удалили было то что оно удалено да да [музыка] А наверное какой-то лаг можеш поставить к пример там Нажали на кнопку удалить и он там флаг поменялся и это вызвало Угу хорошо предположим Мы хотим загрузить историю сообщений Да ну скажем когда мы скролить вверх скролить вниз а то каким образом мы серверу сообщим какие нам данные нужно получить
00:54:13 - 00:55:57
в какой момент времени эти эти истории сообщений Какое количество До какого момента м ну у Андройда есть библиотека и можно будет тут загрузить какое-то количество и Ко наверх прокручиваем когда это количество заканчивается ещё один запрос отправляем и предположим ты используешь н будешь ли ты использовать пенг по количеству сообщений или ты будешь использовать НГ по дате [музыка] сообщений Ну подайте почему Ну потому что к примеру у нас сегодня Сентябрь я наверх скролле у нас там вообще другой
00:55:09 - 00:56:41
год и потом обратно другие сообщения Так наверно не удобно будет Ну на самом деле Тут ещё и пример с тем что сообщение Может быть удалено если ты Запроси там 20 сообщений вверх те може прийти Там 19 сообщений и это будет сложно хенли хорошо м так так так так так А естественно эти сообщения мы будем у себя кэшировать Да чтобы каждый раз когда мы с Кроли мы их заново не загружали а но тут возникает такая ситуация в какой момент нам нужно обновить кэш А и на случае в случае если сервер решит Ну точнее не так если другой
00:56:08 - 00:57:34
пользователь удалить сообщение там недельной давности а у нас оно закачивание соответственно мы его пользователем отображать Как нам нужно понимать что сообщение недельной давности нужно удалить м ещё раз не понял Смотри у тебя на клиенте ты настроил кэширование сообщений чтобы не запрашивать их каждый раз когда ты скролить их Угу в чате Да но другой пользователь решил удалить сообщение недельной давности у соответственно тебе нужно это сообщение недельной данности со своём приложением удалить то есть тебе нужно
00:56:52 - 00:58:13
кэш обновить По какому признаку ты будешь обновлять кэш обще можно сделать чтоб он мог только у себя удалить всех Ну понятно плохое рение потому что давно отредактировать его не сможет а ну м так-с ну какой-то событие произойдёт когда он удалит его это на сервер как-то отправляется так да на сервер она отправилась а как нам запросить как мы узнаем о том что какие-то сообщения из истории надо удалить сервер он знает у него там хранится в нам нужно сообщить об этом потому что мы него не запрашиваем пока
00:57:32 - 00:59:07
ничего те же сокеты можно использовать Ну сокеты они просто позволяют нам получать данные они максимально глупые и ничего не ничего просто сырые сокеты соединил [музыка] два друг друга Они соответственно получают друг от друга эти данные тут вопрос больше именно к подходу архитектурного не знаю это чтобы это обновлял есть несколько способов решения да то есть мы можем например сказать что кши устаревают в течение какого-то времени скажем Да там раз в день мы говорим что удаляем все ши и давай скачивать зано ког в следующий раз
00:58:34 - 00:59:53
пользователь зай но минусы очевидно что в течение дня у тебя данные обновляться не будут есть другой подход как например в Твиттере по-моему используется и мне кажется где-то ещё там просто сообщение можно удалять в течение там 30 минут после этого всё оно считается сохранённым и ты кэш старый уже не чистишь приложение и на там хранение попроще потому старые данные немет их быстрее можно достать и третий подход который будет работать если у тебя не сильно огромная база данных Ты просто можешь ку
00:59:26 - 01:00:47
сообщить предыдущего предыдущей синхронизации и вытащить все изменения с момента предыдущей синхронизации Какие сообщения были добавлены какие сообщения были удалены и себе а мы с тобою проговорили задачку Давай наверное м что-нибудь порешаем так Я думаю мы готовы уже шерить сечас Задайте мне какую-то отбивку что услышали нас так хорошо пока нам помогают с этой историей Давай тогда предусловие для зрителей Да мы сейчас будем решать задачки в небольшие нежные на чуть-чуть на знание языка без каких-то вещей про алгоритмы
01:00:06 - 01:01:57
потому что я это не очень люблю предусловие такое тебе ну сейчас нужно просто Написать список который просто закидать числа это предусловие соответственно потом мы с ним будем работать список просто добавить чис Дато переменную списка и в неё накидать там ри тире пять разных чисел М хорошо так сделал да Так ты меня слышишь да да слышу Да прямо Заходи в плейграунд и давай ь м Ну вот условия задача просто добавить элементы спи просто создай Да какой-то список и в него несколько элементов закинь Просто сразу Или потом
01:01:30 - 01:03:14
использовать лист и добавлять элементы Да прямо в листов можешь писать хорошо вот у нас есть список в котором пять цифровых элементов Давай просто для начала выведем сумму этих элементов Как мы можем это сделать для вывода у нас соответственно функци [музыка] исполь сам Хорошо теперь предположим что у нас список не просто из чисел а список из пар то есть Каждый элемент списка - это пара Угу а состоящая из строки и числа Хорошо можеш сейчас обновить свой список если Ну давай Попро из строки и часов
01:03:18 - 01:04:57
Да есть такой м так можно по-моему здесь [музыка] будет работать уже не по Так давай наверное Ну хотя не знаю А давай наверное помогу тебе с созданием списка Ты также можешь использовать листов А и прописать просто три элемента Используя метод используя слово Ключевое ту а также лист Да также лист м раз не надо Всё верно в таком формате Да просто несколько элементов ту воткнуть в этот листов Я думаю такой мапе можно делать хорошо теперь у нас есть список с несколькими элементами которые скажем так они нам демонстрируют
01:04:39 - 01:06:43
сложные элементы внутри списка хорошо предположим теперь нам нужно посчитать сумму элементов а внутри списка м у этих пар Да у этих числовых элементов в этих парах Как мы можем это сделать прибавить вот эти Да именно число в каждом В каждой баре сейчас так можно смотреть или нет А что смотреть Ну точки и смотреть методы которые есть Да конечно Я не думаю что там будет что-то полезное честно [музыка] говоря может можно сечас [музыка] [музыка] сдела так я понимаю да ты ведёшь через будешь сечас соответственно нить дабу
01:06:28 - 01:08:21
такое решение Угу [музыка] угу Так теперь нужно а взять акаунт нет Сейчас [музыка] секунду равно плюс M так Ну я понимаю да идею а соответственно не забыть что нам ещё надо вывести А ну да так такс можно обращаться к этим тамм это так делалось или это по-моему это с МАПО так делалось с не помню даже может так надо сделать о всё да дать варин хорошо слать через for [музыка] можно а нет Нет Нет скорее всего здесь Также можно [музыка] сделать нет такс [музыка] гори такс будем вообще есть проти так
01:07:52 - 01:11:15
по М не помню [музыка] я здесь это было такс на самом деле у тебя вро всё правильно было У тебя видимо старый прогон шибка показывал Попробуй запустить м а скобочки забыл но я не уверен есть да попробуй добавить А вот Угу хорошо А ну этот подход но он заставляет нас использовать в таком-то виде с равно итерацию да По списку и дополнительную переменную каут А можем ли мы использовать для подсчёта метод расширения кото над коллекции Да который собственно нам выведет сумму элементов по какой-то А в
01:11:04 - 01:12:57
каком-то предикату су тоже есть врядли так Ой вот так-с так опустится такс Ну может на само действительно су можно использовать просто нужно указать предикат или что подожди Как как мы указываем лямбду при использовании функции расширения вчм прин внутри ста вот интересно использую обы Чере если мы действительно указываем что у нас акан те зачем просто проверить хотел у тебя предикат У тебя точнее у тебя усло сработает функция суммирования тут Мы возвращаемся к тому что нам возвращают вот эти лямбды
01:12:41 - 01:14:39
функции расширения Так ты можешь на самом деле убрать стрелку убрать каут и просто настать последня рока в лям о те и Вер качест результата лям у тебя лист сумов нужно внутрь [музыка] засунуть Подожди Что Что ты делаешь И это у тебя поле по которому у [музыка] тебя нужно заснуть внутрь прин также аккаунт хранить Мне нужен тебе аккаунт вообще зачем тебе аккаунт Ну вывести сейчас можно принто хорошо Ты можешь в каут прямо вот положить вот этот весь лист точка сумов тебя метод сумов возвращает число Угу
01:15:05 - 01:16:43
а а так ну можно так [музыка] Да хорошо а так давай теперь нам нужно трансформировать список А и из списка пар а получить список соответственно Ну пускай будет чисел что ещё раз тебе нужно трансформировать этот список и достать из него список чисел то есть а без строки просто вывести 1 2 3 4 Да ну не то что вывести просто положить в какой-то другой список в другую коллекцию такс такую коллекцию сейчас [музыка] так [музыка] так здесь по-моему Также можно с помощью перебрать можно а если использовать
01:16:24 - 01:18:34
функцию расширения посмотрим у не [музыка] есть Так нам надо положить [музыка] се можешь такс не нет их слишком много там сейчас себ я [музыка] запутаются [музыка] получается Может может просто Ну хорошо давай покажу функция расширения называется Map а так а так скорее [музыка] все вот так и [музыка] точ Так подожди у тебя функция расширения Map она трансформирует лист А в другую коллекцию Зачем тебе здесь внутри вызывать [музыка] coun такс м трансформирует лист другую коллекцию там да то есть мапи это одни данные на
01:18:04 - 01:20:40
другие данные А здесь просто просто просто передать каунт сюда или что тебе нужно передать по как что конкретно мапить по Вот у тебя есть лист в нём Каждый элемент это пара когда ты Машь эти данные тебе соответственно нужно понимать Какие данные из пары достать для того чтобы запить я-то их протрафик СШ внутри нет тебя функция Map вернёт а новую коллекцию и тебе эту новую коллекцию нужно вывести Ну давай проверим у тебя типа А давай так знаешь Ты что такое выведение типа выведение типа да ну выведение типов Да скажу это когда
01:20:26 - 01:22:12
компилятор сам понимает какой тип данных ему нужен У тебя лист например он те не указан какой него тип данных тоже самое снм ты можешь не указывать что это Это просто прис результат выполнения функции и всё так можно ещё раз что сказали до Кон брать надпись вот это вот ра of и просто да убира и пере написать просто и всё вал Ну да Перед аккаунтом написать л у тебя аккаунт про инициализируется уже как результат выполнения функции M а О'кей хорошо мы вот а получили новый список элементов в которых только
01:22:14 - 01:23:58
цифры предположим мы теперь хотим А те же самые тот же самый список Да просто изменив например эти числа Ну давай их все разделим на два Как нам это сделать так нано Нет окей Проверяй хорошо решение валидно А давай тогда подумаем что ещё можно сделать давай так нам нужно достать из списка первый элемент ключ у которого равен SA я Почему такие именно задачи спрашиваю Да не про алгоритмы потому что ну во-первых когда ты работаешь с котлино Ты очень часто работаешь с функциями расширения во-вторых
01:23:12 - 01:24:48
сама в принципе работа с Андроидом в большинстве своих случаев работа с приложениями оно именно связано с тем чтобы какие-то данные получить отобразить и получить пользовательский ввод собственно большинство приложений так работат Поэтому с как-то их пить как-то их трансформировать объединять две коллекции к примеру А это частая очень задача и поэтому эти вещи нужно намного чаще чем знание очередного алгоритма сортировки поэтому давайте сейчас попробуем навер финальную задачу как раз достать из списка элемент
01:24:07 - 01:25:16
у которого ключ са назовём это ключом Первый параметр Ну да Дада так так что [музыка] возвращаю вот последний Ну возвращает вот этот Тип который А нет будет боле возвращать [музыка] секунду такс работа Так это ты делаешь в мапе Да гу а можно да а здесь так м у тебя должен быть предикат в виде лямбды здесь это а такс интересно аже Нужно [музыка] на Ну на самом деле тебе здесь вообще не нужен потому что тебя вернёт просто трансформируем мою коллекцию трансформируем ему так так А что значит хорошо очевидно что она не
01:24:42 - 01:27:22
сработал У тебя потому что лямбда должна быть как минимум так хорошо что мы ищем здесь у нас в отличие от того чтобы мы что-то забираем Да мы проводим сравнение проверяем [музыка] что хорош предположим нам нужно забрать Эмен которого ра если этого соответственно а элемента Нет мы выводим строку not found Если ещё Рош забираем из коллекции элемент в которого ключ 2 икса XX Если такого элемента Нет мы выводим notfound М такс м интересно на можно вот так [музыка] сделать Да это у тебя обект ты его с выш
01:27:00 - 01:29:10
со значением FS м так разве акаунт а нет такс м Если у нас получится нет этого компонента то not found интересно здесь здесь же наверное нельзя писать эту обработку Нет нельзя Ладно на самом деле Давай мы оставим эту задачу тебе так скажем порешать в оффлайне потому что у нас уже время поджимает А будем тогда заканчивать потихонечку Аа и наверное А интересно знать твоё мнение о том как прошло собеседование пошл Отлично как строение вообще Ну хорошо чётко есть понимание В каком направлении нужно двигаться Какие ещё
01:28:53 - 01:30:47
темы нужно подучить Ну джаву побольше изучить потом побольше Ну про функции ко зна расширение Просто я смотр типич на тубе собесе на них уже привык и насили вопросы задавайте я что-то попл на самом деле Да по поводу когда м волнуешься Есть такой момент когда начинаешь плыть тут э помогает какая-то привычка наверное когда ты часто ходишь на собеседование уже относишься к этому поспокойнее А и со временем уже меньше таких меньше волнения да меньше проблем возникает Единственное что вот наверное с Если задачи говорим про
01:30:05 - 01:31:47
алгоритмы которую мы сегодня собой особо не затрагивали там стоит взять прям какой-то онлайн ресурс где будет большое количество задачек и сидеть просто их десятками прорешивать и тогда на со бесах ты достаточно быстро сможешь большое количество задач решить потому что бывает действительно Что дают прям три-четыре задачи на час и их нужно достаточно быстро рассказать решить то проговорить как ты это решение пришёл а и Наверное поэтому я их особо не люблю потому что это просто Скил который набивается на прохождение собеседования
01:30:57 - 01:32:08
и тебе он потом в работе особо-то и не нужен хорошо А какие-то ещё может мысли есть Ну ну хорошо тогда у нас сейчас как я понимаю скажите нам пожалуйста солвере Мы ждём вопросики в чате соответственно Ага приятно слышать тебя Вот а если соответственно вопроси ков нету то потихонечку Прощаемся Угу может быть ребята пока успеют написать вопрос а в целом Может есть какие-то у тебя пожелания к тем кто Вот только начинает сейчас проходить первые собеседования как им показать себя проявить как можно лучше и не
01:31:33 - 01:32:58
волноваться на таких замеса Ох те кто только начинает проходить собесы Наверное нужно в первую очередь принять мысль что отказы - это нормально я уже с ого года прохожу собеседование Я до сих пор иногда реагирую остро когда после собеседования Мне дают отказа Вот Но есть пому даже такая книга получить работу после 100 отказов на собеседование и поэтому любая причина почему вам дадут отказ там например не понравилась чару ваша причёска и всё и он такой всё отказ на досвидание или у него настроение с
01:32:19 - 01:33:40
утра плохое он тоже Поэтому отказ выдаёт и тоже прощается вот поэтому не всегда в этом есть какая-то ваша вина и это точно не означает что вы плохи потому что оценивают вас не как человек оценивают вас как точнее оценивают ваши навыки Вот и каждый отказ - это информация о том что нужно подучить чтобы в следующий раз продвинуться чуть дальше по собеседованию соответственно Да всё равно там на десятом на пятнадцатом собеседовании поймёте что вопросы они плюс-минус повторяются потому что ну область знания у нас она
01:33:01 - 01:34:22
не такая Огромная там в принципе всё достаточно Можно выучить И самое главное это попасть на собеседование чтобы собственно узнать что будет спрашивать да Можно также в интернетах найти информацию о том какие вопросы задают на собеседованиях А те вопросы которые сегодня задавал Да они немножко может быть какие-то я вопросы перефразировал но тем не менее они все тоже достаточно часто встречаются Да там что е на собеседовани можеть вести себя уверенно достаточно уверенно да То есть можно иногда сказать
01:33:42 - 01:35:09
какую-нибудь ерунду но сделать это с уверенным видом вот если заметят то поправит если не заметят Ну не заметили Сами виноваты потому что помимо того что после собеседования оцениваются знания кандидата оценивается очень важно именно с кандидатом комфортно обща потому даже ты как кандидат чего-то не знаешь Ты можешь это подучить Но если с тобою некомфортно общаться некомфортно разговаривать некомфортно работать то соответственно Это скорее всего будет отказ А если с тобой Комфорт разговаривать ты нормально
01:34:28 - 01:35:48
общаешься это нормально ведёшь диалог а и вам и тебе и собеседуем друг другом комфортно то это будет больше шансов Да что ты пройдёшь на следующий этап потому что как я уже говорил какие-то недостатки можно подучить Понятное дело что если ты там совсем ничего не знаешь да то тут не поможет Да даже твои самые лучшие софты наверное такие вот вещи нужно иметь в Ви Угу спасибо А я пока что новых вопросов в чатике не вижу Поэтому думаю что мы потихоньку будем прощаться если вдруг кто-то не успел написать
01:35:07 - 01:36:27
вопрос можете закинуть его в телегу Мы постараемся на всё ответить а тогда желаем всем классного вечера А спасибо Александру и ученику который сегодня пришёл на сегодняшний Собес получилось круто надеемся что было полезно всем хорошего вечера Всем пока
01:35:47 - 01:36:26