Здесь собирается большая коллекция вопросов и ответов на них, необходимых не только для прохождения собеседований, но и для комплексного развития кругозора
- Разогрев
- Общие вопросы
- Вопросы по шаблонам проектирования
- С какими паттернами проектирования знакомы?
- Расскажите про паттерны Builder(Строитель), Factory(Фабрика), Closer(Доводчик), Singleton(Одиночка)
- Расскажите, какой паттерн использовали в продукте/своем коде?
- Знакомы ли с концепцией 12FA для проектирования SaaS приложений?
- Вопросы про микросервисы
- Вопросы про инфраструктуру и деплой
- Что такое сине-зеленый деплой(blue-green deployment)?
- Что такое Canary (канареечные развертывания)?
- Что такое Dark (скрытые) или А/В-развертывания?
- Что такое SLA, SLO, SLI?
- Какие инструменты CI/CD вам известны?
- Как обеспечить непрерывность и стабильность деплоя приложения?
- С какими проблемами при деплое продукта вы сталкивались, как митигировали?
- Вопросы про кеширование и базам данных
- Что такое индексы в MySQL, как и для чего их использовать и создавать?
- Что такое составной индекс, как и для чего их использовать и создавать?
- Как использовать индексы в JOIN запросах Mysql?
- Что такое частичные индексы, как и для чего их использовать и создавать?
- В чем отличия InnoDB и MyISAM?
- Возможен ли JOIN со вложенными запросами, как?
- Что такое дедлоки (deadlock), почему возникают, как можно недопускать?
- Что такое HAVING, что он делает как и зачем его использовать?
- Разница между WHERE и HAVING и можно ли использовать HAVING без группировки данных?
- Что такое EXPLAIN?
- Как узнать версию Mysql?
- Как можно оптимизировать ORDER BY RAND()?
- Как правильно выбрать тип данных в Mysql, когда нужны:
- NULL значения, когда лучше использовать?
- Целые числа (TINYINT, SMALLINT, INT, BIGINT) и UNSIGNED, длинна числовых типов?
- Большие числа: demical, что это и как работает?
- Float | Double VS Demical, в чем разница, что и как использовать?
- Строки VARCHAR и CHAR, отличия когда лучше использовать?
- BLOB / TEXT, чем отличаются, как выполнять сортировку по полям данного типа?
- ENUM, когда может пригодится?
- DATETIME / TIMESTAMP, в чем их разница, какие максимальные значения?
- Когда и зачем может пригодиться денормализация данных?
- Что такое шардинг и репликация?
- В чем отличие синхронной репликации от асинхронной? Какая подходит лучше для какого кейса?
- Если индекс создан для 2-х колонок и запрос содержит только одну из них - будет ли он работать?
- Вопросы по языку Golang
- Что из себя представляет тип данных string в языке Golang? Можно ли изменить определенный символ в строке? Что происходит при склеивании строк?
- Вытекающий вопрос — как эффективно склеивать множество строк?
- Что будет происходить при конкурентной записи в map? Как можно решить эту проблему?
- Расскажите о ООП в Golang.#1
- Какое будет значение у переменной x после выполнения программы?
- Какое значение примет выражение (true && false) || (false && true) || !(false && false)?
- Мы знаем, что в десятичной системе самое большое число из одной цифры - это 9, а из двух - 99. В бинарной системе самое большое число из двух цифр это 11 (3), самое большое число из трех цифр это 111 (7) и самое большое число из 4 цифр это 1111 (15). Вопрос: каково самое большое число из 8 цифр? (Подсказка: 101-1=9 и 102-1=99)
- Что выведет следующая программа?
- Что выведет следующая программа?
- Как работает Garbage Collection в Go?
- Что такое interface, как они работают в Go?
- Что такое slice, как устроены и чем отличаются от массивов?
- Что такое len и capacity в slice Go?
- Возможно ли предугадать, что GC отработает за константное время N?
- Что будет, если создать канал и отправить туда запись, но у него нет читателей?
- По какому алгоритму растет slice? (если знаете старую и новую формулу - круто)
- Сколько весят такие структуры данных, как слайс, мапа, пустая строка, число в байтах?
- В какой момент инициализированное значение переменной передается в defer? Как это связано с именованием функции?
- Вопросы о распределённых системах
- Как тестировать распределённую систему?
- Знакомы ли с lock-free концепцией? Можете описать принцип работы?
- Вопросы по организации кода
- Как тесты и TDD влияют на организацию кода?
- В чём разница между сцеплением и связанностью?
- Почему в TDD тесты пишутся прежде кода?
- Если у вашего кода плохая организация, как вы это поймёте?
- Вопросы от Данила Подольского на позицию Senior Golang Backend Developer в компанию Evrone
- Go — императивный или декларативный? А в чем разница?
- Что такое type switch?
- Как сообщить компилятору, что наш тип реализует интерфейс?
- Как работает append?
- Какое у slice zero value? Какие операции над ним возможны?
- Как устроен тип map?
- Каков порядок перебора map?
- Что будет, если читать из закрытого канала?
- Что будет, если писать в закрытый канал?
- Как вы отсортируете массив структур по алфавиту по полю Name?
- Что такое сериализация? Зачем она нужна?
- Сколько времени в минутах займет у вас написание процедуры обращения односвязного списка?
- Где следует поместить описание интерфейса: в пакете с реализацией или в пакете, где этот интерфейс используется? Почему?
- Предположим, ваша функция должна возвращать детализированные Recoverable и Fatal ошибки. Как это реализовано в пакете net? Как это надо делать в современном Go?
- Главный недостаток стандартного логгера?
- Есть ли для Go хороший orm? Ответ обоснуйте.
- Какой у вас любимый линтер?
- Можно ли использовать один и тот же буфер []byte в нескольких горутинах?
- Какие типы мьютексов предоставляет stdlib?
- Что такое lock-free структуры данных, и есть ли в Go такие?
- Способы поиска проблем производительности на проде?
- Стандартный набор метрик prometheus в Go -программе?
- Как встроить стандартный профайлер в свое приложение?
- Overhead от стандартного профайлера?
- Почему встраивание — не наследование?
- Какие средства обобщенного программирования есть в Go?
- Какие технологические преимущества языка Go вы можете назвать?
- Какие технологические недостатки языка Go вы можете назвать?
- Популярные задачи на собеседованиях
- На вход подаются два неупорядоченных слайса любой длины. Надо написать функцию, которая возвращает их пересечение
- Написать генератор случайных чисел
- Слить N каналов в один
- Сделать конвейер чисел
- Написать WorkerPool с заданной функцией
- Сделать кастомную waitGroup на семафоре
- Что выведет код?
- Какая есть проблема в коде?
- Что выведет код?
- Что выведет код?
Ответ
Тут ответ
Быстрый экскурс по вопросам Go. Будет дополняться
- практические задачи по темам
- дополнительные материалы
- просто практические задачки по Go
- Что такое Map? Как устроен в Go? Желательно приблизительно понимать структуру (type hmap struct) и его поля
Ответ
`map` в Go — это встроенный тип данных, представляющий собой ассоциативный массив или хеш-таблицу. Он позволяет хранить пары "ключ-значение", где каждый ключ уникален.- Неупорядоченность: Элементы в
mapне имеют фиксированного порядка. - Уникальность ключей: Каждый ключ в
mapдолжен быть уникальным. Если вы попытаетесь добавить значение с уже существующим ключом, старое значение будет перезаписано. - Динамическое выделение памяти: Размер
mapможет изменяться динамически, когда вы добавляете или удаляете элементы.
Внутренняя структура 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 // дополнительные данные
}полезные материалы:
- Что такое канал? Чем отличается буферизированный канал от небуферизированного?
- Как создать канал? Как закрыть канал?
- Как читать из канала и писать в канал?
- Зачем нужны в целом каналы?
- Что будет, если читать из закрытого канала?
- Что будет, если писать в закрытый канал?
- Что будет если закрыть закрытый канал?
- Что такое nil канал и что будет если писать и читать от туда?
полезные материалы:
- Какие бывают типы в Go? Целочисленные, дробные, комплексные, структуы, интерфесы, время и дополнить.
- Отличие uint от int?
- Что такое обычный int и какие есть нюансы его реализации?
- Как преобразовать строку в int и наоборот? Можно ли сделать int(string) и string(int) соответственно?
- Сколько в памяти занимают реализации int32 и int64?
- Какие предельные значения int32 и int64?
- Какой результат получим если разделить int на 0 и float на 0?
- Что такое константы и можно ли их изменять?
- Что такое iota?
- Что такое структура (stuct) в Go? Зачем они нужны?
- Что такое метод? Как они выглядят?
- Как осуществляется наследование в Go?
- Что такое тип rune? Зачем их использовать?
- Что такое тип byte?
- Что такое goto?
- Какие циклы есть в Go?
- Что такое интерфейсы в Go? Чем отличается от интерфейсов в дпугих языказ, например, Java, PHP. Что такое утиная типизация?
- Внутренее устройство интерфейса, какое оно (структура iface, itab)?
- Сделать интерфейс для вычисления площади круга и квадрата, реализовать их в структурах cicle и square.
- Что такое пустой интерфейс?
- Что такое nil интерфейс?
- Что такое type switch?
- Как определить тип интерфейса?
- Как преобразовать интерфейс к другому типу?
- Где следует поместить описание интерфейса: в пакете с реализацией или в пакете, где этот интерфейс используется? Почему?
полезные ресурсы:
- Зачем используется ключевое слово defer в Go?
- Каков порядок возврата при использовании несколько функций с defer в рамках одной внешней функции?
- Как передаются значения в функции, перед которыми указано ключевое слово defer? Пример:
func main() {
nums := 1 << 5 // 32
defer fmt.Println(nums) // туть как?
nums = nums >> 1 //16
fmt.Println("done")
}- Какие бывают способоы синхронизации данных в Go? (про каналы тоже не забываем)
- Что такое mutex, какие они бывают и как их использовать?
- Что такое atomics, какие бывают и как и когда их лучше использовать?
- Что такое sync.Map?
- Что такое lock-free структуры данных, и есть ли в Go такие? Если интересно.
- Как можно обработать панику с помощью defer и recovery?
- Что такое context в Go? Какие бывают context в Go? Когда их нужно использовать и зачем?
- Что такое указатели? Как передаются параметры в функцию по указателю или по значению? Какие типы неявно передаются как указатель? Как передать по указателю?
- Что такое пакеты (package) в Go? Как их создавать и импортировать?
- Можно ли реализовать sync.Mutex и sync.WaitGroup на каналах? Как?
- Что такое runtime (планировщик sheduler)? Как он устроен в Go?
- Что такое Gorutine (горутина)?
- В чем отличие горутины от потока?
- Как устроены горутины, сколько памяти они занимают в стеке?
- Кто управляет горутинами? Какой тип многозадачности используется в Go и какой был до версии Go 1.15?
- Что такое GC (garbadge collector/сборщик мусора)?
- Как работает сборщик мусора в Go?
- Как проверить тип переменной в среде выполнения?
полезные материалы:
- https://www.youtube.com/watch?v=ZTJcaP4G4JM (тут про каналы, но еще рассказывает про рантайм и горутины, планировщик и тп)
- Что такое unit тесты?
- Что такое интеграционные тесты?
- Как в Go пишут unit тесты со стандартным пакетом testing? Какие есть библиотеки, например, testify?
- Что такое моки (mocks)?
- Что такое CI/CD?
- Что такое линтеры (linters) зачем они нужны и как их использовать?
- Как можно измерить использование памяти в Go? Что такое pprof?
- Что такое Prometheus и Grafana? Зачем они нужны?
|
zikwall |
dreddsa5dies |
gonnafaraway (kj22k0m) |
screamo-boop |
