Подготовка к собеседованию на 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 каналы и чаты
Транскрипция видео:
а вот Окей давай тогда я коротенько Пройдусь по программе Что будет сегодня значит будет iOS интервю будет состоять в принципе из базовых вопросов так как это джинов ское интервью я всё-таки ориентируюсь на вот позицию жена около У тебя есть опыт при этом плюс плюсовой поэтому я думаю можно будет что-то поэкспериментировать по вопрос какие-то более знаешь вопросы скажем так за программирование в целом Я в состоянии можно тоже спросить помимо чисто Свифта Вот и собственно да то есть сейчас мы с тобой представим дальше будет будут
00:00:00 - 00:01:35
вопросы теоретически практических заданий не будет ничего такого не буду давать в конце выделим какое-то время на вопросы от тебя или всех кто смотрит Окей хорошо давай тогда я начну представление значит Меня зовут Эльдар я разработчик порядка 7-8 лет опыта у меня разработки работаю в компании Story вот много много что где делал Вот мои видео На ютуберс таких вот ивентов если хотите Это я так что про тебя Анастасия Так что же сказать я закончила бакалавр в двадцать втором году у меня около 3 лет опыта на плюсах
00:00:49 - 00:02:32
и сейчас я пытаюсь переучиться на свиф и найти работу на свифте потому что так ну мне хочется развиваться в направлении мобильной разработки и хочется попробовать что-то новое вот если кратко то так Класс Класс классный опыт на плюсах действительно будет интересно как как на свиф это потом ложится Окей давай начнём тогда с технических вопросов сойдём с самых основ и будем постепенно повышать градус в этом плане будем смотреть Как глубоко или Широко ты понимаешь Знаешь радис ой давай начнём с типов самые
00:01:47 - 00:03:18
простые вопрос типы в свифте вот Назови мне Перечислите пожалуйста какие у нас есть типы СФ а получается есть value Type есть reference Type к reference Type у нас относится классы функции замыкания а к val Type относится структуры ямы и базовые типы вот также у нас val Type они создаются в стейке а reference Type а они создаются в куче и а допустим когда э у нас есть reference Type он у нас а копируется Ой он у нас ссылается и то есть например если у нас есть переменная а переменная Сейчас если мы если у нас есть
00:02:33 - 00:04:07
переменная reference Type и мы допустим захотим её изменить то она у нас изменится во всех ссылках которые есть а ЕС же например у структуры у нас будет структу ИТ перемен мы поменяем у нас она поменяется только у текущего объекта этой структуры вот О'кей А смотри такая ситуация у тебя есть массив с данными Да пусть там будет три объекта и ты потом создаёшь копию этого массива То есть у тебя было leday с каким-то набор данных делаешь 2 и туда равно первый массив понятно да аре туда приравнивается То есть это сейчас в
00:03:21 - 00:04:50
память у нас два массива два набора массивов А ну получается - это val Type и val typ у нас копируются и А у нас да два два отдельных разных Ну объекта Ну О'кей тогда получается если цикл запустить из 100 таких копи очень очень плохо память дадада может быть проблема что стек переполнен так как работа с Ю тайпа ведётся на стеке а стек он ограничен в своём размере О'кей А ты что-то слышал про механизм который позволяет нам оптимизировать всё-таки такие вот копирования а не совсем поняла наверное вопрос Ну
00:04:07 - 00:05:33
смотри О'кей давай я прямо напрямую спрошу есть такой механизм называется C Ты что-то про него слышала да слышала но сейчас я не вспомню хорошо ладно окей давай класс ты прыгнул сразу в гущу скажем так да я подразумевал более простые пока начала Но Окей давай вернёмся чучуть назад тогда и я те всё-таки спрошу Вот например пишешь Ты число с плавающей точкой Да какой-нибудь 1.5 что-нибудь 1.5 какой будет какой будет тип вот такой константы или переменной А по-моему по-моему я читала вот недавно если я не
00:04:50 - 00:06:28
ошибаюсь то предпочтения отдаются даб окей Да вот вопрос так и есть дабл будет соответственно FL или FL нам нужно самим выставлять Да прямо типизация вот вопрос зачем Как ты думаешь почему дабл по деф почему не по деф Может расскажешь Чем отличается даб от флота влом Ну они отличаются размером насколько я помню и у и у флота размер больше Вот и поэтому наверное предпочтения даются Да потому что чтобы не зах наверное память Окей Ладно хорошо как скажеш Давай тогда пойдём дальше перейдём к структурам данных которые у
00:05:39 - 00:07:21
нас есть мы немножко уже поговорили про массив Да как что копируется у нас помимо массивов Какие ещё есть структуры данных которые ты знаешь где можно хранить данные Ну помимо массивов есть кри есть что там ещё-то есть есть сет А вот Угу игу хорошо массив Di Давай неплохо неплохое для начала А вот можешь рассказать Чем отличается массив от Сета например А да получается в массив Просто когда ты спрашиваешь у меня сначала ответ приходит типа в плюсах сразу ответить хочется а потом я пытаюсь переконвертировать его на с у нас
00:06:33 - 00:08:04
чуть-чуть может быть подругому да правильно получается R - это у нас последовательные Да ну данные хранятся последовательно а мы можем обращаться к Ну можем индекси Ну типа по индексу обращаться к элементам а и они А ну связаны между собой а Set у нас получается основан на работает на основе хэша и Dictionary также работает на основе хэша То есть это что что ну что такое ну сейчас разницу между сетом и Dictionary быстро по сути это одно и тоже только Dictionary - это ключ значения вот про механизм хэша то что у нас есть
00:07:21 - 00:08:47
хэш-функция некая в неё подаётся какое-то число она при Ну там разные алгоритмы бывают на самом деле она преобразовывает это возвращает результат и есть хэш таблица и вот по результату который вернула хэш-функция у нас выбирается свободная ячейка в хэш таблице и туда записывается Ну записывается Вот это значение То есть например Если сравнивать с точки зрения алгоритмики Ну производительности то доступ то вставка удаления по хешу будет быстрее будет константное время А в массиве это будет занимать Ну
00:08:03 - 00:09:28
он удаление по индексу будет заниматься кон А ну если например мы удаляем последний элемент в массиве то это будет за константу потому что мы тупо можем просто размер уменьшить А если например мы удаляем мы же не можем удалить из середины Ну Ну тупо удалить из середины Ничего туда не положив нам придётся вот мы допустим удалили Нет мы можем как мы можем скопировать первую часть Вот это значение пропустить и скопировать вторую часть и ну в новый массив но у нас будет получается перевыпас равно будет окей Окей хорошо так смотри что
00:08:46 - 00:10:11
интересно в словаре У нас вот ты сказала ключ значения лежат ключи ключами в словаре в свифте конкретно это может быть что угодно что какое ограничение для ключей в словари а то что или это не про то то что у нас они должны быть подписаны на Ну они должны быть реализовывать метод comparable ну comp так как перефразировать вот смотри вот смотри у тебя например есть твоя кастомная структура пользователь юзер Да какой-нибудь и ты хочешь сделать так чтобы этот пользователь твоя кастомная структура или класс могли быть ключом ди
00:09:31 - 00:11:11
Нужно ли что-то для этого делать или оно так само заработает Ну вот нам нужно переопределить метод по которому у нас будут сравниваться значения в кше и только после этого мы сможем использовать по-моему так так А а каким образом сравнивается значение в кше у нас Что за метод ты думаешь переопределить Ну это типа как компаратор который сравнивает зна выводит Какое у нас меньше Какое больше Нет окей Окей мне интересно у тебя да твоё мнение как это да Хорошо окей давай тогда поговорим теперь про ты вот немного говорил про сложности
00:10:24 - 00:11:59
Да различных операций вот у тебя есть и массив мым что взять и например найти какую-то часть коллекции То есть у тебя например есть цифра одного там до пяти Окей есть другая коллекция где там от от четырёх до пяти условно две коллекции и нужно найти в больше коллекции меньше существует или нет как думаеш в с точки зрения вот производительности Да сложности это будет сложнее быстрее сделать в массиве или в сете сейчас ещ раз получается у нас что нам две коллекции есть в одном случае это две коллекции
00:11:18 - 00:13:11
массивов в другом случае две коллекции сетов Вот одна коллекция см так основная входя коци который ты ищешь в основной О'кей а то есть а проверить Входит ли последовательность в дадада например да Ну не обязательно это прямо последовательность Ну то есть какой-то какая-то коллекция в другую коллекцию входит или не входит Как думаешь Вот с этой точки зрения массивы или с этой будут быстрее работать м ну получается поиск у нас работает за ну поиск в массиве у нас работает за он а а в в сете у нас поиск работает за
00:12:17 - 00:13:49
константное время потому что поиск происходит по вот этому хешу и соответственно искать нужно Ну чтобы быстрее работала через сеты О'кей Да хорошо а так Давай пойдём дальше перейдём уже непосредственно к свифту и всяким структурам классам и так далее У нас есть структура ты сказал что это val Type правильно и есть классы можешь назвать какие-то отличия между структурами и классами в целом Угу а получается ну помимо этого что ещё у нас есть а структура она не поддерживает наследование вот а потом в
00:13:06 - 00:14:33
структуре Ну данные копирую Ну структуры копируются также там нет механизма почёта ссылок Ну потому что нет насле сонно и так ну структуры хранятся на стеке и так и для них не существует де инициализатор и структуры потока безопасные А и ещё по-моему про сейчас про инициализатор то что в структуре он есть по дефолту Окей интересно было много интерес Хорошо давай попробуем поговорим во-первых У нас есть наши коллекции как мы уже говорили да массивы и так далее что это всё является это структура или классы
00:13:51 - 00:15:28
А это по-моему структуры Ну свифте представлены да то есть дальше мы копать внутрь не будем но структуры Окей дальше мы с этими коллекциями то есть дальше ты сказала что структуры потоку безопасные Вот теперь вопрос как ты думаешь получается отсюда следует что у нас коллекции наши они потока безопасные м структура потоку безопасные Ну по сути по сути должно как бы так О'кей А может ты тогда скажешь как вообще ну то есть на основании чего они потока безопасные Потому что когда мы переносим данные у
00:14:43 - 00:16:10
нас данные будут копировать и Я думаю что так как структуры они содержатся в стеке А у каждого потока есть по сути свой СТК так Окей окей интересно хорошо так смотри структура копируется Понятно Но мы же например можем в структуре иметь поле Класс вот в тах случаях Окей Ладно хорошо окей пойдём дальше всё-таки тогда значит в принципе про структуры и классы в общем и целом ты рассказала про разниц Да чтото как происходит по Да инициализатор по дефолту рассказал Может ты знаеш есть ли какой-то способ вот
00:15:26 - 00:17:13
рук ту все поля туда входят всё о есть ли какой-то способ чтобы добавить свой интели затор к структуре и при этом оставить дефолтные тоже Мне кажется я читала про это так мимо лётом а возможно Ну я просто предположу я не знаю может быть мы можем это сделать через протокол Ага ну окей это я просто чуть-чуть спрашиваю знаешь в глубину может Слышала да смотрела как что делается Нет не через протокол но давай поговорим про протоколы А так протоколы у нас интересная штука свифте Значит это у нас по сути интерфейсы правильно которые в
00:16:28 - 00:17:58
которых мы можем описывать Можно ли может ли у нас быть в в этих протоколах какие-то переменные содержаться А да но только они Ну должны реализовывать Get и сете Ну то есть или что Ду угодно по сути так А если я ну то есть если если ты поставишь для какого-то такой переменной се что это будет значить то есть только сет оставила Что значит это что значит у нас э переменная только для для запи какая-либо возможность задать тело то есть задать боди для нашей функции которая в протоколе находится Ну по сути Мы можем
00:17:14 - 00:18:58
написать к нему этен и в этен определить реализацию А так сами протоколы Ну это Ну вот если говорить там про плюсы там ну как интерфейсы в котором мы пишем только Скелет вот ой есть ли какая-то возможность ограничить протокол наме вот если Ну я знаю такую возможность что если мы протокола пишем наследуем его от то этот протокол то мы подразумеваем что это протокол будет использоваться с классами вот Окей хорошо класс Так ещё такой вопрос про протоколы бывает часто в коде но Ида нужно понять является ли
00:18:09 - 00:19:40
какой-то объект такого типа или другого То есть например имплементировать он протокол или нет Знаешь ли ты такой способ чтобы понять что вот какой-то объект он имплементировать протокол или не имплементировать протокол это же не про вот эти и S нет Да ну в том числе да можно можно и так Окей хорошо Ладно плавно перейдём в опциона можеть Что такое опциона у на опциона - это по сути такая такой механизм который позволяет нам сделать так чтобы если мы не уверены в том что у переменно будет значение то есть который
00:19:00 - 00:20:35
поддерживает В общем что такое опциона этом по сути у которого есть что о опциона она может либо содержать значение либо не содержать значение Можно ли форсить так сказать использовать вте по сути можно Никто не запрещает Но может ты скажешь когда мы можем у нас будет лежать какое-то значение и приложение Не шница ну то есть когда мы будем его разворачивать приложение не краш вот тогда мы можем использовать насколько ну я просто могу предположить мне так кажется что он быстрее чем допустим другие виды развёртывания возможно я
00:19:48 - 00:21:32
неправа Давай поговорим про другие вид вания расскажешь какие есть а у нас есть optional binding это безопасный способ есть optional ching когда у нас там какая-то положенная последовательность этих опциона и мы их друг за другом разворачиваем Есть лизинг Ну тоже безопасно А по-моему я Угу воз А как ты думаешь Вот если мы говорим теперь про какой-то кастомный класс или структура я хочу сделать так чтобы при инициализации если чего-то нет Вот какая-то у меня условие я мог вернуть опционально опциональный объект могу ли
00:20:51 - 00:22:39
я так сделать при инициализации чтобы то есть чтобы у тебя объект ися иоп об поле в разных случаях Например если у тебя есть какой-нибудь им и ты хочешь его проинициализировать Да и может быть такое случиться что там кейс котором ты инициализирует и хочется вернуть опциональные значения вместо того чтобы всё шлось или там вернулось что-то другое тоже самое может быть для твоих классов что ты хочешь иметь так скажем опциона инициализатор Есть ли такая у на возможность опциональный инициализатор именно
00:21:48 - 00:23:20
[музыка] да про такое не слышала я слышала только Ну то что инициализатор там мы помечает как обязательные и про conv вот о интересно может ты расскажешь тогда чем вот эти [музыка] отличается сечас Я попробую Ну по-моему мы помечает когда мы реализуем протокол Возможно или при наследовании и по-моему Ну я честно не вспомню сейчас ладно ничего страшного Давай попробуем пойти дальше поговорим про U немного пока отойдём от таких тем перейдём к непосредственно значит Можешь ли ты рассказать как у нас работать
00:22:34 - 00:24:22
таблица А таблицы я подумала про там вот эти будеть Так ну таблица у нас что это есть ячейки вот я не знаю что ещё можно сказать про таблицу то что эти ячейки могут быть пере Ну reusable мы можем задавать различную там высоту Ну в общем как мы хотим мы можем то сделать свою кастомную ячейку Вот наверное Окей хорошо так А чем вот есть такая штука коллекция чем будет отличаться коллекция от таблиц можешь сказать Ну получается А вот да я поняла Table - это у нас как А Ну я ещё забыла упомянуть что по дефолту
00:23:38 - 00:25:33
по-моему ячейки содержат title subtle и по-моему фотографии ну этол а коллекции они Ну то есть это элементы которые также расположены которые Также можно переиспользовать но они содержат внутри себя и viw Ну то есть то есть например когда мы хотим сделать какую-то условную галерею мы можем использовать коллек А когда допустим нам Я не знаю список контактов или там список замет Так мы должны использовать Ну не должны уж а как бы используем Table о'кей О'кей хорошо а так О'кей давай теперь перейдём
00:24:45 - 00:26:25
непосредственно к контроллеру вот у нас есть такие классы uw контроллеры и у U контроллеров которые в основном отвечают за наши экраны Да за представление они имеют жизненный цикл Угу назвать жизненный цикл от инициализации нашего контроллера до например до инита да то есть до конца получается сначала у нас вызывается VI затем у нас вызывается VI То есть это метод который вызывается один раз после него у нас вызывается VI Will например когда мы хотим обновить какой-то интерфейс данные мы пишем обновление как
00:25:39 - 00:27:18
раз таки в View дальше у нас вызывается View Will disappear То есть это когда у нас уже переходит Когда у нас переход происходит к следующему контроллеру и вот этот вот наш он уходит с экрана вот потом Vi Ой стоп Я перепутала это когда Когда уже появился на экране когда уходит с экра и появляется новый контроллер и потом когда уже у нас удаляется контроллер и вызывается слышала Ну это VI VI layout VI Нет это это всё было да это я тоже хотел у тебя спросить Да но есть такой метод новый VI сй метод который вызывается
00:26:30 - 00:28:29
между View по-моему насколько я помню после View Load дальше вызывается этот метод и дальше вызывается VI соответственно то есть между вот этими всеми стейта Ну и получается вот эти ещ и когда мы пересчитывать конст Угу хорошо Да ну есть е конечно метод жизне цикла но давай поговорим вот чуть-чуть конкретнее У тебя есть метод сказала вот в этом методе Load viw Можно ли достать Если мы используем например сториборд даче насколько я знаю по-моему если Ну мы как бы его переопределять уже его переопределить в
00:27:48 - 00:29:52
любом случае вызвать супер и дальше наш наш код будет вызываться правильно Ну Для чего Как ты думаешь Вот этот в момент viw Load viw что происходит вот этот момент я думаю что там подгружается интерфейс и э наверное связи типа AB аутлеты IB экшены устанавливаются А А тогда зачем нам нужен метод э лода Ну получается Он вызывается Когда у нас уже создано и типа мы уже уверены вот в этом методе что у нас всё стоит на своих местах Как нам надо то есть позиционно ты имеешь в виду позиции есть известные в это Мо да
00:28:59 - 00:30:28
по-моему да Окей так тогда зачем нам нужны методы когда мы когда мы хотим пересчитать когда мы хотим наверное Ну вот у нас есть какие-то А если у нас допустим размер VI там поменялся то мы то как раз вызывается этот метод пересчитываются констрейнт Вот то есть когда у нас например фрейм меняется там экран там повернулся и вызывается вот эти вот два метода в паре Ну то есть насколько я помню А там в каком-то видосе смотрела что они могут вызываться Ну сколько угодно раз и Ну типа в Рандомные периоды
00:29:44 - 00:31:16
О'кей Да но эти методы также вызываются как часть жизненного цикла правильно то есть не только когда произошло соответственно они для чего-то нужны То есть если они часть жизненного цикла в эти моменты что-то значит происходит всё-таки а что-то возможно подсчитывается возможно что-то что-то Возможно мы что-то можем узнать только там в цикле жине уже нет но тем не менее это когда мы можем узнать ба Ну в целом хорошо Так давай оставим это под завесой тайной пойдём дальше скажешь чем отличается фрейм и
00:30:38 - 00:32:05
банс Угу Ну получается фрейм фрейм - это такой ну типа прямоугольник координаты которого заданы относительно superview а Balance - это координаты его заданы относительно сво своей собственной системы координат Вот то есть например А когда мы поворачиваем View у нас Bounce не меняется А фрейм координаты меняются Вот и если мы хотим узнать ширину вю и длину то вроде как лучше ссылаться на баус Почему как потому что потому что допустим если у нас будет расположено Ну не прямо не перпендикулярно системе координа а
00:31:29 - 00:33:08
как-то допустим вот под углом так Ну типа банс они будут показывать правильные размеры Так ну расположение и размеры чуть-чуть разные вещи правильно То есть у тебя может быть расположение ты можешь повернуть объект но размер такой же Ну да так Окей хорошо Давай тогда скажи Может ты знаешь какие-то кейсы где у нас банс может быть Ну не ноль скажем так то есть его То есть он остаётся такой же вот ты говоришь да то есть у него позиция 0 у нас по дефолту внутри своей системы координат тако чтобы баунс был больше
00:32:27 - 00:34:04
чем фрейм например по-моему вот я помню такой кейс Когда у нас допустим есть а какая-то в и она больше чем Сам чем сам размер то есть вот допустим у нас в Вот такая А ну фрейм и баунс мы берём вот вот такие меньше и потом когда мы будем двигать это то по сути как бы мы двигаем по вот этой вот большой вю и у нас будет как раз-таки меняться меняться будет баунс никакой UI компонент не напоминает такое поведение в целом когда у тебя рейм остатся один и тотже а внутри контент как-то [музыка] двигается О хорошо давай тогда пойдём
00:33:19 - 00:34:56
дальше что у нас есть ещё интересно значит про U например мы поговорили про тле чуть-чуть поговорим про саму U знаешь ли ты что это какое у них взаимоотношения друг с другом Наверное я не смогу нормально ответить на этот вопрос поэтому это хорошо и Давай тогда юную тему закончим анимациями я не работа Я не работала с анимациями Давай тогда пропустим Пойдём тогда в вёрстку немножко знаешь ли ты что такое автол Ну получается это механизм который автоматически Ну как подсчитывает констрейнт то есть он создан нам для для упрощения
00:34:09 - 00:35:50
жизни по сути А как он почивает ко можешь рассказать как он да я помню я смотрела лекцию и там говорили что в основе механизма а лежат система линейных уравнений нахождение рений из этих уравнений Вот и то есть когда мы например пишем а там типа А equal to что-то с отступом таким-то мы как бы создаём некое уравнение А и все вот констрейнт которые мы там пишем они это и есть система координат вот которая решается о'кей О'кей хорошо какие ты ещё знаешь способы вёрстки кроме а а я не вспомню название Сейчас
00:35:08 - 00:36:46
ладно так Окей вот по автоа значит внутри Вот ты сказал Корей У нас есть да Ели у нас какой-то есть у на там такие штуки называются Котен hug prity и Resistance тоже да то есть две таких опции Есть Угу слыл Ты что-то про них про приорити насколько я помню мы можем задавать как раз-таки приоритетность и это будет показывать это будет ставить данный Ну то есть чем выше приоритетность тем выше по-моему вероятность В общем если у нас два констрейнт противоречить друг другу и у нас будет приоритетность то Ну вроде как
00:36:02 - 00:37:40
всё о должно быть потому что тот кой выполнится и затмит Ну тот другой с которым противоречит Ой хорошо Так давай пойдём дальше перейдём из ЮА вточку значит Давай для начала вообще обсудим как у нас ного потока работает можешь рассказать да СПО треды Ну это насколько я знаю это самая низкоуровневая штука где мы можем контролировать всё что хотим по факту есть Operation Q есть gcd вот а я могу рассказать про gc так как я с этим сталкивалась jcd построен на концепции очередей То есть у нас есть очереди А у нас есть два
00:36:54 - 00:38:39
типа очере очередей есть прямые есть эти есть параллельные concurrent есть seral последователь вот получается есть основная у нас очередь это Main она последовательная есть глобальная очередь она как раз-таки Параллельная но при этом мы можем допустим создавать сами какую-то кастомную очередь выставлять ей сами приоритет который мы хотим и ну взаимодействовать да это очере Окей хорошо так получается не работало Нет не работа Ну просто таква по gc продолжим значит gcd вообще вот в целом весь наш код он в каком
00:37:53 - 00:39:36
потоке исполняется просто вот у тебя есть какой-нибудь контролер во главном потоке так и ещ мы можем вызывать Да мы можем делать задачи выполнять задачи синхронно можем асинхронно соответственно Что такое синхронно это когда у нас задача дожидается пока выполнится предыдущее и не начинается асинхронно когда мы можем начинать новую задачу пока допустим преды не завершилась кейс что если мы вызовем синхронно в том потоке если мы вызовем синхронное выполнение А в той очереди Где мы находимся Ну если это последовательная
00:38:46 - 00:40:23
очередь то у нас будет делок Угу О'кей то есть нельзя вызывать например нельзя добавить синхронные задачу в главную очередь на главном потоке да да Окей хорошо а Так может ты знаешь ещё какие-то проблемы с потоками которые могут возникнуть А да может э может быть помо Race conditional То есть когда у нас а несколько потоков имеют доступ а к переменной и э меняют её и то есть э у нас может быть у нас может получиться неконтролируемые результаты То есть например э мы берём какую-нибудь переменную а и э
00:39:41 - 00:41:14
неско в нескольких потоков выполняем там типа плюс о и допустим цикл у нас идт до 100 типа мы не гарантируем что у нас будет в итоге 100 это Ниш Да хорошо Хорошо Так ну по по точке ещё могу спросить такой вот вопрос когда говорят про пото безопасность Что такое Или например когда хочется организовать доступ к какой-то переменной так чтобы в один момент времени только одна очередь могла с ней взаимодействовать какой-то один поток мог с ней взаимодействовать У нас есть какие-то механизмы для этого может ты
00:40:27 - 00:42:01
знаешь А ну да да получается что у нас Мы можем создавать группы мы можем использовать семафоры как раз таки это вот механизм синхронизации ки пониже позволяю синхронизировать там чтение [музыка] запись хорошо клас так Давай перейдём к завершающей теме по немножко про паттерны поговорим знакома ли тебе поняти хорошо ЕС знакома Буя сжк представлено в у нас своё например про букву I Скажи пожалуйста так Sol разделение интерфейсов получается так этот принцип гласит что мы должны разделять интерфейсы на более
00:41:14 - 00:42:55
мелкие например ну если вот по примерам то это как кисть отделены а отделено что отображает таблица от того как она это отображает Вот Угу О'кей хорошо А если про dependency поговорим прод Угу а то что у нас класс не зависит от от конкретики он зависит от абстракции а то есть мы должны а связывать а классы через ссылки на протоколы а не на сами класс то есть мы что делаем мы создаём какой-то протокол А И когда указываем тип переменной мы ссылается на этот протокол Ну тип этой переменной является тип этого протокола а не
00:42:17 - 00:44:10
конкретного класса а потом мы уже можем в различных классах реализовывать вот этот как раз таки протокол и потом типа использовать это Окей окей да хорошо а как ты относишься к синглтон Скажи пожалуйста ну это хороший вопрос по сути по сути я к нему отношусь нормально но многие люди его прям хейтят и это очень прям холивар тема очень много статей по поводу того стоит ли его использовать или не стоит а по сути я считаю что мы можем его использовать допустим Когда у нас какой-нибудь типа Network медр и нам нужно чтобы у
00:43:16 - 00:44:43
нас был один один экземпляр этого объекта вот Окей хорошо так смотри теперь такая задача например к тебе пришёл Я и говорю давай сделаем проект с нуля будем делать проект Яндек карт например примерно функционал представил да то есть есть карты различные навигации отслеживанию там возможно чего-то в онлайне э для mvp проекта да Для такого совсем малой часть этого проекта Какую бы архитектуру ты выбрала вот с нуля нужно писать Угу А хм так я бы сейчас я пойду от обратного А точно бы не mvc потому
00:44:00 - 00:45:44
что у нас ну насколько я представляю это будет Ну должна быть логика которая будет строить маршрут которая то есть получает местоположение человека получает какую-то конкретную точку выстраивать это маршрут а плюс какая там ещё логика Ну в общем в mvc это всё Ну всё будет в одном контроллере и это будет выглядеть ужасно и громоздятся мне Ну наверное если брать допустим mvvm Ну по сути mvp Наверное я бы тоже не стала вот самый такой середнячок Мне кажется это mvvm потому что у нас что есть у нас
00:44:52 - 00:46:10
есть модель есть View Ну модель в которой допустим хранятся Я не знаю данные пользователя который вошёл Мы же там авторизованы ВС вроде в картах и у нас есть и у нас есть VI модель в которой у нас хранится логика и по сути по сути вот VI не взаимодействует с моделью она взаимодействует с - моделью а вю модель в свою очередь взаимодействует с моделью и это очень удобно а и по сути Если бы у нас там допустим были какие-нибудь навороченные карты где бы мы использовали не один допустим А несколько каких-то экранов Я бы добавила
00:45:41 - 00:47:06
туда координатор для того чтобы мы могли перемещаться между экранами с помощью Ну код был описан в координаторы вот в целом Наверное я бы выбрала Потому что если брать какой-нибудь Clean archit или Viper то там очень много каких-то дополнительных ещ слоёв которые мы должны использовать кар ну вроде как не выглядит пря супер масштабируемый проектом Угу О'кей Хорошо понял понял А так класс я думаю можно заканчивать на этом э достаточно время уделили различным вопросам различным темам Спасибо Давайте
00:46:26 - 00:47:52
по этот запустим эмоджи аплодисментов э за отвагу за то что прошла так вот в онлайне А да спасибо Как тебе самой Скажи пожалуйста как на самом деле прикольный опыт особенно как раз таки вопросы про допустим интерфейс Я честно я вообще не повторяла даже и как-то особо на это внимание не уделяла потому что мне казалось что это не спрашивают я наверное больше ж по ноготочки типа что выведется что не выведется потом я ещё ждала вопросы про диспетчеризацию про всякие типа [музыка] сайт нанов скую позицию такими вопросами
00:47:11 - 00:48:38
конечно но да если ты сама это расскажешь например в контексте работу с память да то вне вполне можно но я так понимаю ты эти темы знаешь так или иначе слышала изучала это поэтому я некоторые вопросы опустил потому что понятно что ты видимо изучала это вот Хорошее хорошее По мне так получилось интервью Я дам тебе фидбэк в личку детально у вот сейчас я думаю можно просто перейти к вопросам если у кого-то есть вопросы спрашивайте пожалуйста
00:47:58 - 00:49:16