🎥 Запись моего доклада с Backend-Meetup Balun!
Наконец-то дошли руки поделиться😅
В этом году я, увы, пропустил все большие конференции, но оставить сезон без выступлений — было бы преступлением. Поэтому — держите запись моего доклада👉 ссылка
Тема — микросервисы и как их быстро и легко писать с нуля.
Митап получился насыщенным: живые обсуждения, острые вопросы и крутая атмосфера🔥
Спасибо организаторам и участникам за энергию и интерес!
В следующем году точно надо наверстать упущенное 😉
🔗 Все доклады с митапа можно посмотреть в плейлисте
Наконец-то дошли руки поделиться😅
В этом году я, увы, пропустил все большие конференции, но оставить сезон без выступлений — было бы преступлением. Поэтому — держите запись моего доклада
Тема — микросервисы и как их быстро и легко писать с нуля.
Митап получился насыщенным: живые обсуждения, острые вопросы и крутая атмосфера
Спасибо организаторам и участникам за энергию и интерес!
В следующем году точно надо наверстать упущенное 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥12❤9👏4🆒2🏆1
Вот вам задачка на воскресное утро ☀️
👩💻 Тонкости миграций Postgres: как сделать поле явно
Есть огромная таблица some_big_table в которую непрерывно идут запросы на запись и чтение.
В этой таблице есть колонка foo_field, которая изначально
Разработчик предлагает следующую миграцию:
0001_migration.sql:
Ваш вердикт на ревью?
Поставьте реакцию 👍 — если считаете миграцию верной, 🤡 — если не верной.
______________________
Ответ будет в следующем посте
NOT NULL и не уронить базу?Есть огромная таблица some_big_table в которую непрерывно идут запросы на запись и чтение.
В этой таблице есть колонка foo_field, которая изначально
NULLABLE, но фактически мы всегда туда пишем значение. И вот мы хотим сделать её явно NOT NULL.Разработчик предлагает следующую миграцию:
0001_migration.sql:
BEGIN;
ALTER TABLE some_big_table
ADD CONSTRAINT some_big_table_foo_field_not_null
CHECK (foo_field IS NOT NULL) NOT VALID;
ALTER TABLE some_big_table
VALIDATE CONSTRAINT some_big_table_foo_field_not_null;
COMMIT;
Ваш вердикт на ревью?
Поставьте реакцию 👍 — если считаете миграцию верной, 🤡 — если не верной.
______________________
Ответ будет в следующем посте
Please open Telegram to view this post
VIEW IN TELEGRAM
🤡20👍5🔥2👀1
Отличная дискуссия получилась — и да, большинство гуру Postgres ответило верно! Давайте спокойно разберёмся, почему.
«Совсем плохой» способ — просто сделать колонку NOT NULL:
Почему так делать очень плохо на большой таблице?
Чтобы убедиться, что в столбце нет
Правильный подход: через
Идея — разделить «включить проверку для новых записей» и «проверить историю» на два шага.
1. Добавляем ограничение без проверки истории (не блокирует обновления надолго):
С флагом
2. Отдельно валидируем историю:
Что именно могло заблокировать таблицу в нашем кейсе?
Наша SQL миграция выглядит так (все в одной транзакции):
В примере я специально указал, что оба действия выполнятся в рамках одной транзакции (многие это заметили).
Однако, когда мы используем сторонние решения для миграций (напрмер goose), мы получаем неявное повдение — миграции в одном файле будут также исполняться в рамках одной транзакции (если не укажем обратное).
В таком случае:
- Мы берем блокировку ACCESS EXCLUSIVE для добавления
- Далее эта блокировка будет удерживаться до конца работы транзакции
- Валидация нагрузки происходит долго, что приводит к тому, что транзакция превращается в долгоживующую => таблица заблокирована надолго.
Практический вывод: Делайте
А чтобы не переживать насчет ваших миграций, вы можете настроить линтер: squawkhq
«Совсем плохой» способ — просто сделать колонку NOT NULL:
ALTER TABLE some_big_table
ALTER COLUMN foo_field SET NOT NULL;
Почему так делать очень плохо на большой таблице?
Чтобы убедиться, что в столбце нет
NULL, Postgres сканирует всю таблицу. Такие изменения вокруг ADD CONSTRAINT/SET NOT NULL обычно требуют ACCESS EXCLUSIVE — самый сильный DDL-лок, конфликтующий со всеми операциями, включая чтения. Это легко превращается в stop the world на таблице, если операция длится долго.Правильный подход: через
NOT VALID → VALIDATEИдея — разделить «включить проверку для новых записей» и «проверить историю» на два шага.
1. Добавляем ограничение без проверки истории (не блокирует обновления надолго):
ALTER TABLE some_big_table
ADD CONSTRAINT some_big_table_foo_field_not_null
CHECK (foo_field IS NOT NULL) NOT VALID;
С флагом
NOT VALID добавление не сканирует таблицу и может быстро зафиксироваться. Новые/изменённые строки уже обязаны удовлетворять условию.2. Отдельно валидируем историю:
ALTER TABLE some_big_table
VALIDATE CONSTRAINT some_big_table_foo_field_not_null;
VALIDATE CONSTRAINT сканирует только существующие строки и берёт уже SHARE UPDATE EXCLUSIVE (гораздо мягче), так что записи не блокируются так сурово, как при прямом SET NOT NULL.Что именно могло заблокировать таблицу в нашем кейсе?
Наша SQL миграция выглядит так (все в одной транзакции):
BEGIN;
ALTER TABLE ... ADD CONSTRAINT ... CHECK (...) NOT VALID;
ALTER TABLE ... VALIDATE CONSTRAINT ...;
COMMIT;
В примере я специально указал, что оба действия выполнятся в рамках одной транзакции (многие это заметили).
Однако, когда мы используем сторонние решения для миграций (напрмер goose), мы получаем неявное повдение — миграции в одном файле будут также исполняться в рамках одной транзакции (если не укажем обратное).
В таком случае:
- Мы берем блокировку ACCESS EXCLUSIVE для добавления
CONSTRAINT- Далее эта блокировка будет удерживаться до конца работы транзакции
- Валидация нагрузки происходит долго, что приводит к тому, что транзакция превращается в долгоживующую => таблица заблокирована надолго.
Практический вывод: Делайте
ADD CONSTRAINT ... NOT VALID и фиксируйте сразу (быстрый COMMIT). А VALIDATE CONSTRAINT запускайте отдельной миграции и, желательно, в спокойный период.А чтобы не переживать насчет ваших миграций, вы можете настроить линтер: squawkhq
🔥12❤11⚡4👍3🙏1
Cloudflare нашли редчайший баг — прямо в компиляторе Go для ARM64
Да, это не опечатка: не рантайм, не гасе condition в их коде, а чистый косяк в сгенерированном машинном коде Go. И баг был настолько редким, что проявиться он мог только в инфраструктуре масштаба Cloudflare при 84 миллионах НТТР-запросов в секунду.
Не завидую парням, сам пол недели фикшу баги в драйвере на go…
Да, это не опечатка: не рантайм, не гасе condition в их коде, а чистый косяк в сгенерированном машинном коде Go. И баг был настолько редким, что проявиться он мог только в инфраструктуре масштаба Cloudflare при 84 миллионах НТТР-запросов в секунду.
Не завидую парням, сам пол недели фикшу баги в драйвере на go…
Хабр
Cloudflare нашли редчайший баг — прямо в компиляторе Go для ARM64
Да, это не опечатка: не рантайм, не race condition в их коде, а чистый косяк в сгенерированном машинном коде Go . И баг был настолько редким, что проявиться он мог только в инфраструктуре масштаба...
🤔5 2
This media is not supported in your browser
VIEW IN TELEGRAM
Признавайтесь, у кого так было?)
😁6🔥5💯3🤣3
⚠️ Когда API молчит - страдает клиент
Представьте, у вас есть метод:
Вы вызываете
А сервер молча возвращает 100.
Без ошибки и без всякого предупреждения.
Почему? Да потому что в коде спрятан жёсткий limit = 100, о котором никто не знал.
Такие вещи ломают доверие к API.
Когда контракт неявный, клиенту остаётся только гадать: это баг, фильтр, лимит, пагинация или оптимизация?
А ещё хуже, когда такое поведение всплывает на production, и выясняется, что система теряла данные неделями (классика жанра).
💡 Хорошее API — прозрачное API.
— если есть лимиты, они должны быть явно задокументированы или возвращаться в ответе;
Часто вижу, что разработчики в gRPC не оставляют никаких комментариев в
— если что-то отфильтровано, клиент должен понимать, почему;
даже простая метка
— если есть пагинация, требуйте её явно от всех потребителей;
не стоит выдавать неполный ответ и надеяться, что клиент догадается, сколько можно запросить за раз.
Хорошо спроектированное и описанное API спасает от множетсво багов и недопониманий в будущем. Проводите ревью API тщательно, господа.
P.S. На мой взгляд хорошее gRPC API описано примерно так:
А вы как считаете?
Представьте, у вас есть метод:
rpc GetUsers(GetUsersRequest) returns (GetUsersResponse);
message GetUsersRequest {
repeated string ids = 1;
optional string city = 2;
int32 page = 3;
int32 page_size = 4;
}
Вы вызываете
GetUsers с 200 идентификаторами, ожидаете получить всех.А сервер молча возвращает 100.
Без ошибки и без всякого предупреждения.
Почему? Да потому что в коде спрятан жёсткий limit = 100, о котором никто не знал.
Такие вещи ломают доверие к API.
Когда контракт неявный, клиенту остаётся только гадать: это баг, фильтр, лимит, пагинация или оптимизация?
А ещё хуже, когда такое поведение всплывает на production, и выясняется, что система теряла данные неделями (классика жанра).
💡 Хорошее API — прозрачное API.
— если есть лимиты, они должны быть явно задокументированы или возвращаться в ответе;
Часто вижу, что разработчики в gRPC не оставляют никаких комментариев в
.proto - поверьте, просто спецификации НЕДОСТАТОЧНО. Клиент должен понимать не только что вызвать, но и чего ожидать.— если что-то отфильтровано, клиент должен понимать, почему;
даже простая метка
filtered=true , partial=true или список missing_ids уже делает API дружелюбнее.— если есть пагинация, требуйте её явно от всех потребителей;
не стоит выдавать неполный ответ и надеяться, что клиент догадается, сколько можно запросить за раз.
Хорошо спроектированное и описанное API спасает от множетсво багов и недопониманий в будущем. Проводите ревью API тщательно, господа.
P.S. На мой взгляд хорошее gRPC API описано примерно так:
// Pagination - пагинация
message Pagination {
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {
json_schema: {
noscript: "Pagination"
denoscription: "Пагинация"
}
};
// page_number - номер страницы. По умолчанию 1
uint64 page_number = 1 [
json_name = "page_number",
(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {default: "1"}
];
// page_size - размер страницы. По умолчанию 50
uint64 page_size = 2 [
json_name = "page_size",
(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {default: "50"}
];
}
// PageInfo - информация о странице
message PageInfo {
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {
json_schema: {
noscript: "PageInfo"
denoscription: "Информация о странице"
}
};
// total_count - общее кол-во записей
uint64 total_count = 1 [json_name = "total_count"];
// count - кол-во полученных записей на текущей странице
uint64 count = 2 [json_name = "count"];
// page_number - текущий номер страницы
uint64 page_number = 3 [json_name = "page_number"];
// page_total - общее кол-во страниц
uint64 page_total = 4 [json_name = "page_total"];
// page_size - размер страницы
uint64 page_size = 5 [json_name = "page_size"];
}
А вы как считаете?
👍13💯3🔥2🗿2👏1
Go 2025: главное из исследования DevCrowd
1. Почти половина Go-разработчиков уже используют AI в работе.
В этом плане я отстаю от большинства: я все еще не настроил в IDE нормального AI ассистента...
2. Многие совмещают Go с Python, но не собираются уходить с Go.
Сам грешу python-ом частенько)
На мой взгляд после разработки на Go у человека меняется подход к написанию кода на python: код становится чище и понятнее. Никто не замечал за собой?
3. Большинство сообщества — мидлы и сеньоры, джунов почти нет.
Зрелое комьюнити, это радует🥲
🔗 Исследование Go-разработчиков 2025 от DevCrowd
1. Почти половина Go-разработчиков уже используют AI в работе.
В этом плане я отстаю от большинства: я все еще не настроил в IDE нормального AI ассистента...
2. Многие совмещают Go с Python, но не собираются уходить с Go.
Сам грешу python-ом частенько)
На мой взгляд после разработки на Go у человека меняется подход к написанию кода на python: код становится чище и понятнее. Никто не замечал за собой?
3. Большинство сообщества — мидлы и сеньоры, джунов почти нет.
Зрелое комьюнити, это радует🥲
Please open Telegram to view this post
VIEW IN TELEGRAM
Исследование рынка Go-разработчиков, 2025
DevCrowd вместе с Авито провели исследование рынка Go-разработчиков
❤4 2
Go давно вышел за рамки веба. На нём уже пишут базы и прокси, видео-сервисы, блокчейн-узлы, компиляторы и даже игры — и делают это не ради эксперимента, а в продакшене.
В новом сезоне онлайн-конференции Podlodka Go Crew (10-14 ноября) разбираемся, как язык открывает путь к более сложным и интересным задачам — от инфраструктуры и DevEx до real-time и системных сервисов — и почему это отличный шанс вырасти как инженер.
В программе:
⚙️ Как сделать быстрый клиент для базы данных. Разберём, как реализовать асинхронное взаимодействие с БД на Go на примере Tarantool, какие оптимизации реально ускоряют код и как эволюционировать от наивного решения до производительного, — вместе с Олегом Жуковцом (VK Tech).
🌐 Как управлять сетями прямо из Go. Посмотрим, как устроены интерфейсы в Linux, как ими управлять и собирать сложные топологии без боли. Узнаем, как работает CNI в Kubernetes и почему мир виртуальных сетей держится на Go, в докладе Даниила Губанова (Точка).
🔒 Блокчейн как real-time система. Без маркетинга: только Go, каналы, горутины и контроль над хаосом. Разберём блокчейн как инженерную задачу: сеть, криптографию и конкуррентность — вместе с Ниной Лукиной (01tech).
💬 Круглый стол «Когда Go выходит за рамки». Поговорим с нанимающими тимлидами о том, кого ищут под нестандартные Go-задачи: где важны инженерная зрелость, осознанность и умение разбираться в системах под капотом, — и как туда попасть.
💡Тем, кто хочет вырасти из CRUD-сервисов и попробовать себя в системных и инфраструктурных задачах, будет особенно полезно.
🗓 Билеты уже на https://podlodka.io/gocrew
А с моим промокодом
В новом сезоне онлайн-конференции Podlodka Go Crew (10-14 ноября) разбираемся, как язык открывает путь к более сложным и интересным задачам — от инфраструктуры и DevEx до real-time и системных сервисов — и почему это отличный шанс вырасти как инженер.
В программе:
⚙️ Как сделать быстрый клиент для базы данных. Разберём, как реализовать асинхронное взаимодействие с БД на Go на примере Tarantool, какие оптимизации реально ускоряют код и как эволюционировать от наивного решения до производительного, — вместе с Олегом Жуковцом (VK Tech).
🌐 Как управлять сетями прямо из Go. Посмотрим, как устроены интерфейсы в Linux, как ими управлять и собирать сложные топологии без боли. Узнаем, как работает CNI в Kubernetes и почему мир виртуальных сетей держится на Go, в докладе Даниила Губанова (Точка).
🔒 Блокчейн как real-time система. Без маркетинга: только Go, каналы, горутины и контроль над хаосом. Разберём блокчейн как инженерную задачу: сеть, криптографию и конкуррентность — вместе с Ниной Лукиной (01tech).
💬 Круглый стол «Когда Go выходит за рамки». Поговорим с нанимающими тимлидами о том, кого ищут под нестандартные Go-задачи: где важны инженерная зрелость, осознанность и умение разбираться в системах под капотом, — и как туда попасть.
💡Тем, кто хочет вырасти из CRUD-сервисов и попробовать себя в системных и инфраструктурных задачах, будет особенно полезно.
🗓 Билеты уже на https://podlodka.io/gocrew
А с моим промокодом
leoscode получите скидку 🎁🔥8👍6
За последние недели IT индустрия вновь напомнила о собственной уязвимости. Казалось бы, облачные гиганты, оперирующие инфраструктурой планетарного масштаба, давно превратились в символ безусловной надёжности. Однако цепочка свежих событий быстро возвращает нас к реальности, в которой даже самые выверенные механизмы дают сбой.
История с недавним инцидентом в AWS, показала, насколько тонко устроены процессы внутри огромных распределенных систем. Одно неудачное изменение в конфигурации, не замеченное в череде рутинных операций, вызвало эффект домино, который коснулся множества сервисов по всему миру. И хотя инженеры Amazon действовали быстро и профессионально, сама масштабность произошедшего заставляет задуматься: насколько хрупкой становится сложная система, если в её основании лежит человеческая ошибка.
Почти синхронно мир наблюдал еще один эпизод, на этот раз связанный с Cloudflare. Согласно их официальному отчёту, проблема началась после обновления конфигурации, затронувшего один из ключевых маршрутизаторов. Изменение привело к перегрузке маршрутизации, из-за которой часть сетевого трафика попросту перестала доходить до нужных узлов. В результате множество сайтов и сервисов, опиравшихся на Cloudflare как на основной сетевой слой, оказались недоступны или работали с серьёзными перебоями.
Именно в такие моменты становится ясно, насколько много держится на том, что обычно называется инженерным вниманием к деталям.
Эти истории объединяет одно: вопреки общей вере в безупречность глобальных платформ, за ними стоят люди. Со всеми сильными сторонами, профессионализмом и колоссальным опытом, но и с той самой человеческой склонностью к ошибке, от которой никто не застрахован. И если даже AWS и Cloudflare сталкиваются с провалами крупного масштаба, то каждому из нас стоит задуматься о собственной практике.
Наша профессия устроена таким образом, что одно решение, принятое на автомате, способно запустить цепочку последствий, которая станет заметна далеко за пределами вашего рабочего окружения. Поэтому способность несколько раз перепроверить собственные действия, проявить щепетильность там, где многие проходят мимо, превращается не просто в профессиональный навык, а в инструмент выживания.
Сегодня, когда инфраструктура усложняется с каждым кварталом, а изменения накатывают одно за другим, внимание к мелочам уже нельзя считать формальностью. Это становится тем самым обязательным условием, которое помогает вашей системе спокойно пройти хотя бы до следующего понедельника😅
История с недавним инцидентом в AWS, показала, насколько тонко устроены процессы внутри огромных распределенных систем. Одно неудачное изменение в конфигурации, не замеченное в череде рутинных операций, вызвало эффект домино, который коснулся множества сервисов по всему миру. И хотя инженеры Amazon действовали быстро и профессионально, сама масштабность произошедшего заставляет задуматься: насколько хрупкой становится сложная система, если в её основании лежит человеческая ошибка.
Почти синхронно мир наблюдал еще один эпизод, на этот раз связанный с Cloudflare. Согласно их официальному отчёту, проблема началась после обновления конфигурации, затронувшего один из ключевых маршрутизаторов. Изменение привело к перегрузке маршрутизации, из-за которой часть сетевого трафика попросту перестала доходить до нужных узлов. В результате множество сайтов и сервисов, опиравшихся на Cloudflare как на основной сетевой слой, оказались недоступны или работали с серьёзными перебоями.
Именно в такие моменты становится ясно, насколько много держится на том, что обычно называется инженерным вниманием к деталям.
Эти истории объединяет одно: вопреки общей вере в безупречность глобальных платформ, за ними стоят люди. Со всеми сильными сторонами, профессионализмом и колоссальным опытом, но и с той самой человеческой склонностью к ошибке, от которой никто не застрахован. И если даже AWS и Cloudflare сталкиваются с провалами крупного масштаба, то каждому из нас стоит задуматься о собственной практике.
Наша профессия устроена таким образом, что одно решение, принятое на автомате, способно запустить цепочку последствий, которая станет заметна далеко за пределами вашего рабочего окружения. Поэтому способность несколько раз перепроверить собственные действия, проявить щепетильность там, где многие проходят мимо, превращается не просто в профессиональный навык, а в инструмент выживания.
Сегодня, когда инфраструктура усложняется с каждым кварталом, а изменения накатывают одно за другим, внимание к мелочам уже нельзя считать формальностью. Это становится тем самым обязательным условием, которое помогает вашей системе спокойно пройти хотя бы до следующего понедельника😅
💯8❤3 1
Степан выступал с крутым докладом на конференции E-Code (хоть я и далек от C# все-равно рекомендую к просмотру), где мы, собственно, познакомились лично. Как выяснилось, мы оба закончили Бауманку и учились на одном факультете.
Ставь палец вверх
Решили записать подкаст, в котором я поделился своим личными инсайтами и рассказал про свой путь в IT и карьерном треке. Будет полезно Cтажер/Junior разработчикам и студентам.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤5🔥3🏆1
Найм в IT требует реформ
Всё чаще замечаю, что текущая система отбора кандидатов и проведения собеседований разработчиков не работает — или работает исключительно по теории вероятности!
Не раз видел, как сильных инженеров «списывают» буквально на скрининге из-за того, что они не знают какие-то тонкости языка или не смогли ответить на хитрый вопрос, который по сути бесполезен.
При этом, лично зная таких инженеров, видел, как они могут «в одну каску» затащить сложный проект и довольно быстро разобраться в любой технологии самостоятельно.
Бывает и так, что кандидат — отличный «книжный эксперт»: натренированный на собеседованиях (в лучшем случае, а в худшем — благодаря ChatGPT), он блестяще проходит интервью и выглядит увереннее остальных. А потом выходит на работу и… решения получаются с багами или просто черновыми, задачи задерживаются, требуется постоянный контроль за разработчиком и валидация его решений.
Про отбор резюме на уровне HR молчу — это отдельная проблема индустрии. От части это и вина самих разработчиков: резюме нужно уметь составлять грамотно (отдельный вид искусства так сказать). Всё осложняется тем, что в больших компаниях есть «задачники», куда какие-то эксперты когда-то занесли «оригинальные» вопросы, и теперь всех гоняют по ним, как на экзамене. Но главный вопрос — на что они нацелены? Создают ли эти вопросы нужную воронку? Возможно, раньше так и было, но сейчас… сейчас нужно что-то новое.
Знаю, что в последнее время некоторые руководители практикуют очные собеседования (дабы ChatGPT не смог помочь), но, к сожалению, это не всегда возможно. А что остаётся? Возможно, стоит просматривать GitHub кандидата? — так не все туда что-то дельное пушат. Может быть, тогда live-кодинг реальных задач? — одного часа может и не хватить. Или техническое тестовое задание из доменной области «на дом» со сроком выполнения? (Однажды я выполнял такое задание — было интересно: смог поработать с CGO и TCP-протоколом на низком уровне. Правда, фидбэк по выполнению так и не получил…)
Я пока нахожусь в поиске лучших вопросов и задач, которые нацелены на проверку именно нужных компетенций.
Были ли у вас интересные, необычные задачи или вопросы на собеседовании, которые вам запомнились?
Всё чаще замечаю, что текущая система отбора кандидатов и проведения собеседований разработчиков не работает — или работает исключительно по теории вероятности!
Не раз видел, как сильных инженеров «списывают» буквально на скрининге из-за того, что они не знают какие-то тонкости языка или не смогли ответить на хитрый вопрос, который по сути бесполезен.
При этом, лично зная таких инженеров, видел, как они могут «в одну каску» затащить сложный проект и довольно быстро разобраться в любой технологии самостоятельно.
Бывает и так, что кандидат — отличный «книжный эксперт»: натренированный на собеседованиях (в лучшем случае, а в худшем — благодаря ChatGPT), он блестяще проходит интервью и выглядит увереннее остальных. А потом выходит на работу и… решения получаются с багами или просто черновыми, задачи задерживаются, требуется постоянный контроль за разработчиком и валидация его решений.
Про отбор резюме на уровне HR молчу — это отдельная проблема индустрии. От части это и вина самих разработчиков: резюме нужно уметь составлять грамотно (отдельный вид искусства так сказать). Всё осложняется тем, что в больших компаниях есть «задачники», куда какие-то эксперты когда-то занесли «оригинальные» вопросы, и теперь всех гоняют по ним, как на экзамене. Но главный вопрос — на что они нацелены? Создают ли эти вопросы нужную воронку? Возможно, раньше так и было, но сейчас… сейчас нужно что-то новое.
Знаю, что в последнее время некоторые руководители практикуют очные собеседования (дабы ChatGPT не смог помочь), но, к сожалению, это не всегда возможно. А что остаётся? Возможно, стоит просматривать GitHub кандидата? — так не все туда что-то дельное пушат. Может быть, тогда live-кодинг реальных задач? — одного часа может и не хватить. Или техническое тестовое задание из доменной области «на дом» со сроком выполнения? (Однажды я выполнял такое задание — было интересно: смог поработать с CGO и TCP-протоколом на низком уровне. Правда, фидбэк по выполнению так и не получил…)
Я пока нахожусь в поиске лучших вопросов и задач, которые нацелены на проверку именно нужных компетенций.
Были ли у вас интересные, необычные задачи или вопросы на собеседовании, которые вам запомнились?
💯14👍7❤5🆒1
Статья — это туториал, в котором на пальцах пытаюсь рассказать об аутентификации в сервисах и как это можно реализовать на Go.
Вышла первая часть, вторая выйдет уже в начале следующего года.
Приятного чтения
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Разработчики всё ещё путают JWT, JWKS, OAuth2 и OpenID Connect — разбираем на примерах. Часть 1
JWT, SSO, OAuth, OpenID Connect — названия, знакомые каждому разработчику. В коде токены встречаются повсюду. Кажется, что всё понятно. Но стоит спросить: «Зачем...
❤9🔥8👍6👏3🆒1
ПРОРЫВ В ОБЛАСТИ ПРОТОКОЛОВ КОНСЕНСУСА
На днях узнал о шокирующей новости — появлении ACID транзакций в Apache Cassandra (в распределенной leaderless базе КАРЛ!)
Да да, случилась по-сути революция в Computer Science: то что еще недавно считалось невозможным иметь строгие и быстрые распредленные транзакции в leaderless базах данных, теперь — реальность!
За счет чего такой прорыв?
Умные инженеры (видимо еще и очень упорные) в Apple при содействии Университета Мичигана, решили бросить вызов одной из самых сложных проблем в индустрии — быстрые транзакции в leaderless-архитектурах, и разработали новый протокол консенсуса ACCORD.
Accord — это первый практичный протокол, который одновременно дает:
-🤯 Strict-Serializable Consistency: Serializable и Linearizable (подробнее про модели согласованности)
-🧠 Leaderless: Отсутствие глобального лидера
-🚀 Устойчивый к Contention: конкурирующие транзакции не приводят к гарантированному slow-path (за счет reorder buffer)
-⚡️ Согласование ВСЕГО ЗА 1 ROUND TRIP в оптимистичном сценарии и за 2 Round Trip при конфликтах
- ⚛️ Может работать на произвольных multi-key / multi-shard транзакций (ваши ключи могут быть в разных партициях и даже таблицах, и при этом вы можете атомарно их обновить)
Что это дает?
Этот протокол дает современным БД возможность быть одновременно масштабируемыми, быстрыми и транзакционными — без лидеров, без компромиссов и без атомных часов. Это кардинально меняет целый класс AP-систем — таких как Cassandra (а в перспективе, вероятно, и другие базы данных начнут интегрировать Accord). Уверен, что в ближайшие пять лет мы увидим массовый переход компаний на подобные решения, и это станет новым технологическим трендом.
Уже в следующей версии Cassandra должны добавить поддержку транзакций. Классическая задача резервации стоков теперь будет решаема на Cassandra:
На днях узнал о шокирующей новости — появлении ACID транзакций в Apache Cassandra (в распределенной leaderless базе КАРЛ!)
Да да, случилась по-сути революция в Computer Science: то что еще недавно считалось невозможным иметь строгие и быстрые распредленные транзакции в leaderless базах данных, теперь — реальность!
За счет чего такой прорыв?
Умные инженеры (видимо еще и очень упорные) в Apple при содействии Университета Мичигана, решили бросить вызов одной из самых сложных проблем в индустрии — быстрые транзакции в leaderless-архитектурах, и разработали новый протокол консенсуса ACCORD.
Accord — это первый практичный протокол, который одновременно дает:
-
-
-
-
- ⚛️ Может работать на произвольных multi-key / multi-shard транзакций (ваши ключи могут быть в разных партициях и даже таблицах, и при этом вы можете атомарно их обновить)
Что это дает?
Этот протокол дает современным БД возможность быть одновременно масштабируемыми, быстрыми и транзакционными — без лидеров, без компромиссов и без атомных часов. Это кардинально меняет целый класс AP-систем — таких как Cassandra (а в перспективе, вероятно, и другие базы данных начнут интегрировать Accord). Уверен, что в ближайшие пять лет мы увидим массовый переход компаний на подобные решения, и это станет новым технологическим трендом.
Уже в следующей версии Cassandra должны добавить поддержку транзакций. Классическая задача резервации стоков теперь будет решаема на Cassandra:
BEGIN TRANSACTION
// Find out how many PlayStations are left
LET inventory = (SELECT inventory_count FROM ks.products WHERE item = 'Play Station 5');
// Return the inventory_count
SELECT item, inventory_count FROM ks.products WHERE item = 'Play Station 5';
// Take a PlayStation out of inventory and put it in users shopping cart
IF inventory.inventory_count > 0 THEN
UPDATE ks.products SET inventory_count -= 1 WHERE item = 'Play Station 5';
INSERT INTO ks.shopping_cart(user_name, item, item_count) VALUES ('leo', 'Play Station 5', 1);
END IF
COMMIT TRANSACTION;
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20🤔4❤3😱3👍2
Настало время подвести итоги уходящего 2025 года…
И так в этом году я:
— НЕ набрал 1000 подписчиков в канале
— НЕ завел свой youtube канал
— НЕ запустил 3 курса как планировал
— НЕ стал unit лидом
— НЕ жму 100-ку, хотя весь год хожу в зал
— НЕ прочитал 12 книг
— НЕ выступил ни на одной конференции
— Ушел из Balun.Course
— НЕ увеличил капитал своей подушки безопасности
С точки зрения реализации этот год совсем не продуктивный.
Однако, за этот год я:
— провел зимовки в теплых странах как и мечтал еще со школы
— встретил новый год на море и провожаю его также на море
— посетил 7 РАЗНЫХ стран (мой рекорд): был в самой посещаемой стране в восточной Азии — Японии, а также в самых не туристических странах юго-восточной Азии — Лаос и Мьянма.
— увидел гору Фудзи без единого облачка с ее фирменной снежной вершиной
— был на концерте Travis Scott, о котором мечтал уже лет 10. Так еще и Kanye West был секретным гостем!
— прокатился на Nissan R34 по ночному Токио как в Форсаже 3
— летал на парамоторе среди гор в Лаосе
— остановился в отеле InterContinental (мечта после просмотра Джона Уика в 15 лет)
— Сфотографировался у башен Петронас в Куала-Лумпуре
— Был в городе, напоминающий Cyber Pank — Гуанчжоу
— кормил оленей в Наре и был на чайной церемонии в традиционной одежде в Киото
Пожалуй, это был первый год в моей жизни, когда я не работал в режиме 24/7 7 дней в неделю, не бежал куда-то как хомяк в колесе… Я понял, что «успешный успех» и размеренный образ жизни с путешествиями — вещи не совместимые. Однако, в жизни нужны перерывы между «спринтами» и кажется 2025 год был одним из таких.
Хочу искренне поблагодарить вас, мои подписчики, за ваши комментарии, реакции и обсуждения в постах, для меня это важно.
Поздравляю Вас с наступающим Новым годом!
Не расстраивайтесь, если чего-то не успели в этом году, возможно, вы сделали что-то для себя или реализовали какую-то свою давнюю мечту, а это всегда дороже всего!
С Новым Годом 🍾 🎆 🎄 🎁
И так в этом году я:
— НЕ набрал 1000 подписчиков в канале
— НЕ завел свой youtube канал
— НЕ запустил 3 курса как планировал
— НЕ стал unit лидом
— НЕ жму 100-ку, хотя весь год хожу в зал
— НЕ прочитал 12 книг
— НЕ выступил ни на одной конференции
— Ушел из Balun.Course
— НЕ увеличил капитал своей подушки безопасности
С точки зрения реализации этот год совсем не продуктивный.
Однако, за этот год я:
— провел зимовки в теплых странах как и мечтал еще со школы
— встретил новый год на море и провожаю его также на море
— посетил 7 РАЗНЫХ стран (мой рекорд): был в самой посещаемой стране в восточной Азии — Японии, а также в самых не туристических странах юго-восточной Азии — Лаос и Мьянма.
— увидел гору Фудзи без единого облачка с ее фирменной снежной вершиной
— был на концерте Travis Scott, о котором мечтал уже лет 10. Так еще и Kanye West был секретным гостем!
— прокатился на Nissan R34 по ночному Токио как в Форсаже 3
— летал на парамоторе среди гор в Лаосе
— остановился в отеле InterContinental (мечта после просмотра Джона Уика в 15 лет)
— Сфотографировался у башен Петронас в Куала-Лумпуре
— Был в городе, напоминающий Cyber Pank — Гуанчжоу
— кормил оленей в Наре и был на чайной церемонии в традиционной одежде в Киото
Пожалуй, это был первый год в моей жизни, когда я не работал в режиме 24/7 7 дней в неделю, не бежал куда-то как хомяк в колесе… Я понял, что «успешный успех» и размеренный образ жизни с путешествиями — вещи не совместимые. Однако, в жизни нужны перерывы между «спринтами» и кажется 2025 год был одним из таких.
Хочу искренне поблагодарить вас, мои подписчики, за ваши комментарии, реакции и обсуждения в постах, для меня это важно.
Поздравляю Вас с наступающим Новым годом!
Не расстраивайтесь, если чего-то не успели в этом году, возможно, вы сделали что-то для себя или реализовали какую-то свою давнюю мечту, а это всегда дороже всего!
С Новым Годом 🍾 🎆 🎄 🎁
🔥24❤🔥7🎉5❤3😍1💔1