Golang вопросы собеседований
14.5K subscribers
703 photos
9 videos
1 file
498 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
✔️ Сheating daddy - поможет готовься к самым сложным собеседованиям эффективно.

Инструмент помогает:
• Тренировать ответы для HR и техблока.
• Подбирать точные формулировки и структуры ответов.
• Разбирать примеры кода и типовые задачи.
• Освежать в памяти ключевые алгоритмы и структуры данных.
• Находить и исправлять технические неточности в объяснениях.

Без «невидимых» подсказок во время интервью — только качественная подготовка. Поддерживает популярные LLM-API, работает быстро и стабильно.

Готовься умно — выходи на оффер увереннее.

📌 Github
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🤣8🔥54🤔2
💼 Как подготовиться к любому собеседованию: гайд от нового сотрудника OpenAI

Новый инженер OpenAI поделился опытом прохождения интервью в AI-стартапы и крупные компании, включая OpenAI.

1. Заботьтесь о себе — ментально и физически
Интервью — это стресс. Следите за сном, питанием, отдыхом, заручитесь поддержкой друзей и семьи.

2. Помните: цель — ваш успех
Компания и интервьюеры хотят, чтобы вы прошли. Даже если был отказ, пробуйте снова — многие успешно попадали на роль со второй попытки.

3. Получайте удовольствие от процесса
Это шанс познакомиться с интересными людьми, узнать новые технологии и потренироваться в решении задач.

4. Готовьтесь основательно
- 100 часов на задачи (LeetCode и аналоги)
- 100 часов на изучение теории и статей
- Тренируйтесь с друзьями без автодополнений и LLM-подсказок

5. Каждая встреча важна
Даже «неформальный звонок» — это возможность показать мотивацию, характер и профессионализм.

6. Работайте над профилем и сетью
LinkedIn, GitHub с проектами, участие в митапах, open-source, хакатонах — всё это привлечёт внимание рекрутеров.

7. Первые звонки
- С рекрутером: записывайте детали — этапы, состав команды, имя руководителя
- С руководителем: изучите его публикации и проекты, покажите интерес, расскажите, почему хотите работать именно здесь

8. Поведенческие вопросы
Готовьте истории по формату STAR(I) — о том, как решали конфликты, брали на себя лидерство, справлялись с ошибками.

9. Техническая часть
- Решайте задачи быстро и чётко, проговаривая ход мыслей
- Практикуйте кодинг в условиях стресса и без IDE
- Разбирайтесь в алгоритмах, трансформерах, RL-методах
- Умейте объяснить свою текущую работу и её пользу для компании

10. Переговоры
Обсуждайте не только зарплату, но и команду, миссию, культуру. Все договорённости фиксируйте письменно.

11. Принятие решения
Выбирайте место, где вам будет комфортно работать каждый день.

📌 Главное: интервью — это навык, который можно натренировать. Подготовка + уверенность = высокий шанс успеха.

📌 Полный текст
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱175👍3🔥2
🦠 Совет по Golang

В Go для корректной обработки ошибок рекомендуется использовать функции errors.Is и errors.As. Они позволяют работать даже с обёрнутыми ошибками, извлекая их исходное значение.

В отличие от простого сравнения через ==, такой подход надёжнее, так как учитывает всю цепочку ошибок. Например, errors.Is проверяет, содержится ли конкретная ошибка где-то внутри обёрнутой, а errors.As извлекает её для дальнейшего анализа.

@golang_interview
👍206🔥5😁2
🔎 Задача на Go с подвохом

Код:
package main

import "fmt"

func main() {
s := make([]int, 3, 4) // Длина 3, capacity 4
s[0], s[1], s[2] = 1, 2, 3
modifySlice(s)
fmt.Println(s)
}

func modifySlice(s []int) {
s = append(s, 4)
s[0] = 100
}

Вопрос: Что выведет этот код?

Варианты ответа:

A. [1 2 3]
B. [100 2 3]
C. [1 2 3 4]
D. [100 2 3 4]

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

Объяснение:
1. Создается срез с длиной 3 и capacity 4, заполненный значениями [1, 2, 3]
2. При передаче в функцию modifySlice:
— append добавляет элемент 4, но не вызывает переаллокацию
— Изменение s[0] = 100 применяется к тому же underlying массиву
3. Однако исходный срез в main() останется длины 3, но первый элемент изменится:
— Длина среза в main не меняется
— Но изменения элементов видны, так как используется тот же массив

@golang_interview
🔥32👍74😁2🥱1
👣 Go совет

Встраивайте файлы прямо в Go-код с помощью пакета embed и директивы //go:embed.

Это работает как для отдельных файлов, так и для целых директорий:


import _ "embed"

//go:embed config.json
var config []byte

//go:embed version.txt
var version string

//go:embed templates/*
var templates embed.FS


📌 Удобно для:

- конфигов
- файлов с версией
- HTML-шаблонов
- любых статических ресурсов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3311🔥7
📊 SlimToolkit — инструмент для оптимизации Docker-образов

Проект из песочницы CNCF помогает уменьшать размер контейнеров до 30 раз без изменения исходного кода. Он анализирует приложение внутри контейнера, определяет необходимые зависимости и создает минималистичный образ.

Инструмент помимо уменьшения размера, автоматически генерирует Seccomp и AppArmor профили для повышения безопасности. Поддерживает образы на Node.js, Python, Ruby, Java, Go и других стеках.

🤖 GitHub

@golang_interview
👍54🔥4
Эволюция гофера 🐹

@golang_interview
😁41🔥8🥰3🤣3
🧪 Миф о стеке и куче в Go

Из-за этой схемы существует ошибочное представление о том, что переменные стека имеют более высокие адреса, чем переменные кучи. В Go это неверно.
Во первых: эта диаграмма появилась в эпоху, когда процесс имел ровно один поток.
Во вторых: на схеме показывается стек потоков, а не стек горутин.

Стек горутин выделяется средой выполнения из памяти, управляемой кучей, поэтому он может находиться как выше, так и ниже адресов переменных кучи. Более того, стек горутин способен динамически перемещаться и увеличиваться по мере роста программы, что полностью разрушает иллюзию фиксированного расположения
👍162🔥2
🚀 Zig показывает мощь метапрограммирования на компайм-тайме

Смотрите, как можно вызвать разные методы у разных структур, используя одно универсальное определение функции:


const std = @import("std");

const T = struct {
fn name() []const u8 {
return "foo";
}

fn foo() void {
std.debug.print("T.foo\n", .{});
}
};

const S = struct {
fn name() []const u8 {
return "bar";
}

fn bar() void {
std.debug.print("S.bar\n", .{});
}
};

fn f(Type: type) void {
@field(Type, Type.name())();
}

pub fn main() !void {
f(T); // <=> T.foo()
f(S); // <=> S.bar()
}
9❤‍🔥4🔥1
🖥 pgroll — это инструмент командной строки на Go с открытым исходным кодом, предназначенный для безопасной и обратимой миграции схем в PostgreSQL!

🌟 Основная задача проекта заключается в обеспечении миграций без простоя, когда изменения схемы применяются таким образом, чтобы и старая, и новая версии схемы оставались доступными для клиентских приложений. Это особенно полезно при внесении сложных изменений, требующих поддержания совместимости с уже работающими приложениями.

🌟 pgroll использует подход «расширить/сузить» (expand/contract), создавая виртуальные схемы на основе представлений поверх физических таблиц. Этот метод позволяет миграциям быть безопасными и минимизирует риски, такие как блокировки базы данных или прерывание работы приложений.

🌟 Инструмент поддерживает автоматическое заполнение данных для новых колонок, мгновенный откат изменений при возникновении проблем и работу с существующими схемами без необходимости начинать с нуля.

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

🖥 Github
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍7🔥4
Forwarded from Golang
👣 Go теперь по-умолчанию "знает", сколько CPU ему действительно доступно внутри контейнера

В релизе Go 1.25 представлена важная улучшенная логика работы GOMAXPROCS в контейнеризованных средах — например, в Kubernetes.

Как это работает:
- Раньше по умолчанию GOMAXPROCS устанавливался равным числу логических CPU на хосте.
- Теперь на Linux runtime автоматически учитывает CPU limits, заданные для контейнера. Если лимит меньше числа логических ядер — GOMAXPROCS устаналивается на уровне лимита.
- Более того, runtime периодически обновляет GOMAXPROCS, если меняются доступные CPU или ограничения, без необходимости внешнего вмешательства.

Почему это важно:
Ранее разработчикам приходилось использовать внешние решения вроде uber-go/automaxprocs, чтобы вручную синхронизировать GOMAXPROCS с лимитами контейнера. Теперь runtime делает это автоматически и точнее:
- Внутри контейнера Go не будет пытаться использовать все ядра хоста
- Уменьшаются лишние горутины, контекстные переключения и нагрузка на GC

Кратко: начиная с Go 1.25, GOMAXPROCS адаптируется под реальные CPU-ресурсы контейнера — без дополнительных усилий.

📌 Подробности

@golang_google

#golang #Kubernetes
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥127
🛡️ JWT для Go: безопасная работа с JSON Web Tokens

Библиотека для работы с JSON Web Tokens (JWT) на Go, поддерживающая создание, верификацию и парсинг токенов. Обеспечивает безопасность и совместимость с предыдущими версиями, включая поддержку различных алгоритмов подписи.

🚀 Основные моменты:
- Поддержка HMAC, RSA, RSA-PSS и ECDSA.
- Совместимость с RFC 7519.
- Легкость в добавлении собственных методов подписи.
- Активная поддержка и обновления.

📌 GitHub

#go
👍6🔥21
Forwarded from Golang
This media is not supported in your browser
VIEW IN TELEGRAM
🚀 LeetSolv — инструмент для тренировки алгоритмов прямо в терминале

LeetSolv — это консольная утилита, написанная нп Go для подготовки к собеседованиям по алгоритмам и структурам данных.

Инструмент помогает повторять задачи по умному расписанию (алгоритм SM-2) и не забывать то, что уже решал.

Что умеет:
- Лёгкий CLI без лишних зависимостей (написан на Go).
- Планирует повторения задач с учётом:
- насколько хорошо ты знаешь задачу,
- насколько она важна,
- насколько сложно её понять.
- Автоматически выставляет приоритеты: что решать сначала, что можно отложить.
- Полный набор команд: добавить, удалить, редактировать задачи, откатить изменения.
- Все данные хранятся только у тебя локально.
- Два режима работы:
- интерактивный (вопрос-ответ в терминале),
- командный (`add`, list, search и т.п.).

📦 Установка:

curl -fsSL https://raw.githubusercontent.com/eannchen/leetsolv/main/install.sh | bash


📌 Github: https://github.com/eannchen/leetsolv
🔥127👍3🤔1
🛠 Go совет: как правильно использовать sync.WaitGroup

Частая ошибка — вызывать wg.Add() внутри горутины.

Такой код может не сработать правильно: горутина может стартовать позже, чем основной поток дойдёт до Wait().

Чем нам поможет новая версия Go 1.25:
- go vet теперь автоматически ловит эту ошибку.
- Появился удобный метод WaitGroup.Go, который сам делает Add и Done.

Пример:

var wg sync.WaitGroup

// Неправильно
go func() {
wg.Add(1) // Add вызывается слишком поздно
defer wg.Done()
work()
}()

// Правильно
wg.Add(1) // Add вызываем до запуска
go func() {
defer wg.Done()
work()
}()

// Go 1.25
wg.Go(func() {
work()
})
17👍13🔥4
Митап для Go-разработчиков от МТС
11 сентября | 19:00
Офлайн в Москве | Онлайн

О чем поговорим:
🔹LLM для конкурентного Go кода;
🔹WaitGroup Pitfalls;
🔹Эффективное использование sync.Map в Go;
🔹Разработка Cloud Controller Manager: интеграция Kubernetes с облаком MWS.

Воркшоп, доклады и нетворкинг на баскетбольной арене.
Присоединяйся! Для участия зарегистрируйся по ссылке.
👍2
👣 gjson — библиотека для работы с JSON-данными в Go!

💡 Она позволяет легко и эффективно извлекать значения из JSON-структур с использованием простого и быстрого синтаксиса.

🔍 Основные особенности gjson:

🌟 Быстрое извлечение данных: Gjson использует оптимизированные алгоритмы для поиска данных в JSON, что делает её значительно быстрее по сравнению с другими библиотеками, особенно при работе с большими JSON-файлами.

🌟 Простота использования: API библиотеки очень простое, и для извлечения значения из JSON-строки достаточно одного вызова функции.
Поддержка сложных структур: Gjson позволяет работать с вложенными объектами и массивами в JSON-данных.

🌟 Низкие затраты на память: Она также минимизирует использование памяти, что делает её подходящей для работы в условиях ограниченных ресурсов.

🔐 Лицензия: MIT

🖥 Github

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🐳53🔥2🕊1
Or-channel паттерн в Go — мощный приём для работы с конкурентностью.

Он позволяет объединять несколько done-каналов в один общий.
Как только закрывается любой из входных каналов — автоматически закрывается и новый канал.

Такой подход даёт единый сигнал для завершения или отмены операции.

#golang
🔥18🥴12👍75
🔥 Успех в IT = скорость + знания + окружение

Здесь ты найдёшь всё это — коротко, по делу и без воды.
Пока другие ищут, где “подглядеть решение”, ты уже используешь самые свежие инструменты!

AI: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Собеседования DS: t.me/machinelearning_interview
C++ t.me/cpluspluc
Docker: t.me/DevopsDocker
Хакинг: t.me/linuxkalii
Devops: t.me/DevOPSitsec
Data Science: t.me/data_analysis_ml
Javascript: t.me/javascriptv
C#: t.me/csharp_1001_notes
Java: t.me/java_library
Базы данных: t.me/sqlhub
Python собеседования: t.me/python_job_interview
Мобильная разработка: t.me/mobdevelop
Golang: t.me/Golang_google
React: t.me/react_tg
Rust: t.me/rust_code
ИИ: t.me/vistehno
PHP: t.me/phpshka
Android: t.me/android_its
Frontend: t.me/front
Big Data: t.me/bigdatai
МАТЕМАТИКА: t.me/data_math
Kubernets: t.me/kubernetc
Разработка игр: https://t.me/gamedev
Haskell: t.me/haskell_tg
Физика: t.me/fizmat

💼 Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.me/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://t.me/addlist/mzMMG3RPZhY2M2Iy

😆ИТ-Мемы: t.me/memes_prog
🇬🇧Английский: t.me/english_forprogrammers
🧠ИИ: t.me/vistehno

🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
📕Ит-книги бесплатно: https://t.me/addlist/BkskQciUW_FhNjEy

Подпишись, если хочешь быть в числе тех, кого зовут в топовые проекты!
🥴1🐳1🤣1
🛠 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...
}


👉 Подробнее
👍41🔥1