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
加入频道
Как определить тип интерфейса?

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

Код

@golang_interview
"Какой размер массива выделяется под слайс при его расширении за рамки его емкости?"

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

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

Если развернуть ответ полностью, то это будет звучать примерно так:

если требуемая cap больше чем вдвое исходной cap, то новая cap будет равна требуемой;

если это условие не выполнено, а также len текущего слайса меньше 1024, то новая cap будет в два раза больше базовой cap;

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

@golang_interview
Использование sync/atomic в golang для float64

У нас есть канал из которого мы можем читать результаты выполнения задач. Результат задачи содержит флаг показывающий была ли ошибка при выполнении задачи и результат выполнения этой задачи (тип float64). Нужно найти сумму всех результатов и количество ошибок.

Реализация с использованием sync.Mutex
Задачу можно решить с использованием sync.Mutex

Ответ

@golang_interview
Расскажите о наиболее общих командах Docker

Ответ:
docker push: Закачать репозиторий или образ в Registry;
docker run: Запустить команду в новом контейнере;
docker pull: Скачать репозиторий или образ из Registry;
docker start: Запустить один или несколько контейнеров;
docker stop: Остановить один или несколько контейнеров;
docker search: Поиск образа на DockerHub;
docker commit: Сохранить изменения в новый образ.

Docker exec - выполнить команду в контейнере
Docker ps (-a) - показать запущенные (все контейнеры)
Docker rm - удалить контейнер
Docker images - посмотреть имеющиеся локальные образы

@golang_interview
Разбор задачи для senior разработчика (Golang)

Разбор популярных задач на собеседованиях для Golang разработчиков (например, слить N каналов в один, сделать конвейер чисел и другие) и их решения.

Разбор задач

@golang_interview
Какой тип приложений больше подходит для контейнеров Docker: с хранением состояния (stateful) или без хранения (stateless)?

Ответ

Приложения без хранения состояния (stateless) больше подходят для работы в Docker, чем приложения с хранением (stateful). Мы можем создать контейнер для нашего приложения и принять некоторые его настройки. Таким образом мы можем запускать один и тот же контейнер с разными настройками для различных окружений. Если мы не будем хранить состояние, сможем использовать один и тот же образ в разных сценариях. Также такие приложения проще масштабировать при их работе в контейнерах Docker.

@golang_interview
Что ты использовал из пакета sync(кроме Mutex и WaitGroup)?

Про примитивы
Go Sync

@golang_interview
Какие сети доступны по умолчанию в Docker?

Ответ

По умолчанию есть:
bridge, сеть, к которой подключаются контейнеры, если не указано иначе.
none, сетевой стек без наличия сетевого интерфейса в контейнере.
host, подключение к сетевому стеку сервера.

@golang_interview
Приведите необходимые шаги для развертывания докеризированного приложения, сохраненного в репозитории Git

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

- Сборка приложения с использованием Docker build в каталоге с кодом приложения
- Тестирование образа
- Выгрузка образа в Registry
- Уведомление удаленного сервера приложений, что он может скачать образ из Registry и запустить его
- Перестановка порта в прокси HTTP (S)
- Остановка старого контейнера

@golang_interview
Вопросы про кеширование и БД

Какими проблемами в кешировании данных сталкивался?
Как бы ты решал проблему, когда одновременно много клиентов не получают данные из кеша, и все одновременно идут в источник мастер данных(например, в БД)?
Какие плюсы и минусы ты видишь у реляционных СУБД в сравнении с NoSQL решениями? В каком случае ты предпочтешь выбрать NoSQL? С какими NoSQL решениями работал? И с какими трудностями сталкивался при работе с этими решениями?

Ответ

@golang_interview
Какие типы не являются встраиваемыми?
Какие типы не являются встраиваемыми?
Anonymous Quiz
10%
A E F K
8%
A B E F K
16%
A B E F H K
32%
ни одного
33%
все
Расскажите о CMD и ENTRYPOINT в Dockerfile

Эти инструкции Dockerfile задают команду, исполняемую при запуске контейнера. При их использовании есть несколько правил, например:


Должна быть минимум одна из них, CMD или ENTRYPOINT, в Dockerfile.
Если контейнер используется как исполняемый файл — ENTRYPOINT должна быть определена.
Если контейнер запускается с другими аргументами — CMD будет переопределена.

Подробнее

@golang_interview
Нужно ли лочить структуру мьютексом, если идет конкуррентная запись в разные поля структуры?

Подробнее
Ответ

@golang_interview
Отформатируйте строку без ее вывода

Найдите самый простой способ отформатировать строку с переменными, не выводя значение.

Пример решения
Легче всего это сделать с помощью fmt.Sprintf(), которая возвращает строку, не выводя ее на экран.

Например:

package main

import "fmt"

func main() {
s := fmt.Sprintf("Size: %d MB.", 85)
fmt.Println(s)
}

#задача #junior

@golang_interview
Расскажите про структуры данных: stack, queue, linked list, trie, balanced tree, Hash Table

Ответ:
8 известных структур данных, о которых спросят на собеседовании

#теория #middle

@golang_interview
Как работать с sync.pool и sync.map? Какие подводные камни у них есть?

sync.map
sync.Pool
Как не надо использовать sync pool в go

@golang_interview
Что вы знаете про работу с плагинами на Go ?

Ответ
Думаю, что всем, кто пытался добавить поддержку системы плагинов для своего приложения на Go, первым в поиске попадался стандартный пакет plugin. К сожалению, он применим только в двух случаях:

Вы не всегда хотите включать все модули приложения в поставку

Вы хотите динамически подгружать нужные модули по мере необходимости

Собственно, все. Описывать работу с пакетом не вижу смысла - официальная документация снабдит отличными примерами и даст исчерпывающие ответы на все возможные вопросы. Как по мне, путаницу вносит само название пакета, ведь плагин, в привычном понимании, при помощи него создать невозможно. На нас действует серьезное ограничение: плагин должен быть собран тем же окружением, что и основное приложение. Имеются различия в версии компилятора - до свидания, версия плагина отличается от ожидаемой версии приложения - счастливого пути. Фактически, плагин может собрать только сам разработчик основного приложения, что убивает на корню все затею. Также очевидно, что плагин не может быть написан на другом языке. Тем не менее, есть и плюсы: пакет стандартный, поддерживается рантаймом самого языка.

Читать дальше

@golang_interview
Что такое race condition?

Состояние гонки (англ. race condition), также конкуренция — ошибка проектирования многопоточной системы или приложения, при которой работа системы или приложения зависит от того, в каком порядке выполняются части кода. Своё название ошибка получила от похожей ошибки проектирования электронных схем (см. Гонки сигналов).

Термин состояние гонки относится к инженерному жаргону и появился вследствие неаккуратного дословного перевода английского эквивалента. В более строгой академической среде принято использовать термин неопределённость параллелизма.

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

Подробнее

@golang_interview