Pixie - это удобный инструмент мониторинга с открытым исходным кодом для приложений Kubernetes.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Задача с leetcode. Контейнер с наибольшим количеством воды
Дан целочисленный массив height длины n. Нарисовано n вертикальных линий, две конечные точки i-й линии равны (
Верните максимальное количество воды, которое может храниться в контейнере. Обратите внимание, что вы не можете наклонять контейнер.
Пример 1 (картинка):
Ввод:
Объяснение: Вышеуказанные вертикальные линии представлены массивом
Пример 2:
Ввод:
Решение:
Пишите свое решение в комментариях👇
@Golang_google
Дан целочисленный массив height длины n. Нарисовано n вертикальных линий, две конечные точки i-й линии равны (
i, 0
) и (i, height[i]
). Найдите две линии, которые вместе с осью абсцисс образуют контейнер, содержащий наибольшее количество воды. Верните максимальное количество воды, которое может храниться в контейнере. Обратите внимание, что вы не можете наклонять контейнер.
Пример 1 (картинка):
Ввод:
height = [1,8,6,2,5,4,8,3,7]
Вывод: 49 Объяснение: Вышеуказанные вертикальные линии представлены массивом
[1,8,6,2,5,4,8,3,7].
В этом случае максимальная площадь воды (синяя секция), которую может содержать контейнер, составляет 49.Пример 2:
Ввод:
height = [1,1]
Вывод: 1Решение:
func maxArea(height []int) int {
var maxArea int = 0
var i int = 0
var j int = len(height)-1
var result int = 0
for i < j {
if(height[i] <= height[j]) {
result = height[i] * (j-i)
i++
} else {
result = height[j] * (j-i)
j--
}
if(result > maxArea) {
maxArea = result
}
}
return maxArea
}
Пишите свое решение в комментариях👇
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 Задача с leetcode. Max Area of Island
Максимальная площадь острова
Сложность: Средняя
Условие задачи: Условие задачи:
Дан двумерный массив размера m x n. "1" отвечает за сушу, "0" - за океан. Необходимо опеределить максмимальную площадь острова из островов, расположенных на карте.
Островом считается территория, образованная из "1", расположенных сверху, справа, снизу и слева относительно друг друга.
Пример:
Ввод: grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,1,0,0,1,1,0,0,1,0,1,0,0],[0,1,0,0,1,1,0,0,1,1,1,0,0],[0,0,0,0,0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,0,0,0,0,0,0,1,1,0,0,0,0]]
Вывод: 6
Ввод: grid = [[0,0,0,0,0,0,0,0]]
Вывод: 0
Решение
Временная сложность:
Пространственная сложность:
Пишите свое решение в комментариях👇
@Golang_google
Максимальная площадь острова
Сложность: Средняя
Условие задачи: Условие задачи:
Дан двумерный массив размера m x n. "1" отвечает за сушу, "0" - за океан. Необходимо опеределить максмимальную площадь острова из островов, расположенных на карте.
Островом считается территория, образованная из "1", расположенных сверху, справа, снизу и слева относительно друг друга.
Пример:
Ввод: grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,1,0,0,1,1,0,0,1,0,1,0,0],[0,1,0,0,1,1,0,0,1,1,1,0,0],[0,0,0,0,0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,0,0,0,0,0,0,1,1,0,0,0,0]]
Вывод: 6
Ввод: grid = [[0,0,0,0,0,0,0,0]]
Вывод: 0
Решение
func maxAreaOfIsland(grid [][]int) int {
rows := len(grid)
if rows == 0 {
return 0
}
cols := len(grid[0])
var dfs func(grid [][]int, x, y, r, c, area int) int
dfs = func(grid [][]int, x, y, r, c, area int) int {
if x < 0 || y < 0 || x >= r || y >= c || grid[x][y] != 1 {
return area
}
grid[x][y] = 2
return 1 + dfs(grid, x+1, y, r, c, area) + dfs(grid, x, y+1, r, c, area) + dfs(grid, x-1, y, r, c, area) + dfs(grid, x, y-1, r, c, area)
}
maxArea := 0
for i := 0; i < rows; i++ {
for j := 0; j < cols; j++ {
area := dfs(grid, i, j, rows, cols, 0)
maxArea = int(math.Max(float64(area), float64(maxArea)))
}
}
return maxArea
}
Временная сложность:
O(N*M)
Пространственная сложность:
O(1)
Пишите свое решение в комментариях👇
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 Задача с Leetcode. Поиск в двумерной матрице
Сложность: Средняя
Условие задачи: напишите эффективный алгоритм для поиска наличия нужного числа в двумерной матрице, которая имеет следующие свойства:
▪ в строке элементы отсортированы по возрастанию (слева - направо);
▪ в столбце элементы отсортированы по возрастанию (снизу - вверх).
Пример:
Ввод:
Вывод:
Решение:
Временная сложность:
Пространственная сложность:
Пишите свое решение в комментариях👇
@Golang_google
Сложность: Средняя
Условие задачи: напишите эффективный алгоритм для поиска наличия нужного числа в двумерной матрице, которая имеет следующие свойства:
▪ в строке элементы отсортированы по возрастанию (слева - направо);
▪ в столбце элементы отсортированы по возрастанию (снизу - вверх).
Пример:
Ввод:
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_google
Полезная библиотека кэша Go, которая предоставляет вам множество способов управления кэшем.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Цель статьи — обсудить 6 советов для новичков, которые могут помочь в диагностике и устранении проблем с производительностью в ваших приложениях Go.
▪Читать
@Golang_google
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_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🌩 Vanus
Vanus - это бессерверная система потоковой передачи событий с возможностями обработки.
🖥 Github
@Golang_google
Vanus - это бессерверная система потоковой передачи событий с возможностями обработки.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
https://groups.google.com/g/golang-announce/c/MEb0UyuSMsU
#golang
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Быстрый и элегантный фреймворк для скраппинга на Go.
Colly предоставляет интерфейс для написания любого вида скрапера.
#golang
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
1. Go-resty
Go-resty - это, удобная клиентская библиотека HTTP для Golang, которая упрощает процесс выполнения запросов RESTful API.
2. Goquery
Goquery - это библиотека для веб-скрейпинга, которая предоставляет jQuery-подобный синтаксис для манипулирования запросами. Она позволяет разработчикам легко извлекать информацию с веб-сайтов.
3. Colly
Colly - это высокопроизводительный, расширяемый фреймворк для веб-скрейпинга на языке Golang.
4. Gobot
Gobot - это Golang-фреймворк для робототехники, дронов и IoT-устройств, который предоставляет единый интерфейс для управления различными аппаратными и программными платформами. Статья с примерами работы.
5. Agouti
Agouti - это библиотека Golang, которая позволяет разработчикам управлять веб-браузерами для сквозного тестирования и автоматизации. Она поддерживает WebDriver, PhantomJS и ChromeDP, предоставляя единый API для задач автоматизации браузера.
6. Terratest
Terratest это библиотека Golang, которая упрощает тестирование и проверку кода инфраструктуры, особенно для Terraform, Kubernetes и AWS.
7. Testify
Testify - это комплексный набор инструментов для тестирования Golang, который предоставляет простой, но мощный API для, мокинга и создания тестов.
8. GoConvey
GoConvey - это система тестирования и непрерывной интеграции для Golang, которая предлагает веб-интерфейс для визуализации результатов тестирования. Он упрощает процесс написания и выполнения автоматизированных тестов.
9. Moby
Moby - это проект с открытым исходным кодом для создания систем на основе контейнеров.
10. Docker Go SDK
Docker Go SDK - это официальная библиотека Golang для взаимодействия с API Docker.
11. Go-cmp
Go-cmp - это библиотека Golang для сравнения сложных структур данных. Она особенно полезна для написания автоматизированных тестов, которым необходимо сравнить вывод функций с ожидаемыми результатами.
12. Go-ethereum
Go-ethereum - это официальная реализация протокола Ethereum на языке Golang.
13. Logrus
Logrus это гибкая, структурированная библиотека протоколирования для Golang.
14. Cobra
Cobraэто библиотека Golang, которая упрощает создание приложений командной строки.
15. Viper
Viperэто библиотека конфигурации Golang, которая поддерживает различные форматы, такие как JSON, TOML, YAML и HCL.
16. Kubernetes Client-go
Client-go - это официальная клиентская библиотека Golang для Kubernetes, позволяющая разработчикам программно взаимодействовать с API Kubernetes. Она упрощает автоматизацию задач, связанных с управлением кластером Kubernetes.
17. Gorm
Gorm - это удобная для разработчиков библиотека ORM (Object-Relational Mapper) для Golang. Она предоставляет простой, но мощный API для управления операциями с базами данных, упрощая автоматизацию задач, связанных с бд.
18. Go-selenium
Go-selenium - это библиотека Golang для взаимодействия с API Selenium WebDriver.
19. Go-swagger
Go-swagger - это набор инструментов для работы со спецификацией OpenAPI на языке Golang. Он включает в себя генератор кода, промежуточное программное обеспечение и инструменты проверки, которые облегчают автоматизацию задач, связанных с проектированием, разработкой и тестированием API.
20. Revel
Revel - это высокопроизводительный, полнофункциональный веб-фреймворк для Golang, включающий такие функции, как маршрутизация, валидация и кэширование. Он упрощает разработку веб-приложений и позволяет автоматизировать различные задачи в процессе разработки.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
В этой статье я поделился лучшими бесплатными онлайн-курсами по изучению Golang на таких сайтах, как freeCodecamp, YouTube, Udemy и Coursera .
▪ Читать
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
1. DDosify — Performance Testing Platform
DDosify - это хороший инструмент, если вы хотите проверить, как поведет себя ваше приложение при большом количестве пользователей, обращающихся к нему со всего мира.
2. Kopia — Cross-platform Backup Tool
Kopia предлагает удобный и простой способ создания копий зашифрованных и сжатых данных и сохранения в облачном хранилище.
3. Traefik — Reverse Proxy And Load Balancer
Traefik довольно популярен, поэтому вы, возможно, уже знакомы с ним. Это хороший инструмент для самостоятельной настройки прокси для ваших микросервисов.
4. Httpx — HTTP Toolkit
С помощью Httpx можно регулярно отправлять запросов для получения данных о веб-сайтах. Мне нравится использовать его для проверки работоспособности моих сайтов и приложений.
5. Evcc — Extensible EV Charge Controller
Evcc - это многоязычный контроллер для электромобилей на Go.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Собрали для вас список бесплатных курсов по SQL от базовых до продвинутых.
1. SQL for Data Analysis
2. Интерактивный тренажер по SQL
3. Kaggle: Intro to SQL
4. Advanced SQL
5. Introduction to Structured Query Language (SQL)
6. Advanced Databases and SQL Querying
7. Databases and SQL for Data Science with Python
8. Oracle SQL – A Complete Introduction
9. Intro to SQL
10. Oracle SQL Basics
11. Beginners Guide to SQL
12. SQL for Data Science
13. Introduction to Databases and SQL Querying
14. Intro to Relational Databases
15. Hakerrank
16. Strata scratch
17. SQLBolt
18. W3schools
19. Курс по основам SQL, состоящий из 19 небольших уроков с лёгкой подачей
20. @sqlhub школа sql в телеграме
#SQL #курсы #бд
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Oracle on Docker: Running Oracle Databases in Linux Containers (2023)
Автор: Sean Scott
📚 Книга
@Golang_google
Автор: Sean Scott
📚 Книга
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
PASETO - это все, что мы любим в JOSE (JWT, JWE, JWS), без многочисленных недостатков, которые присущи стандартам JOSE.
#golang
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Эта статья дает структурированную основу и раскрывает ряд неочевидных особенностей кэширования.
▪ Читать
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Удобный инструмент для реализации сессии в вашем проекте. Для этого пакета нужна версия Go 1.12 и выше.
$ go get github.com/alexedwards/scs/v2
#golang
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM