🧠 Хитрая задача на Go для продвинутых
📌 Тень перестановки
У вас есть массив
Нужно определить, существует ли хотя бы одна перестановка этого массива
будет чётным числом?
🔍 Наблюдение:
•
• Если в массиве есть двое чётных или двое нечётных, то их можно поставить рядом — и сумма будет чётной.
• Значит, если есть хотя бы две одинаковые по чётности — ответ: YES.
✅ Решение (O(n)):
1. Считаем количество чётных и нечётных чисел.
2. Если хотя бы одно из них ≥ 2 → `"YES"`, иначе — `"NO"`.
💻 **Код на Go:**
```go
func HasEvenAndPermutationSum(A []int) string {
odd, even := 0, 0
for _, v := range A {
if v%2 == 0 {
even++
} else {
odd++
}
}
if even >= 2 || odd >= 2 {
return "YES"
}
return "NO"
}```
🧪 Примеры:
```go
HasEvenAndPermutationSum([]int{5, 2, 8}) // YES
HasEvenAndPermutationSum([]int{1}) // NO
HasEvenAndPermutationSum([]int{3, 7, 11}) // YES
HasEvenAndPermutationSum([]int{2, 4, 6, 8}) // YES
HasEvenAndPermutationSum([]int{3, 2}) // NO```
⚙️ Сложность:
• Время: O(n)
• Память: O(1)
📌 Эта задача проверяет не только знание Go, но и умение думать на уровне битов и арифметических свойств. Отличный пример для собеседования: простая по коду, но требует правильного наблюдения.
Актуально для Go 1.22+
📌 Тень перестановки
У вас есть массив
A
из n
уникальных положительных чисел (1 ≤ A[i] ≤ 1e6
, n ≤ 200000
).Нужно определить, существует ли хотя бы одна перестановка этого массива
P
, такая что сумма побитовых AND соседних элементов:P[0]&P[1] + P[1]&P[2] + ... + P[n-2]&P[n-1]
будет чётным числом?
🔍 Наблюдение:
•
a & b
может быть нечётным только если оба числа нечётные. • Если в массиве есть двое чётных или двое нечётных, то их можно поставить рядом — и сумма будет чётной.
• Значит, если есть хотя бы две одинаковые по чётности — ответ: YES.
✅ Решение (O(n)):
1. Считаем количество чётных и нечётных чисел.
2. Если хотя бы одно из них ≥ 2 → `"YES"`, иначе — `"NO"`.
💻 **Код на Go:**
```go
func HasEvenAndPermutationSum(A []int) string {
odd, even := 0, 0
for _, v := range A {
if v%2 == 0 {
even++
} else {
odd++
}
}
if even >= 2 || odd >= 2 {
return "YES"
}
return "NO"
}```
🧪 Примеры:
```go
HasEvenAndPermutationSum([]int{5, 2, 8}) // YES
HasEvenAndPermutationSum([]int{1}) // NO
HasEvenAndPermutationSum([]int{3, 7, 11}) // YES
HasEvenAndPermutationSum([]int{2, 4, 6, 8}) // YES
HasEvenAndPermutationSum([]int{3, 2}) // NO```
⚙️ Сложность:
• Время: O(n)
• Память: O(1)
📌 Эта задача проверяет не только знание Go, но и умение думать на уровне битов и арифметических свойств. Отличный пример для собеседования: простая по коду, но требует правильного наблюдения.
❤4🤯2🦄1
⚡️ Avo — это библиотека и CLI-инструменты, которые позволяют писать ассемблерный код прямо на Go-коде и автоматически генерировать `.s`-файлы + Go-стабы* для вызова этих функций.
Этот необычный инструмент превращает написание высокопроизводительного ассемблера x86 в процесс, похожий на обычную Go-разработку.
Вместо управления регистрами вручную, вы описываете логику на Go-подобном синтаксисе а Avo генерирует оптимизированный ассемблерный код с правильными префиксами.
Проект особенно полезен для криптографии и низкоуровневых оптимизаций.
asm.go:
*Go-стабы: это Go-файл, который объявляет функцию без реализации, но с правильной сигнатурой, чтобы компилятор понимал, как с ней работать.
▪️ GitHub
Этот необычный инструмент превращает написание высокопроизводительного ассемблера x86 в процесс, похожий на обычную Go-разработку.
Вместо управления регистрами вручную, вы описываете логику на Go-подобном синтаксисе а Avo генерирует оптимизированный ассемблерный код с правильными префиксами.
Проект особенно полезен для криптографии и низкоуровневых оптимизаций.
asm.go:
package main
import . "github.com/mmcloughlin/avo/build"
func main() {
TEXT("Add", NOSPLIT, "func(x, y uint64) uint64")
x := Load(Param("x"), GP64())
y := Load(Param("y"), GP64())
ADDQ(x, y)
Store(y, ReturnIndex(0))
RET()
Generate()
}
*Go-стабы: это Go-файл, который объявляет функцию без реализации, но с правильной сигнатурой, чтобы компилятор понимал, как с ней работать.
▪️ GitHub
🔥5
GoPilot — это библиотека для Go, которая позволяет вызывать ваши функции с помощью естественного языка.
⚡️ С её помощью можно:
- Анализировать запросы на естественном языке
- Автоматически выбирать нужную функцию
- Преобразовывать динамические параметры в строго типизированные структуры
- Проверять обязательные поля и валидировать входные данные
- Управлять порядком выполнения и ответами
## Ключевые особенности
- Natural Language Processing
Обработка запросов пользователя без ручного парсинга текста.
- Automatic Function Routing
GoPilot сам сопоставляет запрос с зарегистрированной функцией.
- Type-Safe Parameter Mapping
Динамические вводимые данные конвертируются в структуры Go.
- Built-in Validation
Генерируемая схема параметров учитывает теги
required
, description
и др. - Easy Integration
Простое API: регистрируете функции и задаёте системный промпт.
- Flexible Response Handling
Поддержка разных форматов ответа и «режимов» выполнения.
## Быстрый старт
import (
"context"
"github.com/SadikSunbul/gopilot"
"github.com/SadikSunbul/gopilot/clients"
"github.com/SadikSunbul/gopilot/pkg/generator"
)
type WeatherParams struct {
City string `json:"city" description:"City name" required:"true"`
}
type WeatherResponse struct {
City string `json:"city"`
Temp int `json:"temp"`
Condition string `json:"condition"`
}
func GetWeather(p WeatherParams) (WeatherResponse, error) {
return WeatherResponse{City: p.City, Temp: 25, Condition: "sunny"}, nil
}
func main() {
client, _ := clients.NewGeminiClient(context.Background(), "API_KEY", "gemini-2.0-flash")
gp, _ := gopilot.NewGopilot(client)
weatherFn := &gopilot.Function[WeatherParams, WeatherResponse]{
Name: "weather-agent",
Description: "Get weather by city",
Parameters: generator.GenerateParameterSchema(WeatherParams{}),
Execute: GetWeather,
}
gp.FunctionRegister(weatherFn)
gp.SetSystemPrompt(nil)
// Генерация + выполнение за один вызов
result, _ := gp.GenerateAndExecute("Какая погода в Москве?")
fmt.Printf("%+v\n", result)
}
▪️ Github
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔2
🔧 env — библиотека, предлагающая минималистичный способ загружать конфигурацию из env-переменных в структуры.
В отличие от аналогов вроде viper, проект имеет zero-dependencies подход и понятную обработку ошибок. Теги вроде
🤖 GitHub
В отличие от аналогов вроде viper, проект имеет zero-dependencies подход и понятную обработку ошибок. Теги вроде
required
илиenv — биделают валидацию конфига прозрачной без лишнего кода. 🤖 GitHub
❤2👍1💩1
Вакансии для Golang-разработчиков за последние 14 дней:
✓ Junior Golang Developer (Backend) Гибрид (Москва), 80–120 т.р.
✓ Go Backend Developer Гибрид (Тбилиси), 5 000–6 000 $
✓ Golang developer Удалённо (Мир), 5 000 – 8 000 $
✓ Golang Engineer Удалённо, офис, гибрид (Москва)
✓ GO Developer Middle/Senior Удалённо, 200–300 т.р.
✓ Golang-разработчик Удалёнка (РФ), 200 - 260 т.р.
✓ Go Developer Golang/PHP (backend) Удалённо (РФ), 250- 300 т.р.
✓ Jr Golang Developer (Backend) Удалённо (Мир), от 6000 $
#подборка #go
✓ Junior Golang Developer (Backend) Гибрид (Москва), 80–120 т.р.
✓ Go Backend Developer Гибрид (Тбилиси), 5 000–6 000 $
✓ Golang developer Удалённо (Мир), 5 000 – 8 000 $
✓ Golang Engineer Удалённо, офис, гибрид (Москва)
✓ GO Developer Middle/Senior Удалённо, 200–300 т.р.
✓ Golang-разработчик Удалёнка (РФ), 200 - 260 т.р.
✓ Go Developer Golang/PHP (backend) Удалённо (РФ), 250- 300 т.р.
✓ Jr Golang Developer (Backend) Удалённо (Мир), от 6000 $
#подборка #go
❤1💩1
🖥 Как базы данных выполняют SQL-запросы?
Процесс выполнения
1. Оператор SQL запускается в клиентской программе и передается по сети на сервер базы данных.
2. Когда сервер базы данных получает SQL-оператор, реляционный движок начинает его обработку. Сначала синтаксический анализатор проверяет правильность оператора. Затем он преобразует оператор в дерево запросов, которое представляет собой внутреннюю структуру данных.
3. Оптимизатор запросов просматривает дерево запросов и определяет наиболее эффективный способ выполнения SQL-оператора, создавая план выполнения.
4. План выполнения передается исполнителю запроса, который использует его для координации получения или изменения данных в соответствии с запросом SQL. Для доступа к данным исполнитель взаимодействует с движком хранилища.
5. Движок хранилища использует методы доступа - протоколы чтения и записи данных, наиболее эффективные для выполнения различных операций.
6. При чтении данных менеджер буферов проверяет, кэшированы ли нужные данные в памяти, и при необходимости извлекает их с диска. Это ускоряет последующий доступ.
7. При записи данных со вставкой или обновлением менеджер транзакций следит за тем, чтобы изменения происходили атомарно и сохраняли целостность базы данных.
8. В то же время менеджер блокировок накладывает блокировки, чтобы несколько транзакций могли выполняться одновременно, не конфликтуя между собой. Таким образом, обеспечивается изоляция и согласованность.
Работая вместе, эти компоненты обеспечивают надежную и эффективную обработку SQL-запросов в системе управления базами данных.
@golangprofi
Процесс выполнения
SQL-запросов
в базе данных включает в себя несколько компонентов, взаимодействующих между собой. Хотя конкретная архитектура различных систем баз данных может отличаться, ниже описана общая последовательность действий.1. Оператор SQL запускается в клиентской программе и передается по сети на сервер базы данных.
2. Когда сервер базы данных получает SQL-оператор, реляционный движок начинает его обработку. Сначала синтаксический анализатор проверяет правильность оператора. Затем он преобразует оператор в дерево запросов, которое представляет собой внутреннюю структуру данных.
3. Оптимизатор запросов просматривает дерево запросов и определяет наиболее эффективный способ выполнения SQL-оператора, создавая план выполнения.
4. План выполнения передается исполнителю запроса, который использует его для координации получения или изменения данных в соответствии с запросом SQL. Для доступа к данным исполнитель взаимодействует с движком хранилища.
5. Движок хранилища использует методы доступа - протоколы чтения и записи данных, наиболее эффективные для выполнения различных операций.
6. При чтении данных менеджер буферов проверяет, кэшированы ли нужные данные в памяти, и при необходимости извлекает их с диска. Это ускоряет последующий доступ.
7. При записи данных со вставкой или обновлением менеджер транзакций следит за тем, чтобы изменения происходили атомарно и сохраняли целостность базы данных.
8. В то же время менеджер блокировок накладывает блокировки, чтобы несколько транзакций могли выполняться одновременно, не конфликтуя между собой. Таким образом, обеспечивается изоляция и согласованность.
Работая вместе, эти компоненты обеспечивают надежную и эффективную обработку SQL-запросов в системе управления базами данных.
@golangprofi
👍6❤1🤮1
👣 SMTP-клиент Go CLI
Очень легкий CLI SMTP-клиент для удобной отправки писем из командной строки.
▪️Github
Очень легкий CLI SMTP-клиент для удобной отправки писем из командной строки.
▪️Github
❤2👍1😐1
Gozo — лёгкая и удобная библиотека, которая добавляет в Go инструментальный набор для повседневных задач: обработка срезов, карт, потоки и функциональные примитивы.
⚙️ Что внутри:
- `slices` — функции для работы с массивами:
Map
, Filter
, Delete
, Insert
, Pop
, PushFront
, Fold
, Some
, Equals
и даже ToMap
— всё с поддержкой дженериков - `maps` — утилиты:
Map
, Filter
, Reduce
, Equals
, FilterMap
, Fold
, Slice
- `fp` (функциональные примитивы) — монады
Option[T]
, Result[T]
, с конструктор-функциями: Some
, None
, Ok
, Err
, OptionFromPtr
, OptionFromTuple
- `streams` — конвейеры обработки данных:
Batch
, Filter
, Flatten
, CSV
, JSON
, Pipe
, Collect
и другие - `tuples` — простые структуры для пар значений (Tuple2)
🛠 Для чего это нужно:
- Ускоряет и делает код чище при работе с коллекциями
- Обладает безопасной обработкой ошибок и отсутствия значений через FP‑модели
- Дженерики обеспечивают типобезопанность и избавляют от лишнего шаблонного кода
- MIT‑лицензия
📌 Github
Please open Telegram to view this post
VIEW IN TELEGRAM
Вакансии для Golang-разработчиков за последние 14 дней:
✓ Go Разработчик Удалёнка, от 6000 $
✓ GO-РАЗРАБОТЧИК Гибрид (Москва)
✓ Go Developer Офис (Тбилиси)
✓ Разработчик Go Удалённо (Санкт-Петербург)
✓ Golang разработчик Удалённо (РФ), 400–500 т.р.
✓ Golang разработчик Удалёнка, 170–250 т.р.
✓ Senior Go Developer (Payment). Удалёнка, от 4000 $
✓ Golang-разработчик Удалённо, от 2 000 $ до 3 000 $.
#подборка #go
✓ Go Разработчик Удалёнка, от 6000 $
✓ GO-РАЗРАБОТЧИК Гибрид (Москва)
✓ Go Developer Офис (Тбилиси)
✓ Разработчик Go Удалённо (Санкт-Петербург)
✓ Golang разработчик Удалённо (РФ), 400–500 т.р.
✓ Golang разработчик Удалёнка, 170–250 т.р.
✓ Senior Go Developer (Payment). Удалёнка, от 4000 $
✓ Golang-разработчик Удалённо, от 2 000 $ до 3 000 $.
#подборка #go
❤2
Go Programming - From Beginner to
Professional
Автор: Samantha Coyle
Год издания: 2024
#go #en
Скачать книгу
Professional
Автор: Samantha Coyle
Год издания: 2024
#go #en
Скачать книгу
Вакансии для Golang-разработчиков за последние 14 дней:
✓ GO Backend-разработчик Удалёнка, до 4500$
✓ Golang - разработчик Удалёнка
✓ Golang - разработчик Удалёнка, 90–150 т.р.
✓ Go разработчик Удалёнка (Кипр)
✓ JS/GO Backend Middle Удалёнка, 1100–2 400 $
✓ Go developer Удалёнка (Саудовская Аравия, Рияд), 3500-5000 $
✓ Golang разработчик Офис (Казань), 250 - 300 т.р.doi
✓ Go-разработчик Удалёнка, от 200 до 450 т.р.
✓ GO разработчик Middle/Senior. Удалённо (Москва), 250 т.р.
#подборка #go
✓ GO Backend-разработчик Удалёнка, до 4500$
✓ Golang - разработчик Удалёнка
✓ Golang - разработчик Удалёнка, 90–150 т.р.
✓ Go разработчик Удалёнка (Кипр)
✓ JS/GO Backend Middle Удалёнка, 1100–2 400 $
✓ Go developer Удалёнка (Саудовская Аравия, Рияд), 3500-5000 $
✓ Golang разработчик Офис (Казань), 250 - 300 т.р.doi
✓ Go-разработчик Удалёнка, от 200 до 450 т.р.
✓ GO разработчик Middle/Senior. Удалённо (Москва), 250 т.р.
#подборка #go
❤2👍1
Вакансии для Golang-разработчиков за последние 14 дней:
✓ Golang разработчик Удалёнка, 6 000 - 8 000 $
✓ Go Developer. Гибрид (РФ), 450–600 т.р.
✓ Go / Kubernetes Engineer Удалённо, 3 000 – 7 000 $
✓ Golang разработчикУдалёнка (Мир), 50 –100 т.р.
✓ Go разработчик.Удалённо (РФ)
✓ Разработчик Golang Офис (Краснодар), от 150 т.р.
✓ Golang-разработчик Удалённо (РФ), 230–250 т.р.
✓ Golang разработчикОфис (Казань), 250–300 т.р.
✓ Golang EngineerУдалёнка (РФ), 4 000–5 000 $
✓ GO Разработчик (Senior/Middle). Удалённо, 250 т.р.
✓ Golang Engineer Удалёнка (РФ)
✓ Golang Developer Удалённо (Катар), от 4500 $
#подборка #go
✓ Golang разработчик Удалёнка, 6 000 - 8 000 $
✓ Go Developer. Гибрид (РФ), 450–600 т.р.
✓ Go / Kubernetes Engineer Удалённо, 3 000 – 7 000 $
✓ Golang разработчикУдалёнка (Мир), 50 –100 т.р.
✓ Go разработчик.Удалённо (РФ)
✓ Разработчик Golang Офис (Краснодар), от 150 т.р.
✓ Golang-разработчик Удалённо (РФ), 230–250 т.р.
✓ Golang разработчикОфис (Казань), 250–300 т.р.
✓ Golang EngineerУдалёнка (РФ), 4 000–5 000 $
✓ GO Разработчик (Senior/Middle). Удалённо, 250 т.р.
✓ Golang Engineer Удалёнка (РФ)
✓ Golang Developer Удалённо (Катар), от 4500 $
#подборка #go
❤1😢1
Forwarded from Pattern Guru. Шаблоны проектирования. Архитектура ПО
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Pattern Guru. Шаблоны проектирования. Архитектура ПО
🚩 Шаблон проектирования Singleton
🟣Подробное описание паттерна
Лучшие методы:
1. Декоратор
2. Базовый класс
3. Метакласс
4. Декоратор возвращает класс с тем же именем
5. Модуль
🗂 Код на Python
🟣Подробное описание паттерна
Лучшие методы:
1. Декоратор
2. Базовый класс
3. Метакласс
4. Декоратор возвращает класс с тем же именем
5. Модуль
🗂 Код на Python
❤1