Разработкой начал заниматься ещё со старшей школы, изучал C/C++ (очень пригодилось при написании скриптов в injection для ультимы онлайн). Профессионально начал работать разработчиком приблизительно с 2014, основной язык до 2020 года был C# с примесью C++. Сначала разрабатывал и поддерживал некоторые проекты в банковской сфере, потом резко поменял предметную область и ушёл писать софт для автоматизации работы одного строительного девелопера. На начальных этапах это было огромное легаси на C# от бывшего архитектора, решившего стать программистом, с кучей багов и неочевидных решений, пришлось много переписывать.
Со временем появились задачи, которые не были привязаны к языку и технологиям в принципе (изначально писал, по сути, плагины к CAD-приложениям), и я попробовал Golang, а вместе с ним и микросервисы, NoSQL, gRPC и прочие модные штуки. Побывал в шкуре админа-девопса, так как новые сервисы я запускал и поддерживал сам.
Некоторое время назад наткнулся на пост про собеседования и решил рассказать Хабру про свой опыт. Возможно, кому-то он окажется полезным.
▪Читать дальше
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Тестовое задание:
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
Недавно я наткнулся на тест LinkedIn Golang, интересную возможность для разработчиков получить значок на сайте, демонстрирующий их знание языка (этот значок не только демонстрирует ваши навыки, но и помогает вам выделиться из толпы на конкурентном рынке труда).
Я нашёл вопросы в тесте довольно интересными,
▪Читать
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Вывод всех перестановок символов слайса или строки
Реализуйте функцию perm(), которая принимает слайс или строку и печатает все возможные комбинации символов.
Решение:
Пишите свое решение в комментариях👇
#junior #golang
@golang_interview
Реализуйте функцию 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
- System Design Primer
- Interview
- Awesome Interview Questions
- Coding Interview University
- Tech Interview Handbook
#github
@golang_interview
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-запросах сделать возможность задавать аргумент timeoutcurl 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/
Собеседование по программированию — сложное испытание, требующее тщательной подготовки. От вас ждут определённых знаний и навыков, а также способности относительно быстро решать разные задачи.
Но иногда с решением тестовых задач могут возникать сложности, которые приведут к отказу. О 3 ошибках, которые допускают кандидаты во время решения тестовых задач узнаете тут:
https://nuancesprog.ru/p/16911/
📚Книга: 100 Go Mistakes and How to Avoid Them (2022)
Книга рекомендуется к прочтению Go-разработчиками перед тем, как приступить к кодингу. Эта книга поможет:
— Избежать самые распространенные ошибки
— Структурировать и оптимизировать код
— Эффективно обрабатывать данные и управляющие структуры
— Работать с ошибками в идиоматической манере
— Подготовить приложение к проду и улучшить качество тестирования
— Улучшить навыки работы с конкурентностью и многое другое
•книга
•исходные коды
@golang_interview
Книга рекомендуется к прочтению Go-разработчиками перед тем, как приступить к кодингу. Эта книга поможет:
— Избежать самые распространенные ошибки
— Структурировать и оптимизировать код
— Эффективно обрабатывать данные и управляющие структуры
— Работать с ошибками в идиоматической манере
— Подготовить приложение к проду и улучшить качество тестирования
— Улучшить навыки работы с конкурентностью и многое другое
•книга
•исходные коды
@golang_interview
Если вы готовитесь к собеседованию или просто хотите оставаться передовым разработчиком, Go - эта статья будет полезна для вас. В статье разобраны 50 самых популряных вопросов с ответами для Go разработчиков.
https://www.educative.io/blog/50-golang-interview-questions
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Educative
Crack the top 50 Golang interview questions
Golang is a rising language similar to C but with many added convenience features. Today, we'll walk you through the 50 top Golang questions you need to know before your next Google interview.
Серия собеседований на Middle Go разработчика с Сергеем Парамошкиным (руководит центром разработки и автоматизации в МТС.Digital)
Вы увидите реальные вопросы, кейсы и задачи, а также узнаете, почему спрашивали именно эти вопросы и как лучше всего подготовиться к собеседованию.
🔗Сергей Парамошкин — Даниил
🔗Сергей Парамошкин — Дмитрий Болдин
Вы увидите реальные вопросы, кейсы и задачи, а также узнаете, почему спрашивали именно эти вопросы и как лучше всего подготовиться к собеседованию.
🔗Сергей Парамошкин — Даниил
🔗Сергей Парамошкин — Дмитрий Болдин
YouTube
Открытое собеседование на Go-разработчика | Тренировочные интервью
Оставить заявку на менторскую программу Эйч Навыки, чтобы перейти на Go, сменить работу, апнуть грейд или зарплату: https://yangx.top/skills_mentee_bot?start=ordersuccess_video_sZSNf5eVnRA
Подробнее про Эйч Навыки: https://hcareers.notion.site/Go-10-600-4a68…
Подробнее про Эйч Навыки: https://hcareers.notion.site/Go-10-600-4a68…
34 вопросов и ответов с собеседований Golang
https://www.fullstack.cafe/blog/go-interview-questions
@golang_interview
https://www.fullstack.cafe/blog/go-interview-questions
@golang_interview
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
Что выведет код ?
Решение
@golang_interview
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
Решение:
Пишите свое решение в комментариях👇
@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
Петр Коробейников, техлид сервисов DBaaS for Redis и RabbitMQ в CloudMTS, делится некоторым опытом подготовки к прохождению алгоритмических интервью с примерами на Go.
📌 Читать
@golang_interview
Хабр
Несколько мыслей по подготовке к алгоритмической части собеседования
Всем привет! На связи снова Петр Коробейников, техлид сервисов DBaaS for Redis и RabbitMQ (релиз скоро) в #CloudMTS. В этой статье хочу поделиться с вами некоторым опытом подготовки к прохождению...
Наиближайшая сумма трёх
Сложность: Средняя
Условие задачи: Дан целочисленный массив и целевое значение суммы. Нужно найти три числа из массива, которые либо в результате суммирования равны значению целевой суммы либо же максимально близки к ней по модулю.
Каждый массив имеет единственное решение.
Пример:
Ввод:
Вывод:
Объяснение:
Ввод:
Вывод:
Решение:
Временная сложность:
Пространственная сложность:
Пишите свое решение в комментариях👇
@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
Настоящее собеседование на Middle Go разработчика: реальные вопросы, кейсы, задачи. Все происходит так, если бы кандидат пришел на собеседование в команду. Расскажем почему спрашивали именно эти вопросы и как лучше всего подготовиться к собеседованию.
Проведет интервью Александр Сахаров
- Работает в Avito старшим бэкенд разработчиком
- Опыт коммерческой разработки 5 лет. Пишет на Go, PHP, Python. Последние 3 года все больше Go.
- Собеседует разработчиков на разные грейды, от Junior до Senior+
📌 Видео
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 Найти максимальный подмассив
Сложность: Средняя
Условие задачи: дан целочисленный массив, необходимо найти в нем такой подмассив, сумма элементов в котором будет максимальной.
Подмассивом называется последовательная часть исходного массива.
Пример:
Ввод:
Вывод: 6
Объяснение:
Ввод:
Вывод: 23
Решение:
Пишите свое решение в комментариях👇
@golang_interview
Сложность: Средняя
Условие задачи: дан целочисленный массив, необходимо найти в нем такой подмассив, сумма элементов в котором будет максимальной.
Подмассивом называется последовательная часть исходного массива.
Пример:
Ввод:
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