Golang вопросы собеседований
14K subscribers
681 photos
7 videos
1 file
485 links
@notxxx1 - админ

@Golang_google - Golang для разработчиков

@itchannels_telegram - 🔥лучшие из ит

@golangl - chat

@golangtests - golang tests

@golang_jobsgo - go chat jobs

@ai_machinelearning_big_data - AI

@data_analysis_ml

РКН: clck.ru/3FmtKd
Download Telegram
⚙️ Хочешь понять, как пишутся реально быстрые системы на Go?

Вот полезные исходники VictoriaLogs:

Выжимка из 10 фишек, как разрабы выжали максимум из Go:

1. Свои bloom-фильтры → меньше I/O и лишней обработки
2. Колонно-ориентированное хранение → лучше сжатие и кэш
3. mmap + fallback на pread → zero-copy чтение
4. Lock-free object pool’ы и ареновые аллокаторы
5. JSON‑парсеры без reflection — сотни МБ/с на ядро
6. HTML‑шаблоны компилируются → почти скорость printf
7. Сжатие Zstd с учётом словаря → баланс CPU и трафика
8. Параллелизм на всех этапах + адаптивные лимиты
9. Scatter‑gather запись → saturate сеть
10. Быстрые хеши и random без блокировок

📚 Читается как гайд по системному Go. Обязательно к изучению.

https://github.com/VictoriaMetrics/VictoriaLogs
👍8🔥2🥰1
LangChain + SQL? Да, если это YDB.

LangChain — крутая штука, но его всегда приходится как-то интегрировать с данными.
И вот тут возникает интересная пара: YDB + LangChain. Почему? Потому что YDB можно дергать напрямую из LangChain, и при этом вы не теряете гибкость SQL.

На вебинаре покажут:

— Как устроены таблицы с эмбеддингами
— Как выглядит реальный запрос с фильтрацией
— Как работают две версии поиска: точный и приближённый

Подойдёт тем, кто устал писать обвязку под каждую новую LLM-фичу.
🤣1
🔧 Задача для собеседования на Go: Реализация кастомной WaitGroup на семафоре

Условие:
Нужно реализовать аналог sync.WaitGroup с использованием семафора на базе канала. Семафор должен ожидать завершения N горутин, используя минимальные аллокации памяти.

Решение:
package main

import (
"fmt"
)

type sema chan struct{}

func New(n int) sema {
return make(sema, n)
}

func (s sema) Inc(k int) {
for i := 0; i < k; i++ {
s <- struct{}{}
}
}

func (s sema) Dec(k int) {
for i := 0; i < k; i++ {
<-s
}
}

func main() {
numbers := []int{1, 2, 3, 4, 5}
n := len(numbers)

sem := New(n)

for _, num := range numbers {
go func(n int) {
fmt.Println(n)
sem.Inc(1)
}(num)
}

sem.Dec(n)
}


Пояснение:
1️⃣ Семафор реализован как канал пустых структур chan struct{} для минимизации аллокаций
2️⃣ Буферизированный канал создается с размером, равным количеству горутин
3️⃣ Каждая горутина при завершении кладет значение в канал (Inc)
4️⃣ Главная горутина ожидает завершения всех горутин, вычитывая значения (Dec)
5️⃣ Когда все горутины завершатся, канал опустеет и выполнение продолжится

@golang_interview
8👍4🔥2🌚1