Skip to content
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

112 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Вопросы и ответы для собеседования Back-end/Golang разработчика и не только

Вместе мы разберемся!

Здесь собирается большая коллекция вопросов и ответов на них, необходимых не только для прохождения собеседований, но и для комплексного развития кругозора

Содержание

  1. Разогрев
  2. Общие вопросы
  3. Вопросы по шаблонам проектирования
    • С какими паттернами проектирования знакомы?
    • Расскажите про паттерны Builder(Строитель), Factory(Фабрика), Closer(Доводчик), Singleton(Одиночка)
    • Расскажите, какой паттерн использовали в продукте/своем коде?
    • Знакомы ли с концепцией 12FA для проектирования SaaS приложений?
  4. Вопросы про микросервисы
  5. Вопросы про инфраструктуру и деплой
  6. Вопросы про кеширование и базам данных
  7. Вопросы по языку Golang
  8. Вопросы о распределённых системах
    • Как тестировать распределённую систему?
    • Знакомы ли с lock-free концепцией? Можете описать принцип работы?
  9. Вопросы по организации кода
    • Как тесты и TDD влияют на организацию кода?
    • В чём разница между сцеплением и связанностью?
    • Почему в TDD тесты пишутся прежде кода?
    • Если у вашего кода плохая организация, как вы это поймёте?
  10. Вопросы от Данила Подольского на позицию Senior Golang Backend Developer в компанию Evrone
  11. Популярные задачи на собеседованиях
Ответ

Тут ответ

Надо будет отсортировать!

Быстрый экскурс по вопросам Go. Будет дополняться

  • практические задачи по темам
  • дополнительные материалы
  • просто практические задачки по Go

Начнем! (Чисто для себя)

Мапы:

  1. Что такое Map? Как устроен в Go? Желательно приблизительно понимать структуру (type hmap struct) и его поля
Ответ `map` в Go — это встроенный тип данных, представляющий собой ассоциативный массив или хеш-таблицу. Он позволяет хранить пары "ключ-значение", где каждый ключ уникален.

Основные характеристики map в Go:

  1. Неупорядоченность: Элементы в map не имеют фиксированного порядка.
  2. Уникальность ключей: Каждый ключ в map должен быть уникальным. Если вы попытаетесь добавить значение с уже существующим ключом, старое значение будет перезаписано.
  3. Динамическое выделение памяти: Размер map может изменяться динамически, когда вы добавляете или удаляете элементы.

Структура map в Go

Внутренняя структура map в Go представлена типом hmap. Хотя точная реализация может варьироваться в зависимости от версии Go, общая структура выглядит примерно так:

type hmap struct {
    count     int // количество элементов в map
    flags     uint8 // флаги, указывающие на состояние
    B         uint8 // степень хеш-функции (размер таблицы)
    noverflow uint16 // количество переполнений
    hash0     uint32 // случайное значение для хеширования
    buckets   unsafe.Pointer // указатель на массив "ведер" (buckets)
    oldbuckets unsafe.Pointer // указатель на старые "ведра" (при увеличении размера)
    nevacuate uintptr // индекс, до которого выполнена эвакуация
    extra     *mapextra // дополнительные данные
}

3. Что такое хеш-функция? 4. Почему нельзя брать ссылку на значение, хранящееся по ключу в map? 5. Что такое эвакуация, и в каком случае она будет происходить? 6. Какие есть особенности синтаксиса получения и записи значений в map? 7. Как происходит поиск по ключу в map? 8. Каков порядок перебора map? 9. Что будет происходить при конкуррентной записи в map? Как можно решить эту проблему? 10. Как защититься от ошибки во время конкурентной записи в map?

полезные материалы:

Каналы в Go:

  1. Что такое канал? Чем отличается буферизированный канал от небуферизированного?
  2. Как создать канал? Как закрыть канал?
  3. Как читать из канала и писать в канал?
  4. Зачем нужны в целом каналы?
  5. Что будет, если читать из закрытого канала?
  6. Что будет, если писать в закрытый канал?
  7. Что будет если закрыть закрытый канал?
  8. Что такое nil канал и что будет если писать и читать от туда?

полезные материалы:

Типы данных в Go:

  1. Какие бывают типы в Go? Целочисленные, дробные, комплексные, структуы, интерфесы, время и дополнить.
  2. Отличие uint от int?
  3. Что такое обычный int и какие есть нюансы его реализации?
  4. Как преобразовать строку в int и наоборот? Можно ли сделать int(string) и string(int) соответственно?
  5. Сколько в памяти занимают реализации int32 и int64?
  6. Какие предельные значения int32 и int64?
  7. Какой результат получим если разделить int на 0 и float на 0?
  8. Что такое константы и можно ли их изменять?
  9. Что такое iota?
  10. Что такое структура (stuct) в Go? Зачем они нужны?
  11. Что такое метод? Как они выглядят?
  12. Как осуществляется наследование в Go?
  13. Что такое тип rune? Зачем их использовать?
  14. Что такое тип byte?
  15. Что такое goto?
  16. Какие циклы есть в Go?

Интерфейсы в Go:

  1. Что такое интерфейсы в Go? Чем отличается от интерфейсов в дпугих языказ, например, Java, PHP. Что такое утиная типизация?
  2. Внутренее устройство интерфейса, какое оно (структура iface, itab)?
  3. Сделать интерфейс для вычисления площади круга и квадрата, реализовать их в структурах cicle и square.
  4. Что такое пустой интерфейс?
  5. Что такое nil интерфейс?
  6. Что такое type switch?
  7. Как определить тип интерфейса?
  8. Как преобразовать интерфейс к другому типу?
  9. Где следует поместить описание интерфейса: в пакете с реализацией или в пакете, где этот интерфейс используется? Почему?

полезные ресурсы:

Вопросы по Go:

  1. Зачем используется ключевое слово defer в Go?
  2. Каков порядок возврата при использовании несколько функций с defer в рамках одной внешней функции?
  3. Как передаются значения в функции, перед которыми указано ключевое слово defer? Пример:
func main() {
	nums := 1 << 5 // 32

	defer fmt.Println(nums) // туть как?

	nums = nums >> 1 //16

	fmt.Println("done")
}
  1. Какие бывают способоы синхронизации данных в Go? (про каналы тоже не забываем)
  2. Что такое mutex, какие они бывают и как их использовать?
  3. Что такое atomics, какие бывают и как и когда их лучше использовать?
  4. Что такое sync.Map?
  5. Что такое lock-free структуры данных, и есть ли в Go такие? Если интересно.
  6. Как можно обработать панику с помощью defer и recovery?
  7. Что такое context в Go? Какие бывают context в Go? Когда их нужно использовать и зачем?
  8. Что такое указатели? Как передаются параметры в функцию по указателю или по значению? Какие типы неявно передаются как указатель? Как передать по указателю?
  9. Что такое пакеты (package) в Go? Как их создавать и импортировать?
  10. Можно ли реализовать sync.Mutex и sync.WaitGroup на каналах? Как?

Вопросы по Runtime Go:

  1. Что такое runtime (планировщик sheduler)? Как он устроен в Go?
  2. Что такое Gorutine (горутина)?
  3. В чем отличие горутины от потока?
  4. Как устроены горутины, сколько памяти они занимают в стеке?
  5. Кто управляет горутинами? Какой тип многозадачности используется в Go и какой был до версии Go 1.15?
  6. Что такое GC (garbadge collector/сборщик мусора)?
  7. Как работает сборщик мусора в Go?
  8. Как проверить тип переменной в среде выполнения?

полезные материалы:

Вопросы по тестированию

  1. Что такое unit тесты?
  2. Что такое интеграционные тесты?
  3. Как в Go пишут unit тесты со стандартным пакетом testing? Какие есть библиотеки, например, testify?
  4. Что такое моки (mocks)?

Вопросы по CI/CD:

  1. Что такое CI/CD?
  2. Что такое линтеры (linters) зачем они нужны и как их использовать?
  3. Как можно измерить использование памяти в Go? Что такое pprof?
  4. Что такое Prometheus и Grafana? Зачем они нужны?

Практическая часть по всем вопросам:

Полезные ссылки:

Как мне добавить свой вопрос-ответ?

Maintainers


zikwall

dreddsa5dies

gonnafaraway (kj22k0m)

screamo-boop

About

Вопросы и ответы для собеседования Back-end/Golang разработчика и не только

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages