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
❤127👍5🔥2🤬1
Тестовое задание для кандидата на должность 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
❤53👍6🔥2
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
👍20🔥2❤1
Asynq – простая, надежная и эффективная очередь задач в Go
Обзор работы Asynq:
• Клиент ставит задачи в очередь
• Сервер извлекает задачи из очередей и запускает рабочую рутину для каждой задачи
• Задачи обрабатываются одновременно несколькими «обработчиками»
Очереди задач используются в качестве механизма распределения работы между несколькими машинами.
Работает с Redis.
#Go #Task #Queue
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤3🔥2
Если вы прочитали заголовок и подумали «ну, ты, наверно, сделал сначала что-то глупое», то вы правы! Но что такое программирование, как не упражнения в глупых ошибках? Поиск глупых ошибок — это и есть самое большое удовольствие!
Также стоит заранее сделать оговорку о бенчмаркинге: ускорение на 42% было замерено при выполнении программы с моими данными и на моём компьютере, поэтому относитесь к этому результату с долей скепсиса.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤3👎3🔥1
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
👍24😱4🔥2❤1
Протокол HTTP - это протокол прикладного уровня, который обычно реализовывался на основе протокола TCP до HTTP/3. Поскольку протокол TCP является надежным протоколом потоковой связи, после установления соединения как отправители, так и получатели могут отправлять данные любой длины, и стек TCP также может выполнять нарезку данных. Таким образом, протоколы прикладного уровня на основе TCP должны согласовывать формат передачи сообщений, чтобы как отправители, так и получатели могли извлечь полное сообщение из принятого потока данных. Протокол HTTP - это одно из многих соглашений. Короче говоря, TCP - это протокол транспортного уровня, который обеспечивает потоковую связь, а HTTP определяет формат сообщения.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥7❤3
Devzat – реализация чата по SSH
Поскольку приложения SSH есть буквально на всех платформах, даже на вашем телефоне, вы можете подключиться к Devzat на любом устройстве.
Интересные особенности:
• Различные комнаты!
• Поддержка markdown! Таблицы, заголовки, курсив и все такое
• Подсветка синтаксиса кода
#Go #SSH #Interesting #Useful
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2❤1👎1
Awesome-Web-Scraping – Список инструментов, библиотек программирования и веб-сервисов, используемых при парсинге и обработке данных.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥3❤1
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
👍14❤3🔥3👎1
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
👍12❤3🔥2🤔1
Gomo — это многомодульный инструмент Simple Golang.
brew install abdfnx/tap/gomo
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2❤1
Все best practices по написанию программ в одном месте. Удобно, что есть не только примеры «хорошего» кода, но и антипаттерны. Вместе с ними — грамотные объяснения, почему не стоит использовать ряд подходов при проектировании программ.
Гайд по написанию кода и оформили его внутри GitHub-репозитория. Большая часть материалов переведена на русский язык.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26🔥2❤1
Дано: два неупорядоченных среза.
а) 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
👍11🔥2❤1
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
👍32🔥4❤3
🔥 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.
👍7❤1🔥1
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
👍10❤2🔥1
Избегайте изобретать велосипед заново. Если есть какие-то хорошие библиотеки, мы просто используем их напрямую, нет необходимости выполнять какую-то дублирующую работу, если эти библиотеки не могут удовлетворить потребности, может быть отправлен запрос на извлечение или клонирование их, улучшение их, оптимизация их, текущая предпосылка заключается в том, что вы должны их знать.
Эта статья дает вам некоторую информацию о времени и аналогичной функции linux cron библиотеки задач синхронизации.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤2🔥2
@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
👍6❤2🔥1
Генератор диаграмм классов 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
👍17❤5🔥4