Golang вопросы собеседований
13.5K subscribers
625 photos
3 videos
1 file
432 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
加入频道
👣 Решения разных задач с LeetCode на Go

Здесь собраны задания с LeetCode + решения к ним на Go, в целом довольно полезно прорешать пару таких задач перед собеседованием

🟡 LeetCode — решения на Go

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Управление памятью в Golang - советы по обеспечению эффективности и стабильности работы Go приложений

#golang

https://golang.withcodeexample.com/blog/memory-management-golang-safeguarding-efficiency-stability/

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
💼 Обратное собеседование (reverse-interview) это список вопросов для соискателей.

Пункты не упорядочены и могут быть неприменимы к конкретной должности или виду работы. Вначале это был просто список вопросов, но со временем он стал включать ещё и те вещи, которых хотелось бы видеть больше, и «красные флажки», то есть вещи, которых хочется избегать. Ещё я обратил внимание, что многие люди, которых я собеседовал, не задавали эти вопросы, и, я думаю, это были упущенные возможности.

Разделы вопросов:
- Технологии
- Должность
- Команда
- Ваши будущие коллеги
- Компания
- Бизнес
- Удалённая работа
- Офисная работа
- Компенсация
- Больничный, декретный период, отпуск

📌 Вопросы

@golang_interview
Объясните, что такое goroutine и как Go управляет конкурентностью. В чем разница между использованием goroutine и thread в традиционных языках программирования? Приведите пример, в котором несколько goroutine взаимодействуют через каналы

❗️ В Go goroutine — это легковесная потокоподобная сущность, используемая для выполнения задач параллельно или асинхронно. Goroutine легче и менее затратна по памяти по сравнению с традиционными потоками (threads), что позволяет создавать десятки тысяч goroutine в одном приложении.

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

Каналы chan используются для безопасного обмена данными между goroutine, обеспечивая синхронизацию и избегая гонок данных.

▪️ Ниже приведен пример, в котором две goroutine взаимодействуют через канал:

package main

import (
"fmt"
"time"
)

// Функция для записи чисел в канал
func produceNumbers(channel chan int) {
for i := 1; i <= 5; i++ {
fmt.Printf("Produced: %d\n", i)
channel <- i // Отправка числа в канал
time.Sleep(500 * time.Millisecond)
}
close(channel) // Закрытие канала после завершения отправки
}

// Функция для чтения из канала
func consumeNumbers(channel chan int) {
for num := range channel { // Чтение значений из канала
fmt.Printf("Consumed: %d\n", num)
time.Sleep(700 * time.Millisecond)
}
}

func main() {
channel := make(chan int)

go produceNumbers(channel) // Запуск первой goroutine
go consumeNumbers(channel) // Запуск второй goroutine

time.Sleep(4 * time.Second) // Ожидание завершения всех goroutine
}


💡 Основные отличия goroutine от потоков:

🌟Меньшие накладные расходы: goroutine используют порядка 2KB памяти, тогда как системные потоки требуют несколько мегабайт.

🌟Управление планировщиком Go: go-планировщик управляет goroutine и их распределением между потоками, тогда как в традиционных языках управление потоками часто ложится на ОС.

🌟Высокая масштабируемость: благодаря легкости создания, goroutine позволяют эффективно использовать конкурентность даже в системах с большим числом ядер.

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
В Go отсутствует традиционная система исключений, как в других языках, таких как Python или Java. Как вы будете обрабатывать ошибки в Go, и каким образом можно реализовать механизм аналогичный try-catch? Можете ли вы привести пример, где использование panic и recover будет уместным, и объяснить, почему этот подход не следует использовать повсеместно?

❗️ В Go ошибки обрабатываются с помощью возвращаемых значений, что отличает этот язык от других, где используется система исключений. Стандартная практика заключается в том, чтобы возвращать пару значений (result, error) из функции и проверять наличие ошибки при каждом вызове.

🌟 Пример:
package main

import (
"errors"
"fmt"
)

func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("деление на ноль")
}
return a / b, nil
}

func main() {
result, err := divide(10, 0)
if err != nil {
fmt.Println("Ошибка:", err)
} else {
fmt.Println("Результат:", result)
}
}


🌟 В этом примере функция divide возвращает ошибку, если деление на ноль невозможно, и вызывающая функция проверяет эту ошибку перед использованием результата.

❗️ Механизм panic и recover

💡 В Go также есть механизмы panic и recover, которые можно использовать для управления критическими ошибками, аналогично try-catch в других языках. panic вызывает ошибку и завершает текущую функцию, а recover позволяет перехватить панику и продолжить выполнение программы.

🌟 Пример использования:
package main

import "fmt"

func riskyFunction() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Поймана ошибка:", r)
}
}()
fmt.Println("Выполняется riskyFunction...")
panic("Что-то пошло не так!")
fmt.Println("Этот код не будет выполнен")
}

func main() {
fmt.Println("Начало программы")
riskyFunction()
fmt.Println("Конец программы")
}


🌟 В этом примере вызов panic завершает выполнение функции, но благодаря recover мы перехватываем ошибку и корректно завершаем программу.

💡 Когда использовать panic и recover?

Механизмы panic и recover следует использовать только в следующих случаях:

🌟 Критические ошибки: Ситуации, когда продолжение работы программы невозможно или может привести к нестабильности, например, повреждение данных или нарушение инвариантов.

🌟 Реализация сложной логики: Например, в парсерах, где обнаружение ошибок на каждом шаге обработки затруднительно, или в задачах, требующих точного контроля за выполнением (например, при реализации транзакционных систем)

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Полезный репозиторий на Github, в котором собраны вопросы с собеседований по всевозможным IT сферам!

🔍 Что есть?

🌟 Фронтенд
🌟 Бэкенд
🌟 DevOps
🌟 Android - разработка
🌟 Fullstack
🔥 И многое другое!

🔗 Смотрим здесь: *клик*

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Полезная статья, в которой автор рассказывает о тестировании HTTP-обработчиков в Go с использованием пакета httptest. Он описывает, как правильно создавать тестовые запросы и записи ответов для точных тестов, избегая ошибок, связанных с клиентскими и серверными запросами

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

🔗 Ссылка: *клик*

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ Курс по основам системного дизайна

Вы готовитесь к интервью по системному дизайну или просто хотите узнать больше о работе сложных систем? Тогда репозиторий от ByteByteGo – идеальный выбор!

В этом курсе вас ожидают следующие темы:

– Протоколы
– CI/CD
– Архитектурные шаблоны
– Базы данных
– Кэширование
– Микросервисные архитектуры
– Платежные системы
– DevOps
– Git
– Облачные сервисы
– Инструменты для повышения производительности разработки
– Linux
– Безопасность
– Реальные примеры систем

GitHub
Перевод

@golang_interview
👣 Полезная статья, в которой автор рассказывает о логировании и обработки ошибок в Go API с помощью пользовательских middleware.

Middleware перехватывает запросы перед отправкой на обработку и позволяет добавлять функции обработки.

🌟 В статье шаг за шагом объясняется создание такого middleware, middleware для обработки ошибок и их интеграция в API.

Это поможет улучшить дебаггинг кода и повысить стабильность сервера.

🔗 Ссылка: *клик*

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Сравнение производительности в Go: действительно ли передача по указателю будет быстрее?

🌟 В этой статье автор проводит тесты производительности передачи по значению и передачи по указателю в разных условиях

🔗 Подробнее *клик*

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Изоляция Go-срезов: как безопасно создавать независимые срезы из массива?

💡 Эта статья посвящена изолированию срезов (slices) в Go для безопасного создания независимых копий от исходного массива. Она объясняет, как изменения в одном срезе могут влиять на другие срезы и на сам массив, если они используют одно и то же подмножество данных. Решение — использовать функцию copy, чтобы создать полностью независимые срезы, не зависящие от исходного массива

🔗 Подробнее: *клик*

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 DIYGoAPI — это демонстрационный API-сервер, написанный на языке Go. Он включает в себя базовую реализацию CRUD-операций, работу с базой данных (PostgreSQL), аутентификацию с JWT и использование внешних библиотек, таких как Gorilla и Pgx

🌟 Основная цель — показать принципы проектирования, тестирования и развертывания RESTful API на Go, а также предоставить готовую архитектуру для создания собственного проекта на основе этого каркаса

🔐 Лицензия: MIT

▪️Github

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Понимание параллелизма и конкурентности в Go

💡 Когда мы говорим о параллелизме и конкуренции, их легко спутать, поскольку они оба предполагают выполнение нескольких задач одновременно. Однако это принципиально разные концепции с разными приложениями, особенно в Go, языке, разработанном с этими функциями в своей основе. В этой статье автор объясняет значения и различия этих концепций!

🔗 Ссылка: *клик*

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️Легкий способ получать свежие обновления и следить за трендами в разработке на вашем языке. Находите свой стек и подписывайтесь:

МАШИННОЕ ОБУЧЕНИЕ: t.me/ai_machinelearning_big_data
C++ t.me/cpluspluc
Python: t.me/pythonl
Хакинг: t.me/linuxkalii
Devops: t.me/DevOPSitsec
АНАЛИЗ Данных: t.me/data_analysis_ml
Javascript: t.me/javascriptv
C#: t.me/csharp_ci
Java: t.me/javatg
Базы данных: t.me/sqlhub
Linux: t.me/linuxacademiya
Python собеседования: t.me/python_job_interview
Мобильная разработка: t.me/mobdevelop
Docker: t.me/DevopsDocker
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/machinelearning_interview
МАТЕМАТИКА: t.me/data_math
Kubernets: t.me/kubernetc


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

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

🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
📕Ит-книги бесплатно: https://yangx.top/addlist/BkskQciUW_FhNjEy
👣 Полезная статья, в которой автор рассказывает, как изучение структур в языке программирования Go помогло ему полюбить программирование. Автор описывает свой опыт с освоением структур, объясняет их важность для организации данных и демонстрирует базовые примеры создания и использования структур

🌟 Статья также охватывает методы для структур, вложенные структуры и предлагает практические задачи для их освоения

🔗 Ссылка: *клик*

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Pine — это фреймворк для создания серверов на языке Go, основанный на принципах простоты и удобства, подобных фреймворкам Fiber и Express.js.

🌟 Pine предоставляет лёгкий способ разработки веб-серверов с минимальной настройкой, поддержкой маршрутизации, middleware и работы с вебсокетами.

Фреймворк также неплохо оптимизирован, что делает его подходящим для обработки большого числа запросов.

🔐 Лицензия: MIT

▪️Github

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 В этой статье автор описывает, как использовать goroutines для параллельной обработки в языке Go.

🌟 Рассматриваются примеры создания goroutines, их синхронизации с помощью WaitGroup и передачи данных через Channels. Также обсуждаются лучшие практики и типичные ошибки, такие как избегание блокировок и правильное закрытие каналов

🔗 Ссылка: *клик*

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM