- 89
- 542 339
Эйч Навыки - менторская программа
Приєднався 9 лип 2015
Эйч Навыки - менторская программа и сообщество Go, DevOps и Frontend разработчиков.
За 2 года мы с командой из 100+ менторов помогли уже более 400 разработчикам достичь своей цели и выйти на новый уровень дохода и задач.
55088fd7-3408-42f3-a5b2-d3195a98069a
dotiwuio
За 2 года мы с командой из 100+ менторов помогли уже более 400 разработчикам достичь своей цели и выйти на новый уровень дохода и задач.
55088fd7-3408-42f3-a5b2-d3195a98069a
dotiwuio
Реальные задачи с собесов по базам данных: SQL, оптимизация запросов, индексы
В этом видео Даниил Динько, старший разрабочтик в компании-лидере в международном кибербезе и ментор в Навыках, Аким Саввин, Team-lead в ВСК
и ментор в Навыках, провёл собеседование на Middle Go разработчика
Подробнее про Эйч Навыки: h.careers/skills?
Гофер-комьюнити: t.me/naviky_chat
Сервис развития карьеры Эйч: h.careers/?
и ментор в Навыках, провёл собеседование на 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: Разбор задач с собеседования
Открытое интервью на 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-разработчика
Переглядів 6 тис.8 місяців тому
Открытое собеседование на Go-разработчика
Открытое собеседование на Frontend разработчика
Переглядів 3,1 тис.8 місяців тому
Открытое собеседование на Frontend разработчика
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 }
Оно не асинхронное - в нём надо ждать закрытия канала in.
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 }
Не будет работать, если чтение происходит только из одного канала.
Спасибо за прогноз! Есть такой вопрос: У меня есть кошелёк 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 } ```
Мне кажется, в первом примере строки 65 и 70 лишние. Я за то чтобы был мьютекс чуть длиннее - с 63 строки по 72. А так - интересная тема (как и веселый нэйминг xD)
а sync.Once нельзя использовать по условиям задачи?
прикольная задача, на закрытие канала не нужен мьютекс, у него там под капотом свой есть
1:04:00 Как ни странно говорят о таких вещах как секционирование, но ни разу не слышал про нормализацию таблиц в мок собесах. А ведь это база). И из вопроса непонятно как именно стоит разбивать таблицу. Может там 1000 колонок.
1:00:00 По-моему правильней действительно посмотреть через запросы какая селективность. Вот так предполагая по диапазону есть риск ошибиться. Ведь записи по этим полям могут быть распределены неравномерно
50:00 hash индекс имеет много нюансов и ограничений. Большой вопрос стоит ли его использовать ради возможного мизерного выигрыша
самый бестолковый собес из всех что я встречал кто то из него вообще понял какие задачи на го этот парень может сделать?
Даня красавчик! Акиму спасибо за содержательное интервью, за пояснения и рекомендации к изучению
ты знаешь что имеет аптаймы 9999 да? и это не го
вкатунов с быдлокодинга на пхп тяжело на нормальные языки перетащить не просто так чтобы они выучили синтаксис и функции стандартной библиотеки а имели глубокие знания не только о го но и о общем программировании которое не применимо к пхп например потоки, tcp/udp и сисколлы - тестовые на го я бы делал не на написание каких-то рудиментарных рест апи а на что-то более интересное типа задач на конкурентность
Зашел на видео увидев превью - "как я перешел с PHP на golang", я думаю, что ответ на этот вопрос такой - "Отлично перешел!". Так же можно было назвать видео "как я перешел с PHP на любой другой язык?" - "Замечательно перешел!!"
научите меня бесплатно, очень хочется писать приложения работающие годами)
Отличный видос! Будут ли еще задачи с собеседований? Вы отличный наставник.
Конечно, впереди также видео с обзором неочевидных Баз Данных!
@@ipavlyukov неочевидных в плане подводных камней? например различия в имплементации SQL? или какую-то диковинку вроде непопулярных баз данных? расскажите лучше про S3 во втором случае и про разные фичи вроде CAS
Как меня порадовал смех, когда и nginx упал
Ну к слову в первой задаче сейчас в Go 1.23 это уже не так
А где-то можно почитать подробней про использование кэшей CPU при переборе слайсов/массивов? Об этом говорят на 16:20, не смог быстро нагуглить на английском
Задачка крутая, вопросы норм. Но по устройству мапы слишком упарываетесь, как будто эти знания каждый день в работе используете.
Хорошо объясняешь на самом деле. Но челы пришли смотреть как решать задачки на многопоточку без минимальной базы, поэтому много разжевывания того, что есть везде
с кайфом
Хорошая задачка. И асинхронность, и немного алгоритмы.
Почему дедлок этр паника?
Вроде бы, clear(batch) не будет работать, он все значения к зиро вэлью приведёт просто, и длина не станет равна нулю
Для мап clear удаляет элементы
Ссылку на гитхаб конечно никто не оставил
В последней задаче mergeChannel решение с worker pool не корректно относительно первичной постановки задачи. В первом решении каналы читались все одновременно и как только в них поступали данные, они сразу вылетали в выходной канал. Как только канал закрывался, он переставал слушаться, но остальные продолжали одновременно сливать данные в выходной канал. Во втором решении мы по факту слушаем первых пять каналов и если никто из них не будет закрываться, то значения из всех остальных каналов не будут мержиться никогда. А это уже не мерж каналов. Так что второе решение не корректно с точки зрения бизнес логики
В условии не было обговорено, мы допускаем тот факт, что сейчас одновременно не считываем из всех каналов, которые нам передаются, потому что просто физически не можем это сделать, т.к. каналов слишком много. Релевантно будет повысить константу с 5 на большее число в продакшн варианте, в видео просто обсуждался воркер пул в контексте этой задачи. Здесь, к сожалению, мы жертвуем тем, что не читаем все каналы одновременно ради того, чтобы не взорваться и итеративно все проработать, поэтому где-то на той стороне допускаем, что какие-то горутины-отправители в канал припаркуются в ожидании прослушивания. Этот трейдофф стоило упомянуть в решении, согласен
Крутое и детальное объяснение, спасибо.
Видео очень полезное, иногда возвращаюсь к нему, чтобы что-то вспомнить.
Кстати, можно глянуть такой же ультимативный видео-ролик по слайсам у меня на канале)
Совсем не читает 😂
Илья из завтра, после прогули, видать начал готовить видео про тесты)) Уже когда-то давно видел твоё видео по теме go, у тебя хорошо получается объяснять, т.ч и про тесты будет интересно посмотреть! Удачи!
@Эйч Навыки - менторская программа Вы б шарили исходники тех задач, которые задаете? :-) я что-то на ya.cc не нашел по той ссылке что в видео.
Все зависит от details, а details зависит от fabric 😂😂
DDD на мидла на тестовое.. никто не оценит, многие даже и не поймут… А так красиво все делаешь, явно не мидл)
"Какого-то доктора". Далеки не хотят привлекать внимание только одного Доктора. "Доктор? Доктор Кто?"
ещё замечу, что если в данном случае констраинт подходит, то в других случаях, когда не получится задать ограничения, можно использовать select for update
Верно! Есть ситуации, когда можно использовать другой способ блокировки, а именно SELECT FOR UPDATE. В нашей же ситуации, он неприменим, поскольку в момент проверки в БД еще нет строки под блокировку.
Есть воркшоп блокироваться можно об него
@@MrPaisho Согласен, это отличный вариант, если мы готовы к тому, что заблокируем весь склад для конкурентных бронирований. Немножко снижаем RPS, зато упрощаем код и запросы к БД!
@@ipavlyukov а как работает констраит? Он, насколько я понимаю блочит всю таблицу, разве нет?
@@MrPaishoв том то и дело, что нет. Блокировка частичная, благодаря индексу.
я правильно понимаю, что в доменной модели должны быть сущности, которые все используют, а по факту получается, что в том виде, котором они есть, они нафиг никому не сдались? Какая-то шизофрения эти паттерны.
В общем и целом все используют go-project-layout и на него натягивают трехслойную архитектуру, сдались тогда когда в бизнесе много человек, чтобы не писать отсебятину и все было понятно, а не терять время на изучения новых патернов
"Далеки" всё никак не угомонятся🤣
43:10 разве такая проверка достаточна? Что если ваше новое бронирование будет содержать внутри себя время уже существующего?
Верно, нужно это условие проверять в обе стороны. То есть и для нового отрезка и для старого. Именно потому, что условие становится громоздким, мы дальше используем готовый оператор OVERLAPS.
56:18 канал из тикера возвращается же напрямую (ticker.C), метода .C() у time.Ticker нет
Крутой интервьюер ❤
все ждал когда он про депенденси инжекшн рассказывать начнет..
Спасибо, классное интервью. Как я понял, встретить задачу по алгосам с Leetcode на собесе гофера почти невозможно - все дают на конкурентность)
Зама машина🔥🔥🔥
а норм вообще со шпаргалки читать?
Ответ на вопрос про "может ли быть длинна слайса больше чем его len" не понял.. "Можем взять от слайса слайс, и каждый раз он будет меньше". Это тут причём?
ставлю лайк, очень полезное видео