Всем привет! ✨
Команда SberMarket Tech ищет Golang разработчика, которому предстоит развивать новое направление - привлечение большего количества клиентов на витрины СберМаркета за счет органического трафика из поисковиков. Для этого будем разрабатывать и продвигать инструменты SEO, простраивать входную точку нашего каталога, чтобы клиенту было проще найти необходимое!
Чем будем заниматься:
- разрабатывать инструменты для настройки SEO на базе существующих сервисов (Go), а также монолита (Ruby);
- проектировать и реализовывать микросервисы;
- улучшать производительность работы микросервисов и находить оптимальные решения;
- разбирать баги, инциденты и устранять их последствия;
- прорабатывать масштабируемую архитектуру базы данных и микросервисов.
Мы рассчитываем, что ты:
- имеешь опыт коммерческой разработки на Go от 2 лет;
- проектировал высоконагруженные системы;
- работал с PostgreSQL/MySQL, Redis, Kafka;
- знаком с Unix, Git, понимаешь принципы CI/CD;
- работал с Docker-контейнерами, Istio и Kubernetes;
- хочешь участвовать в жизни продукта и командной работе;
- будет плюсом, если есть опыт в Ruby/Rails.
Что предлагаем:
- ДМС с первого месяца работы в компании;
- соцпакет на выбор — спорт, промокоды на заказ продуктов или билеты в отпуск;
- работаем удаленно. В Москве есть большой и красивый офис, поэтому если ты из этого города или будешь проездом — welcome;
- предоставляем технику для работы на твой выбор;
- помогаем интеллектуально и физически развиваться (электронная библиотека, книжный клуб, футбол);
- уделяем большое внимание обучению сотрудников, поэтому в нашей knowledge base ты найдёшь много интересных курсов, книг и записей конференций, а также у нас есть выделенный бюджет на образование.
А ещё:
- мы сами участвуем в конференциях, как спикеры;
- проводим внутренние митапы;
- не боимся экспериментировать с новыми решениями и технологиями;
- заботимся о сотрудниках: в компании есть специалист по здоровью и психологи для разговоров по душам 🙂
За всеми подробностями приходите в личку! Telegram HR: @Chernenko_Maria
Команда SberMarket Tech ищет Golang разработчика, которому предстоит развивать новое направление - привлечение большего количества клиентов на витрины СберМаркета за счет органического трафика из поисковиков. Для этого будем разрабатывать и продвигать инструменты SEO, простраивать входную точку нашего каталога, чтобы клиенту было проще найти необходимое!
Чем будем заниматься:
- разрабатывать инструменты для настройки SEO на базе существующих сервисов (Go), а также монолита (Ruby);
- проектировать и реализовывать микросервисы;
- улучшать производительность работы микросервисов и находить оптимальные решения;
- разбирать баги, инциденты и устранять их последствия;
- прорабатывать масштабируемую архитектуру базы данных и микросервисов.
Мы рассчитываем, что ты:
- имеешь опыт коммерческой разработки на Go от 2 лет;
- проектировал высоконагруженные системы;
- работал с PostgreSQL/MySQL, Redis, Kafka;
- знаком с Unix, Git, понимаешь принципы CI/CD;
- работал с Docker-контейнерами, Istio и Kubernetes;
- хочешь участвовать в жизни продукта и командной работе;
- будет плюсом, если есть опыт в Ruby/Rails.
Что предлагаем:
- ДМС с первого месяца работы в компании;
- соцпакет на выбор — спорт, промокоды на заказ продуктов или билеты в отпуск;
- работаем удаленно. В Москве есть большой и красивый офис, поэтому если ты из этого города или будешь проездом — welcome;
- предоставляем технику для работы на твой выбор;
- помогаем интеллектуально и физически развиваться (электронная библиотека, книжный клуб, футбол);
- уделяем большое внимание обучению сотрудников, поэтому в нашей knowledge base ты найдёшь много интересных курсов, книг и записей конференций, а также у нас есть выделенный бюджет на образование.
А ещё:
- мы сами участвуем в конференциях, как спикеры;
- проводим внутренние митапы;
- не боимся экспериментировать с новыми решениями и технологиями;
- заботимся о сотрудниках: в компании есть специалист по здоровью и психологи для разговоров по душам 🙂
За всеми подробностями приходите в личку! Telegram HR: @Chernenko_Maria
Реализовать микросервис для работы с балансом пользователей (зачисление средств, списание средств, перевод средств от пользователя к пользователю, а также метод получения баланса пользователя).
Сервис должен предоставлять
HTTP API
и принимать/отдавать запросы/ответы в формате JSON
.Инструкция по запуску
▪Клонировать репозиторий локально в любую деректорию своего устройства
git clone https://github.com/Owner-maker/microservice-for-working-with-user-balance.git
▪Перейти в директорию проекта вручную или с помощью консоли
cd microservice-for-working-with-user-balance
▪Создать и запустить Docker - контейнер docker-compose build && docker-compose up
▪После запуска контейнера все сущности автоматически будут созданы в базе данных
▪Также будут автоматически добавлены 2 тестовых пользователя с отсутствующими балансами
Их id = 1 и id = 2 соответственно
▪После запуска контейнера будет также доступна html - страница Swagger для удобства тестирования API
http://localhost:8080/swagger/index.html#/
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 Задача с Leetcode. Поиск в двумерной матрице
Сложность: Средняя
Условие задачи: напишите эффективный алгоритм для поиска наличия нужного числа в двумерной матрице, которая имеет следующие свойства:
▪ в строке элементы отсортированы по возрастанию (слева - направо);
▪ в столбце элементы отсортированы по возрастанию (снизу - вверх).
Пример:
Ввод:
Вывод:
Решение:
Временная сложность:
Пространственная сложность:
Пишите свое решение в комментариях👇
@golang_interview
Сложность: Средняя
Условие задачи: напишите эффективный алгоритм для поиска наличия нужного числа в двумерной матрице, которая имеет следующие свойства:
▪ в строке элементы отсортированы по возрастанию (слева - направо);
▪ в столбце элементы отсортированы по возрастанию (снизу - вверх).
Пример:
Ввод:
matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
Вывод:
true
Решение:
func searchMatrix(matrix [][]int, target int) bool {
m, n := len(matrix), len(matrix[0])
i, j := 0, n-1
for i < m && j >= 0 {
if matrix[i][j] == target {
return true
}
if matrix[i][j] < target {
i++
} else {
j--
}
}
return false
}
Временная сложность:
O(m + n)
Пространственная сложность:
O(1)
Пишите свое решение в комментариях👇
@golang_interview
📌 Тестовое Задание (Golang + PostgreSQL)
Написать сервис, который будет слушать входящие запросы по HTTP, преобразовывать их в запрос к соответствующей функции Postgres, выполнять запрос и возвращать ответ клиенту.
Скиллы: Golang, Postgres, regexp, строки, работа с json в Golang и Postgres.
Web-сервис
Написать сервис, который будет слушать входящие запросы по HTTP, преобразовывать их в запрос к соответствующей функции Postgres (по схеме трансляции, приведённой ниже), выполнять запрос и возвращать ответ клиенту.
Как плюс: ограничить максимальное количество одновременных коннектов к БД.
Как два плюса: добавить prometheus метрики на вызовы (количество вызовов, длительность выполнения).
Настройки соединения с сервером Postgres читать из config файла:
port - (int) порт, на котором слушать запросы
endpoint - (string) название API
host - (string) hostname, где установлен Postgres
user - (string) имя пользователя Postgres
password - (string) пароль пользователя Postgres
schema - (string) схема в Postgres
Трансляция запроса в вызов Postgres функции
Формат запроса к сервису:
HTTP_METHOD server:port/endpoint/vversion[/object/id ...]]/destination/[id] , где
HTTP_METHOD - одно из: GET, POST, PUT, DELETE
server - сервер, где запущен веб-сервис
port - порт
endpoint - значение из config-файла
version - номер версии API, число
/object/id - необязательный повторяющийся параметр, определяющий путь в иерархии объектов
/destination/ - конечный объект
id - id конечного объекта. Обязателен для методов PUT, DELETE, не указывается для POST. Для GET -- если указан, то возвращает элемент с данным id, если не указан, возвращает полный список элементов.
Правила трансляции
запрос в Postgres = select * from схема.[object1[_object2]...]_destination_method( [id1[, id2]... ,] id[, params])
В зависимости от HTTP метода к имени функции добавляется cуффикс method:
для GET - get
для POST - ins
для PUT - upd
для DELETE - del
В случае, если идентификатор объекта не указан, соответствующий элемент id в запросе должен быть равен нулю, на примерах:
для запроса GET http://localhost:80/api/v1/user/12/comment/34
запрос в Postgres должен выглядеть так: select * from test.user_comment_get(12, 34) (комментарий c id=32 пользователя c id=12)
для запроса GET http://localhost:80/api/v1/user/12/comment/
запрос в Postgres должен выглядеть так: select * from test.user_comment_get(12, 0) (все комментарии пользователя 12)
для запроса GET http://localhost:80/api/v1/user/comment/
запрос в Postgres должен выглядеть так: select * from test.user_comment_get(0, 0) (все комментарии всех пользователей)
Для POST и PUT методов в теле запроса принимается JSON, который передаётся в Postgres в качестве параметра params.
Все методы должны возвращать результат работы соответствующей Postgres функции с ContentType = 'application/json'
🖥 Github
@golang_interview
Написать сервис, который будет слушать входящие запросы по HTTP, преобразовывать их в запрос к соответствующей функции Postgres, выполнять запрос и возвращать ответ клиенту.
Скиллы: Golang, Postgres, regexp, строки, работа с json в Golang и Postgres.
Web-сервис
Написать сервис, который будет слушать входящие запросы по HTTP, преобразовывать их в запрос к соответствующей функции Postgres (по схеме трансляции, приведённой ниже), выполнять запрос и возвращать ответ клиенту.
Как плюс: ограничить максимальное количество одновременных коннектов к БД.
Как два плюса: добавить prometheus метрики на вызовы (количество вызовов, длительность выполнения).
Настройки соединения с сервером Postgres читать из config файла:
port - (int) порт, на котором слушать запросы
endpoint - (string) название API
host - (string) hostname, где установлен Postgres
user - (string) имя пользователя Postgres
password - (string) пароль пользователя Postgres
schema - (string) схема в Postgres
Трансляция запроса в вызов Postgres функции
Формат запроса к сервису:
HTTP_METHOD server:port/endpoint/vversion[/object/id ...]]/destination/[id] , где
HTTP_METHOD - одно из: GET, POST, PUT, DELETE
server - сервер, где запущен веб-сервис
port - порт
endpoint - значение из config-файла
version - номер версии API, число
/object/id - необязательный повторяющийся параметр, определяющий путь в иерархии объектов
/destination/ - конечный объект
id - id конечного объекта. Обязателен для методов PUT, DELETE, не указывается для POST. Для GET -- если указан, то возвращает элемент с данным id, если не указан, возвращает полный список элементов.
Правила трансляции
запрос в Postgres = select * from схема.[object1[_object2]...]_destination_method( [id1[, id2]... ,] id[, params])
В зависимости от HTTP метода к имени функции добавляется cуффикс method:
для GET - get
для POST - ins
для PUT - upd
для DELETE - del
В случае, если идентификатор объекта не указан, соответствующий элемент id в запросе должен быть равен нулю, на примерах:
для запроса GET http://localhost:80/api/v1/user/12/comment/34
запрос в Postgres должен выглядеть так: select * from test.user_comment_get(12, 34) (комментарий c id=32 пользователя c id=12)
для запроса GET http://localhost:80/api/v1/user/12/comment/
запрос в Postgres должен выглядеть так: select * from test.user_comment_get(12, 0) (все комментарии пользователя 12)
для запроса GET http://localhost:80/api/v1/user/comment/
запрос в Postgres должен выглядеть так: select * from test.user_comment_get(0, 0) (все комментарии всех пользователей)
Для POST и PUT методов в теле запроса принимается JSON, который передаётся в Postgres в качестве параметра params.
Все методы должны возвращать результат работы соответствующей Postgres функции с ContentType = 'application/json'
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Описание задачи
Необходимо создать сервис для хранения и подачи объявлений. Объявления должны храниться в базе данных. Сервис должен предоставлять API, работающее поверх HTTP в формате JSON.
Метод получения списка объявлений
Пагинация: на одной странице должно присутствовать 10 объявлений;
Cортировки: по цене (возрастание/убывание) и по дате создания (возрастание/убывание);
Поля в ответе: название объявления, ссылка на главное фото (первое в списке), цена.
Метод получения конкретного объявления
Обязательные поля в ответе: название объявления, цена, ссылка на главное фото;
Опциональные поля (можно запросить, передав параметр fields): описание, ссылки на все фото.
Метод создания объявления:
Принимает все вышеперечисленные поля: название, описание, несколько ссылок на фотографии (сами фото загружать никуда не требуется), цена;
Возвращает ID созданного объявления и код результата (ошибка или успех).
Реализация
Следование дизайну REST API.
Подход "Чистой Архитектуры" и техника внедрения зависимости.
Работа с фреймворком echo.
Работа с БД Postgres с использованием библиотеки sqlx и написанием SQL запросов.
Конфигурация приложения - библиотека viper.
Реализация Graceful Shutdown.
Запуск из Docker.
Юнит-тестирование уровней обработчиков, бизнес-логики и взаимодействия с БД классическим способом и с помощью моков - библиотеки testify, mock.
Сквозное (E2E) тестирование - BDD фреймворк goconvey.
Проверка кода на соответствие стандартам с помощью линтера - утилита golangci-lint
Автоматическое создание документации с помощью Swagger 2.0 - библиотека echo-swagger.
Непрерывная интеграция - сборка приложения, проверка линтером и запуск тестов в Github action.
Структура проекта:
.
├── pkg
│ ├── error_message // сообщения об ошибках
│ ├── model // основные структуры
│ ├── handler // обработчики запросов
│ ├── service // бизнес-логика
│ └── repository // взаимодействие с БД
├── cmd // точка входа в приложение
├── migrations // SQL файлы с миграциями
├── scripts // SQL файлы с тестовыми данными
├── configs // файлы конфигурации
├── test // инициализация тестовой БД
└── e2e_test.go // сквозной тест
Архитектура
Приложение имеет 3 основных слоя, реализованных в отдельных пакетах.
Repository - слой взаимодействия с БД. Методы этого слоя принимают данные от Service и выполняют запросы к БД.
Service - слой бизнес-логики. Методы этого слоя принимают данные от Handler и применяют к ним бизнес-правила для достижения цели варианта использования.
Handler - слой обработчиков запросов. Содержит методы-обработчики для endpoints.
Пакет Model содержит структуры сущностей, используемых остальными слоями.
Endpoints
GET /api/adverts - получение списка объявлений
Параметры запроса:
page - номер страницы,
sort - параметры сортировки в формате [поле сортировки]_[порядок сортировки] (например price_desc).
GET /api/adverts/:id - получение объявления по id
Параметры запроса: - fields - флаг, если равен True, то вернуть все поля, иначе вернуть название, ссылку на главное фото и цену.
POST /api/adverts - создание объявления
Тело запроса:
title - название объявления,
description - описание объявления,
photos - ссылки на фотографии,
price - цена.
▪Задание
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Задача. Слияние двух бинарных деревьев
Сложность: Лёгкая
Условие задачи: Даны два бинарных дерева, необходимо осуществить их наложение друг на друга и вывод результатов в новом дереве.
Примечание: Наложение представляет из себя суммирование соответствующих значений из узлов двух деревьев.
Пример:
Ввод: root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
Вывод:[3,4,5,5,4,null,7]
Ввод: root1 = [1], root2 = [1,2]
Вывод: [2,2]
Решение
Пишите свое мнение в комментариях👇
@golang_interview
Сложность: Лёгкая
Условие задачи: Даны два бинарных дерева, необходимо осуществить их наложение друг на друга и вывод результатов в новом дереве.
Примечание: Наложение представляет из себя суммирование соответствующих значений из узлов двух деревьев.
Пример:
Ввод: root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
Вывод:[3,4,5,5,4,null,7]
Ввод: root1 = [1], root2 = [1,2]
Вывод: [2,2]
Решение
Пишите свое мнение в комментариях👇
func mergeTrees(root1 *TreeNode, root2 *TreeNode) *TreeNode {
if root1 == nil {
return root2
}
if root2 == nil {
return root1
}
root1.Val += root2.Val
root1.Left = mergeTrees(root1.Left, root2.Left)
root1.Right = mergeTrees(root1.Right, root2.Right)
return root1
}
@golang_interview
В этой статье я поделился лучшими бесплатными онлайн-курсами по изучению Golang на таких сайтах, как freeCodecamp, YouTube, Udemy и Coursera .
▪ Читать
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Для создания файла с определенным 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
Разработкой начал заниматься ещё со старшей школы, изучал 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