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
加入频道
👣 Бесплатные курсы по изучению Golang в 2023 году

В этой статье я поделился лучшими бесплатными онлайн-курсами по изучению Golang на таких сайтах, как freeCodecamp, YouTube, Udemy и Coursera .

Читать

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Как создать файл с mimetype golang

Для создания файла с определенным MIME-типом в Go, необходимо создать файл и записать в него данные в нужном формате.

Пример создания файла с MIME-типом text/plain:

package main

import (
"io/ioutil"
"log"
)

func main() {
message := "Hello, world!"

err := ioutil.WriteFile("example.txt", []byte(message), 0644)
if err != nil {
log.Fatal(err)
}
}

В данном примере мы создаем файл example.txt и записываем в него сообщение Hello, world!. Так как тип данных в файле - текстовый, то его MIME-тип будет text/plain.

Пример создания файла с MIME-типом application/pdf:

package main

import (
"io/ioutil"
"log"
)

func main() {
// создаем бинарные данные для PDF-файла
pdfData := []byte{0x25, 0x50, 0x44, 0x46, 0x2d, 0x31, 0x2e, 0x34, ...}

err := ioutil.WriteFile("example.pdf", pdfData, 0644)
if err != nil {
log.Fatal(err)
}
}

В данном примере мы создаем файл example.pdf и записываем в него бинарные данные для PDF-файла. MIME-тип данного файла будет application/pdf.

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

#Junior

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Мои собеседования (Golang developer)

Разработкой начал заниматься ещё со старшей школы, изучал C/C++ (очень пригодилось при написании скриптов в injection для ультимы онлайн). Профессионально начал работать разработчиком приблизительно с 2014, основной язык до 2020 года был C# с примесью C++. Сначала разрабатывал и поддерживал некоторые проекты в банковской сфере, потом резко поменял предметную область и ушёл писать софт для автоматизации работы одного строительного девелопера. На начальных этапах это было огромное легаси на C# от бывшего архитектора, решившего стать программистом, с кучей багов и неочевидных решений, пришлось много переписывать.

Со временем появились задачи, которые не были привязаны к языку и технологиям в принципе (изначально писал, по сути, плагины к CAD-приложениям), и я попробовал Golang, а вместе с ним и микросервисы, NoSQL, gRPC и прочие модные штуки. Побывал в шкуре админа-девопса, так как новые сервисы я запускал и поддерживал сам.

Некоторое время назад наткнулся на пост про собеседования и решил рассказать Хабру про свой опыт. Возможно, кому-то он окажется полезным.

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

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Тестовое задание Реализовать 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