37.1K subscribers
1.46K photos
33 videos
5 files
1.62K links
加入频道
👣 Тестовое задание для стажера в юнит buyer-experience

#практика

Необходимо реализовать сервис, позволяющий следить за изменением цены любого объявления на Авито (другой аналогичный сайт с объявлениями):

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 разработчика

Тестовое задание для кандидата на должность 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

Gitea – инструмент, который позволяет развернуть self-hosted git-сервис на подобии github или gitlab

Поскольку Gitea написана на Go, она работает на всех платформах и архитектурах, поддерживаемых Go, включая Linux, macOS и Windows на архитектурах x86, amd64, ARM и PowerPC

🖥 Github

#Go #Git #Useful

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Asynq

Asynq – простая, надежная и эффективная очередь задач в Go

Обзор работы Asynq:
• Клиент ставит задачи в очередь
• Сервер извлекает задачи из очередей и запускает рабочую рутину для каждой задачи
• Задачи обрабатываются одновременно несколькими «обработчиками»

Очереди задач используются в качестве механизма распределения работы между несколькими машинами.
Работает с Redis.

🖥 GitHub

#Go #Task #Queue

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Как сделать программу на Go быстрее на 42%, изменив один символ

Если вы прочитали заголовок и подумали «ну, ты, наверно, сделал сначала что-то глупое», то вы правы! Но что такое программирование, как не упражнения в глупых ошибках? Поиск глупых ошибок — это и есть самое большое удовольствие!

Также стоит заранее сделать оговорку о бенчмаркинге: ускорение на 42% было замерено при выполнении программы с моими данными и на моём компьютере, поэтому относитесь к этому результату с долей скепсиса.

➡️ Читать дальше

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Urlhunter

urlhunter – инструмент чекинга/разведки, который позволяет искать по URL-адресам, которые доступны через службы сокращения


go install github.com/utkusen/urlhunter@latest

#Go #Useful #Web

🖥 GitHub

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 Lazydocker

Вам понравится, если вся необходимая информация, связанная с работой Docker, будет в одном окне терминала? Вероятно, да, а значит Lazydocker вам более чем подходит. Этот клиент помимо сбора всей информации в одной месте (images, containers и т.д.), позволяет просматривать логи, производить любые манипуляции с контейнерами и многое другое.


🖥 GitHub

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Реализация HTTP файлового сервера с нуля с использованием Golang

Протокол HTTP - это протокол прикладного уровня, который обычно реализовывался на основе протокола TCP до HTTP/3. Поскольку протокол TCP является надежным протоколом потоковой связи, после установления соединения как отправители, так и получатели могут отправлять данные любой длины, и стек TCP также может выполнять нарезку данных. Таким образом, протоколы прикладного уровня на основе TCP должны согласовывать формат передачи сообщений, чтобы как отправители, так и получатели могли извлечь полное сообщение из принятого потока данных. Протокол HTTP - это одно из многих соглашений. Короче говоря, TCP - это протокол транспортного уровня, который обеспечивает потоковую связь, а HTTP определяет формат сообщения.

➡️ Читать дальше
🔩 Код

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Devzat

Devzat – реализация чата по SSH

Поскольку приложения SSH есть буквально на всех платформах, даже на вашем телефоне, вы можете подключиться к Devzat на любом устройстве.

Интересные особенности:
• Различные комнаты!
• Поддержка markdown! Таблицы, заголовки, курсив и все такое
• Подсветка синтаксиса кода

#Go #SSH #Interesting #Useful

🖥 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Golang Web Scraping

Awesome-Web-Scraping – Список инструментов, библиотек программирования и веб-сервисов, используемых при парсинге и обработке данных.

🖥 Github

@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
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 go-app

Go-app — это пакет для создания прогрессивных веб-приложений (PWA) с помощью языка программирования Go (Golang) и WebAssembly (Wasm).

go mod init
go get -u github.com/maxence-charriere/go-app/v9/pkg/app


🖥 GitHub

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Gomo

Gomo — это многомодульный инструмент Simple Golang.


brew install abdfnx/tap/gomo

🖥 GitHub

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
❇️ Гайд по написанию кода от Uber

Все best practices по написанию программ в одном месте. Удобно, что есть не только примеры «хорошего» кода, но и антипаттерны. Вместе с ними — грамотные объяснения, почему не стоит использовать ряд подходов при проектировании программ.

Гайд по написанию кода и оформили его внутри GitHub-репозитория. Большая часть материалов переведена на русский язык.

🖥 Github
👣 Uber Go style

@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-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


🖥 GitHub
Project

@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
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
👣 Wiretap

Wiretap — это прозрачный прокси-сервер, похожий на VPN, который туннелирует трафик через WireGuard и не требует специальных привилегий для запуска.

🖥 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🕒 Некоторые из библиотек golang для времени и временных задач

Избегайте изобретать велосипед заново. Если есть какие-то хорошие библиотеки, мы просто используем их напрямую, нет необходимости выполнять какую-то дублирующую работу, если эти библиотеки не могут удовлетворить потребности, может быть отправлен запрос на извлечение или клонирование их, улучшение их, оптимизация их, текущая предпосылка заключается в том, что вы должны их знать.

Эта статья дает вам некоторую информацию о времени и аналогичной функции linux cron библиотеки задач синхронизации.

➡️ Читать дальше

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 autopprof — инструмент для автоматического профилирования Go-приложения и информирования в случае превышения заданного порога использования ЦП или памяти.

🖥 GitHub

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM