Подготовка к собеседованию на iOS 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 каналы и чаты
Транскрипция видео:
Аня Спасибо но кажется я вижу в чатике пишут что нет звука можешь проверить это как-нибудь А вот так по идее должен появиться звук А если он появился пожалуйста напишите очень извиняемся да я слышу что у наст Артура получается звук пишется на Стрим А меня всё это время не было слышно ага да Тогда тогда начнём наверное ещё раз я заново всех представлюсь представлю А так пока жду Ответы из часика потому что я надеюсь что на стриме нас теперь слышно всех всё супер есть а тогда немножко ещё вступительная часть
00:02:02 - 00:03:35
мы сегодня с вами на собеседовании мобильных разработчиков Сегодня у нас будет эфир на Junior Android на Junior iOS разработчика Извините заволновалась от форс-мажора а проводить Его будет Анастасия золотых iOS лит в компании звук и также ментор на солвере а приходить его будет ученик Артур который подал заявку на сайте и сегодня с нами здесь Проходит собеседование а про организаторы сове - это крупнейший ВФ maret Place менторов из it на котором вы можете брать индивидуальные занятия с опытными наставниками и прокачиваться
00:03:07 - 00:04:21
быстрее и эффективнее и у нас с вами сегодня есть два партнёра это Telegram канал Easy Swift где публикуются актуальные статьи и обзор последних новостей из индустрии а также it events - это канал с анонсами различных мероприятий для айтишников и программистов все ссылочки есть в описании А по времени само собеседование будет длиться час 2030 в конце ментор даст фидбэк и ответит на ваши вопросы которые вы можете сейчас задавать в комментарии А мы всё передадим и в конце на всё ответим Вот всё Теперь ещё раз передаю
00:03:44 - 00:04:57
слово Насте и желаю всем удачи и классного просмотра А всё Всем привет Меня зовут Настя И я МТ в платформенной команде в компании звука и Сегодня мой менти Артур мы будем с ним проходить бо собеседование Артур привет давай расскажу как у нас сегодня будет проходить наше собеседование оно будет максимально похоже на те собеседования которые провожу я с коллегами и оно будет состоять из трёх частей первая часть это будет биографическая часть Про тебя я хочу услышать про твой опыт про твои задачи Какие
00:04:20 - 00:05:40
Какие задачи ты делал интересные и либо просто сложные Ну и в целом про Про тебя Про твой опыт это будет первая часть после этой части я сразу же дам тебе фидбек потому что обычно на этих на этой части э часто не застрять внимание Но здесь можно Много о чём сказать Э и как раз мы дадим Я дам тебе фидбэк дальше будет часть Техническая Э мы поговорим про стандартные вопросы начнём наверное с самых типовых немножко поговорим про типы данных проза Может быть там ещё куда-нибудь удт много по точку У меня есть ещё Задачка на
00:05:00 - 00:06:19
проектирование посмотрим её и в конце если у тебя будут какие-то вопросы ко мне то я с удовольствием на них отвечу И ещё после после этой части тоже дам фидбек именно по технической части и в целом это будет весь наш ВС наше собеседование если О'кей то давай начнём давай всё супер Давай тогда начнём с с первой части Расскажи немножко про себя про твой опыт Э что ты делал Какие задачи может быть какие-то интересные задачи которые ты готов поделиться либо может быть сложные задачи которые ты делал а по сути я могу рассказать о
00:05:39 - 00:07:05
своей о своём пути как Я дошёл до как у меня проходило обучение первым делом что у меня было Это я начал обучаться на онлайн платформе это было swiftui я делал приложение по примерам Зачем через какое-то время примерно через наве полгодика я попал на bootcamp где у меня уже была возможность учиться у скажем так ментора в ходе обучения У меня получилось изучить Swift UI основные базовые базовые моменты и UI Kit сво началось У меня всё грубо говоря с создания мобильного приложения по продаже кроссовок это было написано
00:06:22 - 00:07:51
Swift UI а делал я по сути для института чтобы получить диплом Вот Но это был такой довольно-таки смешанный опыт в том плане что по большей части это было именно ознакомление То есть как бы потрогать понять Как это всё работает Что это такое вот когда уже попал на у меня была возможность создать финальное своё приложение которое потом буду кото я потом должен был защищать свой проект там уже было поинтересней там Я использовал довольно много всяких способов как сделать его сложным Я использовал Я помню Три разных
00:07:07 - 00:08:37
AP то есть там приложение было получается фола именно который не знает что такое Формула 1 ему вот как бы познакомиться что как бы там Показать ему какие есть гонщики какие есть трассы какие есть ивенты и так далее ээ по поводу начинки всего этого приложения там было Три разных API э там был Google API translate ээ там была сама датабаза с гонщиками трассами и все всем этим остальным про формула-1 что-то там ещё было какой-то был ладно Не суть важно видимо а ты вот сказал извини что перебью ты сказал что вот у тебя было Три разных
00:07:52 - 00:09:19
ошки Вот в этой F1 Ну приложени па формулу 1 эти три разные ошки Ты как Как ты с ними работал То есть ты завернул это как-то в отдельный сервис или просто ну просто дёргал отдельные ссылки это прям целы цельные ашки были или просто там ну грубо говоря набор данных использовал Так что я создал фа Гру говоря раз и дальше уже их использовал в ходе работы над приложением то есть допустим Если нужно было отобразить какие-нибудь там картинки какие-нибудь имена Там и так далее Это ВС вызывалось в классе это
00:08:34 - 00:10:02
всё показывалось если нужно Я кстати сейчас подскажешь мне в использ если используешь то локация телефона именно как страна или город она показывается она выдаётся именно [музыка] Как наз Лео правильно понимаю Какой установлен на телефоне Ну полка да Ну в целом можно если ты имеешь в виду только название то Ну именно название берёшь то скорее всего вот локали там можно брать и получается ты ещё использовал перевод локали на тот язык на который есть на телефоне да да да Окей я к чему это просто как бы
00:09:21 - 00:11:00
Правильно ли я сделал неправильно так можно было вообще делать и может быть какие-то струнные функции были в самом как бы самом Ну в целом У нас есть локализованные строчки через Эти локализованные строчки можно можно менять разные настройки показывать условно что у тебя например телефон на грубо говоря на английском а ты говоришь на русском собственно по локали устройству Ты можешь задавать разные разные имена и соответственно брать уже разные строчки вот да Окей что да е было у меня приложени corea Если не ошибаюсь Core
00:10:21 - 00:11:51
Location плюс Я использовал firebase это у меня было firebase [музыка] и сейчас боюсь перепутать там был вроде То есть как именно текстовый текстовая база данных и не помню ну можно Ну как раз Да можно Stage для тоже можно сделать был Мне кажется всё мне кажется всё что те рассказала да Окей и получается это вот эти приложения - это то что ты делал за вот период обучения то есть помимо Ну то есть помимо кэмпа после этого Вот получается у тебя после Бут как раз было это приложение и ты его куда-то выложил
00:11:05 - 00:12:53
или оно у тебя там как-то локально или может быть ты его Выложил в App Store Пока что нет пока не планирую По большей части это приложение было как бы именно для для себя то есть именно как бы опять-таки познакомиться видишь у меня была цель изучить U Kit именно с его осново понять Как это всё работает как бы изнутри вот как бы цель публиковать у меня такой не было видимо Видимо я просто ищу какую-то идею которая меня зацепит и которая мня будет интересно показать мир Угу Да О'кей А если ты рассказал всё то можем перейти
00:11:59 - 00:13:20
Я как раз дам тебе фидбек давай да хорошо да Ага смотри В целом про опыт можно Ну в целом ты рассказал хорошо то есть в целом про опыт можно рассказывать про то что ты делал и всегда лучше рассказывать про свой опыт в плане того что не только например технически опыт но и например опыт который ты вещи который ты занимался не только технические То есть например процессные вещи можно рассказывать если Ну вот как раз в случае с твоим F1 эксплорера можно э можно рассказывать про то что во-первых ты добывал информацию То есть
00:12:40 - 00:13:58
ты составлял составлял ТЗ тому как у тебя должно приложение выглядеть Откуда ты будешь брать информацию что как будет выглядеть именно там дизайн собственно работа по поиску информации по оформлению тзки работа например по настройке процессов если Ну если говорить уже просто более про немножко коммерческий опыт А если ты работал там в команде и например настраивал процессы там работал с с несколькими людьми можно про это тоже рассказывать потому что это тоже очень важно Помимо того помимо Хард скилов софт скилы тоже
00:13:18 - 00:14:30
всегда цены и потому что главная цель любой любой работы в команде это собственно Работа в команде тоже то есть работать вместе с людьми и слышать то как другие ээ предлагают какие-то идеи э понимать Почему они их предлагают и и их адекватно взвешивать то есть условно что почему вот предложили такую идею почему она например будет ну в текущем нашем решении например не не нехороший или там например В текущей нашей ситуации она будет дорого стоить потому что ээ в любой команде там в любом В любой
00:13:54 - 00:15:05
компании куда бы мы не пришли Где бы мы не работали Мы всё-таки работаем для того чтобы сделать продукт чтобы этот продукт увидели пользователей соответственно чем быстрее они это сделают тем быстрее компания заработает денег соответственно мы заработаем денег быстрее поэтому про это тоже надо помнить и можно про Вот как раз про биографическую часть рассказывать про опыт про не только технический и вот в твоём случае можно как раз тоже ещ рассказывать про Вот про твой проект с буткемпа именно про то как ты его опис
00:14:30 - 00:15:38
как ты его вообще к нему пришёл что что ты для него тоже делал вот если будет ещё дальше опыт Ну дальше там будет новый например новое место где можно будет про это рассказать тоже можно про это Чуть более подробно рассказывать Хорошо я тебя услыша вот тогда давай перем к технической нанм тогда с самых наверно стандартного вопроса который на всех собеседованиях задают поговорим про типы данных давай про классы структуру поговорим про их различия про их сходство про преимущества там классов над структурами или структурны
00:15:04 - 00:16:28
классов по сути структуры мы используем по необходимость если нам необходимо структурировать данные допустим от класса заключается в том что структура - это val клас - это ref [музыка] ty так хорошо получается у нас есть valence тапы А что ещё у нас относится к например к кроме классов к относится ind а точно точно ли перечисление у нас это френ типы и ещё функции я помню Ну ложе и функции да то есть мы их Можем сами по себе это у нас ty это ссылочный тип или это всё-таки если то это по большей сти считается да
00:15:47 - 00:17:52
Угу Да потому что у нас как раз перечисления все перечисления - Это val тип и Ирек - это просто дополнительный такой Ирек - это дополнительный маркер для того чтобы можно было сделать рекурсивный тип давай как раз у меня есть небольшой пример Давай сейчас я [музыка] расшарить Мне нужна наверное твоя помощь если я расшаренные и перейдём в Яндекс код так смотри у меня есть примерки и как раз раз мы заговорили с тобой про перечисление Э давай Вот есть такой пример А давай начнём с того посмотрим на него и решим
00:17:01 - 00:18:39
нет Если что можно рассуждать вслух это даже лучше делать как-то получается это случайно не будет сейчас как называется я забыл название этого это случайно не будет сайкл вот то что происходит сейчас в кейсе где э в вот в этом да да да да А давай тогда Э объясним что такое ре cycle поговорим про это когда два объекта э имеют сильную ссылку друг на друга Угу Так О'кей Хорошо давай тогда зная это ээ применим эти знания к к нашему примеру то есть собственно у нас где у нас два объекта и как они будут ссылаться друг
00:18:14 - 00:19:51
на друга если это у нас Rain cycle Если что можешь писать У тебя Ну я вижу что ты зашёл в индекс код если что если хочешь что-то поменять или что-то Написать то можешь прямо писать в Яндекс коде Мне почему-то кажется что это не [музыка] вот этот вот получается как в скобочках то что находится это это было Ну здесь у нас параметры вот то что в параметрах получается Здесь есть я не уверен Как именно будет работать с кейсом н ну здесь получается Смотри здесь по факту мы создаём Ну то есть можно сделать вот так вот то есть мы просто
00:19:09 - 00:20:30
здесь передаём ещ один кейс и Нама то есть в наш нашу переменную Person А ну давай её например ну пусть будет Person мы её мы сюда кладём один из кейсов яма то есть мы перейдём передаём сюда frend с параметром Person А и сюда же в этот параметр мы передаём просто новый какой-то другую переменную э новый другую переменную с кейсом этого же самого Има только здесь будет Нон у нас вот ну ну смотри ты прав что это не скомпилировать Person friend Я думаю можем [музыка] поменять не зна что А ну что мы можем его поменять Ну то
00:20:26 - 00:22:05
есть я понимаю что ты хочешь поменять Ну то есть поменять тип параметра А на что ты хочешь на что ты хочешь поменять ели смысл именя ам любой тип можно было бы применить Ну например предположим что вот в нашем перечислении персоны нам в этом кейсе Ну в целом нам нужно передавать только персону то есть другом Мы можем считать другого человека Ну конкретно в нашем примере как-то я на самом деле затрудняюсь ответить Ага Ну смотри ты раз упомянул про ключевое слово Ирек и собственно Здесь оно вот в таком формате
00:21:41 - 00:23:10
ты прав оно не [музыка] нашего ямка нам нужно во-первых посчитать размеры всех наших кейсов но в кейсе н мы не можем посчитать его размер потому что у нас здесь есть Ну мы Сыла на самого себя и для вот такого использования Ну чтобы чтобы такое исправить нам у нас есть ключевое слово Ирек и собственно через него ну оно указывает на то что мы можем использовать самого себя то есть мы как бы ссылаясь у нас будет что-то типа ссылки соответственно а ссылку мы знаем сколько она весит поэтому здесь через индикт мы
00:22:34 - 00:24:07
можем это использовать А я понял я с таким не сталкивался Наверное поэтому довольно так сложно Да ну вот Собственно как раз индикт намы нам нужны для того чтобы вот Ну примерно вот рекурсивные типы делать то есть использовать рекурсивно в своих же кейсах самого себя Угу Окей Хорошо я понял да да Окей с этим мы с тобой разобрались Давай тогда дальше поговорим чуть-чуть подробнее про Ну про структуры и и классы то есть Давай поговорим про управление памятью То есть как раз ты начал говорить Что там у нас типа как
00:23:40 - 00:25:00
они у нас хранятся в памяти Ну с точки зрения Ну какая Какие типы памяти Например у нас есть какие области памяти есть два варианта это первое - это стек или куча value Type они хранятся в стеке стек работает как доступ к элементам стеке по системе ф то есть Last in First чтобы было более Понятно можно представить что - это стопка книг когда мым последнюю книгу мы последнюю книгу и забираем в случае с кучей с хипо там уже идёт сейчас скажу по ссылки создаётся экземпляр одного класс создаётся один экземпляр
00:24:22 - 00:26:25
данных с ссылкой доступ к куче он медленнее но При всём при этом мы можем обратиться к любому элементу из кучи А ещё сравнить кучу можно с книжной полкой Э где разные книги и доступ к любой книге можно как бы с любого места как бы получить Как бы как бы так да Угу Да аналогии прямо очень хорошие но смотри в куча - это всё-таки область памяти где мы храним адреса То есть как раз вот из-за того что у нас там классы и ложи это референс типы и собственно мы Обращаемся по ссылке то есть по адресу в памяти и по адресу в
00:25:23 - 00:26:57
памяти мы уже пытаемся найти само значение Вот давай тогда поговорим про У меня есть как раз задача Давай тогда ещё вернёмся в Яндекс код давай так сно расшаренной У нас есть небольшой примелькаться и сразу же исполняется Угу давай вопрос тот же самый первый вопрос а ну и дальше тогда дальше тогда со вторым вопросом как раз после него начнём м так давай посмотрим Ну соответственно можно какой из этих гритинг у нас не скомпилировать вопрос было бы мне на самом деле хорошо понимать что здесь делают ещё слабая
00:26:13 - 00:27:53
ссылка Так а что О чем она тебя отвлекает или чем она тебя смущает не совсем а просто я помню примеры использование лфа если идёт открытие нового допустим UI контроллера новой вьюшки скажем так то есть Угу бы там более или менее понятно в этом случае меня это немного конт конт В каком плане Ну в целом правильно что оно тебя здесь конт Ну я не понимаю зачем она вообще нужна здесь смотри ну у нас здесь это список захвата То есть это Cap и здесь мы просто захватываем наш контекст Ну то есть конкретно например в
00:27:30 - 00:29:07
этой функции мы его закладываем слабо В каком плане това Почему тебя почему он тебе не нравится видимо потому что я работал до этого большей части с бы называется с показом вюк и так далее только там е применял даже немного стыдно но при этом При всём я не работал именно с такими функциями Где используется именно вот именно в таком вот месте сыч мог это встречать то есть мы можем сделать например вот что-нибудь типа такого например ложа Ну и сделаем её вот так вот и например эту к ложу мы вот сделаем так ну чтобы тебе
00:28:23 - 00:29:52
например было понятнее если тебя смещает именно написание то есть ну и то же самое то же самое происходит и в гритинг 1 гритинг 2 вот только единственное у нас сам список захвата Ну и само написание списка захвата оно немножко меняется от гритинг 1 гритинг 2 и гритинг 3 Вот и здесь нам нужно понять какой Ну в целом вот этот код который мы здесь написали он на компилятор на него будет ругаться или не будет А то что ты что то что тебе не нравится гритинг 2 - это правильно Давай э подумаем Почему э может
00:29:12 - 00:30:25
быть что здесь не так а смотри у нас есть тут к собственно Вик ссылки Давай тогда поговорим про Ну типы ссылок какие у нас ссылки бывают IG Strong и Unknown Угу А в чём их разница э STR ссылка а она не уда она не освобождается после она не освобождается когда удаляется ссылка она если ссылку удаляется ту память освобождается и unown проблема unown заключается в том что она не может быть нилом и с ней могут быть некоторые проблемы так Ну в целом понимаю Ты суть правильно рассказал вот у меня есть
00:29:52 - 00:31:33
вопрос Что ты имеешь в виду когда ты рассказывал про стронг ссылку Что ты имеешь в виду про она не удаляется когда убирается ссылка как-то так вот объяснил можешь поподробнее раскрыть то есть что ты под этим име понимаю Рон ссылка Она всегда остаётся То есть она всегда занимает память в этом са Память она всегда занимает память Рон ссылка Ну то есть получается смотри у нас есть счётчик ссылок который ну поэтому счётчику ссылок мы получается Если слаем на объект то мы с если Ну мы ссылку убираем то счётчик у
00:30:56 - 00:32:09
нас уменьшается на один собственно со Рон ссылками Получается эти счётчики не работают или или как то есть счётчик не если например Рон ссылка мы перестали ссылаться сильно на какой-то объект то счётчик никак не [музыка] вопрос в том а Сможет ли потом освободиться память от ссылке так хорошо А давай тогда Давай тогда порассуждаем на эту тему Смотри когда тогда у нас освобождается память когда объект у нас удалится из памяти То есть например счётчик ссылок у нас Ну например дошёл до нуля В какой момент Мы удалим
00:31:32 - 00:32:57
объект е насколько я понимаю если используется то это произо тически в случае если мы используем Man Counter то Нам необходимо вызвать или там Дени и там ну да Да всё правильно с ручным Почём ссылок мы нам надо было раставить релиза а там АК у нас ретей релизы представляет за разработчиков Окей с этим разобрались с Виком и анодом то есть с слабыми и бесхозным ссылками А в чём Ну то есть ты сказал что вот аноды такие какие-то ну то есть это там может быть л Но это по факту как Force and R зачем тогда он
00:32:18 - 00:33:41
вообще Нам нужен Ну то есть как звучит как очень опасная штука которую зачем-то придумали Но зачем на зачем она нам нужна Если мне с Виком понятно то с аном я затрудняюсь ответить Ага Окей Ты знаешь что-нибудь про и про в целом про то как объект про жизненный цикл объекта м мне кажется нет Ага э ну О'кей Смотри э аноды на самом деле нам нужны потому что ну если посмотреть как у нас хранится а ссылки то ссылки на ронг ссылки они хранятся рядом с объектом поэтому Ну собственно мы к ним Обращаемся напрямую
00:33:04 - 00:34:39
и собственно у нас как раз мы по обращению по по по Строн к ссылке мы получаем объект а аноды э они хранятся тоже если у нас других никаких ссылок Нет они тоже хранятся у нас прямо в объекте соответственно анон ссылки как может быть значение так и его не может быть Ну то есть как как nil так и значение Может быть но из-за того что они хранятся вот прямо рядом с объектом поэтому у нас они чуть быстрее То есть это такая ну типа оптимизации языка у нас АК ссылки они у нас все хранятся в сайле то есть это отдельная таблица а в
00:33:54 - 00:35:06
которую при когда Ты создаёшь Ну когда ты используешь к ссылку то все ссылки уходят в в S Table и собственно Вики они немножко э ну чуть медленнее потому что во-первых в самом объекте хранится ссылка на сай Table соответственно тебе нужно сначала чтобы получить значение тебе сначала нужно найти этот Сай Table в сайле найти ссылку саму Вик И только по ней уже раскрыть либо там есть значение Ну наш optional либо есть либо его нет значения поэтому как бы она чуть-чуть медленнее будет Поэтому как бы аноды обычно используются для
00:34:29 - 00:35:43
того чтобы чуть-чуть оптимизировать и чуть быстрее сделать но на самом деле это такая ну на мой взгляд не сильно не сильно действенная оптимизация преждевременно Если есть что ещё оптимизировать приложение то лучше начать с этого но в целом как бы это вот существу для для этого теперь давай вернёмся к нашему примерку и в нашем и в нашем примере как раз вот зная то что мы сейчас с тобой обсудили Давай обсудим то что у нас есть сейчас то есть ещё вопрос ссылки собственно любые ссылки собственно Вик Строн Анды все ссылки мы
00:35:07 - 00:36:32
можем использовать с ссылочными типами правильно или с или с мы тоже можем Нуки тоже ИС это по большей части с по большей части это ссылочные типы так хорошо теперь тогда зная это Давай ещё раз вернёмся Ну зная э эту информацию тогда Давай ещё раз посмотрим на наш пример и э как раз вот про Ну у тебя были сомнения про гритинг 2 Давай тогда посмотрим про него Ну то есть у нас в как раз есть ложа которая захватывает наш контекст то есть наш селф может быть в Self вопросительный знак точка name там
00:35:48 - 00:37:12
ничего не будет я не знаю А давай разберёмся что у нас ну в нашем конкретном случае что у нас представляет Self э переменная name грубо говоря а не совсем смотри Self это контекст то есть здесь контекст селф - это наша Person а Person - это у нас структура Да вот Окей соответственно здесь мы слабо захватываем структуру персона то есть ну как раз вот если мы будем описывать вот что здесь у нас происходит то здесь мы захватили слабо структуру персона Можем ли мы это сделать или нет Можем с вот да правильно собственно
00:36:36 - 00:38:08
ться это этот пример у нас как раз greetings 2 у нас не скомпилировать к ссылки потому что это val Tip вот О'кей с этим разобрались а а разница между tings 3 и tings 1 Э ну ты знаешь в чём Ну или с ними всё в порядке тут нет перечисления в одном случае то есть если в случае с он должен запуститься то в случае сгн 3 Мне кажется он тоже не запустится просто потому что не хватает и Ага да ин не хватает но в целом такая запись она валидная на самом деле то есть здесь единственно Ну это особенность языка то есть если ты
00:37:26 - 00:38:51
попробуешь Запустить вот в таком виде без ина то здесь будет только Разница в том что здесь мы будем передавать ну по факту нашу копию А здесь мы будем передавать Ну грубо говоря текущий наш контекст то есть без без захвата ина Вот это ну это такая просто особенность Да но в целом И то и другое скопились То есть здесь вот в остальном из-за того что у нас в списке захвата у нас идёт селф А селф наша структура собственно здесь как раз ээ здесь ничего э Здесь ничего не будет э э проблем не будет то есть как раз в
00:38:25 - 00:39:44
greetings 3 мы могли бы написать например вот так Ну то есть вот такая более э более привычная запись для нас всех То есть если мы бы написали без capture листа То Для нас это было бы более э более привычно это было бы то же самое угу вот так О'кей с этим тогда тоже разобрались Давай тогда дальше пойдём Давай немножко поговорим давай поговорим про диспетчеризацию знаешь что это такое ты имеешь в виду что-то связано с асинхронными синхронными методами Нет я говорю про метод диспач и про то как компилятор находит тот метод который
00:39:07 - 00:40:39
Например нужно вызвать у нас есть три метода диспетчеризации это статическая динамическая и сообщениями может быть тебе это что-то подскажет Нет я к сожалению с этим ещё не работал на самом деле Да окей Ну в целом У нас есть такой механизм ну по факту лизация это просто способ поиска метода то есть для того чтобы компилятор Ну понял какой метод нам вызвать У нас есть как раз несколько типов лизации У нас есть статическая есть динамическая и сообщениями статическая - это Например Например если у нас приватный приватный
00:39:56 - 00:41:12
метод там или например Final CL то мы знаем что как бы у нас Мы его не сможем заорать и собственно поэтому у нас тогда единственный вариант использовать только метод который например приватный соответственно это статическая диспетчеризация То есть у нас вариаций нет а динамическая диспетчеризация - Это диспетчеризация она делится на два типа есть Virtual table Table Virtual в основном используется для классов Когда например у нас есть наследование и у нас есть класс родителя какой-то метод и в классе наследнике Мы орам метод
00:40:34 - 00:41:39
соответственно компилятор нужно понимать какой из этих двух методов нужно вызвать и соответственно какой очерёдности Иви на это в основном используется для протоколов есть ещё один тип это сообщениями Но это в основном subc связано то есть если тебе нужно использовать диспетчеризацию сообщениями То есть можно например сделать там несколько вариантов есть для того чтобы изменить диспетчеризацию на сообщения там можно э э отнал от NS обк либо в функции указать собачка obc и ещё можно указать динамик
00:41:06 - 00:42:28
вот э ладно О'кей тогда раз про риза э ну про слиза как раз можешь чуть подробнее потом посмотреть Давай тогда э поговорим Давай поговорим про многопоточность Давай тогда начнём с самого наверное тоже стандартного вопроса Назови стандартные такие ну первые три такие ну или несколько Проблем Проблем синхронизации потоков и чуть-чуть их Опиши может перебивать другой поток мешать другому потоку по большей часть так понимаю ты имеешь в виду как или не совсем то я говорю про проблему синхронизации потоков именно с чем мы можем
00:41:46 - 00:43:16
столкнуться когда мы например начинаем использовать многопоточная блокировка данных там например не знаю гонка за данными Вот про это больше Может быть ты слышал что-то про дело Коди inv Ну короче именно про проблемы которые приносит нам многопоток сожалению Тот ещё вопрос До которого я ещё не успел дойти сильно изучал на самом деле да Ну смотри когда мы начинаем писать использовать по точность то у нас есть мы её используем для того чтобы решить некоторые проблемы основные такие самые популярные проблемы - это Deadlock
00:42:45 - 00:44:18
лайки й конди и наверное priority inversion Ну это из тех которые вот прямо чаще всего и на солистах встречаются про которые говорят и в целом встречаются чаще всего и в коде дедлок это взаимная блокировка Deadlock - это собственно когда у тебя есть например несколько потоков и один ресурс и и оба потока пытаются получить доступ к этому ресурсу но они не могут то есть они как раз друг друга блокируют А собственно когда такое часто бывает когда Например у нас есть ты пытаешься там синхронно запустить что-то на из
00:43:37 - 00:44:50
главной очереди что-то синхронно запустить на главной очереди и как раз ты по факту блокируешь сам себя Ну как раз и поэтому у нас происходят краши соответственно Deadlock у нас всегда крашит приложение то есть мы упадём в любом случае а Лок - это наоборот то есть Лок - это активная блокировка и собственно локе Ну на самом деле происходит обратная ситуация То есть у нас есть ресурс и два потока просто друг другу уступают и соответственно Они вроде бы полезной полезной полезного действия никакого не делают но при этом
00:44:13 - 00:45:25
они как бы стараются друг другу уступить но ресурсом никто не воспользовался В итоге Угу угу вот э вот ещё есть Race Condition собственно Ну из таких вот самых популярных ко - это состояние гонки когда мы пытаемся Ну когда мы пытаемся обновлять какой-то один ресурс и мы не можем его То есть у нас он его состояние получается у нас оно будет всегда не актуальное и соответственно мы пытаемся из нескольких потоков одно обновляет другое читает соответственно у нас вот такое вот состояние гонки получается Вот давай тогда поговорим про
00:44:49 - 00:46:07
то какие у нас есть инструменты для того чтобы решить эти проблемы синхронизации потока Ну и в целом какие инструменты У нас многопоточности есть асинхронные методы используются А ну асинхронные методы - это ты имеешь в виду синхронные синхронные вызовы Да ну это всё-таки не совсем инструменты здесь я больше хочу услышать про наме может быть про Ну про треды про gcd и про опены в целом как инструменты То есть это такие верхнеуровневый ещё можно сюда относить ещё синты например ты знаешь про в целом
00:45:27 - 00:46:52
про эти инструменты очень узко скажем так то есть в своих проектах Я единственное что использовал [музыка] Это тот же самый и к этому относится это кстати ты знаешь как устроены под капотом разбирался с этим в том что когда мы доходим до донка начинается я [музыка] понима выполняет дальше код и второй поток он выполняет который код который в асинхронного метода Угу Ну не совсем не совсем так на самом деле Ну да то есть онко они Ну в целом все инструменты и например те же самые например треды gcd
00:46:10 - 00:48:07
опены - Это всё-таки работа с очередями И это прям ну такой грубо говоря так скажем честная много точка авей - Это всё-таки больше про параллелизм и под капотом он устроен Так что ну по факту Ты запускаешь несколько тасо и и приложен то есть система просто переключается между этими таска очень быстро То есть это больше параллелизм и собственно у тебя происходит переключение контекстов ну то есть грубо говоря твои тве твои две таски делятся на очень маленькие кусочки и система переключается между ними очень быстро и
00:47:28 - 00:48:43
настолько быстро что тебе кажется что они выполняются одновременно Ну вот Ну на самом деле это вот как бы не совсем как бы та прям такая не на том же уровне что и gcd опены всё-таки gcd Operation там мы действительно оперируем очередями и Мы выполняем таски на прямо отдельных очередях поэтому поэтому в этом Лане как бы ну чуть-чуть отличается именно подкапотное устройство вот Окей А давай тогда поговорим Вот ты упомянул синхронные синхронные вызовы А чем они отличаются синхронный код выполняется
00:48:06 - 00:49:13
Шаг за шагом а синхронно запускается сразу же после завершения после после вызова а Шаг за шагом ты имеешь в виду что в один момент времени у нас выполняется один одна таска одна таска да да да там получается у нас там допустим есть функция мы доходим до блока с асинхронным вызовом асинхронного метода и в таком случае асинхронный метод он будет выполняться как раз-таки асинхронно с остальной частью функции да да о с остатками того что остатками строк скажем так да всё правильность ну по факту синхронный вызов у нас блокирует
00:48:39 - 00:50:07
ту вызывающую очередь то есть до до до конца своего выполнения а синхронный просто не блокирует Да всё правильно смотри а ещё ещё такой вопрос А смотри у нас есть разные очереди ты говоришь что ты использовал gcd Grand Central dispatch и там есть у нас разные типы очередей У нас есть сериал очереди есть concurrent очереди то есть сериал - это последовательная concurrent параллельные вот в чём у нас между ними разница затрудняюсь ответить ну давай порассуждаем ну то есть даже по названию То есть получается може ты имеешь в виду
00:49:26 - 00:50:47
как Global или или это не да да например Global - это какой тип очередей То есть у нас есть ну давай из наших очередей которые в gcd есть у нас есть стандартные это Main и есть Global очередь Какого они типа ну или как они работают давай так вот я не скажу Ну смотри у нас получается й очередь это серийная очередь то есть последовательная соответственно последовательные очереди - это те очереди где таски выполняются в один момент времени может выполняться только одна таска Вот соответственно параллельные по-разному их называют то
00:50:07 - 00:51:30
есть здесь на разных потоках мы можем выполнять несколько тасо Ну при при при условии того что у нас есть на это ресурсы есть из лу потоков мы можем выбрать поток вот поэтому у нас есть ну поэтому в этом разница между серил и конкурентами А давай тогда вот такой вопрос смотри у нас есть серил очереди это последовательные очереди и в них выполняются таски одна за другой что будет Как раз если мы например на сериал очереди запустим асинхронно какую-то тас м то сначала выполнится э сериал очередь а потом начнётся асинхронная
00:50:59 - 00:52:42
не А что ты имеешь в виду выполнится сериал очередь что ты под этим имеешь виду можеш по смотри у нас есть давай так смотри у нас есть мей очередь и мы на ней хотим запустить асинхронную тас что в этот момент будет происходить м сначала завершится й и потом уже запустится асинхронно а то есть мей очередь у неё есть что что ты имеешь в виду что она завершится то есть у очередей есть какое-то начало и конец как приоритет Я так понимаю а ну приоритеты немножко про другое То есть здесь именно про Ну смотри у нас
00:51:49 - 00:53:17
есть очередь это по факту такой поток Ну это не знаю это река Куда ты можешь э класть там например там кораблики бумажные соответственно эти кораблики бумажные ты можешь например терика очень узкая ты можешь их друг за другом положить и они будут течь а соответственно ээ у нашей се сериал очереди То есть например наши Main У нас есть несколько тасо и мы туда их запускаем собственно мы мы запускаем Первую вторую третью А и В какой-то момент Ну как мы можем А понимать что например наша таска которую мы запустили синхронно э она
00:52:34 - 00:53:56
выполнила или или что произойдёт если мы захотим синхронно асинхронно запустить таку на мейни Ну если логически подумать то с твоим примером Про речку и кораблики добавятся ещё кораблики в очередь Нет ну да да Всё правильно то есть как бы как раз с если мы запускаем асинхронно на сери очереди То есть если представлять есть разница между очередями и формой запуском тасо как раз мы Ну в этом можно ещё больше покопать то есть сериал очереди разница между конкурентами Ну конкурентными очередями сериал очереди
00:53:15 - 00:54:52
там где Мы выполняем одну тас за раз соответственно на сериа очередях если Ты запускаешь что-то из из этой же очереди то лучше запускать всегда асинхронно как раз для того чтобы можно было эту таку жить и не блокировать очередь между между тем в конкурентных конт очередях ты асинхронно или синхронно можешь что-то запускать Ну в целом безболезненно потому что конкурентные очереди работают с несколькими потоками и собственно Ну это как будто бы ну та же самая твоя например река и у неё есть несколько
00:54:10 - 00:55:23
ответник несколько путей собственно эти пути - это как раз потоки твои и по этим потокам ты можешь пустить разные кораблики собственно поэтому и таким образом получается у тебя задачи могут выполняться в разное время угу вот О'кей давай тогда про про много точку закончим Э давай тогда перейдём к задаче У меня есть у меня есть одна маленькая задача про проектирование и немножко как раз поговорим про UI Сейчас я тоже снова скажи видно экран Да видно Да вот смотри есть такой экранчик и Давай с тобой у
00:54:46 - 00:56:10
нас как раз время осталось Давай поговорим о том как бы ты например реализовал вот первый экран который у тебя Ну который у нас есть из трёх то есть остальные два тогда не будем трогать посмотрим только вот наш первый экранчик То есть у нас есть там какой-то контент собственно всё приходит с сервера всё Ну соответственно у нас есть вот Большая карточка на ней есть там кнопка что можно это купить есть вот эти вот такие чипсы э там ну теги которые можно которые можно использовать как фильтры и всё что приходит внизу вот эти
00:55:36 - 00:56:48
вот карточки это всё у нас всё приходит с бка и всё динамическое То есть у нас заранее ничего не не прописано все фильтры тоже приходят с бка и большая картинка тоже может ть А может то есть она может быть а может её не быть угу вот как бы ты делал такой экранчик так Для начала я бы всё это обернул бы в Scroll А я бы добавил Для начала вертикальный нет горизонтальный стек Где бы распределил как раз таки картинку я так понимаю пользователя приветствие и кнопку уведомления Дальше я бы добавил так не уверен Можно ли это делать вообще
00:56:12 - 00:57:54
без тека Ну а какие у нас есть варианты Например если мы будем рассматривать какие у нас есть варианты для того чтобы делать юай Ну понятно ты уже назвал это ты имеешь в виду может быть Хотя он не совсем здесь автолейаут имеешь в виду через констрейнт а нуга Ну автолейаут - это механизм для того чтобы э организовать э организовать вьюшки на экране соответственно эти вьюшки на экране Ну то есть например стек нам немножко к viw нам помогает немного облегчить работу и соответственно к Out можно там ну не
00:57:03 - 00:58:34
использовать соответственно у тебя уже есть некоторые правила по которые ты можешь на на накидать в стек вьюк и собственно у тебя там уже будет они все растянуты собственно там по тем правилам которые ты задал соответственно Если ты будешь использовать например scrollview э то как ты тогда будешь Вот например там говорить что вот например у тебя есть тебе пришёл вот эта вьюшка с Ну там данные для этой вьюшки с бка или количество вьюк которые вот внизу у нас там вот оно скролить ещё выше да мы не
00:57:54 - 00:58:57
знаем сколько там будет то есть как как бы ты если если использовать scrollview как бы ты это делал то есть ты бы это отдельными вьюшка делал или всё-таки например там не знаю коллекцию бы использовать таблицу таблицу А я понял а О'кей хорошо В таком случае ну для начала это всё получается было бы э в вертикальном стеке э вертикальной стек Я бы э Заимка то есть с картинкой с приветствием с уведомлением Дальше я бы создал отдельный отдельную в Где бы по кон там я бы Расписал То есть я так понимаю это
00:58:25 - 00:59:45
ну это То есть как бы картинка и на неё наложена как бы Верхне левом УГ скидка правильно понимаю в Нижнем цена и справа кнопка правильно понимаю да то есть да Окей тогда я бы сделал через создал бы отде вьюшку по корем Я бы зафиксировал все кнопки все цены все скидки добавил бы в уже изначальный с вертикальный эту вот картинку потом я бы добавил Я думаю горизонтальный стек слева у нас получается название справа у нас вот думаю в теории если это всё приходит с сервера то в теории это можно сделать через м либо через
00:59:06 - 01:00:57
коллекцию Ну да я думаю через коллекцию скорее всего это можно сделать А почему ты бы вот вот эту э ну то есть а вот почему вот эту ты бы тоже в коллекцию не положил и Ну вот и почему ты выбрал вот для шапочки именно stackview а не например какой-нибудь кастомный Тамбар например кастом А кстати тоже идея на самом деле Ну наверное если делать код более скажем так тестируемый и более чистым то наверное и вправду лучше сделать как бы Head отдельно уже да настроить как бы header viw и просто уже добавлять как
01:00:07 - 01:01:26
как не знаю как ну как как слоями как тортик просто собирать грубо говоря имеет смысл Я до этого не догадался на самом деле да А смотри а вот тогда вот с Ну то есть понятно что вот вот эта картинка которая Special Price она у нас тоже может либо прийти либо не прийти соответственно если мы её сделаем получается отдельной Хой мы её сюда кладём А сюда снизу у нас будет Collection VI и соответственно нам Collection VI надо будет крутить так чтобы все вот эти наший Так получается все наши внизу р они уезжали вместе с нашей верхней
01:00:46 - 01:02:05
карточкой то есть соответственно нам Collection надо будет у неё Ну зависимости от того что если мы используем коллекцию только для для низа то нам надо будет менять её чтобы она уезжала вверх то есть эту карточку надо будет как-то ну соединять с нашей коллекцией как бы ты это делал у нас получается внизу то что мы видим это а как бы я это делал Я думаю что это возможно там как-то можно было добавить Head насколько я помню то есть Я что-то подобное А ну если есть время я могу попробовать сейчас открыть как бы свой
01:01:27 - 01:02:50
проект в котором у меня это реализовано как бы и просто посмотреть Я не думаю что в ходе интервью будет хорошая идея Давай тог можем просто давай тогда просто порассуждаем То есть получается смотри Давай тогда порассуждаем про плюсы минусы вот такое решение если получается вот э вот Special Price вот эту картинку мы будем класть в это называется в коллек сумен review То есть ты хочешь её в хедер положить собственно если мы будем сюда её класть как отдельная вю то есть какие-то плюсы минусы У нас есть собственно смотри
01:02:15 - 01:03:27
первое что у нас первое что у нас есть эта вьюшка у нас может Как быть так её может не быть и второе нам нужно с этой вьюшки обрабатывать нажатие То есть у нас как минимум есть вот эта вот кнопочка плюсик и по самой карточке тоже бы хотелось чтобы мы нажали и например провалились в Вот в это ну ти Вот в это предложение вот этот Special Off вот как бы тогда с этим мы бы обрабатывали то есть с коллекцией которая взу в целом плюс-минус понятно То есть у нас есть метод делегата там и тут мы можем Ну тоже поговорим про
01:02:51 - 01:04:10
это Но в целом тут как бы ещё плюс-минус всё понятно то есть здесь как мы можем с этим разрулить а как вот быть Вот с этой вот карточкой То есть она если у нас будет не не как часть не отдельной секции а прям су хром то здесь надо будет как-то отдельно это делать как бы ты это делал Я бы наверно попробовал бы это уже заплети в самой в отдельном файле с с настройками этого VI то есть то есть получается я не могу Да я не могу Ладно говори говори Я тебя слушаю то есть ты получается предлагаешь нажатие обрабатывать внутри
01:03:33 - 01:05:03
ячейки Ну то есть нажатие Ну то есть мы Нажали на вьюшку и ты предлагаешь обработать нажатие прямо внутри самой то есть зафиксировать что поймать что мы Нажали на текущую вьюшку и это нажатие обработать уже внутри самой вьюшки не в коллекции наверно Так не делается по архитектуре вроде как бы хотя Ну смотри как бы от архитектуры мы пока можем отойти но в целом как бы такой подход Ну то есть смотри у нас в чём здесь могут быть проблемы в том что у нас есть наш основной контроллер который отвечает за нажатие за Вот вот
01:04:20 - 01:05:38
эти ээ карточки маленькие и по факту переход на вот эти карточки Ну то есть на конкретный продукт у нас будет примерно то же самое что и вот переход на вот эту карточку то есть получается нам нужно будет задубровье То есть сама коллекция у нас будет а не будет отвечать за за конкретно вот это вот Special Price наш Вот что ты про это думаешь то есть как как правильно это или нет то есть как как как бы это можно было бы исправить Ну по-хорошему как бы всё должно обрабатываться в контроллере может быть
01:04:59 - 01:06:14
есть вариант это всё прописать в протоколы А [музыка] как Ну в таком случае если Ну я понимаю что мы не совсем сейчас говорим про про про архитектуру Наверное чтобы это всё в коде бы красиво бы выглядело Я думаю что именно во вьюшки настроить нажатие то есть при нажатии там на плюсик или при нажатии на саму картинку то будет что-то происходить А и прописать тогда протоколом я думаю и уже вынести это в отдельный файл где это всё будет обрабатывать Ну на скидку по крайней мере так я это вижу да Ну в целом такое решение тоже
01:05:43 - 01:07:19
норм Но тогда ну просто заранее тогда чуть вперёд зайдём тогда по идее если такой такой подход будешь выбирать то нужно сделать такое же и для остального то есть условно У нас есть обработка нажатия Вот в этой конкретной ячейки наший суплемент ревю соответственно Нам нужно будет туда прикидывать во-первых дишни потому что на нам Ну у нас это всё динамические динамические данные соответственно нам приходит всё с севака и мы заранее не можем сказать что например там ну вот тут айдини будет всегда там три или восемь или 80
01:06:31 - 01:07:43
соответственно Нам нужно будет прокиды этот айди ник в либо в карточку либо через этот делегат Нам нужно будет прокиды что нажата там карточка с таким-то дишни и для остальных карточек надо будет сделать то же самое то есть мы тоже будем прокиды из карточки дишни и говорит что типа мы Нажали на карточку например с ашнико 60 Да окей давай тогда ещё поговорим про то как бы ты сделал Ну смотри То есть если мы делаем Это всё как часть Collection viw здесь у нас есть вот такие вот теги они скро у нас горизонтально а всё
01:07:08 - 01:08:24
остальное у нас скро вертикально как бы мы это смогли сделать То есть понятно что у нас есть коллекция за счёт чего то есть мы можем сделать два разных направления скроллинга скажем так может быть отдельное отдельную коллекцию создать то есть коллекцию внутри коллекции предлагаешь так делают Ну в целом Да как бы Почему нет сделать можно всё А тогда такой вопрос а это получается у нас будет это у нас Мы серверы получаем все эти да да например мы всё получаем сервера вот всё ну все данные которые ты
01:07:45 - 01:09:09
видишь на этом экране всё приходит в сервер то есть весь набор этих фильтров все вот эти вот карточки с данными там картинка там тайтлы тайтлы суб тайтлы цена всё приходит сервера ну и соответственно для вот этой спел прайса тоже просто приходит отдельная сущность там например там Special offer и в ней Внутри тоже как раз типа карточка Ну просто приходит та же самая карточка И мы только сверху добавляем там типа Special Price и вот высчитывает по какому-то нашей формуле вот этот процент угу угу угу ну возвращаясь к
01:08:28 - 01:09:50
этому сортировке то Да скорее всего попробовал бы коллекцию в коллекции Ага да Окей в целом это ок а тогда теперь такой вопрос смотри как мы тогда поймём то есть теперь у нас будет становиться вопрос С обработкой нажатий То есть как мы поймём что мы нажали например вот на Nail а потому что ну и и кто будет управлять за нажатие то есть коллекция которая вот вложенная или коллекция которая вот наша родительская и Ну если и соответственно ду да я думаю вложено то есть мы там уже всё пропишет как это будет работать чтобы нам не
01:09:08 - 01:10:32
сильно загрязнять именно основной контроллер Я думаю это стоит прописывать именно все эти Кстати да да да это В отдельной коллекции Если не ошибаюсь то это можно всё прописать именно все эти нажатия то я Ду Я думаю я бы именно так бы и сделал бы на самом деле так Окей хорошо А как тогда мы будем обновлять эту коллекцию то есть соответственно у нас здесь возникнет проблема с тем что смотри у нас вот это вот внутренняя наша коллекция её надо например обновить потому что все Ну скорее всего все сетевые запросы которые
01:09:51 - 01:10:58
Нам будут которые мы будем получать они будут в нашей родительском нашем контроллере соответственно родительской коллекции И как мы тогда будем говорить Что например мы выбрали наш нейл и нам нужно отфильтровать нашу нижнюю Ну вот Нижне карточки соответственно нам нужно нам нужно же нашу родительской коллекции сказать что выбрано там такая-то Чипса Ну такой-то тег и собственно само сам контент надо как-то чтобы например показать Да соответственно у нас Угу Можно те пере То есть получается мы говорим грубо говоря мы говорим покажи
01:10:24 - 01:11:40
нам там нейс там или и всё это мы должны обновить все этот весь Колек VI основной получается Ты это имеешь в виду ну да да то есть это ну по факту Это здесь у нас будет работать как фильтры и соответственно если мы это всю логику за од нажати перенесём в нашу вложенную коллекцию то нам всё равно нужна связь с нашей родительской коллекцией что чтобы при нажатии при изменении состояния наших фильтров поменялась наша родительская коллекция как-то как бы ты вот это делал мы можем использовать по сути ler который
01:11:02 - 01:12:12
будет на как бы ты их сделал то есть ли на Да окей Ну я понимаю что ты получается хочешь просто подписать на обновление вот этой коллекции да то есть как бы по дефолт у нас будет кейс может быть Ну не кейс мы не пропишет кейс не получится кейс ты имеешь в виду ты хочешь сделать ямк со состоянием или как бы кейс как бык дамчик с кейсами но у нас же получается что все эти все эти и так далее Это у нас приходит в серверы не прош как бы я это сделал Ну я может быть но не знаю это не очень нравится я бы вспомнить своим
01:11:39 - 01:13:26
Коле всё это работал Ну смотри ты вот упоминал про делегаты и ты упоминал про протоколы что через делегаты вот эту один из вариантов в целом можно сделать с этой коллекции тоже самое то есть просто на делегата сделать что условно выбрано там такая-то такой-то фильтр и соответственно наша вся основная родительская коллекция она может пересобрать это как бы один из вариантов тоже такой же ну легальный в целом как бы можно его использовать Угу Вот ещё один из вариантов можно убрать То есть если ты будешь использовать
01:12:38 - 01:14:01
Колек Ну вложенную коллекцию то можно обработку нажатий прокиды в родительскую коллекцию что чтобы родительская коллекция сама отвечала за обработку нажатий то есть по факту ты будешь прокиды индекс пасы Ну конкретного конкретно вложенной твоей коллекции но по факту у тебя будет прокиды в ещё выше в твою как бы родительскую коллекцию и уже родительская коллекция будет только оперировать Ну получается она будет будет оперировать только айтемы То есть у нас впа есть сеш и айм Ну либо Row для таблицы и конкретно родительская будет
01:13:21 - 01:14:41
оперировать только айте мами потому что ей ей нужно понять на какой айтем ты нажал Ну то есть там например на там но ноль о два Ну и так далее То есть по по конкретно по каждому из этих вот э либо э ещё э ещё такой вариант есть э Если ты знаешь что-нибудь про compositional layout Если нет то Да нет я не знаю Окей ну смотри у нас с тринадцатой кажется iOS появился такой инструмент называется ком layout собственно с помощью него Ну в целом из-за чего там чаще всего мы используем коллекции из-за того что
01:14:02 - 01:15:20
коллекции можно настраивать разные лейауты и как раз comp layout нам позволяет настраивать одну коллекцию в Разно Ну с разным груть группировать разные айтемы то есть соответственно Вот такой Вот такую коллекцию можно сделать через composition layout в целом как бы достаточно просто то есть использую только одну коллекцию а не так вложенные ну не используя вложенные коллекции вот как мы с тобой сейчас обсудили ой Окей я понимаю да да вот так Окей тогда м с этим закончили э Я думаю что достаточно вот в целом
01:14:47 - 01:16:15
тогда у меня вопросов наверное больше не осталось может быть у тебя есть какие-то вопросы ко мне или там по собеседованию которые мы прошли Ну по сути как бы нет вопросов су Хорошо давай тогда я дам фидбек смотри Ну получается по фид видно что у тебя теоретическая база есть надо её просто подтянуть поднять из из недр в памяти больше прочитай про проди спечели зации первое то что получается этот вот этот Пласт вообще выпал у нас про неё лучше Прочитай здесь лучше знать Ну проспери зации лучше знать потому что
01:15:30 - 01:17:01
это как раз тот способ это способ поиска методов То есть ты будешь просто больше понимать как методы ищутся и и в целом почему Например мы используем протоколы как мы действу как мы оперируем например с дефолтным значениями Почему у нас структурах там такой формат почему там например ну там с NS окми Мы по-другому работаем а ещё под тени знания про многопоточный треды ну именно вот итд которые вот у нас есть просто потоки Ну как инструменты в айосе в целом углубляться там всякие типа по Ну что было до этого лучше не
01:16:16 - 01:17:38
смотреть в целом как бы мы сейчас нам всегда достаточно и есть сечас более попу мо И лучше даже попрактиковаться в плане того что такое Serial concurrent очередь чем они отличаются как их создавать и Как запускать таски в этих очередях то есть В чём разница между синхронным запуском В чём разница между асинхронным запуском там на разных очередях из разных очередей Можно попробовать просто Ну разные примеры поза Ну то есть условно создаёшь очередь и пуляет таски и смотришь как кто из них выполнится и как соответственно то есть
01:17:08 - 01:18:26
синхрон асинхрон и так далее можно ещё чуть более подробнее Ну как раз если развивать вот эту тему можно посмотреть про инструменты а в целом какие у нас есть инструменты например gcd для синхронизации потоков и Например если Ну если сравнивать там например с ойна теми же например почему опены - это более верхний уровень А чем оно отличается почему его используют или почему его Не используют или Почему нам достаточно gcd что что что в gcd нам не хватает чем что есть например в оперейшн Ну вот в целом как бы просто посмотреть
01:17:55 - 01:19:05
по вот этим э по по по инструментам синхронизации потоков А ещё можно просто чуть по э ну чуть подробнее посмотреть про проблемы в многопоточности То есть как раз это просто самое основное что Бут спрашивать если Ну доходите до темы Ну собеседовани до темы э многопоточности то первый ну один из первых вопросов скорее всего будут про проблемы многопоточности как раз про дедлок Ну в целом Чтобы понимать что происходит у тебя с данными То есть когда ты используешь ного точку что у тебя происходит когда там например
01:18:30 - 01:19:39
Почему приложение закрашивать там почему ты у тебя такое произошло или там например Почему ты обращаешься к переменной ты там вроде бы её поменял а она там старое значение Ну что происходит вот э вот примерно так Угу хорошо Да да есть над чем подумать есть что поиз учать я тебя услышал Спасибо Да вот если что я могу даже прислать там некоторые материалы которые по которым можно там потом посмотреть Чуть более подробно изучить вот э Давай тогда перейдём к вопросам из чата Какие Если есть я пока что вопросов
01:19:04 - 01:20:23
в чатике не вижу Пока ребята пишут Я думаю может быть ты можешь выделить какие-то штуки которые классно работают для новичков как например во время собеса А ты у минула Артура что классно рассуждать вслух чтобы тот кто тебя интервьюер советы которые ребята могут применять на со бесах А да на самом деле Ну вот основную часть Ну то есть есть разные с разные форматы технических собеседований но чаще всего на техническом собеседовании это Примерно там час-полтора и ты общаешься обычно с ну с занимающим
01:19:44 - 01:20:55
менеджером с интерьером и интерьеру важно во-первых узнать про тебя то есть как ты можешь себя представить что ты вообще делал и Подходит ли твой опыт Ну к тем задачам на которые тебя ищут потому что чаще всего когда ты собеседуем опытом будете делать всё везде и всегда на самом деле нет чаще всего ищут под конкретной задаче и надо во-первых Надо не стесняться ты можешь спрашивать про то кого ищут на какую позицию на Какие задачи чтобы как раз и тебе было понятно и интервьюера тоже было понятно что ты умеешь и как бы
01:20:22 - 01:21:40
Готов ли ты вообще эти задачи делать потому что как бы интервью - это двусторонний процесс не только не только ты собесе но дуе тоже как бы не только тебя смотрят но и ты смотришь компанию подходит она тебе понравилась ли тебе команда понравились тебе задачи процессы которые там выстроены и в целом как бы то как в компании например выстроены процессы не знаю там задачи те которые Или например Сколько человек в команде будет если тебе важно например развиваться и получать опыт А тебе скажет что ну ты будешь одним одним
01:21:13 - 01:22:31
единственном моё разработчиком Ну скорее всего Да ты можешь принять такой офер но скорее всего большого выхлопа от этого не будет опыт ты получишь определённо но не тот который тебе скорее всего будет нужен То есть работать в команде именно получать опыт от более старших коллег Ну этого будет не доставать Вот и ещё из таких наверное э Советов это не бояться задавать вопросы вот не бояться задавать вопросы То есть если ты не знаешь ответа ничего страшного Главное рассуждать То есть если ты понимаешь что
01:21:51 - 01:23:14
например Ну вот как например мы с тобой сейчас вот с юай ком разбирались то есть в целом как бы мы просто шли и разбирались по по ходу То есть например конкретного ответа У нас не было мы просто шли и рассуждали соответственно рассуждения чаще всего зачастую чаще всего тебя как кандидата Бут рассматривать не только там конкретно Если ты один вопрос Неправильно ответил всё ти ты не подходишь А тебя будут рассматривать как В целом как разработчика как сотрудника То есть если ты например рассуждаешь грамотно
01:22:33 - 01:23:40
понимаешь что ээ например на этот вопрос Да О'кей Я не знаю ответ но Например я могу порассуждать например ну из исходя там из опыта из-за того что например я знал прочитал э я могу сказать Вот вот такие вещи и рассуждение зачастую ну из-за рассуждения зачастую тебе просто даже больше могут поставить плюсик Угу угу ну это по большей части всегда собеседование должно быть как бы больше как в сторону диалога Я так понимаю конечно да собеседование - это всегда диалог то есть есть некоторые интервьюеры которые
01:23:06 - 01:24:18
просто задают вопрос и молчат да Такое тоже может быть к такому тоже надо Быть готовым но чаще всего всё-таки собеседование это про уточнение и То есть даже например есть ли задают какие-то задачи которые с непонятным ТЗ Ну то есть например как вот тоже я вот показала тебе видосик с видосик картинку с проектированием а то здесь как бы как раз вопрос в том что что приходит То есть можно как раз позадавать получить информацию полностью и только после этого переходить к решению конкретной задачи [музыка]
01:23:45 - 01:25:07
Да супер спасибо что так подробно ответила Я пока в чати в чатике не вижу новых вопросов Поэтому я думаю что можно сказать вам огромное спасибо за сегодняшнее интервью Артур тоже большой молодец что не побоялся пришёл сегодня на такой публичный Собес и Анастасии тоже спасибо что собственно его провела Мне кажется получилось Классно Здорово и надеюсь что ребятам кто нас смотрел было полезно и вы подчеркнули для себя что-то новое Спасибо что пригласили безумно было интересно попробовать себя в таком вот
01:24:26 - 01:25:34
попробовать такой опыт скажу сразу что это для меня первое такое собеседование то есть по сути за вот за всю жизнь у меня не было такого чтобы Именно прям интервью именно по I найти Так что спасибо большое за опыт это было интересно и это я возьму се 100% на заточку Спасибо Артур что пришёл Всё тогда всем хорошего вечера пока-пока Всё Всем пока
01:25:00 - 01:25:59