Тестовое задание для кандидата на должность Golang разработчика.
Описание
Есть внешний сервис, который обрабатывает некие абстрактные объекты батчами. Данный сервис может обрабатывать только определенное количество элементов n в заданный временной интервал p. При превышении ограничения, сервис блокирует последующую обработку на долгое время.
Задача заключается в реализации клиента к данному внешнему сервису, который позволит обрабатывать максимально возможное количество объектов без блокировки. Приводить реализацию внешнего сервиса необязательно!
Определение сервиса:
package main
import (
"context"
"errors"
"time"
)
// ErrBlocked reports if service is blocked.
var ErrBlocked = errors.New("blocked")
// Service defines external service that can process batches of items.
type Service interface {
GetLimits() (n uint64, p time.Duration)
Process(ctx context.Context, batch Batch) error
}
// Batch is a batch of items.
type Batch []Item
// Item is some abstract item.
type Item struct{}
Требования
- язык программирования Golang.
- решение должно быть в git-репозитории (можно прислать архив или опубликовать на github, gitlab, bitbucket...).
Пожелания
- документирование кода;
- тесты;
- использование статического анализатора (конфигурацию положить в репозиторий).
Варианты решений можно присылать в комментарии.
❤️, если нравится такие задачи.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Gitea – инструмент, который позволяет развернуть self-hosted git-сервис на подобии github или gitlab
Поскольку Gitea написана на Go, она работает на всех платформах и архитектурах, поддерживаемых Go, включая Linux, macOS и Windows на архитектурах x86, amd64, ARM и PowerPC
#Go #Git #Useful
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Asynq – простая, надежная и эффективная очередь задач в Go
Обзор работы Asynq:
• Клиент ставит задачи в очередь
• Сервер извлекает задачи из очередей и запускает рабочую рутину для каждой задачи
• Задачи обрабатываются одновременно несколькими «обработчиками»
Очереди задач используются в качестве механизма распределения работы между несколькими машинами.
Работает с Redis.
#Go #Task #Queue
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Если вы прочитали заголовок и подумали «ну, ты, наверно, сделал сначала что-то глупое», то вы правы! Но что такое программирование, как не упражнения в глупых ошибках? Поиск глупых ошибок — это и есть самое большое удовольствие!
Также стоит заранее сделать оговорку о бенчмаркинге: ускорение на 42% было замерено при выполнении программы с моими данными и на моём компьютере, поэтому относитесь к этому результату с долей скепсиса.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Вам понравится, если вся необходимая информация, связанная с работой Docker, будет в одном окне терминала? Вероятно, да, а значит Lazydocker вам более чем подходит. Этот клиент помимо сбора всей информации в одной месте (images, containers и т.д.), позволяет просматривать логи, производить любые манипуляции с контейнерами и многое другое.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Протокол HTTP - это протокол прикладного уровня, который обычно реализовывался на основе протокола TCP до HTTP/3. Поскольку протокол TCP является надежным протоколом потоковой связи, после установления соединения как отправители, так и получатели могут отправлять данные любой длины, и стек TCP также может выполнять нарезку данных. Таким образом, протоколы прикладного уровня на основе TCP должны согласовывать формат передачи сообщений, чтобы как отправители, так и получатели могли извлечь полное сообщение из принятого потока данных. Протокол HTTP - это одно из многих соглашений. Короче говоря, TCP - это протокол транспортного уровня, который обеспечивает потоковую связь, а HTTP определяет формат сообщения.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Devzat – реализация чата по SSH
Поскольку приложения SSH есть буквально на всех платформах, даже на вашем телефоне, вы можете подключиться к Devzat на любом устройстве.
Интересные особенности:
• Различные комнаты!
• Поддержка markdown! Таблицы, заголовки, курсив и все такое
• Подсветка синтаксиса кода
#Go #SSH #Interesting #Useful
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Awesome-Web-Scraping – Список инструментов, библиотек программирования и веб-сервисов, используемых при парсинге и обработке данных.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
bit – Экспериментальная имплементация надстройки на git cli на Go
Данный инструмент предоставляет следующие улучшения:
• автокомплит команд;
• автокомплит имен файлов;
• автоматический фетч и механизм, снижающий вероятность конфликтов;
• и др.
#Go #Git #CLI #Interesting
🖥 GitHub
@Golang_google
Данный инструмент предоставляет следующие улучшения:
• автокомплит команд;
• автокомплит имен файлов;
• автоматический фетч и механизм, снижающий вероятность конфликтов;
• и др.
#Go #Git #CLI #Interesting
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Go-app — это пакет для создания прогрессивных веб-приложений (PWA) с помощью языка программирования Go (Golang) и WebAssembly (Wasm).
go mod init
go get -u github.com/maxence-charriere/go-app/v9/pkg/app
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Gomo — это многомодульный инструмент Simple Golang.
brew install abdfnx/tap/gomo
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Все best practices по написанию программ в одном месте. Удобно, что есть не только примеры «хорошего» кода, но и антипаттерны. Вместе с ними — грамотные объяснения, почему не стоит использовать ряд подходов при проектировании программ.
Гайд по написанию кода и оформили его внутри GitHub-репозитория. Большая часть материалов переведена на русский язык.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Дано: два неупорядоченных среза.
а) a := []int{37, 5, 1, 2} и b := []int{6, 2, 4, 37}.
б) a = []int{1, 1, 1} и b = []int{1, 1, 1, 1}.
Верните их пересечение.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
go-callvis — это инструмент разработки, помогающий удобно визуализировать вызовы программы Go. Это особенно полезно в больших проектах, где сложность кода намного выше, или когда вы просто пытаетесь понять чужой код.
go get -u github.com/ofabry/go-callvis
# or
git clone https://github.com/ofabry/go-callvis.git
cd go-callvis && make install
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Awesome Docker Compose samples
Эти примеры кода служат отправной точкой для интеграции различных служб с помощью Compose и управления и их развертыванием с помощью Docker Compose.
🖥 https://github.com/docker/awesome-compose
@Golang_google
Эти примеры кода служат отправной точкой для интеграции различных служб с помощью Compose и управления и их развертыванием с помощью Docker Compose.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - docker/awesome-compose: Awesome Docker Compose samples
Awesome Docker Compose samples. Contribute to docker/awesome-compose development by creating an account on GitHub.
This media is not supported in your browser
VIEW IN TELEGRAM
Wiretap — это прозрачный прокси-сервер, похожий на VPN, который туннелирует трафик через WireGuard и не требует специальных привилегий для запуска.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Избегайте изобретать велосипед заново. Если есть какие-то хорошие библиотеки, мы просто используем их напрямую, нет необходимости выполнять какую-то дублирующую работу, если эти библиотеки не могут удовлетворить потребности, может быть отправлен запрос на извлечение или клонирование их, улучшение их, оптимизация их, текущая предпосылка заключается в том, что вы должны их знать.
Эта статья дает вам некоторую информацию о времени и аналогичной функции linux cron библиотеки задач синхронизации.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - daangn/autopprof: Automatically profile the Go applications when CPU or memory utilization crosses threshold
Automatically profile the Go applications when CPU or memory utilization crosses threshold - daangn/autopprof
Генератор диаграмм классов PlantUML для проектов go. Генерирует текст диаграммы классов, совместимый с plantuml, с информацией обо всех структурах и интерфейсах, а также об отношениях между ними.
go get github.com/jfeliu007/goplantuml/parser
go install github.com/jfeliu007/goplantuml/cmd/goplantuml@latest
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
EveryNASA
EveryDayPhotoNasa – инструмент, который позволяет поставить в качестве рабочего экрана фотографии NASA из космоса.
EveryDayPhotoNaaa каждый день делает снимок с сайта НАСА и устанавливает его в качестве фона для вашего рабочего пространства.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM