Грейды уже не гарантируют рост зарплаты, джоб-борды теряют эффективность, а AI вмешался в процесс собеседований так, что теперь компании делятся на лагеря — одни разрешают использовать ChatGPT, другие устраивают собесы с ручкой и листочком.
В карточках — пять главных трендов рынка найма: от умирания грейдинга до смещения фокуса на удержание сотрудников.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
Продолжаем удалять данные из кэша.
6. Distributed Cache: TTL + массовая очистка
Выстраивайте строгую схему ключей и при удалении — удаляйте все производные ключи.
// go-redis: массовая очистка по шаблону (осторожно с KEYS/SCAN на больших объёмах)
func PurgeUserKeys(ctx context.Context, rdb *redis.Client, id int64) error {
pattern := fmt.Sprintf("user:%d*", id)
iter := rdb.Scan(ctx, 0, pattern, 1000).Iterator()
var batch []string
for iter.Next(ctx) {
batch = append(batch, iter.Val())
if len(batch) == 500 {
if err := rdb.Del(ctx, batch...).Err(); err != nil { return err }
batch = batch[:0]
}
}
if err := iter.Err(); err != nil { return err }
if len(batch) > 0 { return rdb.Del(ctx, batch...).Err() }
return nil
}
7. Full-Text Search: delete + refresh + мердж сегментов
Удалили документ в БД — обязательно удалите его копию в индексе и дождитесь применения.
// elastic/go-elasticsearch: удаление документа и ожидание refresh
func EsDeleteUser(ctx context.Context, es *elasticsearch.Client, id string) error {
res, err := es.Delete("users", id, es.Delete.WithRefresh("wait_for"))
if err != nil { return err }
defer res.Body.Close()
return nil
}
Периодически запускайте force merge (операционно, не на горячем трафике), чтобы физически убрать «мертвые» сегменты.
8. База данных: очистка данных и следов
В самой БД есть несколько мест, куда попадают копии: WAL/Redo, buffer pool, материализованные представления, транзакционные/репликационные логи.
Минимальный чек-лист (PostgreSQL в примерах):
• DELETE/UPDATE данных.
• Обновление/перестроение materialized views.
• Политики хранения логов (WAL/archive) и VACUUM (FULL), ANALYZE.
• Очистка репликационного слота/логов при необходимости.
-- 1) Удаление
DELETE FROM users WHERE id = $1;
-- 2) Обновление материализованных представлений
REFRESH MATERIALIZED VIEW CONCURRENTLY mv_user_stats;
-- 3) Вакуум для физического освобождения (по оконным периодам, не на пике)
VACUUM (VERBOSE, ANALYZE) users;
-- В крайних случаях:
-- VACUUM FULL users; -- блокирует таблицу, используйте осторожно
-- 4) Политики логов/архива
-- настройте wal_keep_size, archive_timeout и ротацию архивов под SLA удаления
9. Согласованная оркестрация удаления: событийный подход
Надёжный способ: one-shot Use-Case «EraseUser», который последовательно триггерит очистку по всем слоям и ведёт аудит.
type Eraser interface {
EraseInDB(ctx context.Context, userID string) error
EraseInRedis(ctx context.Context, userID string) error
EraseInSearch(ctx context.Context, userID string) error
EraseInCDN(ctx context.Context, userID string) error
EraseInBrokers(ctx context.Context, userID string) error
}
func EraseUser(ctx context.Context, e Eraser, userID string) error {
steps := []func(context.Context, string) error{
e.EraseInDB,
e.EraseInRedis,
e.EraseInSearch,
e.EraseInCDN,
e.EraseInBrokers,
}
for _, step := range steps {
if err := step(ctx, userID); err != nil {
// логируем, шлём алерты, можно ретраить по политике
return fmt.Errorf("erase step failed: %w", err)
}
}
return nil
}
«Гарантированное» удаление — это оркестрация инвалидации по всем слоям с чёткой политикой хранения и короткими TTL, плюс периодическое физическое обслуживание (VACUUM/force-merge/compaction).
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍5🔥2
Иногда кажется, что все вокруг гении, а вы случайно прошли собеседование? Вот быстрый тест:
Если вы отметили 3+ пункта, синдром самозванца может влиять на вашу работу и настроение.
Первый шаг — признать его, второй — учиться объективно оценивать свои результаты.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
😢19👍4❤2🌚1
🧠 Построение решения с алгоритмами
Каждый разработчик сталкивался с ситуацией: задача есть, данных много, а какой алгоритм выбрать — непонятно.
Нужно быстро найти элемент? Если данные редко меняются — используйте бинарный поиск по отсортированному массиву. Если часто — подумайте о хэш-таблице.
Нужно обрабатывать большие объёмы данных? Начните с O(n) или O(n log n) алгоритмов (например, быструю сортировку). Избегайте O(n²) решений на миллионах элементов — они сломаются на проде.
Нужен баланс между памятью и скоростью? Иногда лучше выбрать алгоритм, который работает медленнее, но требует меньше памяти — например, итеративные подходы вместо рекурсивных.
Излишний перфекционизм может стать ловушкой: лучше взять достаточно хороший алгоритм и проверить его на практике, чем неделями подбирать идеальный вариант.
💬 А как вы выбираете алгоритмы? Сначала теорию, или сразу быстрый прототип и бенчмарки? Делитесь опытом 👇
P.S. Если хотите задать вопрос сообществу или поделиться историей, заполните нашу гугл-форму.
🐸 Библиотека Go-разработчика
#междусобойчик
Каждый разработчик сталкивался с ситуацией: задача есть, данных много, а какой алгоритм выбрать — непонятно.
Нужно быстро найти элемент? Если данные редко меняются — используйте бинарный поиск по отсортированному массиву. Если часто — подумайте о хэш-таблице.
Нужно обрабатывать большие объёмы данных? Начните с O(n) или O(n log n) алгоритмов (например, быструю сортировку). Избегайте O(n²) решений на миллионах элементов — они сломаются на проде.
Нужен баланс между памятью и скоростью? Иногда лучше выбрать алгоритм, который работает медленнее, но требует меньше памяти — например, итеративные подходы вместо рекурсивных.
Излишний перфекционизм может стать ловушкой: лучше взять достаточно хороший алгоритм и проверить его на практике, чем неделями подбирать идеальный вариант.
💬 А как вы выбираете алгоритмы? Сначала теорию, или сразу быстрый прототип и бенчмарки? Делитесь опытом 👇
P.S. Если хотите задать вопрос сообществу или поделиться историей, заполните нашу гугл-форму.
#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
В этом релизе язык стал чище, быстрее и удобнее. Убрали концепцию "core type", улучшили сборщик мусора — теперь он работает до 40% быстрее в реальных приложениях.
В видео быстро про все фичи и улучшения.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍4
В конце августа команда Ozon Tech собирала бэкендеров на GoSharp Weekend. Ребята поделились, как прошло событие.
Вечер на берегу Москвы-реки, доклады от ведущих экспертов Ozon Tech, кейтеринг после каждого выступления, лотерея, мерч и, конечно, afterparty. И уж не знаем, какая тут заслуга Ozon Tech, но закат у реки тоже показывали великолепный!
Когда видите приглашение на IT-тусовку от Ozon Tech, соглашайтесь, не думая. Эти ребята регулярно развивают не только ведущий e-com, но и культуру профессиональных мероприятий.
Все доклады доступны в записи по ссылке: https://s.ozon.ru/9w1Mzj8
Вечер на берегу Москвы-реки, доклады от ведущих экспертов Ozon Tech, кейтеринг после каждого выступления, лотерея, мерч и, конечно, afterparty. И уж не знаем, какая тут заслуга Ozon Tech, но закат у реки тоже показывали великолепный!
Когда видите приглашение на IT-тусовку от Ozon Tech, соглашайтесь, не думая. Эти ребята регулярно развивают не только ведущий e-com, но и культуру профессиональных мероприятий.
Все доклады доступны в записи по ссылке: https://s.ozon.ru/9w1Mzj8
👍5❤3🔥2👾1
🧑💻 Почему конкурентность ≠ параллелизм
В разработке часто встречаются такие термины, как конкурентность и параллелизм. Несмотря на то, что они оба касаются выполнения нескольких задач одновременно, эти понятия не одинаковы.
Конкурентность — это способ организации задач, при котором несколько операций могут быть запущены и выполняться в перекрывающиеся промежутки времени.
Параллелизм — это реальное выполнение нескольких задач одновременно, используя несколько процессорных ядер.
Основное различие между конкуренцией и параллелизмом заключается в том, что конкурентность ориентирована на управление задачами, которые могут выполняться в пересекающиеся моменты времени, в то время как параллелизм нацелен на одновременное выполнение нескольких задач на разных ядрах.
— Конкурентность может быть реализована на одном ядре, где задачи переключаются друг с другом.
— Параллелизм требует нескольких ядер, где задачи выполняются одновременно.
В некотором смысле, конкуренция — это управление временем, а параллелизм — это управление ресурсами.
Несмотря на различия, конкуренция и параллелизм часто работают вместе.
Программа может использовать конкурентность для управления множеством запросов или задач, ожидающих завершения (например, сетевая коммуникация), а затем переключиться на параллельное выполнение для выполнения вычислений.
🐸 Библиотека Go-разработчика
#буст
В разработке часто встречаются такие термины, как конкурентность и параллелизм. Несмотря на то, что они оба касаются выполнения нескольких задач одновременно, эти понятия не одинаковы.
Конкурентность — это способ организации задач, при котором несколько операций могут быть запущены и выполняться в перекрывающиеся промежутки времени.
Параллелизм — это реальное выполнение нескольких задач одновременно, используя несколько процессорных ядер.
Основное различие между конкуренцией и параллелизмом заключается в том, что конкурентность ориентирована на управление задачами, которые могут выполняться в пересекающиеся моменты времени, в то время как параллелизм нацелен на одновременное выполнение нескольких задач на разных ядрах.
— Конкурентность может быть реализована на одном ядре, где задачи переключаются друг с другом.
— Параллелизм требует нескольких ядер, где задачи выполняются одновременно.
В некотором смысле, конкуренция — это управление временем, а параллелизм — это управление ресурсами.
Несмотря на различия, конкуренция и параллелизм часто работают вместе.
Программа может использовать конкурентность для управления множеством запросов или задач, ожидающих завершения (например, сетевая коммуникация), а затем переключиться на параллельное выполнение для выполнения вычислений.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🥱3🤩2❤1
Традиционная модель управления «тимлид + продакт-менеджер» показывает ограничения в современных реалиях:
• Масштаб разработки — команды растут до 50-100+ человек
• Сложность продуктов — многокомпонентные системы с десятками интеграций
• Скорость изменений — релизы каждые 2-4 недели вместо квартальных обновлений.
На смену приходят роли, ориентированные на продуктовое мышление вместо простого исполнения задач.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱4❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁31❤7❤🔥3
🧑💻 Как должна расти зарплата разработчика
Для многих начальная зарплата — это важный ориентир, но с каждым годом появляется всё больше факторов, определяющих рост дохода: опыт, навыки, тип компании, регион и даже текущие тренды на рынке труда.
В некоторых случаях увеличение зарплаты может быть связано не с повышением уровня квалификации, а с переходом на более высокооплачиваемую должность или в более перспективную компанию. А как быть с работой в стартапах?
💬 Как вы думаете, насколько быстро должна расти зарплата разработчика? И когда рост должен закончится?
🐸 Библиотека Go-разработчика
#междусобойчик
Для многих начальная зарплата — это важный ориентир, но с каждым годом появляется всё больше факторов, определяющих рост дохода: опыт, навыки, тип компании, регион и даже текущие тренды на рынке труда.
В некоторых случаях увеличение зарплаты может быть связано не с повышением уровня квалификации, а с переходом на более высокооплачиваемую должность или в более перспективную компанию. А как быть с работой в стартапах?
#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱6
📰 Дайджест недели
Вторая неделя осени прошла и мы собрали для вас материалы, которые вы могли пропустить.
— Как находить баги, просто читая код
Один из самых ценных навыков программиста — это способность выявлять баги на этапе чтения исходного кода. Вместо того чтобы полагаться исключительно на тесты и итерации, стоит уделить время внимательному анализу кода.
— tRPC-Agent-Go
tRPC-Agent-Go — это фреймворк для создания интеллектуальных агентов, работающих на языке Go. Он поддерживает создание агентов с различной логикой работы: от простых цепочек до сложных параллельных и циклических структур.
— Как создать многопользовательскую игру с Pion и WebRTC
WebRTC DataChannels вместе с Go и Ebitengine этот подход позволяет быстро и эффективно строить игры, которые могут работать на разных платформах и устройствах.
— Чествование самых глупых решений в области ИИ
AI Darwin Awards — это награды, которые отмечают самые глупые и неосторожные применения технологий искусственного интеллекта, приведшие к катастрофическим последствиям. В 2025 году номинированы самые эпичные провалы.
— 5 трендов IT-найма 2025
🐸 Библиотека Go-разработчика
Вторая неделя осени прошла и мы собрали для вас материалы, которые вы могли пропустить.
— Как находить баги, просто читая код
Один из самых ценных навыков программиста — это способность выявлять баги на этапе чтения исходного кода. Вместо того чтобы полагаться исключительно на тесты и итерации, стоит уделить время внимательному анализу кода.
— tRPC-Agent-Go
tRPC-Agent-Go — это фреймворк для создания интеллектуальных агентов, работающих на языке Go. Он поддерживает создание агентов с различной логикой работы: от простых цепочек до сложных параллельных и циклических структур.
— Как создать многопользовательскую игру с Pion и WebRTC
WebRTC DataChannels вместе с Go и Ebitengine этот подход позволяет быстро и эффективно строить игры, которые могут работать на разных платформах и устройствах.
— Чествование самых глупых решений в области ИИ
AI Darwin Awards — это награды, которые отмечают самые глупые и неосторожные применения технологий искусственного интеллекта, приведшие к катастрофическим последствиям. В 2025 году номинированы самые эпичные провалы.
— 5 трендов IT-найма 2025
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека задач по Go | тесты, код, задания
Anonymous Quiz
27%
Паника
18%
Строка будет изменена
32%
Ошибка компиляции
2%
Код спросит точно ли вы хотите это сделать
22%
Будет создана копия строки
🤔8👍1
📌 Шпаргалка по API-дизайну
API — это “дверь” в ваш продукт. Через него общаются сервисы, приложения и даже бизнес-процессы.
Если дверь кривая и скрипит — пользователи не захотят ею пользоваться.
Составили для вас шпаргалку по апи.
1. Ясные имена
• Используйте простые и логичные названия.
• Коллекции — во множественном числе:
2. Идемпотентность
Повторные запросы ведут к одному и тому же результату. Представьте, что вы удаляете объект дважды подряд: корректный API просто вернёт подтверждение того, что объекта больше нет, а не создаст ошибку или неожиданный результат.
3. Пагинация
Нельзя выдавать тысячи строк ответа одним куском: это тормозит работу и перегружает сеть. Вместо этого нужно разбивать результаты на страницы. Существуют разные стратегии: от простого смещения до курсорной модели.
4. Сортировка и фильтры
Управляйте выборкой через query-параметры:
• Фильтр:
• Сортировка:
5. Связи ресурсов
В реальном мире данные редко живут изолированно: пользователи связаны с заказами, товары с категориями и так далее. Поэтому лучше строить маршруты вроде
6. Ограничение запросов
Ограничение вроде «100 запросов в минуту» помогает сохранить стабильность для всех пользователей. Обычно сервер сообщает об этом через заголовки ответа: X-RateLimit-Limit, X-RateLimit-Remaining.
7. Версионирование
API неизбежно меняется: появляются новые поля, меняется структура, иногда от чего-то приходится отказываться. Чтобы не ломать существующих клиентов, используется версионирование: кто-то работает с
Хороший апи — это не только про код.
🐸 Библиотека Go-разработчика
#буст
API — это “дверь” в ваш продукт. Через него общаются сервисы, приложения и даже бизнес-процессы.
Если дверь кривая и скрипит — пользователи не захотят ею пользоваться.
Составили для вас шпаргалку по апи.
1. Ясные имена
• Используйте простые и логичные названия.
• Коллекции — во множественном числе:
/users
, /orders
.2. Идемпотентность
Повторные запросы ведут к одному и тому же результату. Представьте, что вы удаляете объект дважды подряд: корректный API просто вернёт подтверждение того, что объекта больше нет, а не создаст ошибку или неожиданный результат.
3. Пагинация
Нельзя выдавать тысячи строк ответа одним куском: это тормозит работу и перегружает сеть. Вместо этого нужно разбивать результаты на страницы. Существуют разные стратегии: от простого смещения до курсорной модели.
4. Сортировка и фильтры
Управляйте выборкой через query-параметры:
• Фильтр:
/users?status=active
• Сортировка:
/users?sort=created_at&order=desc
5. Связи ресурсов
В реальном мире данные редко живут изолированно: пользователи связаны с заказами, товары с категориями и так далее. Поэтому лучше строить маршруты вроде
/users/{id}/orders
, которые сразу показывают, какие данные связаны между собой.6. Ограничение запросов
Ограничение вроде «100 запросов в минуту» помогает сохранить стабильность для всех пользователей. Обычно сервер сообщает об этом через заголовки ответа: X-RateLimit-Limit, X-RateLimit-Remaining.
7. Версионирование
API неизбежно меняется: появляются новые поля, меняется структура, иногда от чего-то приходится отказываться. Чтобы не ломать существующих клиентов, используется версионирование: кто-то работает с
/api/v1/users
, кто-то уже перешёл на /api/v2/users
.Хороший апи — это не только про код.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤4👾1
🔄 Go Task: новые улучшения для автоматизации задач
Обновление Go Task v3.45.3 привносит долгожданную поддержку встроенных утилит Windows:
Помимо этого:
• Поддержка глобальных конфигов в
• Новые свойства: insecure, verbose, concurrency, remote offline/timeout/expiry.
• Поддержка вложенных и wildcard-задач при выводе через
• Исправление паники при пустых хэш-переменных.
➡️ Репозиторий либы
🐸 Библиотека Go-разработчика
#свежак
Обновление Go Task v3.45.3 привносит долгожданную поддержку встроенных утилит Windows:
cp
, mv
, mkdir
и других команд.Помимо этого:
• Поддержка глобальных конфигов в
$XDG_CONFIG_HOME/task/taskrc.yml
или $HOME/.taskrc.yml
с расширенной схемой ключей и значений.• Новые свойства: insecure, verbose, concurrency, remote offline/timeout/expiry.
• Поддержка вложенных и wildcard-задач при выводе через
--list --json
.• Исправление паники при пустых хэш-переменных.
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥1😍1
🎧 Свежий Cup o' Go
После двух недель без выпусков Go авторы подкаста снова радуют сообществo. А в сообществе активность не утихает: доступны видео с GopherCon Europe в Берлине, Damien Neil делится лайфхаками по тестированию асинхронного кода, а новая версия gofumpt показывает, как безопасно работать с “голыми” возвратами функций.
➡️ Слушать подкаст
🐸 Библиотека Go-разработчика
#свежак
После двух недель без выпусков Go авторы подкаста снова радуют сообществo. А в сообществе активность не утихает: доступны видео с GopherCon Europe в Берлине, Damien Neil делится лайфхаками по тестированию асинхронного кода, а новая версия gofumpt показывает, как безопасно работать с “голыми” возвратами функций.
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM