Эйч Навыки — менторская программа
Эйч Навыки — менторская программа
  • 89
  • 542 339
Реальные задачи с собесов по базам данных: SQL, оптимизация запросов, индексы
В этом видео Даниил Динько, старший разрабочтик в компании-лидере в международном кибербезе и ментор в Навыках, Аким Саввин, Team-lead в ВСК
и ментор в Навыках, провёл собеседование на Middle Go разработчика
Подробнее про Эйч Навыки: h.careers/skills?
Гофер-комьюнити: t.me/naviky_chat
Сервис развития карьеры Эйч: h.careers/?
Переглядів: 608

Відео

Илья Павлюков: как я перешел с PHP на Go
Переглядів 990День тому
Тот самый бот: t.me/skills_mentee_bot Рассказываю свою историю про переход с PHP на Golang. Мой переход на гошку начался ещё в 2018 году, и сегодня я поделюсь самыми главными наблюдениями, которые у меня накопились. Спикер: Илья Павлюков t.me/spatecon - ментор Эйч Навыки - Senior Software Engineer в Nebius Group - ex-Tabby, Ozon, VK Менторская программа Эйч Навыки: Помогаем перейти на Go, смени...
Тестовое задание на Go: бронирование, временные зоны, таймслоты
Переглядів 3,5 тис.21 день тому
Разбираем проект по бронированию мастерских с учётом разных часовых поясов Что тебя ждет: - Будем писать на Golang с библиотеками gin и pgx; - Хранение расписаний мастерских в PostgreSQL; - Проверка пересечений бронирований и работа с транзакциями. Такая задача встречается при найме Junior, Middle, Middle Go-разработчиков Репозиторий проекта с исходниками: github.com/spatecon/hbooking Решает за...
Открытое интервью на Middle Go-разработчика
Переглядів 2 тис.2 місяці тому
В этом видео Даниил Динько старший разрабочтик в компании-лидере в международном кибербезе и ментор в Навыках, провёл собеседование на Middle Go разработчика Подробнее про Эйч Навыки: x.h.careers/skills/main? Гофер-комьюнити: t.me/naviky_chat Сервис развития карьеры Эйч: h.careers/?
Открытое интервью на Middle Go-разработчика
Переглядів 1,1 тис.2 місяці тому
Открытое интервью на Middle Go-разработчика
Открытое интервью на Middle Go разработчика
Переглядів 1,4 тис.2 місяці тому
Открытое интервью на Middle Go разработчика
Открытое интервью на Go-разработчика
Переглядів 1,2 тис.2 місяці тому
Открытое интервью на Go-разработчика
Открытое интервью на Go-разработчика
Переглядів 1,6 тис.3 місяці тому
Открытое интервью на Go-разработчика
Открытое интервью на Middle Go разработчика
Переглядів 1,7 тис.3 місяці тому
Открытое интервью на Middle Go разработчика
Открытое интервью на Go-разработчика | Эйч Навыки
Переглядів 4 тис.4 місяці тому
Открытое интервью на Go-разработчика | Эйч Навыки
Открытое интервью на Go разработчика | Эйч Навыки
Переглядів 1,7 тис.4 місяці тому
Открытое интервью на Go разработчика | Эйч Навыки
Открытое собеседование на Middle-Go разработчика
Переглядів 2,1 тис.4 місяці тому
Открытое собеседование на Middle-Go разработчика
Открытое интервью на Go разработчика | Эйч Навыки
Переглядів 2,8 тис.5 місяців тому
Открытое интервью на Go разработчика | Эйч Навыки
Открытое собеседование на Middle Go разработчика
Переглядів 3,2 тис.5 місяців тому
Открытое собеседование на Middle Go разработчика
Открытое интервью на Middle Go разработчика
Переглядів 2 тис.5 місяців тому
Открытое интервью на Middle Go разработчика
DevOps + Go: Как контейнеры работают внутри
Переглядів 1,7 тис.6 місяців тому
DevOps Go: Как контейнеры работают внутри
Frontend: Инфраструктура во фронтенде
Переглядів 4896 місяців тому
Frontend: Инфраструктура во фронтенде
DevOps + Go: Как настроить CI в проекте?
Переглядів 1,7 тис.6 місяців тому
DevOps Go: Как настроить CI в проекте?
Golang: Разбор задач с собеседования
Переглядів 2,7 тис.6 місяців тому
Golang: Разбор задач с собеседования
Как React работает внутри?
Переглядів 5496 місяців тому
Как React работает внутри?
Открытое интервью на Middle Go разработчика
Переглядів 2,4 тис.6 місяців тому
Открытое интервью на Middle Go разработчика
Открытое интервью: Junior Frontend-разработчик
Переглядів 1,8 тис.6 місяців тому
Открытое интервью: Junior Frontend-разработчик
Frontend: Что нужно знать фронтендеру, чтобы затащить на собесе? Показываем огромную карту знаний
Переглядів 2 тис.7 місяців тому
Frontend: Что нужно знать фронтендеру, чтобы затащить на собесе? Показываем огромную карту знаний
Открытое интервью на Middle Go-разработчика
Переглядів 3,2 тис.7 місяців тому
Открытое интервью на Middle Go-разработчика
Открытое собеседование на Junior Golang разработчика
Переглядів 7 тис.7 місяців тому
Открытое собеседование на Junior Golang разработчика
Открытое собеседование на Golang разработчика
Переглядів 9 тис.8 місяців тому
Открытое собеседование на Golang разработчика
Открытое собеседование Frontend разработчика
Переглядів 1,4 тис.8 місяців тому
Открытое собеседование Frontend разработчика
Разбор задач с собеседования по Go
Переглядів 7 тис.8 місяців тому
Разбор задач с собеседования по Go
Открытое собеседование на Go-разработчика
Переглядів 6 тис.8 місяців тому
Открытое собеседование на Go-разработчика
Открытое собеседование на Frontend разработчика
Переглядів 3,1 тис.8 місяців тому
Открытое собеседование на Frontend разработчика

КОМЕНТАРІ

  • @АлександрРаков-м7п
    @АлександрРаков-м7п 21 годину тому

    func tee будет читать синхронно в вашем решении, и если произойдет блокировка одного из каналов на серверной стороне, второй будет его ждать. Для реализации асинхронного решения: func tee(in <-chan int) (a <-chan int, b <-chan int) { a = make(<-chan int) b = make(<-chan int) buff1 := make([]int, 0, 5) buff2 := make([]int, 0, 5) for v := range in { buff1 = append(buff1, v) buff2 = append(buff2, v) } go func() { defer close(a) for _, v := range buff1 { a <- v } }() go func() { defer close(b) for _, v := range buff2 { b <- v } }() return a, b }

  • @thenexia111
    @thenexia111 День тому

    func tee(ch1 <-chan int) (ch2 chan int, ch3 chan int) { ch2 = make(chan int) ch3 = make(chan int) go func() { defer close(ch2) defer close(ch3) for num := range ch1 { ch2 <- num ch3 <- num } }() return }

    • @ИнтернетСпасётМир
      @ИнтернетСпасётМир 34 хвилини тому

      Не будет работать, если чтение происходит только из одного канала.

  • @NancyJohnson-o2y
    @NancyJohnson-o2y День тому

    Спасибо за прогноз! Есть такой вопрос: У меня есть кошелёк OKX с USDT, и у меня есть seed фраза. (alarm fetch churn bridge exercise tape speak race clerk couch crater letter). Можете подсказать, как перевести их на Binance?

  • @ИнтернетСпасётМир

    Решение для задачи tee будет работать только если вы планируете последовательно читать из a и b канала приходящее значение, а если вы хотите послать в in 1,3,5 и прочитать эти значения только из одного канала, тогда цикл чтения из канала in зависнет на записи в другой канал, который не читается. Если добавить default, тогда канал который не читается, будет пропускаться. Но это решение не подходит, потому что мы можем захотеть прочитать из второго канала значения 1,3,5 после того, как эти значения были прочитаны первым каналом. Для решения такой задачи можно запись каждого значения в оба канала производить в отдельной горутине. ```go func tee(in <-chan any) (<-chan any, <-chan any) { a := make(chan any) b := make(chan any) go func() { defer close(a) defer close(b) for v := range in { v1 := v a1, b1 := a, b go func() { for range [2]int{} { select { case a1 <- v1: a1 = nil case b1 <- v1: b1 = nil } } }() } }() return a, b } ```

  • @alexandreabramtsev9160
    @alexandreabramtsev9160 День тому

    Мне кажется, в первом примере строки 65 и 70 лишние. Я за то чтобы был мьютекс чуть длиннее - с 63 строки по 72. А так - интересная тема (как и веселый нэйминг xD)

  • @mistandok
    @mistandok 2 дні тому

    а sync.Once нельзя использовать по условиям задачи?

  • @Jonatanail
    @Jonatanail 2 дні тому

    прикольная задача, на закрытие канала не нужен мьютекс, у него там под капотом свой есть

  • @MrLotrus
    @MrLotrus 5 днів тому

    1:04:00 Как ни странно говорят о таких вещах как секционирование, но ни разу не слышал про нормализацию таблиц в мок собесах. А ведь это база). И из вопроса непонятно как именно стоит разбивать таблицу. Может там 1000 колонок.

  • @MrLotrus
    @MrLotrus 5 днів тому

    1:00:00 По-моему правильней действительно посмотреть через запросы какая селективность. Вот так предполагая по диапазону есть риск ошибиться. Ведь записи по этим полям могут быть распределены неравномерно

  • @MrLotrus
    @MrLotrus 5 днів тому

    50:00 hash индекс имеет много нюансов и ограничений. Большой вопрос стоит ли его использовать ради возможного мизерного выигрыша

  • @thre-c7b
    @thre-c7b 7 днів тому

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

  • @KeibyBigBalls
    @KeibyBigBalls 9 днів тому

    Даня красавчик! Акиму спасибо за содержательное интервью, за пояснения и рекомендации к изучению

  • @blu3h4t
    @blu3h4t 10 днів тому

    ты знаешь что имеет аптаймы 9999 да? и это не го

  • @Andrii-mt8ef
    @Andrii-mt8ef 10 днів тому

    вкатунов с быдлокодинга на пхп тяжело на нормальные языки перетащить не просто так чтобы они выучили синтаксис и функции стандартной библиотеки а имели глубокие знания не только о го но и о общем программировании которое не применимо к пхп например потоки, tcp/udp и сисколлы - тестовые на го я бы делал не на написание каких-то рудиментарных рест апи а на что-то более интересное типа задач на конкурентность

  • @MouseSilent
    @MouseSilent 11 днів тому

    Зашел на видео увидев превью - "как я перешел с PHP на golang", я думаю, что ответ на этот вопрос такой - "Отлично перешел!". Так же можно было назвать видео "как я перешел с PHP на любой другой язык?" - "Замечательно перешел!!"

  • @Tosha.V
    @Tosha.V 11 днів тому

    научите меня бесплатно, очень хочется писать приложения работающие годами)

  • @3ombieautopilot
    @3ombieautopilot 11 днів тому

    Отличный видос! Будут ли еще задачи с собеседований? Вы отличный наставник.

    • @ipavlyukov
      @ipavlyukov 11 днів тому

      Конечно, впереди также видео с обзором неочевидных Баз Данных!

    • @Andrii-mt8ef
      @Andrii-mt8ef 10 днів тому

      @@ipavlyukov неочевидных в плане подводных камней? например различия в имплементации SQL? или какую-то диковинку вроде непопулярных баз данных? расскажите лучше про S3 во втором случае и про разные фичи вроде CAS

  • @andreybalatsan9336
    @andreybalatsan9336 11 днів тому

    Как меня порадовал смех, когда и nginx упал

  • @ivantimofeev2515
    @ivantimofeev2515 12 днів тому

    Ну к слову в первой задаче сейчас в Go 1.23 это уже не так

  • @buginsystem8925
    @buginsystem8925 13 днів тому

    А где-то можно почитать подробней про использование кэшей CPU при переборе слайсов/массивов? Об этом говорят на 16:20, не смог быстро нагуглить на английском

  • @Nikolai-k7h
    @Nikolai-k7h 17 днів тому

    Задачка крутая, вопросы норм. Но по устройству мапы слишком упарываетесь, как будто эти знания каждый день в работе используете.

  • @thenexia111
    @thenexia111 18 днів тому

    Хорошо объясняешь на самом деле. Но челы пришли смотреть как решать задачки на многопоточку без минимальной базы, поэтому много разжевывания того, что есть везде

  • @lisov1k492
    @lisov1k492 18 днів тому

    с кайфом

  • @MrLotrus
    @MrLotrus 20 днів тому

    Хорошая задачка. И асинхронность, и немного алгоритмы.

  • @Ярослав-е2ш
    @Ярослав-е2ш 20 днів тому

    Почему дедлок этр паника?

  • @Ярослав-е2ш
    @Ярослав-е2ш 21 день тому

    Вроде бы, clear(batch) не будет работать, он все значения к зиро вэлью приведёт просто, и длина не станет равна нулю

  • @davidikus29
    @davidikus29 21 день тому

    Ссылку на гитхаб конечно никто не оставил

  • @oo_ilin
    @oo_ilin 21 день тому

    В последней задаче mergeChannel решение с worker pool не корректно относительно первичной постановки задачи. В первом решении каналы читались все одновременно и как только в них поступали данные, они сразу вылетали в выходной канал. Как только канал закрывался, он переставал слушаться, но остальные продолжали одновременно сливать данные в выходной канал. Во втором решении мы по факту слушаем первых пять каналов и если никто из них не будет закрываться, то значения из всех остальных каналов не будут мержиться никогда. А это уже не мерж каналов. Так что второе решение не корректно с точки зрения бизнес логики

    • @thestrikem
      @thestrikem 21 день тому

      В условии не было обговорено, мы допускаем тот факт, что сейчас одновременно не считываем из всех каналов, которые нам передаются, потому что просто физически не можем это сделать, т.к. каналов слишком много. Релевантно будет повысить константу с 5 на большее число в продакшн варианте, в видео просто обсуждался воркер пул в контексте этой задачи. Здесь, к сожалению, мы жертвуем тем, что не читаем все каналы одновременно ради того, чтобы не взорваться и итеративно все проработать, поэтому где-то на той стороне допускаем, что какие-то горутины-отправители в канал припаркуются в ожидании прослушивания. Этот трейдофф стоило упомянуть в решении, согласен

  • @nikitayaskevich813
    @nikitayaskevich813 21 день тому

    Крутое и детальное объяснение, спасибо.

  • @alexzav1327
    @alexzav1327 23 дні тому

    Видео очень полезное, иногда возвращаюсь к нему, чтобы что-то вспомнить.

  • @thestrikem
    @thestrikem 23 дні тому

    Кстати, можно глянуть такой же ультимативный видео-ролик по слайсам у меня на канале)

  • @leshi_1
    @leshi_1 24 дні тому

    Совсем не читает 😂

  • @dmitrykorolev4943
    @dmitrykorolev4943 25 днів тому

    Илья из завтра, после прогули, видать начал готовить видео про тесты)) Уже когда-то давно видел твоё видео по теме go, у тебя хорошо получается объяснять, т.ч и про тесты будет интересно посмотреть! Удачи!

  • @lukin_io
    @lukin_io 25 днів тому

    @Эйч Навыки - менторская программа Вы б шарили исходники тех задач, которые задаете? :-) я что-то на ya.cc не нашел по той ссылке что в видео.

  • @QazaqCode
    @QazaqCode 26 днів тому

    Все зависит от details, а details зависит от fabric 😂😂

  • @staspanyukov4822
    @staspanyukov4822 26 днів тому

    DDD на мидла на тестовое.. никто не оценит, многие даже и не поймут… А так красиво все делаешь, явно не мидл)

  • @ChorumTheDevourer
    @ChorumTheDevourer 26 днів тому

    "Какого-то доктора". Далеки не хотят привлекать внимание только одного Доктора. "Доктор? Доктор Кто?"

  • @MrPaisho
    @MrPaisho 26 днів тому

    ещё замечу, что если в данном случае констраинт подходит, то в других случаях, когда не получится задать ограничения, можно использовать select for update

    • @ipavlyukov
      @ipavlyukov 26 днів тому

      Верно! Есть ситуации, когда можно использовать другой способ блокировки, а именно SELECT FOR UPDATE. В нашей же ситуации, он неприменим, поскольку в момент проверки в БД еще нет строки под блокировку.

    • @MrPaisho
      @MrPaisho 25 днів тому

      Есть воркшоп блокироваться можно об него

    • @ipavlyukov
      @ipavlyukov 25 днів тому

      @@MrPaisho Согласен, это отличный вариант, если мы готовы к тому, что заблокируем весь склад для конкурентных бронирований. Немножко снижаем RPS, зато упрощаем код и запросы к БД!

    • @MrPaisho
      @MrPaisho 25 днів тому

      @@ipavlyukov а как работает констраит? Он, насколько я понимаю блочит всю таблицу, разве нет?

    • @ipavlyukov
      @ipavlyukov 24 дні тому

      @@MrPaishoв том то и дело, что нет. Блокировка частичная, благодаря индексу.

  • @MrPaisho
    @MrPaisho 26 днів тому

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

    • @dpnpd
      @dpnpd 26 днів тому

      В общем и целом все используют go-project-layout и на него натягивают трехслойную архитектуру, сдались тогда когда в бизнесе много человек, чтобы не писать отсебятину и все было понятно, а не терять время на изучения новых патернов

  • @stanton_arch
    @stanton_arch 26 днів тому

    "Далеки" всё никак не угомонятся🤣

  • @artie5913
    @artie5913 27 днів тому

    43:10 разве такая проверка достаточна? Что если ваше новое бронирование будет содержать внутри себя время уже существующего?

    • @ipavlyukov
      @ipavlyukov 26 днів тому

      Верно, нужно это условие проверять в обе стороны. То есть и для нового отрезка и для старого. Именно потому, что условие становится громоздким, мы дальше используем готовый оператор OVERLAPS.

  • @insentijke
    @insentijke 27 днів тому

    56:18 канал из тикера возвращается же напрямую (ticker.C), метода .C() у time.Ticker нет

  • @crazy_fedor
    @crazy_fedor 28 днів тому

    Крутой интервьюер ❤

  • @kandidat8134
    @kandidat8134 28 днів тому

    все ждал когда он про депенденси инжекшн рассказывать начнет..

  • @nikitayaskevich813
    @nikitayaskevich813 28 днів тому

    Спасибо, классное интервью. Как я понял, встретить задачу по алгосам с Leetcode на собесе гофера почти невозможно - все дают на конкурентность)

  • @asylzhanagataeev9941
    @asylzhanagataeev9941 Місяць тому

    Зама машина🔥🔥🔥

  • @noname-sz4br
    @noname-sz4br Місяць тому

    а норм вообще со шпаргалки читать?

  • @rockkley9159
    @rockkley9159 Місяць тому

    Ответ на вопрос про "может ли быть длинна слайса больше чем его len" не понял.. "Можем взять от слайса слайс, и каждый раз он будет меньше". Это тут причём?

  • @ДмитрийБ-я4у
    @ДмитрийБ-я4у Місяць тому

    ставлю лайк, очень полезное видео