С 8 марта, девушки ❤️Времена нынче суровые) и мне кажется одна из вещей, которая реально помогает не сойти с ума, это юмор. Светлый добрый кринж)Желаю вам побольше такого кринжа, который разбавляет суровые будни и заставляет улыбнуться)А щипотку кринжа прикрепил в атач ахах
Сел поправить курс, а в итоге переписал половинуКороч решил я обновить курс по микросервисам. Ну там мелкие замечания поправить, косяки убрать, версии библиотек обновить. Думал на пару вечеров работы)Начал копаться и понеслось. После гайда по архитектуре захотелось добавить в сервисы больше реальной логики)Добавил сценарии с транзакциями, SELECT FOR UPDATE в Postgres, распределённые блокировки в Redis с идемпотентностью. Короч чтоб параллельные процессы не дрались за одни и те же данные)В кафке разобрал синхронные и асинхронные продюсеры, добавил батчевую обработку на консьюмере. В highload без батчей никуда)Ну и отдельный кайф, паттерны распределённых систем. Circuit Breaker, Retry, Rate Limiter, singleflight. Причём рейтлимитер не простецкий, а распределённый на Redis. Как в реальных проектах короч)Плюс платформенная библиотека с обогащением метрик из Postgres и Redis, observability из коробки, как в нормальных конторах)Домашки тоже переписал, описания конкретнее, контракты продуманы. Оформление наконец-то нормальное, билдит Markdown в красивый сайт, а не простыня текста как раньше)По итогу изменений столько что это уже не 2.0. Это 3-я версия моего курса по микросервисам.В отдельном канале курса показываю как всё это записываю, как меняю программу, как делаю задания. Там же инфа о запуске, эфирах и предзапись) Залетайhttps://t.me/+iH-lPlC2NthhODdihttps://t.me/+iH-lPlC2NthhODdihttps://t.me/+iH-lPlC2NthhODdi
Опрос про накрутку опытаОМ проводит новый опрос про накрутку опыта го проходить)Ситуация на рынке стала заметно хуже и такое ощущение, что и про накрутку ее противники стали орать ожесточеннееВ этом свете интересно узнать по циферкам че там на данный момент реально происходитСсылка на анонимный опрос: https://forms.gle/d7hYioDudRBuEPut5
context.WithValue - ты точно знаешь что там внутри?У меня на ютубе был ролик про контекст в Go - разобрали WithTimeout, WithCancel, WithValue, best practices. Но про внутрянку WithValue я там не копал.А тема интересная, потому что многие думают что это обычная мапа под капотом - типа O(1) поиск, наваливай туда чё хочешь и не парься. А там сюрприз)Контекст - это НЕ плоская map[key]value. Каждый вызов WithValue оборачивает родительский контекст в новый слой:type valueCtx struct { Context // родительский контекст key, val any // одна пара ключ-значение}Получается односвязный список. Вот смотри:ctx0 := context.Background()ctx1 := context.WithValue(ctx0, "a", 1)ctx2 := context.WithValue(ctx1, "b", 2)ctx3 := context.WithValue(ctx2, "c", 3)В памяти это выглядит так:ctx3 {key:"c", val:3} → ctx2 {key:"b", val:2} → ctx1 {key:"a", val:1} → ctx0 (empty)Когда ты вызываешь ctx3.Value("a") - он идёт по цепочке от конца к началу и сравнивает ключи. Это O(n) где n - глубина цепочки. Не O(1) как в мапе.И вот тут начинается жесть)Есть классический антипаттерн - "жирный контекст" в цикле:// так делать низяfor msg := range messages { ctx = context.WithValue(ctx, "msgID", msg.ID) process(ctx, msg)}Тут ctx растёт с каждой итерацией. После 1000 сообщений у тебя цепочка из 1000 слоёв. И каждый Value() идёт по всей этой цепочке.Фикс - одна строчка// шэдоуим переменнуюfor msg := range messages { ctx := context.WithValue(ctx, "msgID", msg.ID) process(ctx, msg)}ctx := вместо ctx =. Теперь каждую итерацию создаётся новый локальный ctx глубиной 1 от родителя, а не растущая бесконечная цепочка.Написал бенчмарк чтоб прочекать реально ли всё хреново будет, если антипаттерн заюзать. Кладём ключ на дно цепочки, наращиваем контекст другими ключами и ищем тот самый первый:type ctxKey intconst earlyKey ctxKey = -1func BenchmarkFatContext(b *testing.B) { for _, n := range []int{100, 1000, 10000, 100000} { b.Run(fmt.Sprintf("n=%d", n), func(b *testing.B) {
У меня куча рабочих процессов которые раньше жрали по полдня. Сейчас я нажимаю одну кнопкуГод назад начал пихать AI-агентов во всё подряд. Код, контент, аналитика, публикации - много чего уже перестроил. Но ещё больше предстоит)И я задумался - а ведь об этом интересно рассказывать отдельноКороч завёл новый канал)Там буду показывать как реально использую AI каждый день:🔍 кейсы из продакшена со скриншотами🔍 фейлы и косяки - когда нейронка делает дичь🔍 инструменты и пайплайны - что работает, что дропнул🔍 мысли о том куда катится разработка с AIЛюбая новость - только через мой опыт. Копипаст чейнджлогов и коллекций промтов не будетЗдесь на @olezhek28go всё остаётся как было - Go, архитектура, собесы, карьера. А если тебе интересно как я угораю по нейронкам залетай ЗАЛЕТЕТЬ В КАНАЛ ПРО AIЗАЛЕТЕТЬ В КАНАЛ ПРО AIЗАЛЕТЕТЬ В КАНАЛ ПРО AIВыложил туда уже поджигающий жопы пост ахаха
Почему 87% Go-роадмапов учат не тому Я проанализировал все популярные Golang-роадмапы на русском YouTube. 75% из них заканчиваются на уровне "вот тебе синтаксис, слайсы, мапы, хендлеры и база и всё". Graceful shutdown ни у кого нет. Health checks ни у кого.…Почему 87% Go-роадмапов учат не томупост для комментов)) а то у поста с кнопкой комменты пропадаютНапиши в комментариях: какой ты сейчас уровень — 1, 2, 3 или 4?
Почему 87% Go-роадмапов учат не томуЯ проанализировал все популярные Golang-роадмапы на русском YouTube. 75% из них заканчиваются на уровне "вот тебе синтаксис, слайсы, мапы, хендлеры и база и всё". Graceful shutdown ни у кого нет. Health checks ни у кого. Как сервис живёт в production тоже почти никто не рассказывает.Это рил проблема: ты задрачиваешь синтаксис по роадмапам, приходишь на собес, а тебя спрашивают про gRPC-интерцепторы, идемпотентность в Kafka и как ты мониторишь сервисы в проде.Я собрал всё, что видел за 5 лет работы гошником, в один ролик и разбил это на 4 уровня от первого собеса до senior-позиции:🔍 Уровень 1: минимум для собеса: синтаксис, горутины, HTTP, Postgres, тесты🔍 Уровень 2: реальная работа: Docker, архитектура 3 слоя, Redis, Kafka, обработка ошибок🔍 Уровень 3: production мышление: микросервисы, gRPC, Observability, Graceful Shutdown, CI/CD, K8s🔍 Уровень 4: путь к senior: System Design, CQRS, Saga, SLI/SLO, нагрузочное тестирование, софтыПо каждой теме что конкретно учить и примеры вопросов с собесов.СМОТРЕТЬ ВИДЕОСМОТРЕТЬ ВИДЕОСМОТРЕТЬ ВИДЕО👉 Жми кнопку, чтобы забрать RoadMap в pdf формате, чтобы после ролика было удобно вернуться к материалу)
Java или Go - у кого архитектура круче? Завтра буду на стриме у канала между скобок. Обсудим с Гришей опыт построение архитектур проектов на разных языках. У него есть опыт с джавой, у меня с гошкой. Принципы то общие, но нюансы свои везде имеются. Поделимся…начали) залетайте на стрим поболтать про архитектуру)