Forwarded from Golang вопросы собеседований
#практика
Необходимо реализовать сервис, позволяющий следить за изменением цены любого объявления на Авито (другой аналогичный сайт с объявлениями):
1. Сервис должен предоставить HTTP метод для подписки на изменение цены. На вход метод получает - ссылку на объявление, email на который присылать уведомления.
2.После успешной подписки, сервис должен следить за ценой объявления и присылать уведомления на указанный email.
3. Если несколько пользователей подписались на одно и тоже объявление, сервис не должен лишний раз проверять цену объявления.
Требования к решению
- Необходимо проработать архитектуру сервиса и описать принципиальную схему работы в виде текста и/или диаграмм.
- Приложить фрагменты кода, решающие конкретные задачи:
- Подписка на изменение цены
- Отслеживание изменений цены
- Отправка уведомления на почту
Работа с БД
- Язык программирования Golang.
Чтобы получить цену объявления, можно:
- парсить web-страницу объявления
- самостоятельно проанализировать трафик на мобильных приложениях или мобильном сайте и выяснить какой там API для получения информации об объявлении
Усложнения
- Реализовать полноценный сервис, который решает поставленную задачу (сервис должен запускаться в docker-контейнере).
- Написаны тесты (постарайтесь достичь покрытия в 70% и больше).
- Подтверждение email пользователя.
Ставьте ❤️, если вам интересно увидеть практические задания с реальных собеседований.
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Тестовое задание для кандидата на должность 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