Собеседование C# программист в Американский интернет магазин продажи конопли

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

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

  • так а Матвей Можем начинать Всё верно Да я на связи Меня зовут Константин Я тем где я комикс в компании Свет У нас сегодня собеседование Прошу прощения за накладку встречи была изначально на час я Проглядел нужно как минимум на полтора часа Еще хотелось бы в конце на твои вопросы поотвечать который наверняка будут Ну собственно говоря еще опыт чем ты занимался на предыдущих проектах Какие технологии использовались Какие задачи Решал и так далее и тому подобное потом немножко по процессам Как у вас был построен процесс разработки

    00:00:00 - 00:01:36

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

    00:01:04 - 00:02:37

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

    00:02:10 - 00:03:50

  • банк санкт-петербург онлайн сайт Там была Складская система контейнер ошибся и регистрация бизнеса в Америке там сайте отец один Ну я полчаса как раз там ворвался Ну это разработка он был бы форумс там ну там 2.0 там даже 1:1 был проект какой-то Я даже его там воял немного то есть 2.0 в форм писали писали писали понятно какой там три года получается я там нет 32 года по-моему я просто я помню След начал то есть мне там конец встретил извиняюсь времени на этот вопрос получается сейчас у меня было были

    00:03:14 - 00:04:28

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

    00:03:52 - 00:04:55

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

    00:04:26 - 00:05:34

  • работала там фронты парни э-э это про этот проект был именно на ангуляре То есть он гулял там был когда-то там 3:1 он стал пятёркой потом сейчас на шестёрку мы перевезли где-то уже полгода назад наверное Ну может там месяцев пять шесть четыре назад э Семёрку даже пробовали вот на эту Ну пока они не перевозили она пока прививка всё ещё э и баз данных тут здесь баз данных это Microsoft Hill Server То есть я на протяжении наверное там всего там 20 лет работаю в основном с московским сервером последние пять лет нагрузки под

    00:05:00 - 00:06:05

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

    00:05:33 - 00:06:23

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

    00:05:58 - 00:06:56

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

    00:06:27 - 00:07:26

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

    00:06:59 - 00:08:04

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

    00:07:32 - 00:08:35

  • есть это не только потому что у меня были там проекты крупные я работал в джабе job.ru пока его не купил HeadHunter там получается Долма из киви как основное хранилище было 17 серверов на чтение mysql я полноценно индекс был на свинг-се то есть какие-то запросы получаются идут в базу данных какие-то идут в контекстного индексы это отдельно как сущности Там отдельный порт отдельное но отдельный инстанс когда по-другому он существует это может быть всё что угодно Ну просто вот речь про микросервисы Вот

    00:08:04 - 00:09:05

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

    00:08:39 - 00:09:49

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

    00:09:17 - 00:10:32

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

    00:10:18 - 00:11:39

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

    00:11:03 - 00:12:03

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

    00:11:33 - 00:12:36

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

    00:12:10 - 00:13:16

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

    00:12:49 - 00:13:52

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

    00:13:21 - 00:14:36

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

    00:14:02 - 00:15:07

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

    00:14:42 - 00:15:56

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

    00:15:19 - 00:16:51

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

    00:16:11 - 00:17:26

  • уже мог как бы с боевыми данными протестировать соответственно уже функционал посмотреть и потом соответственно привести из мастера в Продакшен на проводе То есть когда он то есть отправляете по реквест он уже проверку не делается То есть просто там ожидание когда его мёджить и в момент вмёрз он соответственно собирается на пруд и выкатывает соответственно продакшн именно в том получается CD это были контейнеры Это был контейнер Докера и он выкатывался на Кубе в cubernates и cuber соответственно

    00:16:49 - 00:17:49

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

    00:17:19 - 00:18:20

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

    00:17:49 - 00:19:03

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

    00:18:40 - 00:19:53

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

    00:19:31 - 00:20:35

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

    00:20:06 - 00:21:01

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

    00:20:36 - 00:21:42

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

    00:21:14 - 00:22:14

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

    00:21:44 - 00:22:48

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

    00:22:23 - 00:23:41

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

    00:23:10 - 00:24:13

  • да ладно а-а пойдём к следующему вопросу вот я говорил про трёхслойную архитектуру Расскажи ещё раз вот я услышал злой бизнес-логию свой доступа данным какой там третий слой третий слой это получается либо View представление То есть то что на фронт даётся либо модель как бы ну модель может под ней подниматься типа как инвестиции Ну и висит modelview Control получается вот контроллер здесь это бизнес логика и работа с данными Ну просто трёхслойка по-моему в моём понимании Я может просто тоже там

    00:23:44 - 00:24:49

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

    00:24:19 - 00:25:38

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

    00:24:58 - 00:26:01

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

    00:25:30 - 00:27:06

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

    00:26:25 - 00:27:48

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

    00:27:16 - 00:28:39

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

    00:28:04 - 00:29:17

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

    00:28:50 - 00:30:16

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

    00:29:51 - 00:31:15

  • здание [ __ ] фабрика может вернуть заглушку А если явно создаёшь какой-то класс Ты уже завязываешься на него получается что-то другое Хорошо Ну у нас то что регистрация получается в нашем контейнере там его контейнере там у нас есть там трендинг с когтя синглтон есть но мы-то контейнер получается даем он сам получается следит за объектом и как символ там его создает само удаляет там сидит сколько он существует мы не сильно паримся сейчас [аплодисменты] на английском языке рассказывал и мне пришлось

    00:30:49 - 00:32:00

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

    00:32:14 - 00:33:37

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

    00:33:16 - 00:34:32

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

    00:34:08 - 00:35:35

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

    00:34:51 - 00:36:12

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

    00:35:37 - 00:36:58

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

    00:36:30 - 00:37:39

  • табличный данные которые мы отдаём на фронт обычно С листами и там опять же сон конвертируем из листов Они прекрасно конвертируются то есть массив это больше какие-то полу такие полу служебные какие-то там события и работа какая-то как-то так обычно что я извиняюсь Я в Стамбуле нахожусь сейчас там на фоне мечети не слышал не слышал молитву не слышу получается Так это не про сложность там поиска не расскажешь я так не скажу да хорошо Что такое копательская расскажешь а я наверно тоже не скажу Ну то есть

    00:37:13 - 00:38:30

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

    00:38:12 - 00:40:04

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

    00:39:32 - 00:40:53

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

    00:40:16 - 00:41:12

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

    00:40:44 - 00:42:14

  • комментарии строки АЦЦ а б это все анаграммы для неё в принципе любые две строки из этого списка не анаграммы для примера например ABC AB здесь надо написать алгоритм он должен или другой Ну я бы наверно погуглил бы то есть тут нужен алгоритм сам знаете то что как бы все-таки программист обычно там не сильно выдумывают алгоритм это с аналитик делает Я погуглил сейчас буду пробовать я наверное буду пробовать но программисты не знаю сконструировать там какой-нибудь еще как бы так его сконструировать чтобы

    00:41:44 - 00:43:27

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

    00:42:37 - 00:44:03

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

    00:43:43 - 00:45:07

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

    00:44:29 - 00:45:37

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

    00:45:04 - 00:46:04

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

    00:45:34 - 00:47:22

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

    00:46:51 - 00:48:25

  • какой критерий анаграммы или не анаграммы То есть пока тут не ясно когда труба возвращать когда Фолз но мы здесь заменяем все звездочки получается Тут надо просто сделать проверку что остались линии звездочки в массиве Б И если получается ну можно просто Допустим их удалить все звезды если бы получается пустой массив то получается анаграмма Я бы наверное удалил бы сейчас все звездочки изба Либо они все либо все звездочки Значит все окей Ну то есть если все бои звездочек Значит все символы поменялись Значит все нашли

    00:48:21 - 00:49:52

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

    00:49:08 - 00:51:21

  • но можно аккаунт использовать аккаунт это метод это метод Линки есть свойства просто с большой буквы начинается [музыка] Видимо это последствия Работы фуллсбэком наверное да почему-то он Почему я пишу ну да ну да да Понятно с большой еще и хорошо В смысле тыж Лена 15 так одинаковые кажется работает Ну это подожди ты же должен быть Фолз дать Так кстати да отложить отладить можем поставить нет нам можно в консоль выводить так если подумать почему так она должна что может путали Майкл рамках Так а что там ругается консоль лук

    00:51:20 - 00:53:18

  • так сейчас торможу я вас крипте есть такое Да не не настолько Я давно уже это не настолько я Джон скрипт не настолько долго увлекался чтобы прям путать просто консоли лобчатые не соображу как он пишется у нас что-то Я давно уже не писал и у меня ну как-то я блин почему-то я всегда пишу его ну там это мгновенно там как-то этот компилятор же подсказывает и точнее даже не компилятор сейчас Давай пытаюсь нагугли консоль в рай Брайт line да Или просто врать Да врать будет работать да да Вот я запустила 4 звездочки вернул

    00:54:23 - 00:56:15

  • Просто я бы вот это вот перенес после каждого Фора Я бы выводил [музыка] Не смотрите здесь ставил эти вот цикл for И зачем хорошо Я просто хочу чтобы родилась промежуточный результат Обрати внимание на третью строчку Сразу две три звездочки C да то есть почему то нашел одного клуба на затербе А мы же видишь Мы тут затираем по мы бы Джей подожди секундочку Давай наверное вот здесь вот здесь вот мы сделаем концерлок получается а [музыка] получается Он встретил буква Б И затер две буквы б почему-то

    00:55:50 - 00:57:46

  • Но потому что так Такая логика в алгоритме значит логика неправильная видимо при нахождении надо затереть и цикл остановить а мы все равно Идем дальше а он идет смысле вот здесь бректно сделал да точно все я был просто он идет он уже эту букву нашел и дальше ее колбасит Все я понял да да [музыка] Так теперь сейчас секундон [музыка] нет секундочку нам нужно просто вот теперь вроде все окей почистить может комментарии давай Хмм сделаем две буквы C либо в четыре буквы А а с в а Ca значит 4 4 2 3 1

    00:57:54 - 01:00:07

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

    00:59:46 - 01:01:45

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

    01:01:42 - 01:03:15

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

    01:02:43 - 01:04:09

  • буди Она же там тут же может что угодно быть guid int Long в зависимости от того чем это просто понятно что это как бы такая себе конечно история как-то она будет не сильно явная табличка не очень красивая возможно все-таки лучше указывать здесь список авторов Просто потом выборку делать да по автора будет сложно то есть будет удобно чтобы если мы укажем здесь вот Джейсон авторов Это только для запроса если мы выбираем книги чтобы это просто какой-то дополнительная информация в которой список авторов а если мы если мы здесь

    01:03:51 - 01:05:10

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

    01:04:36 - 01:05:48

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

    01:05:53 - 01:07:19

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

    01:07:05 - 01:08:22

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

    01:07:58 - 01:09:29

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

    01:09:01 - 01:10:22

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

    01:10:05 - 01:11:06

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

    01:10:45 - 01:11:48

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

    01:11:22 - 01:12:26

  • склад в одном лице у него название и мы хотим знать покупатель говорит если у вас сейчас в магазине такая книжка Я хочу купить Ну наверное тоже отдельная таблица связи букв с тортом какая-нибудь Ну назовем bookstore получается Book ID и Store [музыка] Наверно так а Если покупатель хочу купить книги в подарок это мы как будем хранить хочу купить три книги в подарок предприятие но у нас наверное там уже есть там будет сущность корзины сущность ордера наверное нет мы должны знать если у нас в этом

    01:11:56 - 01:13:44

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

    01:13:12 - 01:14:39

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

    01:14:02 - 01:15:32

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

    01:15:10 - 01:17:01

  • у нас для блока и лопается у нас HT и создается Create creat провайдер не дать провайдерация у нас отдельный посадили внутреннего провайдер создался стал J меньше 12 и заполнили массивный Long coluation Ну короче мы его за локоли создали Он вроде бы тут даже создается вроде все как-то не так уж страшно на самом деле вроде бы только тут почему-то Create он у нас Статик то твой не уверен что это отработает наверное как-то по-другому должен вызываться он называется ну то есть статики все-таки вызывается название

    01:16:50 - 01:18:39

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

    01:17:58 - 01:19:30

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

    01:18:47 - 01:20:09

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

    01:19:42 - 01:21:10

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

    01:21:31 - 01:23:06

  • там годика 34 опять же Это как тестово Просто я делал но просто давно и это как тесто То есть это не ежедневная Моя работа с неё там прямо не Эксперт если мы это всё-таки напиши написали да то что у нас просто в него писать или можно в него писать ничего страшного не будет ну наверное там будет какой-то какие-то конфликты будут скорее всего то есть там что-то будет у нас наверное надо будет но мы тогда потеряем все преимущество во типа они будут ждать пока там одна записал пока другой но я погуглил бы на решение такое опять

    01:22:29 - 01:23:52

  • же я Ну и не скажу сейчас я бы так не написал Ну то есть хорошо словарь тип значения имеет обжиг то мы туда пишем вот это плохо хорошо так то есть у нас вот речь надо по словарит Вот это прочтинский ящики Китай равняется int но мы сравниваем не пишем или вот здесь то что мы пишем получается он у нас получается провайдер clashing это int просто into HT у нас Ну то что мы пишем вот 38 строке и потом 21 строке опять приводим а канту приводим где вот здесь 21 об этом речь просто мы делаем проверку Если же он кей

    01:23:33 - 01:25:26

  • если у Китай Принт то мы почему-то чем-то еще потом кунту приводим да то есть тут же только Интел приводим потому что у нас а если обжиг Почему Китай даст равно им джорджик был вернется торможу очень плохо вопросы закончились если есть у вас такой код вот так пишете каждой строчке какая-нибудь гадость запроса например дата провайдер реализует диспауза была надо в using обернуть для примера потом 38 строке будет нагреть Exception потому что вы чтение где Не инициализируется нет и так далее Так что

    01:25:28 - 01:27:15

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

    01:27:05 - 01:28:18

Менторы

Специалисты своей области, которые смогут помочь вам

  • Нигма Нурия
    Нигма Нурия

    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

© 2024 HireGuru. Сделано в Санкт-Петербурге с hireguru.ru