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
加入频道
👣 Работа с MongoDB при помощи Go

С большой долей вероятности Go-разработчик будет соприкасаться с разными БД в работе, возможно это будут NoSQL базы данных.

Так что вот отличная статья с примерами работы с MongoDB при помощи Go;
в статье затрагиваются базовые операции:
— вставка документа в MongoDB
— запись нескольких документов
— поиск документа в MongoDB
— обновление/удаление документа

🟡 Go & MongoDB

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Большая подборка задач по Go с LeetCode + решения к ним + тесты

Здесь есть самые разные задачи: простые/средние/сложные, много задач по структурам данных (таким как связные списки, деревья), есть задачи на динамическое программирование — в общем, неплохо порешать что-то из этого перед собеседованием

🖥 GitHub

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Реализация разных алгоритмов и структур данных на Go

Полезный репозиторий, в котором собраны разные пет-проекты и не только, реализующие множество алгоритмов и структур данных.
Вот к примеру в этом списке имплементация фильтра Блума, а вот реализация словаря с удобным интерфейсом как в Python.

🟡 Data Structures and Algorithms

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Давайте проверим ваши знания работы бинарного дерева поиска. Посмотрите на изображение и ответьте на вопрос ниже.

#викторина #bst
👣 Открытая книга по Go

В этой книге разбирается 25 тем, связанных с Go, таких как:
— работа с файлами, чтение/запись
— взаимодействие с разными БД, на примере Sqlite
— конкурентность, горутины
— тестирование
— интерфейсы, структуры и т.д.

Можно использовать эту книгу для освежения в памяти каких-то тем

🟡 Go book

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Решения разных задач с 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