Golang вопросы собеседований
14.5K subscribers
711 photos
9 videos
1 file
505 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 tip: как правильно использовать sync.Pool

sync.Pool — это потокобезопасный пул временных объектов в Go. Он помогает переиспользовать объекты, снижая аллокации и нагрузку на GC. Отлично подходит для буферов и временных структур.

Важные моменты:
- GC может очистить пул — он не вечное хранилище.
- Объекты нужно сбрасывать перед возвратом, иначе вернутся «грязные» данные.
- Для больших или сильно разных по размеру объектов может привести к перерасходу памяти.

Рекомендации:
- Использовать только для короткоживущих и предсказуемых объектов.
- Сбрасывать или обнулять состояние перед Put.
- Профилировать приложение (`pprof`, `MemStats`) и смотреть эффект.

📌 Пример:

var bufPool = sync.Pool{
New: func() interface{} {
return make([]byte, 1024) // создаём буфер 1КБ
},
}

func process() {
buf := bufPool.Get().([]byte)
defer bufPool.Put(buf[:0]) // сброс длины перед возвратом
// работа с buf...
}


👉 Подробнее
👍42🔥1
Media is too big
VIEW IN TELEGRAM
🔥 Самые сложные вопросы для интервью в Google — как готовиться и что отвечать

🔤 Что чаще спрашивают
- Алгоритмы и структуры данных
- «Найдите k-й элемент в отсортированных массивах без слияния»
- «Минимальное окно подстроки с набором символов»
- «Пути с минимальной стоимостью в графе с ловушками/порталами»
- Системный дизайн (Senior+)
- «Спроектируйте сокращатель ссылок с 10 млрд кликов/день»
- «Реал-тайм чат с end-to-end доставкой и поиском по истории»
- «Видео-платформа: загрузка, хранение, CDN, рекомендации»
- Конкурентность и распределённые системы
- «Счётчик с глобальной монотонностью на шардированном кластере»
- «Идемпотентная очередь задач при ретраях и дедупликации»
- Поведенческие (бар-рейзер)
- «Расскажите про провал и чему вы научились»
- «Как вы влияли без формальных полномочий»

📌 Как решать задачи с кодом (шаблон)
1) Уточните ограничения и формат ввода/вывода.
2) Проговорите наивное решение → оценка O(...) по времени/памяти.
3) Предложите улучшение (двойной указатель, heap, prefix, DP, BFS/DFS, binary search on answer).
4) Кодируйте чисто: небольшие функции, проверки краёв, именование.
5) Прогоны тестов: пустой ввод, дубликаты, большие размеры, Unicode и т. п.
6) Завершите: сложность, варианты оптимизации, trade-offs.

🛠 **Системный дизайн — скелет ответа**
- Требования: функциональные/нефункциональные (RPS, латентность, доступность).
- API/схемы данных → оценка объёмов (QPS, storage, рост).
- Высокоуровневая архитектура: клиент, API-шлюз, сервисы, БД, кэш, очередь, CDN.
- Горячие пути: чтение/запись, кэширование, индексирование, консистентность.
- Масштабирование: шардинг, репликация, партиционирование, backpressure.
- Надёжность: ретраи, идемпотентность, дедупликация, алерты, SLO/SLI.
- Трейд-оффы и поэтапный rollout.

☠️ Типичные ловушки
- Пишете код сразу, не уточнив ограничения.
- Нет тестов на крайние случаи.
- Перескакиваете в микро-детали дизайна, не зафиксировав требования.
- Не называете trade-offs и метрики успеха.

🔖 Мини-шпаргалка по инструментам
- Два указателя — подстроки/окна/парные суммы.
- Heap/priority queue — k-наилучших элементов/поток слияния.
- Prefix/Suffix/Hash — подсчёты и проверки за O(1) на запрос.
- DP — оптимизация по состояниям (категории: линейная, на подмасках, по интервалам).
- Graph — BFS (минимум шагов), Dijkstra/0-1 BFS (взвешенные), Topo sort (DAG).
- «Binary search по ответу» — задачи вида «можно/нельзя при X».

⚡️ Как готовиться эффективно (4 шага)
1) Разделите тренировки: 60% кодинг, 25% дизайн, 15% поведенческие.
2) Решайте задачники по темам и фиксируйте паттерн решения (а не только код).
3) Мок-интервью: таймер 30–45 минут, проговаривайте мысли вслух.
4) Соберите портфель историй по STAR: конфликт, лидерство, фейл, влияние на метрики.

Удачи на интервью!

👉 Полное видео
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍53🥱1
🚀 Ошибки с sync.WaitGroup в Go и что нового в Go 1.25

В статье “Avoiding Common sync.WaitGroup Mistakes in Go” Джон Калхаун разбирает, как Go 1.25 помогает избежать частых ошибок при использовании sync.WaitGroup.

### 🔹 Ошибка: wg.Add внутри горутины
Часто встречающийся неправильный код:


for i := 0; i < 5; i++ {
go func() {
wg.Add(1)
defer wg.Done()
// работа…
}()
}
wg.Wait()


Проблема: wg.Add(1) вызывается уже внутри горутины. Она может не успеть выполниться до wg.Wait(), из-за чего программа зависает или ведёт себя некорректно.

В Go 1.25 go vet теперь предупреждает:
“WaitGroup.Add called from inside new goroutine”

Правильный вариант:

for i := 0; i < 5; i++ {
wg.Add(1)
go func() {
defer wg.Done()
// работа…
}()
}
wg.Wait()


🔹 Новый метод wg.Go()

Go 1.25 добавил удобный метод Go, который сам вызывает Add и Done:


for i := 0; i < 5; i++ {
wg.Go(func() {
// работа…
})
}
wg.Wait()


Этот код эквивалентен такому:


wg.Add(1)
go func() {
defer wg.Done()
f()
}()


Итог

- go vet теперь ловит ошибки, когда wg.Add вызывается внутри горутины.

- Новый метод wg.Go(...) упрощает код и снижает риск ошибок.

Подробнее: https://www.calhoun.io/avoiding-common-sync-waitgroup-mistakes/
27👍9👏6🎉3🥰1
🚀 Docker + Go pro tip

Go идеально подходит для Docker, так как можно собрать статически слинкованный бинарь и запускать его в ультра-лёгком образе.


# Этап сборки
FROM golang:1.23 AS builder
WORKDIR /src
COPY . .
RUN go mod download
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app .

# Финальный минимальный образ
FROM scratch
WORKDIR /app
COPY --from=builder /src/app .
ENTRYPOINT ["./app"]


💡 Такой приём:

- даёт контейнер весом в несколько МБ,
- убирает лишние зависимости,
- ускоряет доставку и запуск приложения.

@golang_interview
12🥱8👍4🔥2
🖥 Полный гайд по реальным SQL-вопросам с собеседований

Введение. Собеседования на позиции, связанные с данными (аналитики, инженеры, ученые данных), всё чаще включают нестандартные и продвинутые вопросы по SQL.

Большие технологические компании (Google, Amazon и др.) предъявляют высокие требования: важна не только правильность запроса, но и умение оптимизировать его и разбираться в реальных бизнес-данных.

В этом гайде мы разберем категории наиболее распространенных сложных SQL-задач с реальных собеседований – от платформ вроде DataLemur, LeetCode, StrataScratch – и подробно поясним решения.

Каждая задача сопровождена анализом: условие, оптимальный подход, используемые SQL-конструкции, возможные ошибки и финальное решение (для PostgreSQL и MySQL, с указанием различий где необходимо).

В конце добавлен отдельный раздел о современных базах данных, включая векторные БД (Pinecone, Weaviate, Milvus и др.), с примерами того, что могут спросить про них на собеседовании и как выглядят SQL-подобные запросы для работы с векторами.

📌 Читать гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍32
🚀 Микросервисная платформа для страхования

Yosef — это открытая микросервисная платформа для финансовой страховой отрасли, разработанная на .NET, Python, TypeScript и Golang. Она обеспечивает масштабируемость, гибкость и высокую наблюдаемость для современных страховых приложений.

🚀 Основные моменты:
- Микросервисная архитектура для легкости масштабирования
- Централизованное управление идентификацией и доступом
- Полный цикл страхования от оценки до создания полиса
- Высокая наблюдаемость с использованием Grafana и Prometheus
- Интеграция с современными инструментами безопасности

📌 GitHub: https://github.com/elyosemite/Yosef

#csharp
👍32🔥2🌚2🌭2🐳1
Хотите попробовать себя в бэкенде, но страшно уйти от фронта? 

Это чувство знакомо каждому фронтендеру: сложно оставить родной JS и Webpack и отправиться в неизведанный мир API, баз данных и Docker.

На открытом уроке мы покажем, что переход на Golang — это проще, чем кажется. Вместе разберём, как перенести знакомые фронтендеру навыки в мир Go, создадим работающий API всего за 15 минут и убедимся, что Go — это удобно, логично и выгодно.

📅 Не упускайте шанс открыть для себя новые горизонты в разработке! Встречаемся 17 сентября в 20:00 МСК.

👉 Запишитесь на открытый урок → https://tglink.io/e9b05b52aa38?erid=2W5zFG1cUV6

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
🤣4
👣 frizzante — минималистичный веб-сервер, написанный на языке Go, который использует Svelte в качестве шаблонизатора для серверного рендеринга страниц!

🌟 Проект предназначен для упрощения создания веб-приложений, сочетая производительность Go с современными возможностями Svelte.

🔐 Лицензия: GPL-2.0

🖥 Github
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔6👍2🔥2🥰1
Совет на 2025 год — переходите на Go.

На Go собирают банки, маркетплейсы и highload-сервисы. Зарплаты мидлов начинаются от 200 000 ₽, а у сеньоров доходят до 600 000 ₽.

А чтобы освоить его всего за 3 месяца — изучите канал Максима Аверина.

Его бэкграунд: Senior Golang/Python (X5, Lamoda, BestDoctor), 7 лет в бэкенде, экс-тимлид и PM, 300+ собеседований с 2018

На канале вы найдёте:

Советы, которые в разы повысят ваши шансы на перекат в Go

— Как легко выбивать себе ту ЗП, которую желаете: скрипты переговоров и шаблоны писем

— Как сделать мощный проект с code-review и уже через три недели пойти на собесы.

Огромный опыт, который ты можешь перенять абсолютно бесплатно. Переходи и изучай: @maksim_golang
🤣15👍3
🧩 Кастомизируемый JavaScript-парсер с минимальным ядром

Идея проста: ядро парсера — максимально маленькое. Все «дорогие» фичи JS включаются опционально. Так вы получаете нужный синтаксис без лишних накладных расходов.

🔧 Что это даёт
- Меньше зависимостей и памяти.
- Быстрее разбор там, где не нужен весь JS (например, без `class/async/regex`).
- Гибкая сборка под конкретный продукт: от валидации шаблонов до мини-рантайма.

🧱 Архитектура
- Feature flags: подключайте только нужные конструкции (например, import, jsx, template, `async`).
- Модульный AST: узлы для отключённых фич не создаются.
- Стримовый лексер: позволяет парсить большие файлы без полного буфера.
- Sandbox-режим: строгие лимиты глубины/времени для безопасной обработки.

▶️ Пример (Go, условный API)

package main

import (
"context"
"time"

"example.com/jsparser"
)

func main() {
ctx, cancel := context.WithTimeout(context.Background(), 200*time.Millisecond)
defer cancel()

p := jsparser.New(jsparser.Options{
Features: jsparser.Enable(
jsparser.Base, // идентификаторы, выражения, блоки
jsparser.ImportESM, // поддержка import/export
jsparser.TemplateLit, // шаблонные строки
// jsparser.Class, // можно не включать
// jsparser.Async, // можно не включать
// jsparser.JSX, // включайте по надобности
),
MaxDepth: 512,
MaxTokens: 2_000_000,
})

ast, err := p.Parse(ctx, []byte(`import x from "./m.js"; const s = `+"`hi ${x}`"+`;`))
if err != nil {
panic(err)
}
_ = ast // используйте AST для анализа/трансформаций
}


https://github.com/xjslang/xjs
🔥1