🎧 Публичное собеседование #1: iOS, Swift, Async code, HTTPS, Sockets, DDD, Patterns

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

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

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

    00:00:00 - 00:01:33

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

    00:00:46 - 00:02:30

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

    00:01:39 - 00:03:00

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

    00:02:19 - 00:03:54

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

    00:03:10 - 00:04:27

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

    00:03:49 - 00:05:09

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

    00:04:33 - 00:06:04

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

    00:05:17 - 00:06:33

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

    00:05:56 - 00:07:07

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

    00:06:35 - 00:07:56

  • интересно очень полезным плюс еще не до конца доработана и попрощался с новым то накал баках или же сейчас apple внедряет свою для тегу для реактивного на или реактивного программирования очень похоже я первое время когда начинал как разработчик на ios и работал на rx и и сейчас когда я пал внедряет свой комбайн она называется у них он очень похож по логике на комбайн нормальный целый комбайн да ну прям звучит окей а как это давай наверное тогда накал б как же можно построить несколько разных абстракций может быть там есть

    00:07:17 - 00:09:09

  • что-то типа i want эмиттера здесь вот такой нету совсем как быки band эмиттера есть что то что работает по похожему принципу ну например используем тот теста к когда мерная модель до такой текстура так ipad и домены модели есть свои state еда которые могут прослушиваться там в разных местах и как только какой-то state of изменяется все подписчики об этом узнала есть это в какой-то степени на ивенте метро по ходу было окей а давай тогда на на кубиках еще можно вполне написать там свой promise или фьючер что такое люди пишут

    00:08:24 - 00:10:04

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

    00:09:15 - 00:10:44

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

    00:10:00 - 00:11:14

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

    00:10:46 - 00:11:52

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

    00:11:18 - 00:12:43

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

    00:12:02 - 00:13:38

  • дать часто можно скачать какую-то конкретную версию или конверсию поцелует она автоматически скачает ту которая подходит под даже в линуксе так сделано вот во всех этих не всегда автоматически в основном teana вычитывать под что это сборка и скачивает 4 конкретно руками делать ну короче я к тому что на ну наверное радио singh & weight of это не стоит делать то скорее всего там есть куча других вещей которые очень сильно разнятся от платформ и у нас получается 1 этот бинарник толстый такой нет ну тут

    00:12:54 - 00:14:14

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

    00:13:40 - 00:14:50

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

    00:14:24 - 00:15:59

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

    00:15:11 - 00:16:46

  • точно много протокол я просто не знаю какие если ты ходишь на backend то ты можешь ходить по собственно http или https у а можешь по высоте там как у вас на айосе sap сокетами никогда не не распространяться понимаю не раз труднее от не распространены а просто сокеты то есть просто открыть соединение нефти типичное открыть здесь и присоединения или люди пили или думаю как нельзя или почему я думаю apple restricted такое вообще все можно на самом деле не уверен что конкретно apple такое можно на полу стоит дыхание

    00:16:04 - 00:17:39

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

    00:16:58 - 00:18:38

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

    00:17:48 - 00:19:24

  • протокол сказать какие будут пакеты формат какой то придумать там бинарный формат текстовый формат самых парсить сделать через них пересылку там сообщений рпц хочешь ты должен иметь возможность хочешь звук передавать но это как бы тогда работал тогда не знаю какой нибудь зул то были skype они же все сама передают видео звук по своим протоколом насколько ну конечно же все на сотик ну как бы это можно было бы делать на в пакетах можно было бы это все же делать на самом http и https сел он у линги но это

    00:18:39 - 00:20:10

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

    00:19:28 - 00:20:49

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

    00:20:10 - 00:21:37

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

    00:20:56 - 00:22:17

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

    00:21:37 - 00:22:55

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

    00:22:20 - 00:23:46

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

    00:23:03 - 00:24:52

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

    00:23:57 - 00:25:42

  • черты вот как ты отличишь что у тебя domain-driven design в приложении 2 откуда он пошел честно говоря не знаю если не ошибаюсь вообще что-то из бизнеса пошло конкретно давай сконцентрируемся на том из чего из каких положений таких идеям состоит и что он отдает ошибаюсь низкое расположение что есть на менной модель которая очень похожа по своей логике то что рассказывал view model она отвечает там за какие-то запросы там к сервисам и так как по себе звено которое соединяет между собой различные блоги каком-то одном модуль то

    00:25:14 - 00:26:57

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

    00:26:10 - 00:27:45

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

    00:27:10 - 00:28:48

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

    00:28:08 - 00:29:50

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

    00:29:03 - 00:30:43

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

    00:29:53 - 00:31:25

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

    00:30:38 - 00:32:21

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

    00:31:30 - 00:32:54

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

    00:32:13 - 00:33:23

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

    00:32:51 - 00:34:18

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

    00:33:38 - 00:35:06

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

    00:34:28 - 00:36:02

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

    00:35:14 - 00:36:44