🗑 Сборщик мусора в Go — тема, которая кажется скучной, пока ваше приложение не начинает “есть” память, тормозить и загадочно падать в проде.
📗 На открытом уроке мы разберём, как устроен GC: от триколорной маркировки до последних улучшений в новых версиях языка. Мы покажем, как измерить и проанализировать работу сборщика с помощью GODEBUG и pprof, а также разберём практические приёмы снижения нагрузки — от оптимизации указателей до пулов объектов.
❗️ Поймёте, как Golang взаимодействует с системой и где скрываются узкие места, влияющие на производительность. После урока сможете писать код, который не “утекает”.
Регистрируйтесь 📆 21 октября в 19:00 МСК и разберитесь, как приручить сборщик мусора, а не бороться с ним: https://otus.pw/5fc5i/?erid=2W5zFJek4ue
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
📗 На открытом уроке мы разберём, как устроен GC: от триколорной маркировки до последних улучшений в новых версиях языка. Мы покажем, как измерить и проанализировать работу сборщика с помощью GODEBUG и pprof, а также разберём практические приёмы снижения нагрузки — от оптимизации указателей до пулов объектов.
❗️ Поймёте, как Golang взаимодействует с системой и где скрываются узкие места, влияющие на производительность. После урока сможете писать код, который не “утекает”.
Регистрируйтесь 📆 21 октября в 19:00 МСК и разберитесь, как приручить сборщик мусора, а не бороться с ним: https://otus.pw/5fc5i/?erid=2W5zFJek4ue
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
🥱2
Что такое Kriti Images
- Высокопроизводительный сервис для трансформации изображений в реальном времени, написанный на языке Go
- Использует URL-базированный API: параметры трансформации передаются через URL
- Открытая альтернатива коммерческим решениям вроде Cloudflare Images и ImageKit
Возможности
- Манипуляции над изображением через URL: изменение размера, обрезка (crop), поворот, размытие и др.
- Поддержка популярных форматов: JPEG, PNG, WebP
- Режимы масштабирования: contain, cover, crop, pad, squeeze, scaledown
- Корректировки цвета: яркость, контраст, насыщенность, гамма
- Настройка фона: цвета в HEX, RGB или именованные цвета
- Оптимизация под производительность и кеширование (правильные HTTP-заголовки)
#golang
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤🔥3🔥3🥴1
23 октября(в четверг!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Go-разработчика.
Как это будет:
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Go-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_go_bot
Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣2
Вам дан массив целых чисел nums. Требуется найти все уникальные тройки (a, b, c), такие что a + b + c = 0. Порядок элементов в тройке не важен, дубликаты недопустимы.
Идея оптимального решения
1. Сортируем массив (O(n log n)), чтобы упростить поиск и контроль дубликатов.
2. Фиксируем первый элемент i, затем две указки l и r («два указателя») пробегают подмассив справа/слева:
Если сумма < 0 → сдвигаем l++,
Если сумма > 0 → сдвигаем r--,
Если сумма == 0 → сохраняем тройку и пропускаем дубликаты вокруг l и r.
3. Пропускаем дубликаты и для i, чтобы не повторять стартовую точку.
Сложность: O(n^2) по времени и O(1) доп. памяти не считая результата.
Реализация:
package main
import (
"fmt"
"sort"
)
func threeSum(nums []int) [][]int {
sort.Ints(nums)
n := len(nums)
res := make([][]int, 0)
for i := 0; i < n; i++ {
// Пропускаем одинаковые стартовые значения
if i > 0 && nums[i] == nums[i-1] {
continue
}
// Ранний выход: дальше только положительные
if nums[i] > 0 {
break
}
l, r := i+1, n-1
for l < r {
sum := nums[i] + nums[l] + nums[r]
switch {
case sum < 0:
l++
case sum > 0:
r--
default:
res = append(res, []int{nums[i], nums[l], nums[r]})
// Пропускаем дубликаты для l
lVal := nums[l]
for l < r && nums[l] == lVal {
l++
}
// Пропускаем дубликаты для r
rVal := nums[r]
for l < r && nums[r] == rVal {
r--
}
}
}
}
return res
}
func main() {
examples := [][]int{
{-1, 0, 1, 2, -1, -4},
{0, 0, 0, 0},
{-2, 0, 1, 1, 2},
}
for _, nums := range examples {
fmt.Println("Input:", nums)
fmt.Println("Triplets:", threeSum(append([]int{}, nums...)))
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍7🔥5