Собеседование на JUNIOR RUBY-разработчика / RoR-разработчик

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

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

  • Я не очень хорошо понимаю разницу между фронтальной и выбрал на самом деле фронтенд но у нас хитрая ситуация в которой транзакция пытается заложить то что уже заочно другой транзакций она будет ждать получается вечно пока та не выйдет а то транзакция ждет нашу запись грусть печаль Так ты ковырялся Как устроен вообще реквест цикл в рельсов [музыка] Всем привет Мы на канале kix лето Сегодня у нас публичная собеседование рубиста Я работаю в структурной команде старшим разработчиков компании мы делаем платформу для

    00:00:01 - 00:01:41

  • интернет продаж мы уже Достаточно давно на рынке больше десяти лет у нас высокие нагрузки у нас прилетает на лесовый быкант 1200 запросов в секунду у нас есть база данных Который больше терабайта данных не считая всяких реплик и прочего там эластики и целый зоопарк всего интересного с нами сегодня Саша и Давайте будем сразу спрашивать его откуда есть пошла программирование твоей жизни как ты решил стать программистом и собственно что тебя натолкнуло что тебе нравится в этом программирование [музыка]

    00:01:05 - 00:02:34

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

    00:01:54 - 00:03:30

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

    00:02:49 - 00:04:22

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

    00:03:58 - 00:05:31

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

    00:04:53 - 00:06:25

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

    00:05:49 - 00:07:12

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

    00:06:48 - 00:08:14

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

    00:07:38 - 00:08:51

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

    00:08:15 - 00:09:52

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

    00:09:03 - 00:11:15

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

    00:11:00 - 00:12:25

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

    00:12:17 - 00:13:57

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

    00:13:17 - 00:14:56

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

    00:14:19 - 00:15:42

  • есть про реверс прокси как правило стоит перед рублями потому что на 100 самого именина владленовича очень может быть медленно соединение держать для него рубежом worker может быть Дорого потому что вот мы там за 100 миллисекунд ему ответ генерировали А он его скачивать Там будет две минуты все это время естественно держать какой смысл поэтому сейчас обычно делают что какой-то нечто там либо пассажир либо Engine X либо ха прокси или еще что-нибудь она просто держит Коннект клиента А в это время когда клиент

    00:15:07 - 00:16:23

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

    00:15:45 - 00:17:18

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

    00:16:50 - 00:18:28

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

    00:18:03 - 00:19:34

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

    00:18:55 - 00:20:17

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

    00:19:37 - 00:21:11

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

    00:20:34 - 00:22:12

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

    00:21:30 - 00:22:50

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

    00:22:10 - 00:23:36

  • любом случае Пока все что ты позовешь из контроллера не отработает она у тебя будет ждать а там еще пользователи браузер такой что-то тут Наверное 504 слишком долго он отвечает пойду-ка я отсюда пытаемся заплести как бы делали [музыка] Смотри вот ты тебя зовут Как тебя зовут не знаю какой Дэвид хэнсон который пишет реса версия 0.0 там еще нет жобы ничего и вот такой хочу сделать фоновые задачи что мне для этого нужно нужно вот это вот асинхронность асинхронность Ну да тут Ключевое Мне кажется это

    00:23:13 - 00:24:41

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

    00:24:34 - 00:26:14

  • [музыка] Но вот остается только как вот запустить Этот второй поток Окей мы можем собрать эти задания в одном месте как их потом этот запускать но по сути данный ты можешь передавать концептуально двумя способами а там бросить всякие вариации ты можешь либо их положить ждать пока заберут либо опухнуть собственно вариант с положите пока заберут Он точно немножко проще потому что тебе не нужно думать этом Потом Существует ли второй поток или нет Может это будет просто скрипт который по крону отрабатывает там раз в день и нам окей

    00:25:27 - 00:27:01

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

    00:26:24 - 00:27:50

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

    00:27:13 - 00:28:52

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

    00:28:15 - 00:29:43

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

    00:29:01 - 00:30:20

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

    00:30:00 - 00:31:53

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

    00:31:08 - 00:33:08

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

    00:32:28 - 00:33:55

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

    00:33:22 - 00:34:57

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

    00:34:30 - 00:35:57

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

    00:35:19 - 00:36:41

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

    00:36:11 - 00:37:29

  • добавляем другие варианты мы можем кэшировать популярные запросы и экономить на этом в конце концов мы можем сделать склон нашего приложения и отправлять запросы в разные стороны Ну это больше сейчас про именно количество воркеров на бэкенде то есть это понятно мы пока на уровне базы Смотрим как это делать решить вот ты говоришь индексы Классная штука да ускоряет поиск А почему нам Если такая хорошая штука Не вешать на каждое поле прямо сразу там же не жалко задаем таблицу и давай индекс на каждое поле

    00:36:59 - 00:38:32

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

    00:37:51 - 00:39:24

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

    00:38:48 - 00:40:15

  • операции поиска по нему в случае дерево это какие то есть Понятно Что по равенства Мы точно сможем достать что мы еще можем более-менее быстро достать по дереву нам помогает но в первую очередь доставать конечно Вот смотри если я пишу запросе там Селект звездочка From таблицы где поле больше 15 и там меньше 500 в этом случае индекс какой-то может быть использован если он есть Да может быть может быть то есть [музыка] грубо говоря если у нас тысячи объектов то вот этого дерева будет расходиться и

    00:39:31 - 00:40:57

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

    00:40:33 - 00:42:01

  • Ну хэш это структур данных где мы добавляем каждый раз в конец но не совсем там как бы основная сварка шар как раз не в том что в конец а то что у него время поиска по элементу оно Константа вернее там асимптотика константная А и В среднем так выходит То есть если у тебя большой массив там сортированный большое дерево тебе чтобы по нему поискать сколько Нужно опираться совершить а если у меня массив это ну отсортированный массив или дерево в принципе это одно и то же точки зрения сложности вот у нас есть N листьев

    00:41:20 - 00:42:48

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

    00:42:10 - 00:43:38

  • А вот у нас есть массив не отсортированный я такой классный Я знаю сложность программ давая чтобы поискать по массиву буду его сначала сортировать а потом искать по нему миндальным поиском в этом смысл есть какой-то или не очень есть если мы не будем сортировать то сложность поиска будет N А вот если мы отсортируем а потом будем искать то Вот как раз наверное вулкан и получится дано сортировать каждый раз тоже не очень бесплатно [музыка] собственно что дешевле отсортировать и поискать или сразу влог перебор А это

    00:43:35 - 00:45:05

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

    00:44:25 - 00:46:01

  • врубят знаешь что хаши есть что они там хорошие удобненькие там с какой-то инверсии Руби они даже отсортированы ну смысле в порядке добавления как раз а вот чем они нам хороши Почему мы так их любим потому что взяли сложили то же самое многомерный массивчик массив из массивов ключ значение Почему нет просто Бывает так что обращения [музыка] не знаю почему про последний элемент не знаю Там где нас дешевые ставки так Хеш мы говорим про объект получается так случае если мы говорим про JavaScript это будет объект

    00:45:24 - 00:46:51

  • так в рублях это Хеш мы еще много где в питоне дикт так так нам удобнее тем что мы можем извлекать по нему дешево по индексу находить Вот это я хотел тебя услышать причем насколько дешево сразу единица получается вот единица существует случай когда он медленнее работает но как правило вот единицы именно за это его любят А как он устроен Ну понятно что вряд ли Но изобрести этому сможешь вот У нас есть массив мы знаем что массиве поиск элемента тоже вот единицы Там просто индексация самое быстро что в принципе

    00:46:28 - 00:48:05

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

    00:47:18 - 00:49:05

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

    00:48:20 - 00:49:43

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

    00:49:14 - 00:50:42

  • на какой-то колбак собственно какой Так я вот думаю как это все на мои решили что мы это все выносим в отдельный поток или мы все это делаем нам все равно нужно откуда-то задание на отправку это создать мы должны создать запись Что такое письмо должно быть отправлено мы уже там понаписали таких фоновых воркеров демонов запустили Все работает все отлично но все равно нужно откуда-то взял позвать Хорошо Мне кажется Окей допустим ты пишешь Это самое приложение уже не первый день тебе пришли люди сказали вот в опыта Круто

    00:50:07 - 00:51:29

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

    00:51:01 - 00:52:27

  • тоже самое модельку модельки есть метод autosave callback мы написали туда 800 отправимся и во всех этих контроллерах оно будет отправляться и случае если нам придется какую-то логику поменять в этом письме то у нас собственно всего одна точка вызова чем Хорошо Чем плохо она одна точка вызова в общем-то звучит хорошо чем несколько точек Какие могут быть проблемы проблема с тем что если что-то сломается то все потеряется за что именно сломается и что потеряется Но если не знаю какая-нибудь проблема с интернетом

    00:52:00 - 00:53:39

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

    00:52:55 - 00:54:22

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

    00:53:56 - 00:55:10

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

    00:54:33 - 00:55:56

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

    00:55:18 - 00:56:33

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

    00:56:03 - 00:57:41

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

    00:57:32 - 00:59:03

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

    00:58:39 - 01:00:02

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

    00:59:31 - 01:00:56

  • те которые шесть нолики которые 6.1 но они пока еще поддерживаются там все хорошо рубе видимо 3 4 причем там В четвертых рейсах там тоже совместимости хорошо там все более-менее устаканивается после 5 2 где-то Да там каждый следующий конечно получше но самое забавное это смотреть как эти генераторы там люди правят вот у нас теперь кавычки правильно одинарные потом нет кавычки двойным надо поставить а вот тут точка Вот вываливается думаю что такая точка там хрен бы с ней какой-то момент по моему

    01:00:14 - 01:01:34

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

    01:01:16 - 01:02:47

  • Наталья В общем это имел виду на мастер 90 мастер то есть пересоздать кометы в девелопните которые поверх мастера вот если мы развиваем на веточки давала то мы потом можем это замерзнуть одним кометам либо можем не совсем так это будет там тебе нужно сначала получается ветку которую ты собираешься вмешивать ее нужно будет отрезать а потом у тебя мерч будет без коммита [музыка] Окей Потому что если ты будешь делать то есть находясь на Мастере делать rebase на девелопмент у тебя получается нужно быть

    01:02:05 - 01:03:41

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

    01:03:09 - 01:04:42

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

    01:04:08 - 01:05:30

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

    01:04:51 - 01:06:16

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

    01:05:41 - 01:06:56

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

    01:06:28 - 01:08:08

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

    01:07:31 - 01:09:11

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

    01:08:28 - 01:09:50

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

    01:09:40 - 01:11:41

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

    01:10:44 - 01:12:03

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

    01:11:28 - 01:13:10

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

    01:12:38 - 01:14:09

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

    01:13:31 - 01:15:04

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

    01:14:24 - 01:15:51