Подготовка к собеседованию на 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 каналы и чаты
Транскрипция видео:
всем привет меня зовут алексей волков вы на канале mobbiver ну что сегодня у нас я воскресил статусу рубрику которая называется онлайн собеседования и сегодня у нас будет собеседование очень интересно по двум причинам во первых это будет ios разработчик они android поэтому социальную получилось крайне таким необычным да в целом внутри моего канала потому что меня в основном android материала здесь как бы айос а вторых это совершены с разработчиком уровне семья и его в принципе можно воспринимать как и в том числе
00:00:00 - 00:01:00
правильные ответы на вопросы которые я задавал вот этому тем более кое-где поступил год человек даже меня кое-где поправил поэтому ему будет крайне интересно не забывайте что вы можете получить ранний доступ видео и также полноценным момента link в августе либо patreon оформив там подписку а также подписывайтесь на меня в других социальных сетях потому что там я выкладываю контент который невозможно по техническим причинам выложить на ю тубе такой как опросы различные там ответы на вопросы и так
00:00:30 - 00:01:28
далее вот ну а мы переходим к интервью видали привет как у тебя настроение отлично как сегодня с утра хорошо все же там где-то волнения какого-то так по мелочи есть расскажи немного о ну сегодня мы проводим собеседование техническое расскажи немного о твоём предыдущем опыте работы начинает самого последнего и скажем на 2 место до этого или на одну но у меня и тебя по компаниям не бегал в питере свой опыт 30 пирог от программирования начался давно в школе года года 2008 примерно занимался вайп разработкой и
00:00:58 - 00:02:24
до 14 года занимался ею последние по веб-разработке был проект который потихоньку начал сдаваться и у меня сюда было было желание научиться мобильный дрожжей она подается и потом отказ от меня это колодка в этот конь магией вот к счастью на тот момент когда я купил себе маг появились курс алексеевку доренко вот я по ним прошел вот и начал писать свои приложение принципе когда учился я не собирался и и на кого-то работать я хотел писать чудо-женщина свои свои продавать в обстреле как я написал 3
00:01:41 - 00:03:07
приложения потом web начал прям сильно сдуваться проекты и решил попробовать пойти на собеседование в it-компании пошел я на базе тех проектов которые я свои сделал которые уже в appstore продавались вот какое-то время виду с полгода там работа пришла компания с одним заказами не было условия то что они напрямую с разработчиком мучается и меня меня им предоставлено это была их ошибка они меня сходили в итоге эта компания вот ну там я ушел учиться со ступнями не не некрасивая в общем вот там кола компаний мобильной
00:02:25 - 00:03:56
платежной системы и дней работал с 14 года до 17 примерно там трудности вот некоторые трудности в компании и но не станет артур нас нестабильность и я решил попробовать денег 100 беседовать наверх думал я уже дофига опытные уже четыре года опыта было вот ходимо собеседования на синий ара думал я синди но с треском провалился беседования потому что моей ошибкой было то что я прошел первые курсы водку доренко начал разрабатывать да все получалось до nbc без проблем все окружение перевели все хорошо но
00:03:10 - 00:04:41
развитие не было это была моя ошибка это что я сторонился каких-то тебя уже опыт и ничем не еще учиться и учиться всегда надо это я понял что и по сей день учусь и новое что-то узнаем вот это был бы такой за ночь за ночью что я что-то не то делаю начал смотрите kinko's сэмплы проектов разных архитектуры понял что я вообще ничего не знаю ты что перебью от этого точным висит а только писал до семнадцатого года четыре года только на весь он там было немного проектов у меня всего проектов 5б таксол source и меняем
00:03:56 - 00:05:15
чтобы из 10 и там на продукт оунер и один проект соответственно одном проекты зачастую тяжело развиваться когда для нет у тебя не было такого что наши тысячу чувстве называет массив viewcontroller да конечно когда 5 тысяч строк кода в одном не было с область iqtour никакой вот так я узнала после этого этой встряски узнал про интерьера быстро млн до на никогда не сдавался подробность дал мне это не надо мне вместе достаточно все хорошо знал про какие-то архитектуры паттерны представления и так далее вот и
00:04:35 - 00:06:06
на эмиссию меня была проблема которую я не мог решить мне почему-то не стараться решить это с рокингем датами из иглы и с нее достаточно сложновато и выполнить какие-то вещи типа там depending и так далее узор координаторы роутер координаторы конечно решила в корне в су проблем вообще взаимодействие между экранами вот ну и вот когда как раз таки переходные периоды из инвестиций мы верим в той компании платежных системах там один руководитель ушел и и потянул за собой свою разработку и начали писать
00:05:20 - 00:06:49
новый проект q видеонаблюдения и там я уже с новыми знаниями начал новый проект вот полностью переродилась все мышление я понял смотри у нас сегодня будет специфическое достаточно собеседование потому что я не буду тебя спрашивать ну вернее буду но они будут вопросы по ходу до возникать между там условно чем структура от класса отличается такие всякие штуки вот я в таком режиме не будет будет маленько в другом режиме давай представим что у нас есть приложение на который является почтовым клиентом где мы хотим иметь возможность
00:06:05 - 00:07:13
я не знаю может быть ты пользовался spark клиентам да вот мы пишем условно клон приложение spark вот для удобства для упрощения мы сами с клиентов почты не ходим и ходим специальный нашей сервачок который кто-то нам написал заботливо но для упрощения чтобы не было вопросов реализации всех этих протоколов почтовых дамы это тоже касаться не будем представим что у нас просто сервачок который сам как-то разруливает эту тушу почтовую историю а мы просто ему там но засылай месседжи получаем с него мы с
00:06:40 - 00:07:44
джи и так далее вот собственно у нас есть такое условно техническое задание мне хотелось бы услышать твои рассуждение с чего бы ты начал с вот в таком случае может быть со сбора требований или еще чего то вот для того чтобы начать писать этот проект представим что опять же дизайна у нас какие то есть экраны все описаны ну то есть можно принципе приступать то есть чего бы ты начал так сначала начнем с того что нам нужно документация по отеля к северу вот у нас есть документация есть лагерь все хорошо
00:07:11 - 00:08:27
дальше создаем проект строим архитектуру проекта я бы выбрал для этого проекта чистой архитектура почему потому что периода жжение как сказать достаточно давай я буду рассказывать попробую тогда не перебиваю да вот у нас клиент-серверное приложение получается общение с сетью будет у нас сетевом слой да посади на флаге к вам будет демин слой ну если презентации вот этого чтобы тип предложения затем что касается тестирование построить юнит-тесты из кейсов которые будут у нас в бизнес логики ей тесты
00:07:49 - 00:09:49
написать сценарий который будет прогонять до приложение вот получается слайд презентации я бы сделано м гривен соответственно с роутером координаторами для троллинга между краями вот если интересен степов ремонтом которые бы использовал дата вы начнем наверное с презентация слоя я буду постепенно ну как бы задавать вопросы почему допустим в данном случае ты выбираешь им вниманием пеппи например а имбирём на мой взгляд на нем вены себя в нашем случае амели на мой взгляд лучше работает с реактив иной
00:08:59 - 00:10:35
очень удобно работать и то что у нас отделение такого отделения логике самого контроллера идет ну что дает более удобное взаимодействие но слышал может быть архитектуру типы вайпер вели вот клин свифт где есть и такая циркулярная связь типа viewcontroller презент рын трактор то есть ты закидываешь в антракте run президента ра тот уже вовсю контроллер даст и шабра вайпер с вайпером у меня опыта нету я знаю его принципа логику да но на мой взгляд пайпер и the overhead в какой-то степени и немножко проще будет
00:09:51 - 00:11:22
отработки а вот для ну то есть здесь в и модель я правильно понимаю и как будто там условно винный набор полей для ну вот для описания состояния крана правильно вот что ты используешь для реактивности в данном случае чтоб подписываться но вот эти состояния я использую реактив кит work у него разу нет ограничений на на ios нет не может быть путаю не может реактив какао и что а практике погоди этот имидж и drx нет но если рыкса если отливки 2 алекс форекс до более популярен для стирки но почему-то я когда принстона
00:10:38 - 00:12:10
практично были уроки по бунт реактив кит бонд эта настройка надо реактив китам а вот неполярных the rope я его использую вполне себе зашел представим допустим что ты не можешь ну так вот у нас сумасбродный заказчик не можешь использовать какие-то библиотеки он уже там нервного них реагируют вот и тебе надо самому написать как-то вот эту вот всю работу самим как будто это сделал скорее всего я бы написала базовую реактив чину для проекта вот и с неба работал но поподробнее то есть что что это за
00:11:27 - 00:12:55
классу были будет каких-либо общих чертах так но это был бы сам же кто-то был бы объекта я не знаю как в эликсира называется такой посылать сигналы без сохранения state а дальше observer был это тоже поставили сигналы а стейкам и эти две сущности они а еще сигнал есть как и песни сигнал который посылает сообщение и кого послать сообщение вот например у если мы делаем и сетевой запрос мы создаем сигнал сигнале мы вызываем next стоит у потом completion надевай лорда получаем вот мы получается требовать
00:12:15 - 00:13:56
этих сущностей было и всегда не исследовать наследовать от сигнал протокол базовых протокол который и требует послание два сигнала а вот у тебя получается неправильно понимают что вот в обзору был храниться только последний стоит или вся история стынет же хронотопа последние стоит они прострелили а если бы ты отправил ну скажем два одинаковых стоит у тебя бы это ничто не изменилось или бы ты перезаписал стоит как там выйдя написала оператор какой-нибудь ремонт дубли кейс который бы не только уникальное значение
00:13:05 - 00:14:33
продам не такой вопрос смотри на представим что у нас есть форма ну там не знаю логина например и это почему там нажал какое-то сообщение тебе нужно показать роль диалог какой-нибудь да там или еще что-нибудь таком духе вот и там при возвращении допустим назад да ты себе нужно показать его ещё раз зачем ты не знаю я пока просто из головы несколько фантазирую ну то есть он может быть ситуация когда тебе нужно сделать 20 то одинаковых фактически как-то с этим пусть справляться а не совсем я понял суть вот если
00:13:50 - 00:15:10
коллагена мы решили хотя дальше экран да ну допустим мы шли с приложения вернулись тебе нужно то есть смысл в том что иногда бывают ситуации когда тебе нужно тот же стоит показать ну то есть например там ну без сбрасывания состояния то есть тебе нужно показать допустим какой-то диалог а потом его еще раз и займитесь например ну или не диалог может быть какой то поле изменить а потом его ещё раз изменить с тем же значением да например то есть такие ситуации могут возникнуть или они у тебя не возникали в
00:14:30 - 00:15:30
принципе ну давай я расскажу как я понял может быть отеля неправильно понял допустимые великий значения логин пароль на желе выйти показалось ошибка дак это как табличка выскочил и она пропала потом мы когда выше из приложения допустим если он вернулись получили уведомление там что мы вернулись из фона на основе этом уведомление мы можем взять из этого из stay то мы увидим что встретив property допустим агент стоит у нас кейс террор и также займитесь его обратно и показать ну допустим что ты не сразу
00:15:00 - 00:16:32
взял стоит да а ты вернулся там тебя произошел в you will appear to мне важно то что вернулся и дернул еще раз запрос вдруг там что-то ситуация изменилась например а он тебя 5 error верну тебя получили ситуация когда тебе когда тебе надо за ебнул воспроизвести что ли последний стоит то есть опять показать ту же ошибку ну да в таком случае я не использую и мне каждый имеет значения будет будет послать его то есть конкретно для этого экрана получается ты его не будешь использовать ну да можно ли это сделать для конкретного
00:15:46 - 00:17:00
элемента например view моделью потому что она может быть ситуация когда где-то это по-прежнему надо где-то это не надо ну то есть 2 экрана это нужно где-то нужно чтобы и дубли kirova здание дуплицировать где-то нужно наоборот но по умолчанию observer бы сабжевый будет лететь без удаления дубликатов если это необходимо в их цепочки подписи под этот обширные было ли это джек мы ставим риму дубли кейс и все что идет после ремонта является но они не месяца три пользуется там где это нужно соответственно я понял ok давай
00:16:26 - 00:17:51
немножечко теперь к viewcontroller у ты бы использовал что для верстки то есть ты бы кодом мир стал или или чем тут будет зависеть от предпочтения заказчика если он технически подкован мое мнение это верстка в кассе бах я люблю xibahe ждать я не вижу смысла и верстать в коде в том плане что разрастается все равно кодовая база а восприятие экрана намного проще в к себе известную готовить говори короче тут есть минус большой то что если будет команда какая-то и будет code review the очень сложно читать делать
00:17:10 - 00:18:54
падре view по активам по xml can потому что не все их могу читать но есть на самом деле посмотреть они не такие сложные проблемы то потому что там идентификатор или хэши достаются такие случайный набор символов в принципе они не сложные но там мир - мир джим не был никогда проблем вот а были проблемы с миром до того момента пока я не переехал полностью на нём в каком случае когда у нас на один экран свой клип на одну ячейку свой тип бирже когда у нас таблица например в этот tablets no key данные ячейки сразу сториборды
00:18:02 - 00:19:22
нескольких ячеек они накидные кто-то там что-то делает это меняется вес туре вот так он кучи да конечно куча проблем с мерчем а когда одна ячейка один exit соня каких проблем что не возникает они там небольшие там по 50 строк и для к себе выходят xml окей у нас если вспомнить парк это вот с кровью да ну ты был выверни с каким-то огромным количеством различного вида ячеек ну то есть там вот всякие разные да есть папочки пропуске там не знаю профили всякие так далее как вот волос реализовать такой список с большим
00:18:42 - 00:19:58
набором ячеек так у нас есть таблица и просто разная теперь когда ну да там часть из них возможно давай так еще чтобы усложнить задачу часть из них должна например закрепляться когда ты вскроешь ну скажем у каждой секции есть заголовок какой-то мульти accounting даты может 5 аккаунтов 6 прикрепить чтобы человек знал при скроле сейчас каковым секции находится так ну начнем с того что секция закрепляется автоматически и снова необходимо реализовать хедер костанай да мы просто делегате билл хэйдер тем собственных игр что
00:19:20 - 00:20:51
касается файловой структуры если которые не давать этот есть у нас сцена папка сцена то есть экрана в ней нее есть прибыл usals и в этой группе идут уже для каждого типа своя группа которая соответственно хранится view model ищейки кассе печеньки и сама ячейка наследования от ей ты был а вот ну это всё надо ты был вьюгу засунуть то есть но просто делается регистрация этих типов в таблице давай сейчас маленечко отойдем от нашей задачи представимся более сложную задачу не знаю тебя там условной вконтакте или
00:20:05 - 00:21:32
twitter лечат вообще да где у тебя там не знаю 50 видов 60 видов ячейку тебя просто будет невероятно огромный класс получится как в таком случае лучше поступить а класс регистрация ну да и ты у тебя будет прям куча регистрации и вот сел фура у тебя тоже разрастется до потому что какие-нибудь условия наверняка типа здесь вот так для этого эту проблему я для себя решил у меня есть библиотека она достаточна небольшая по работе с таблицами kollection view суть ее заключается в том что в есть строка builder это класс который строй
00:20:49 - 00:22:20
структуру он на вход себя принимает массив секция и секция секции это та же структура инфекции есть поле роуз дам мы записываем строки которые необходимы это могут быть любые типы любые типы ячеек вот мы встроим массив этой структуры которая нам необходима и его передаем в стране контроллер транша контроллер расам и высчитывает разницу между прошлым значением и новым на основе я реализовал на основе hash hash игру протокола там у каждая модель ячейки есть идентификатор ищейки например это письмо дал без на
00:21:35 - 00:23:12
есть идентификатор вот это первый к контент и деньги their извините перебью а если допустим мы говорим о заголовке до каком нибудь у которого ну нет идентификатора тебе его надо руками то есть ты просто какой-то сам прописываешь ручку ручками prom.ua эта секция поддерживает кастомные и заголовки тоже тоже заголовка есть модель также также она привязывается к секция секции есть индикатор свой вот и таким образом получать это канал не разруливает обновление изменения ставку и так далее он не если мы
00:22:24 - 00:23:50
две разные структуры удачное изменили например какой то какой то ячейку да какое то значение это модель изменили он увидит что изменено только это ячейка и обновит ячейку без перезагрузки каплица это наработка у меня уже есть сам написал давно моим детей есть строка kit вот можно посмотреть ребят масочку обязательно ставим в описании поэтому мы пойдем немножечко дальше угги из уж и круто на самом деле то есть ты получается реализовал отверну вдохновлялся как-то свифт его и когда это делают это будет самое смешное было
00:23:06 - 00:24:26
то что я это реализовался примерно полтора года до светлой и смотрю как они тоже там и т.д. файл туда протокол г он работает точно также общались давал это за полтора года до сих пор ну это круто да это просто когда же рассказывал подумал . похоже на декларативно то есть вы как бы вы считываешь div да и на его основе уже не надо я понял окей хорошо представим что мы залили наше приложение в prada и вот нам начинают юзеры вдруг писать этом приложении там отстой она тормозит у меня телефон там iphone 13 про на нем
00:23:46 - 00:25:03
даже лагает вот как в таком случае найти в чем причина так но для начала мы должны найти сами воспроизвести эту ситуацию если мы видим какие-то лагин евро при скроле до часто бывает когда scroll тяжелые ячейки тяжелые мы с кролем и этот шов получается тут мы используем time профайлер с король и мы смотрим сколько времени каждая операция выполняется например меня был из опыта было то что я при создании и функция если базовый а базовый доход смотреть все по роботам expansion у меня было огромное количество данных и при
00:24:25 - 00:25:51
скроле там указывался жить и жить в картере создавался и это вроде бы кажется несложная операция но по факту она образовала слайд-шоу вынес вынеся это константа статическую переменную статическое значение tremens риска значение это сильно улучшило производительность и таким образом чистым профайлер я оставил кучу таких проблем и сошел на при полностью ушла а почему вот так происходит ну то есть почему какая эту конструкцию шрифта или можешь впечатление какие-то подрывают к слышу можешь объяснить механизм да
00:25:08 - 00:26:17
конечно потому что в приложении есть сером лук отрисовка интерфейса происходит в основном ран лупи и получается рам опыта что у нас это просто wilder в приложении идет идет операция и когда она сложная операция допустим подгрузка шрифта до scroll это как каждое движение скролла происходит на каждую итерацию рам лупа вот и если какой-то где-то в середине мы инициируем шрифт и в этот момент сковал должен двигаться естественно он затормозится пока операцию принц инициализация шрифта не выполнится искал
00:25:43 - 00:27:01
башни подружиться ok бой ну спасибо так давай тогда немножечко теперь в другую сторону от в ее модели в сторону данных то есть ты упомянул кейсы и логику вот дата слоя можешь как-то подробнее описать там из каких классов взаимодействий все это состоит да начнем давай сначала с наверно дата слоя где у нас будет походы в сеть до гитлер вот там ну если взять стек а какой с таким прибор который будет использоваться я бы используемых в m-files для авторизации бы использовал из головы вылетело метровая как называется на адаптере card
00:26:22 - 00:27:59
data вот они походили в сеть так как у нас я ранее упоминал что я бы использовал реактивный подход да даже сам описаны все запросы бы реализовал сигналах у каждого допроса была бы такая намче cladding стоит у которого была бы три кейса logging loaded с ассоциативным типом получаемого значения и файлы с ошибкой которую нам возвращает a fairly наш сервер а файл без без типы просто плывут вниз с типом конечно на высоте натягом ошибки и ошибка которую в лучшем случае конечно базовый составу указывать ошибку а потом
00:27:13 - 00:28:55
уже и и разворачивать по кейсам непосредственно в модели но можно использовать если это у нас loading стоит то конкретную ошибку и спонсоров до которая непосредственно к сетевой задачи вот это что касается даты слоя но так когда у нас почтовое приложение нам нужно чтобы письма были еще пахло недоступны дома в этом же дата слоя можно использовать куда базу данных из таких локальных мне известных это иски лает можно использовать прям хардкорно базовый скрывает данную не особо это кому то интересно
00:28:04 - 00:29:38
затем cordata который носки лайки построим или рену а из них перебью маленькой 5 мог бы ты сравнить плюсы-минусы подхода рифмы и курда да я сейчас хотел их liloma хорош тем то что мы не рисуем ее структуру визуальные да а мы создаем сразу модели это уже является структурой вот квадрате нужно арестовать ответ структура но корр дату не надо импортировать не надо и компилировать она уже готова к системе вот [музыка] это исчезнуть рифма по бенчмаркам вроде как сильно быстрее курта ты ну я так понимаю это на
00:28:51 - 00:30:31
огромных объемах данных вот ну письма это в общем то может быть и огромный объем данных и совершает а вырасти летняя история да значит такой вопрос вот письмо часто кладут аточа какие-нибудь ну там картиночки или еще что-нибудь стал бы ты сохранить картиночки в базу данных или нет нет база данных нет конечно я бы сохраняла reference от заданных на грядку мигает на байлово и хранение в таком документ директория окей ну то есть но в принципе ты бы стал хранить картинки то есть на там день тих в галерее ли еще ну там куда-нить их
00:29:43 - 00:30:53
складывать смысле в этот сын бог с приложениями виду а как же вот то что она может разрастись там и так далее но тут соответственно мы смотрим на можно приложение реализовать какую-то надо тут настройку по ограничению занимаемого места вот и удалять старые по приходу новых также можно реализовать механизма загрузкой информации по открытию письма обнять эту информацию что эти весьма написано к это письмо не открыли кому интересно это не загружаем причем но так цикличное ударение дано под определенный constraints размера
00:30:19 - 00:31:45
окей хорошо давай туда вернемся кишки и суммы вот этому чему-то бизнес 100 нос на каждую ст-1 каждый тест на действия у нас должен быть узких получение списка песен мы создаем мир skillz методом execute котором в какими-то параметрами выходными мы получаем письма и возвращаем какие данные в сигнале опять таки вот ну не интересует вот зависимости классу из кейс то есть ты туда напрямую будешь передавать ремонт datasource сокол какой-то или у тебя будет еще одна абстракцию между ними ну конечно нельзя
00:31:01 - 00:32:30
передавать напрямую нас в dat-ар слова должны быть интерфейса с которыми они должны с которым и escape сможет взаимодействовать a-data слой будет зависеть от бизнес-логики слоя и имплементировать интерфейсы которую необходимо мы камин а вот я пытаюсь передать условия что за сущность такая которая вот эти интерфейс имплементировать такой-то класс отдельный до внутри которую но например а у нас gateway получения песен сервера мы получаем создаем какой нибудь [музыка] допустим окей сервиса репозиторий да
00:31:46 - 00:33:06
вот ионными как бы ни были имитирует интерфейс необходимые с кейсом для получения получения писем фич и класс репозитория имплементировать получение языке и он ходит у него уже есть зовет качестве зависимости клиент настроенного ему fire потом там ходит туда какой-то сервис который находит сам сеть а вот вот это все вместе как бы ты организовал ну то есть это у тебя получается достаточно такое большое количество зависимости вложенных одно в другое как бы ты это реализовал с точки зрения вот инъекции во view model например то
00:32:28 - 00:34:00
есть был какой-то dio или может быть да конечно сен-жерве использовать сам кулер от и но если вы допустим обойтись без диафрагма как будто делом но написал бы такой диалог но можешь поподробнее вот представим что ты его надо написать и чего бы ты начал так но у нас должен быть контейнер который будет содержать в себе и france и которые нужно необходимых лимитировать в этом контейнере мы должны с контейнером и должны регистрировать классы которые будут вызываться вот там будем регистрировать на основе наверное a
00:33:14 - 00:34:43
dictionary доклад будет ключом является тип и значением in constant а вот когда мы получаем зарисовываем какой-то элемент он будет ведь резеро ваться из контейнера и записываться если это например мы хотим его инициализировать сервис как синглтон вот он судит могут сохраняться если нет то каждый раз на будет [музыка] константине ровать новый объект а если допустим ты хотел бы это как-то по стопам разделить ну например вот жив какой-то класс да и там все его в это время там типа все его наследники все
00:33:59 - 00:35:22
это же как у такой локальный как бы синглтон такой получается именно к волге и модели с ее модели жили бы сервиса до которые ну да да да то есть пока вот ушел с экрана все это помер ливия ну ну если например мы им пленительного какой-то дискет да он активируется для конкретной модели на будет сильная ссылка на этот узкий из при уничтожении модели соответственно уничтожится окей пускала сильная ссылка какие еще ссылки бывают слабая ссылка а ч ну да слабы в принципе на и славную через такой анонс
00:34:42 - 00:35:56
различие в том что оно сразу развернутом она но она не безопасно почему почему не безопасно потому что при обращении к новым уничтоженному объекта мы получим краж для чего вот вообще механизм нужен боец с этими слабыми ссылками и так далее ты по в андроиде он тоже есть но не так часто как вы используется от вас куда ни посмотришь везде в excel в excel до захват дана сила в том что какому-то объекту нужен какой-то объект да он на него создает сильную ссылку он его держит вот если мы посмотрим на
00:35:23 - 00:36:51
паттерна делегатов то делегаты у нас захватываются сладость ссылка а если мы сделаем делегат например сильной ссылкой то там может произойти get inside out и только такое будешь рожать ведь к памяти когда у нас два объекта друг на друга ссылается сильно селькой примеру у нас есть давайте посмотрим самая базовую вещь это ты dvd и гепард роллер viewcontroller должен вам записаться в делегат таблицы вот если бы делегат был сильной ссылкой то у нас произошла утечка памяти потому что не смог бы уничтожить сами
00:36:10 - 00:37:36
viewcontroller не таблица точно не друг друга держит и это может быть не только между двумя объектами может быть цепочка там 100 объектов по кругу с самим собой связаны и нас получается . но ты говоришь что своей пера не работал просто этот аромат на довольно такая распространенные проблемы из-за вот этого круговой штуки бывает такое что ты неправильно настроила те там целая цепочка объекта живет на а вот почему она живет то есть я пытаюсь понять вот внутри до как в ios устроен этот вот механизм то есть ну ссылаются
00:36:54 - 00:37:54
два объекта ну допустим андроиде он тоже ссылаются это не мешает сборщику мусора их собрать ее вы кинетесь на них там из корней никто не ссылается вот какой остров ованес получается у объекта которые держат сильную ссылку насколько я помню в самом объекте он ссылается непосредственно на адрес объекта а слабый он стартовая версия то они работают на таблица и сама объект который на которые ссылается у поесть и таблица которая держит эти слабые ссылке вот но а вот вообще что что нужно сборщику мусора чтобы собрать объект какое
00:37:24 - 00:39:06
условие должно быть выполнено но на него не должно быть стильных ссылок чтобы он уничтожился вот может ли быть ситуация что объект один из ссылок на счетчик ссылок там ни один раввин допустим а объекта россии два объекта нет объект один на счетчик ссылок больше одного ну я про литейными виду наверное совсем кейс понимается школе он работал ли ты со мной внутри мануальным подсчетам ссылок а не ты пришел тогда был шерсти но я больше рассказать как там хотя бы до када она создается объект если мы напишем и создали объект если вы
00:38:15 - 00:40:02
звали сразу релиз но он сразу уничтожится есть такая штука как of the release он уничтожается когда проходит цикл равно по конце цикла уничтожается все объект который были of the release вот есть еще of the release по в swear те его можно использовать например циклах когда мотоцикле и тонируем какой то объект и если мы не будем его обворачивать повтори spool допустим у нас миллион циклов своем картинку да и у нас будет 1 миллион и и птенцов оперативной памяти если мы обернём of the release пул то у
00:39:11 - 00:40:28
нас каждая операция будет объект уничтожаться объекта уничтожаются когда они выходят из колб а если на них нет никаких ссылок окей хорошо давай теперь тогда маленечко в другую сторону пойдем представим что мы пишем пишем пишем приходят нам заказчик говорит у меня у племянницы тети любы короче чувак написал шикарную библиотеку вот в баре берию используя но она написана на обжарьте все сказать как нам настроить взаимодействие светового кода с джипси все так но мы посмотрим как это библиотека на предоставляется если она предоставляется
00:39:50 - 00:41:12
какого под без проблем и ставим а как в поди под файле edius фреймворк геев призываем эту библиотеку и она импортируется без проблем конвертируется свифт если это просто набор файликов я бы создал новый таргет с типом фреймворк все это засунул в этот таргет и также мы бы спокойно импортировали этот фильм work и он бы сконвертировал все сожрет все интерфейсы в руки круто давайте такую ситуацию представим что по ходу развития приложения популярных видел анну развивается и мы хотим начать делать серию приложений да то есть сказать
00:40:31 - 00:42:04
несколько вот что еще какой шаблон не совсем так грубо говоря еще одно приложение в котором часть из вот этого предыдущего приложений используются например страница с и не знаю там списком ящиков твоих или страница авторизации или страница с профилем какой-то кусок твоего первого приложения мы хотим за использовать по второму вот как бы ты поступил так тот опять же может быть несколько подходов 1 если нам не нужно выходить за рамки текущего проекта мы хотим чтобы несколько приложением были в одном
00:41:18 - 00:42:28
проекте до в одном workspace и мы можем эту функциональность вынести в отдельный торги по пять таких ренборг вот и за использовать в другом приложении а если мы хотим чтобы это ну как это разные команды работают фактически и ну нам надо просто чтобы сказать у них там свой какой-нибудь представим что это подрядчику у них там им удобнее чтобы никто своем это репозиторию лежал и мы хотим просто шарить этот ход на несколько оптом также можно через приватное какого под это реализовать у картировать зависимость nokia я пойду
00:41:53 - 00:43:05
окей так давай мы маленькой на самом деле не обсудили еще один вопрос вопрос касаемый многопоточности моего косвенно затронули когда лагающий из круглые обсуждали да но ведь нам надо запросы как мы выяснили уже чтобы нам это сложной операции не делает внутри даже не сложности эту скорее то что ты ждешь выполнения нам нужно как-то реализовать вот эту историю то есть чтобы у нас запросы ходили как-то в отдельном потоке представим что я знаю что вам affair дискач сильно облегчает жизнь и представим что у нас нет ни ломов они
00:42:28 - 00:43:27
реактивных подходов давать самым базам таком ключе как бы мать до нового сработать степень очень хороший пример потому что у нас и rss да они да ну допустим даваемый в таком случае можно создать очередь добавлять к сохранна выполнять какие-то запросы в этой очереди соответственно при получении результата мы можем обратно возвращаться в основе каток для того чтобы отобразить на и у нас есть штука которая нам во всей этой истории помогает g сиди да то есть можешь подробнее рассказать что это такое вообще и какие там есть примитивы
00:42:59 - 00:44:25
ну grand central dispatch это ампер тока на session импе thread вот петра да я не разбиралась меня собак небо не знаю то что обертка вот какие есть у нее особенности муза можем создавать мы создаем очень важное замечание месяце мне потоком создаем хочет на поток и тодес пачки создавать мы ее можем с разными уровнями приоритетов их 5 если смотреть ну наверное да давай назовем ты про мультисервис правда так первый это дефолт по умолчанию второе utility самый низший приоритет а потом у нас идет а юзеры
00:43:48 - 00:45:23
лице этот ролик секс приоритет также юзер интерактив 5 блин пятницу [музыка] не могу вспомнить помню их 5 5 5 по моему и по моему интерактив это самые топовые игры дарят кидать за готового 2 юзерами сайтов дальше [музыка] аромат багрон да точно да бэкграунд 6 ok у нас там есть вот мы можем грубо говоря на kasing да и sing сделать но вот конкретно там ума и ну например это дали в чем отличие но а суть нет не то что в мае на не мейна мы не можем стинг вызывать на своем же потоки потому что произойдет на что такой блог блог это
00:44:35 - 00:46:28
когда поток блокирует сам себя и не может освободить ресурсы для продолжения выполнения к этой операции а как это получается походил по току есть ресурсы как он может сам все заблокировать ну куда идет какое-то выполнение действий мы вызываем sing вот и для того чтобы выполнить какой-то блок из sing запроса до нашего ему нужно чтобы прошла операция текущего потока и он смог зайди missing а он не сможет потому что насинг уже заблокировался и он дальше не двинется а может быть ты ещё встречался с такой вот проблемой
00:45:31 - 00:46:55
когда работаешь на coupe точностью как раз кондишен да конечно это когда мы ставим атрибута очереди concord и если мы призываем 50 раз одну и ту же функцию ей результат мы не можем придать переопределить как бы будет в итоге хороший пример это если мы а функция на пустим али плюс равно 1 до вызове 50 раз то мы не получим 50 до на самом деле у нас была страшная ситуация когда мы сталкивались с кондишен а когда у нас короче иногда очищался самопроизвольно список покупок вот и это происходило как раз потому что мы должны были очень
00:46:14 - 00:48:00
асинхронном режиме синхронизироваться сервером иногда происходило ситуация когда юзер успевал раньше натыкать какие-то действия а нам для этого нужно было полностью очистить весь список ну короче история да на как вот вообще в принципе бороться может быть как утечки это наработки как ты борешься с такими ситуациями тушь на пример со и понятно он очень такое как сказать логичный объясняет ситуацию но в реальной жизни вот происходит как правило как я сейчас рассказал то есть когда вообще-то не по
00:47:07 - 00:48:05
и меня просто список очищается иногда ты сам даже еще воспроизвести толком это не можешь тебе скорее всего об этом юзеры говорят вот и как таких ситуаций быть но тут то надо посмотреть если в принципе работа с кантором очередями в первую очередь найти и ну и конкретном случае уже смотреть это место то подробно рассказать сейчас не смогу что-то я бы смотрел начал осталось поиск как и очередь у нас выполняется параллельно окей ну представим что то нашел критическую секцию как нам исправить эту ситуацию возникшую срыв
00:47:36 - 00:48:57
кондишен а можно локи поставить и на слуг ok так и 3 на самом деле чувству к про которых это спросите the priority in вершин может быть тоже с таким встречался ли слышал хотя бы тоже версия приоритета окно даты случается когда какое-то поле низший приоритет а больницу по эта операция выполняется раньше более высокой как дойти до операции а почему это происходит мое предположение происходит потому что более низкое раритет операция началась раньше ну началась началось разница как это мешает работать в сторону потоку который
00:48:16 - 00:49:58
с более высоким приоритетом [музыка] ну там на самом деле просто она началась раньше что все правильно кришна просто захватила какой-то ресурс который не отдает более высокий приоритет нам и он ждет пока выполнится низкоприоритетным окей на самом деле не страшно возможно потока связано потому что мы не бесконечна был потока получаем нет наверное скорее связаны с захватом опять же грибы какого-то общего ресурса который ты заложил и не отдаешь соответственно вот давай пойдем туда в сторону fair бейяза
00:49:07 - 00:50:18
и работал ли ты с тренером ну в том плане что август review шиндо крошите когда от базы данных firebase нет ни ну база данных бог с ней меня интересует на самом деле пушер то есть когда как вот работу с пушками здесь атэс в организм не работал как куда дел интересно место об этом позже реализовал рассказать про ферби там скорее рассказать про нюансы которые возникают при работе с пушками так а но нюансы начинал стала самое главное это разрешение от пользователя получить что бывает очень сложно верни
00:49:47 - 00:51:07
все хотят это какие-то мигают войны лучше чтобы чтобы он тебе дал разрешение так но нужно во-первых описать очень подробно почему мы хотим их использовать второе хорошо нужно сделать какой-то по-хорошему зерка это экран такое я войду который обещает а чем пуше выйти в следующем экране вас запросто туши нам это нужно для того для того вот если пользователь запретило использование уши и повторно мы запретили запросите уже не можем мы можем только предложить ему садить настройки и включить их большого
00:50:27 - 00:52:00
вот но в принципе то с разрешением все единственно что наверняка это тоже так делал что обычно привязывают какой то не то что обычно еще надо привязывать это целевой кнопки ну например нажимаешь на не анти говорит нам понадобится уши чтоб этого сработал это такое да ну да а вот с точки зрения консоли firebase скрытом все поинтереснее конечно горбатенко кто напрямую отправляет пуше в ios или или нет наверное я подробно не смогу ответить но я знаю то что когда мы регистрируем девайс talkin' от фрб r-bass это
00:51:18 - 00:52:39
помечает то что он дату sanbox или релиз и когда мы как бык делаем запрос на talking когда отправляем даем владивостоке но нам его брат отдает свой токи вот когда бет отправляет пуш на talking rb за 1 сам разруливает куда он шлет в сам бокс или в продаже я и минуту скорее там было любила люди вот эту возьмем боль сертификатами то есть а ну это сертификатами раньше было пока они сделали такую же стабильно по ключам реализация ok представим что мы хотим сделать де пленки в нашем приложении чтобы как сказать мы могли там сразу на
00:51:59 - 00:53:35
письмо переходить или сразу на нужный почтовый или даже сразу на нужного пользователей и так далее как бы ты сделал если использование каких-то сервисов да можно и сервисами принципе ну например по моему об слоя это делает работает клод догнав sla вот хорошо создает универсальные ссылки а потребив шим это называется когда мы можем до установки приложения получить какие-то данные сразу анализировать пользователей что добавить вот а вот эти есть момент один такой вот нюанс до который что в ушах что возникают у представим
00:52:48 - 00:54:12
что приложение вообще полностью закрыта да и тебе нужно ты там поди пленку либо по ушам перешел тебе нужно какие-то данные выцепить из этого пуша либо там из де пленки и так далее вот где это в делегате делается так там use рекшан мы получаем объект из которого мы можем получить тильде клинка это ссылка или поощрены млини дословно не только не зову там finder что-то там и даже окей так из голова вот я вспомнил феррис главу немного выпало смотри у нас приложении есть несколько пользователей да вот то
00:53:33 - 00:55:00
есть мы хотели хотели бы сделать чтобы у нас не только было у одного пользователя несколько ящиков но и просто в принципе несколько юзеров там а потом еще и плату за и так взимать очень коварно то есть за всех юзеров новых вот как бы ты реализовал это с точки зрения вот логике то есть как хранить несколько юзеров как ним привязывать почты мне интересует как база данных в данном случае бы работала и вот так база данных ну во первых у нас есть сущность юзер которая на базе данных и у всех объектов которые относятся к
00:54:17 - 00:55:28
конкретному игры соответственно есть связь и один-ко-многим бог пользователям вот как работать внутри приложения перемещаться между пользователями это в этом очень хорошо поможет dependency injection когда мы можем если у нас есть какие-то синглтон и в приложении и на синглтон и инсценировано черепами снежинка не через статической property а именно в рамках контейнера вот мы можем дропать контейнер при переключении и соответственно мира для нового пользователя сервиса окей оу допустим now they список писем да ты тоже хранишь
00:54:53 - 00:56:14
базе данных они как-то не от по отдельности хранятся или у них есть признак который отвечает за пользователю как у котов ну а письма было бы поле user1 кто не то есть ты был связан именно появится радио дней и к ящику еще видимо тоже относящийся день ну да если ящик не касается и задней оси юзер ящик письмо так а где бы у тебя хранилось вот вот эти все фильтрации да типа отсортируем не по юзеру по вытащи по ящику там вытащи по юзеру и по ящику вот из твоих слоев где бы это все находился и так бы выполняла docs слой
00:55:33 - 00:56:55
принимал dns среди кейт скейт а вот виде skay соответственно не получится такова что он выполняет роль ну по сути никого маппера просто то есть проксирование запросов кейс да ну то есть что что какая работа в успехе в таком случае происходит из-за нее все репозитории фактически делают и нас пытаясь ответить ну то есть я просто ты согласен с тем что там пусто будет или может быть ты не согласен с этим тебя просто переадресация будет ну да может быть опять же может быть ну да в этом случае такую мысль того что наверное предикат
00:56:13 - 00:57:39
посмотри предикатов б у нас создавались с кейси а уже готова предикат большого репозиторий ну то есть скейт бы назывался типа дай мне ящики для юзера или когда а сам предикатов константе нация и форматирование предиката было из кейса а снаружи ты передал бы только из рэди про все равно выглядит как будто дополнительный класс для этого слишком лишние типы но это можно его в ее модели в принципе делать в чем здесь польза от в лесах ну да написал extension какой-нибудь там туту предикат грубо говоря и все но тут а больше в
00:57:06 - 00:58:24
том суть какой-то сохранении общей конструкции приложения что строгих low разработки даже если и эскиз выполняет какое-то одно простое действия пусть он будет и он будет и приложение gusto целостная чем одно что-то делает как другое что делает так окей такой вопрос работал ли ты свят лентам очень давно в последнее время не лет пять не работал нету линтона проект никак как вы договариваетесь о ну там с какого размера функция должна быть файл или бани договорюсь просто есть какое-то такое воздухе
00:57:46 - 00:59:10
летает понимание то есть я могу грубо говоря если я приду там с функцией в 500 строк мне скажут брюггена естественно скажется что нельзя то есть какое-то ограничение из просто ныне регламенте акио ситуации вот когда все таки you space действительно полезен и несёт в себе огромную нагрузку может быть пример привести для чего он все-таки нужен таком случае например мы выполняем какую-то авторизация пользователя dice кейсы эскиз транспорта логин до твоих в этом весь кейси мы сходили на сервер получили данные сходили базу
00:58:28 - 00:59:43
данных сохранили эти данные и в итоге отдали пользователь уже объект база данных не ремонте диалог они выглядят так . репозитории получаются это всегда связь один к одному с каким-то источником данных правильно понимаем может так school а слышал ли ты про конструкцию когда репозитории эта связь с несколькими источниками данных и из кейсов да как объединение нескольких репозиториев курс кейс это наверно как interact более кстати можешь как ты понимаешь отличием сформулировать между interact араму
00:59:06 - 01:00:21
эскизам моем понимании в interact arrays- много функция которая выполняет какие-то действия виз кейс у него всегда одна цель одна одна функция а вот для чего мы вообще делаем вот это все разбиение по слоям вот это чистый архитектуры не знаю там функции чет объема постоянно то есть мы понятно грубо говоря что там 5000 строго viewcontroller не очень хорошо но в целом вот так сказать для чего вот это вообще все то есть придумано но это некое соответствие solid принципам usb для расширения для возможности неограниченного
00:59:46 - 01:01:21
расширения проекта а вот операция проходит хотел услышать вот марш вкратце все пять принципов назвать там принципы и кино и ответственности и так как опять-таки куске льда должна выполнять только одну какую-то функции ничего более дальше это открытость и закрытости принцип его суть в том что как обычно какой-то пример курили отёку мы сделали изначально какую-то какой-то интерфейса мы должны его изменять в дальнейшем чтобы не поломать проекты других пользователей что это зачастую нарушают переходя от одной версии это очень была
01:00:33 - 01:02:09
ярко выражена когда скакала между первой второй третьей версии свифта когда проект и все рушились полностью ну да вот дальше принцип подстановки лисков а там суть в том что класс наследник примеру оклад наследник не должен делать меньше чем класс родитель ломать класс родители дальше идет у нас разделение интерфейса тут к примеру можно привести давай из такого школьного программирования есть у нас животное да она может летать прыгать бегать вот и по хорошему все эти функции разделить на разные интерфейсы танкян свинки андрон
01:01:21 - 01:02:53
никогда не я а вот израиль на проекте винишко любого из реального проекта может какой-то привести критерий которую тебе однозначно бы сказал что все пора интерфейсу разделять это такую больше ну не строгого регламента раем профессии разделяется но продавал список ну да patcon теперь члены тоже ну названа когда когда в протоколе появляется уже разного функциональность допустим чтении и записи до какого-то объекта должен уметь читать и записывать у нас должен быть отдельный интерфейс на чтение отдельно интересно записи
01:02:08 - 01:03:25
ну киев я просто скорее клоню к тому что 100 бы начинают появляться по всему проекту как правило и в таком случае возможно есть смысл уже разделять протокола ok rock принципу д да и там последний принцип инверсии зависимости суть в том что модули высокого уровня не должны зависеть от модуль низкого это к примеру наши клин архитектуре и смотреть на том что у нас домен слой не должен довести когда-то слове когда между ними стоит интерфейс руки и я на самом деле не придумал как это вплести чистильщик поэтому чем
01:02:45 - 01:04:13
структуру отличается от класса ну тем что страх surely you close у нас структура были type-s капец то [музыка] тут хотел пропиариться знать про чтобы его дуло измени купим раз когда структура не копируется копируем адрес и капец изменяя структуру и или reuters когда объект один он не копируется а как все на самом деле это все что я хотел спросить по большому счету спасибо огромное за ответы очень рад был побеседовать вот надеюсь как сказать людям тоже понравится пишите в комментариях возможно какие то не знаю там вам не
01:03:30 - 01:05:25
понравились ответы или вопросы я тоже как бы сказать натупил сегодня знак на местами вот поэтому пишите обязательно в комментариях мы все обязательно почитаем и виталий возможно даже где-то что-то прокомментирует вот если ему это захочется делать вот с вами были все глотков и виталий мы сегодня у нас была он-лайн собеседование всем огромное спасибо и пока-пока
01:04:31 - 01:05:17