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
加入频道
👣 Тестовое задание Реализовать REST API на golang

Тестовое задание:

1. Реализовать REST API со следующим функционалом

1.1. Получение курса валют на стороннем API (RUB / EUR / USD / JPY). (например: https://currencyfreaks.com/)
1.1.1. Если за текущий день не было курса, получить в 12:00 обновить курс валют

1.1.2 Реализовать сохранение курса валюты в БД (PostgreSQL, MySQL, Mongo на выбор)

1.2. Реализовать эндпоинты:

1.2.1. Получение курсов по указанной дате (все 4 валюты)

1.2.2. Получение валютных пар из указанных 4х. Т.е. хочу получить курс Рубля к Йене или Доллар к Евро и т.д.

1.3. Реализовать валидацию запросов (даты, тикеров валют)

1.4. Реализовать доступ к API через API key

1.5 Реализовать логирование в БД запросов к API. Сохраняем в логи - дату, вид запроса (по дате / по паре)

1.6. Использовать для проекта docker.

1.7. При инициализации сервера заполнить БД первоначальными данными курсов валют по нескольким датам (значения любые)

#практика

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 15 вопросов с собеседований Golang из LinkedIn Assessment — подробные пояснения

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

Я нашёл вопросы в тесте довольно интересными,

Читать

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Вывод всех перестановок символов слайса или строки

Реализуйте функцию perm(), которая принимает слайс или строку и печатает все возможные комбинации символов.

Решение:

package main
import "fmt"

// Perm calls f with each permutation of a.

func Perm(a []rune, f func([]rune)) {
perm(a, f, 0)
}

// Permute the values at index i to len(a)-1.

func perm(a []rune, f func([]rune), i int) {
if i > len(a) {
f(a)
return
}
perm(a, f, i+1)
for j := i + 1; j < len(a); j++ {
a[i], a[j] = a[j], a[i]
perm(a, f, i+1)
a[i], a[j] = a[j], a[i]
}
}

func main() {
Perm([]rune("abc"), func(a []rune) {
fmt.Println(string(a))
})
}


Пишите свое решение в комментариях👇

#junior #golang
@golang_interview
🔥Подборка репозиториев, которые помогут подготовиться к собеседованию:

- System Design Primer
- Interview
- Awesome Interview Questions
- Coding Interview University
- Tech Interview Handbook

#github

@golang_interview
👣 Реализовать брокер очередей в виде веб сервиса. Сервис должен обрабатывать 2 метода:

1. PUT /queue?v=....
положить сообщение в очередь с именем queue (имя очереди может быть любое), пример:
curl -XPUT http://127.0.0.1/color?v=red
curl -XPUT http://127.0.0.1/color?v=green
curl -XPUT http://127.0.0.1/name?v=alex
curl -XPUT http://127.0.0.1/name?v=anna


в ответ {пустое тело + статус 200 (ok)}
в случае отсутствия параметра v - пустое тело + статус 400 (bad request)

2. GET /queue

забрать (по принципу FIFO) из очереди с названием queue сообщение и вернуть в теле http запроса, пример (результат, который должен быть при выполненных put’ах выше):
curl http://127.0.0.1/color => red
curl http://127.0.0.1/color => green
curl http://127.0.0.1/color => {пустое тело + статус 404 (not found)} curl http://127.0.0.1/color => {пустое тело + статус 404 (not found)} curl http://127.0.0.1/name => alex
curl http://127.0.0.1/name => anna
curl http://127.0.0.1/name => {пустое тело + статус 404 (not found)}
при GET-запросах сделать возможность задавать аргумент timeout
curl http://127.0.0.1/color?timeout=N
если в очереди нет готового сообщения получатель должен ждать либо до момента прихода сообщения либо до истечения таймаута (N - кол-во секунд). В случае, если сообщение так и не появилось - возвращать код 404.
получатели должны получать сообщения в том же порядке как от них поступал запрос, если 2 получателя ждут сообщения (используют таймаут), то первое сообщение должен получить тот, кто первый запросил.
Порт, на котором будет слушать сервис, должен задаваться в аргументах командной строки.

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

Желательно (но не обязательно) весь код расположить в одном go-файле (предполагается, что решение будет не больше 200 строк кода) для удобства проверки, никаких дополнительных файлов readme и т.п. не требуется, создание классической структуры каталогов (cmd/internal/...) не требуется.

Лаконичность кода будет восприниматься крайне положительно, не нужна "гибкость" больше, чем требуется для решения именно этой задачи, не нужны логи процесса работы программы (только обработка ошибок), никакого дебага и т.д... чем меньше кода - тем лучше!

Оцениваться корректность реализации (заданные условия выполняются), архитектурная составляющая (нет лишних действий в программе, только решающие задачи программы), лаконичность и понятность кода (субъективно, конечно, но думайте о том, насколько будет понятен ваш код для других, это куда более важно в командной разработке, чем сложный "крутой" код).


@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
3 ошибки на собеседованиях по программированию, из-за которых можно получить отказ

Собеседование по программированию  —  сложное испытание, требующее тщательной подготовки. От вас ждут определённых знаний и навыков, а также способности относительно быстро решать разные задачи.

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

https://nuancesprog.ru/p/16911/
📚Книга: 100 Go Mistakes and How to Avoid Them (2022)

Книга рекомендуется к прочтению Go-разработчиками перед тем, как приступить к кодингу. Эта книга поможет:

— Избежать самые распространенные ошибки
— Структурировать и оптимизировать код
— Эффективно обрабатывать данные и управляющие структуры
— Работать с ошибками в идиоматической манере
— Подготовить приложение к проду и улучшить качество тестирования
— Улучшить навыки работы с конкурентностью и многое другое

книга
исходные коды

@golang_interview
👣 Разобр 50 популярных вопросов с собеседования по Golang

Если вы готовитесь к собеседованию или просто хотите оставаться передовым разработчиком, Go - эта статья будет полезна для вас. В статье разобраны 50 самых популряных вопросов с ответами для Go разработчиков.

https://www.educative.io/blog/50-golang-interview-questions

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Серия собеседований на Middle Go разработчика с Сергеем Парамошкиным (руководит центром разработки и автоматизации в МТС.Digital)

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

🔗Сергей Парамошкин — Даниил
🔗Сергей Парамошкин — Дмитрий Болдин
Коллекция вопросов и ответов на собеседовании по Golang

Github

@golang_interview
34 вопросов и ответов с собеседований Golang

https://www.fullstack.cafe/blog/go-interview-questions

@golang_interview
👣 20 вопросов и ответов на собеседовании по golang для начинающих

https://dsysd-dev.medium.com/20-beginner-golang-interview-questions-and-answers-de4ec7108ee

#junior

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выведет код ?

package main

import "fmt"

func reverse(arr [6]int) {
for i, j := 0, len(arr)-1; i < j; i, j = i+1, j-1 {
arr[i], arr[j] = arr[j], arr[i]
}
}

func main() {
arr := [...]int{5: 0}
for i := 1; i < 5; i++ {
arr[i] = i + 1
}
reverse(arr)
fmt.Println(arr)
}

Решение

@golang_interview
💡Задача: Игра в прыжки

Условие: Вам дан целочисленный массив nums. Изначально вы находитесь в первом индексе массива, и каждый элемент массива представляет максимальную длину прыжка в этой позиции.

Верните true, если вы можете добраться до последнего индекса, или false в противном случае.

Пример:
Ввод: nums = [1,3,1,1,4]
Вывод: true
Объяснение: Переходим на 1 шаг от индекса 0 к 1, затем на 3 шага к последнему индексу.

Ввод: nums = [3,2,1,0,4]
Вывод: false

Решение:

func canJump(nums []int) bool {
max := 0
for i := 0; i < len(nums); i++ {
if i > max {
return false
}
if i + nums[i] > max {
max = i + nums[i]
}
}
return true
}


Пишите свое решение в комментариях👇

@golang_interview
💫 Несколько мыслей по подготовке к алгоритмической части собеседования

Петр Коробейников, техлид сервисов DBaaS for Redis и RabbitMQ в CloudMTS, делится некоторым опытом подготовки к прохождению алгоритмических интервью с примерами на Go.

📌 Читать

@golang_interview
Наиближайшая сумма трёх

Сложность: Средняя

Условие задачи: Дан целочисленный массив и целевое значение суммы. Нужно найти три числа из массива, которые либо в результате суммирования равны значению целевой суммы либо же максимально близки к ней по модулю.

Каждый массив имеет единственное решение.

Пример:

Ввод:
nums = [-1,2,1,-4], target = 1
Вывод:
2
Объяснение:
(-1 + 2 + 1 = 2)

Ввод:
nums = [0,0,0], target = 1
Вывод:
0

Решение:

func threeSumClosest(nums []int, target int) int {
sort.Ints(nums)
ans := 0
dist := int(^uint(0) >> 1) //dist = infinity

for i :=0; i<len(nums); i++{
l := i+1
r := len(nums)-1

for l < r{
sum := nums[i] + nums[l] + nums[r]
if sum == target{
return sum
}
if sum < target{
l = l + 1
if target - sum < dist{
dist = target-sum
ans = sum
}
}else{
r = r - 1
if sum - target < dist{
dist = sum-target
ans = sum
}
}
}
}
return ans
}


Временная сложность: O(nlogn)

Пространственная сложность: O(1)

Пишите свое решение в комментариях👇

@golang_interview
👣 Открытое собеседование на Go-разработчика

Настоящее собеседование на Middle Go разработчика: реальные вопросы, кейсы, задачи. Все происходит так, если бы кандидат пришел на собеседование в команду. Расскажем почему спрашивали именно эти вопросы и как лучше всего подготовиться к собеседованию.

Проведет интервью Александр Сахаров
- Работает в Avito старшим бэкенд разработчиком
- Опыт коммерческой разработки 5 лет. Пишет на Go, PHP, Python. Последние 3 года все больше Go.
- Собеседует разработчиков на разные грейды, от Junior до Senior+

📌 Видео

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 Найти максимальный подмассив

Сложность: Средняя

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

Подмассивом называется последовательная часть исходного массива.

Пример:

Ввод:
nums = [-2,1,-3,4,-1,2,1,-5,4]
Вывод:
6

Объяснение:
4,-1,2,1] имеет наибольшую сумму 6.

Ввод:
nums = [5,4,-1,7,8]
Вывод:
23

Решение:


function maxSubArray(nums: number[]): number {
let [currentSum, largestSum] = [0, nums[0]]
nums.forEach(n => {
currentSum = Math.max(n, currentSum + n)
largestSum = Math.max(currentSum, largestSum)
})
return largestSum
}

Пишите свое решение в комментариях👇

@golang_interview
👣 Задача топ k наиболее часто встречающихся элементов

Сложность: Средняя

Условие задачи: Дан целочисленный массив и целое число k. Необходимо вернуть k часто встречающихся элементов. Порядок чисел в ответе не имеет значения.

Гарантируется, что ответ уникальный. То есть несколько элементов не могут встречаться одинаковое количество раз.

Пример:

Ввод: nums = [1,1,1,2,2,3], k = 2
Вывод: [1,2]

Ввод: nums = [1], k = 1
Вывод: [1]

Решение:

func topKFrequent(nums []int, k int) []int {
dict := make(map[int]int)

for _, num := range nums {
dict[num]++
}

arr := [][]int{}
for key, value := range dict {
arr = append(arr, []int{key, value})
}

n := len(arr)
quickSelect(arr,0, n-1, n-k)

res := []int{}
for i := n-k; i < n; i++ {
res = append(res, arr[i][0])
}

return res
}

func quickSelect(arr [][]int, start, end, k int) {
if start < end {
pivot := partition(arr, start, end)
if pivot == k {
return
} else if pivot < k {
quickSelect(arr, pivot+1, end, k)
} else {
quickSelect(arr, start, pivot-1, k)
}
}
}

func partition(arr [][]int, start, end int) int {
idx := start-1
pivot := end

for i := start; i < end; i++ {
if arr[i][1] < arr[pivot][1] {
idx++
arr[idx], arr[i] = arr[i], arr[idx]
}
}
idx++
arr[idx], arr[pivot] = arr[pivot], arr[idx]
return idx
}

Временная сложность:
O(N
Пространственная сложность:
O(N)


Пишите свое решение в комментариях👇

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
💡Задача: Быки и коровы

Условие задачи: разыгрывается партия, в которой мы просим оппонента угадать число. После первой попытки мы мы говорим другу количество отданных цифр и неотгаданных.

Быки - правильные цифры, находящиеся на нужных позициях.

Коровы - правильные числа, но находящиеся на соответствующих позициях.

Задача - выдать подсказку в формате "xAyB", где x - количество быков, y - количество коров.

Пример:

Ввод:
secret = "1807", guess = "7810"
Вывод: "1A3B"

Объяснение:

Ввод:
secret = "1123", guess = "0111"
Вывод: "1A1B"

Решение:

func getHint(secret string, guess string) string {
digits := [10]int{}
bulls, cows := 0, 0

for i := 0; i < len(secret); i++ {
s := secret[i] - '0'
g := guess[i] - '0'

if s == g {
bulls++
} else {
if digits[s] < 0 {
cows++
}
if digits[g] > 0 {
cows++
}

digits[s]++
digits[g]--
}

}
return fmt.Sprintf("%dA%dB", bulls, cows)
}



пишите свое решение в комментариях 👇

@golang_interview