А вы слышали про Skypro? Там классно объясняют программирование, я что-то похожее проходил на их курсах когда-то. друзья посоветовали попробовать, говорят, там все хорошо объясняют
в ГО есть ООП но только сам мамкин про ооп ничего не знает - это к вопросу о монолитах. Гдеж такие дураки находятся? На голом С написаны монолиты и прикинь - язык не ООП? Кааак?! разве такое возможно!!
А вы слышали про Skypro? что думаете об обучении там? я помню свой первый заказ на написание какого-то легкого кода сразу после курсов, было весело, сейчас уже ломаю более сложные коды
Серго машина, убийца😂 На а если серьезно, кто не обсирался на собесах? Тот кто никогда не собесился, это обязательный этап становления разработчика, тем более бэкэндера, имхо
Блин как же смешно смотреть на молодых не опытных душнил теоретиков ))) сам то хоть отвечай нормально, про атомики херню ляпнул тут ладно думаю фиг с ним даже душнил можно не спрашивать про модели памяти и когерентность кешей итд, но то что вот ты просишь не путать сбалансированное с бинарным деревом это уже зашквар , От куда вообще взялось вас столько много душнил теоретиков 😂
Чел, не позорься) В go нет таких понятий, как модели памяти в отличии от плюсов. Не знаю, за реализацию в go, но если бы в плюсах в мьютексах ты использовал compare_exchange_strong, то там действительно бы в asm был бы lock на доступ к shared memory. И это только для реализаци x86, в arm мб по другому. Не думаю, что есть смысл так углубляться с действительно слабым кандидатом. Про бинарные деревья и сбалансированные не понял доеба. Удивишься, но не все деревья - бинарные, не все бинарные деревья - сбалансированные. А еще уууу, есть такие вещи, как графы, если уж быть обобщеннее) Жалко, что знание теории и желание копаться в устройстве теперь трактуется как душнота 😭
@@ReezonBeatbox не позорься ты чувак , вопрос вообще был не про го , причем тут го или плюсы , вопрос был про атомики , у тебя го типа все отменил ???) про деревья в этом то и прикол , что прикинь бинарные деревья тоже есть сбалансированные ) и после этого как можно сказать не путай сбалансированое дерево с бинарным ?) так что ты походу душнила , и позоришься ты сам , иди грызи науку про модели памяти и как устроена многопоточка , там и на атомики наткнешся
@@ReezonBeatbox и речь не идет про желание копаться в теории , речь идет про реальные навыки и хотя бы реальные теоретические вопросы при собесе , а тут явное душнила теоретик , а за тягу к знаниям никто и не порицает
И снова этот интервьюер... Он вообще готовится к интервью, которые проводит? Дал вторую задачу, которую сам толком не смог объяснить, накидал забагованный вариант и - "хорошо, погнали к следующей задаче". Ребята, что за брак вы гоните? На канале всего несколько толковых опытных ревьюеров, остальные персонажи непонятные, нельзя так. Дальше смотреть уже не мог, просто потеря времени.
На самом деле, вторая задачка - это просто паттерн дольно известный Debounce, просто интевьюер не смог его упаковать в свое творчекое изложение, поскольку в паре публикаций где я встречал описание его реализации примеры были другие. Ну хоть свое пытался сделать
Тарантиновские диалоги: - Дима ты пойдёшь гофером работать? - У меня опыта на го нету, я свитчер. - Мне кажется надо идти - Мне тоже так кажется - А почему ты не идёшь? - Я иду.
со 2 задачей мне кажется что то не то как то сильно интервьевер заморочился и мне кажется ввел в заблуждение и сам написал чехарду package main import ( "fmt" "sync" "time" ) func main() { wg := &sync.WaitGroup{} mu := sync.Mutex{} var isWorked bool var sharedStore string for i := 0; i < 10; i++ { wg.Add(1) go func(id int) { defer wg.Done() defer mu.Unlock() mu.Lock() fmt.Println("start worker id:", id) if !isWorked { fmt.Println("request slow api worker id: ", id) sharedStore = verySlowApi() isWorked = true return } fmt.Println("finish worker id:", id, sharedStore) fmt.Println("read result slow api:", sharedStore) }(i) } wg.Wait() } func verySlowApi() string { time.Sleep(5 * time.Second) return "ok" } вот на Мьютексе простая реализация примерно
Позволю себе оставить комментарий с замечаниями, на которые бы я обращал внимание. Может кому-то будет полезно. Задание 1 (✅): - хоть и попал пальцем в небо с sync.WaitGroup, но не очень внятно или вообще не проговорил роль этого объекта здесь (✅⛔) - почему-то написал круглые скобки возле sync.WaitGroup, но я бы списал это на волнение, хотя такие вещи запоминаются при использовании (✅⛔) - задача частая, видно, что человек не готовился к этой секции, но решил (✅) Задание 2: я сам не совсем понял, в каком реальном кейсе понадобится возвращать закешированные результаты при параллельных запросах, но при повторном обращении снова лезть в чужой сервис. Я бы понял, если мы в принципе возвращали закешированные результаты и инвалидировали кеш спустя N-ое время. Или использовали паттерн для отсекания повторных запросов. А тут какой-то сферический конь в вакууме без контекста, поэтому пропущу Задание 3 (⛔): - есть понимание, что существовала проблема с переиспользованием переменной в конструкции for range (✅) - но нет понимания, почему так происходило и как оно работало до 1.22, а значит не читается release notes, не делается ресёрч по проблеме и не щупается самостоятельно (⛔) - "горутины распределяются случайно" - незнание жизненного цикла горутины в планировщике (⛔) - есть понимание, что существует некий black box механизм для I/O операций, но как такового понятия netpoller не прозвучало, то есть снова ресёрч не происходил (✅⛔) Задание 4 (⛔): - есть базовое представление внутренностей каналов и принцип их работы с горутинами, но в очень неструктурированном виде (✅⛔) - не видит разницы в передаче данных горутинами между make(chan int) и make(chan int, 1) (⛔) Задание 5 (⛔): - нет понимания, как устроен slice изнутри, а следовательно, незнание таких граблей со срезами и append (⛔) Задание 6: я бы спросил дополнительно, почему изначально receiver решил сделать с указателем, в чём разница без указателей и как лучше. Резюме: мне не совсем понятно, почему это собеседование на позицию мидл. Либо был расчёт на то, что в процессе решения человек будет объяснять ход мыслей и останавливаться для объяснения каких-то особенностей или внутренностей, либо это высмеивание самой позиции. Потому что у мидла должна быть огромная экспертиза и некоторые задания должны были пролетать со свистом. Но как сказал человек, он изучает язык всего месяц. Если он мидл в PHP, то это очень скудный багаж знаний за месяц.
Самое странное, что собеседуемый отвечает на вопросы - я понимаю что он хорошо ответил - а Аким Апачев не понимает, т к ждет "ключевое слово", без которого ответ не засчитывает. Карго-культ какой то
Клевый собес, Парамошкин в очередной раз доказал, что не зря носит очки, но с L3 кэшами прям таки задушнил. Хочу сказать, что применительно к задачам на ГО - знания про проц кэши только усугубляют существование программирующему индивиду через порчу нервной системы