Golang вопросы собеседований
13.5K subscribers
625 photos
3 videos
1 file
432 links
@notxxx1 - админ

@Golang_google - Golang для разработчиков

@itchannels_telegram - 🔥лучшие из ит

@golangl - chat

@golangtests - golang tests

@golang_jobsgo - go chat jobs

@ai_machinelearning_big_data - AI

@data_analysis_ml

РКН: clck.ru/3FmtKd
加入频道
👣 Полезная статья, которая обсуждает использование структур данных как инструментов для создания эффективных программных решений!

🌟 В статье автор рассматривает, как правильно выбирать структуры данных в зависимости от решаемой задачи, сравнивая их с инженерными шаблонами или "основами", на которых строится более сложное решение. Лемир подчеркивает, что правильный выбор структуры данных (например, хеш-таблицы, массивы, списки) может существенно упростить разработку и повысить производительность, а также находит аналогии между этим процессом и подходами, применяемыми в других областях инженерии и технологий.

🔗 Ссылка: *клик*

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
⭐️ Крутая подборка из 200 идей для проектов разработчиков всех уровней.

В ней собраны различные проекты, которые вы сможете реализовать самостоятельно вне зависимости от своего опыта.

Проекты классифицированы не только по уровню сложности, но и по используемым технологиям: блокчейн, веб-разработка и другие.

Подборку можно скачать бесплатно по следующей ссылке:

https://dev.to/kishansheth/200-project-ideas-from-beginner-to-advanced-with-open-source-contributions-3g6a
👣 jsonlex — это библиотека для работы с JSON в Go!

🌟 Она предоставляет функции для быстрого и удобного парсинга JSON-строк и их анализа без нагрузки на сборщик мусора (По заявлениям автора, библиотека работает в 5 раз быстрее, чем стандартный инструмент в Go).

🔐 Лицензия: MIT

🖥 Github

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 konf — простая и гибкая библиотека для работы с конфигурациями в Go!

🌟 Она поддерживает загрузку конфигурации из различных источников, включая файлы, переменные окружения, флаги и облачные сервисы (AWS, Azure, GCP). Библиотека позволяет отслеживать изменения конфигураций, а также уведомлять об этих изменениях через нотификаторы. Конфигурационные источники можно легко менять, что делает её удобной для различных приложений, требующих гибкости в настройке.

🔐 Лицензия: MIT

🖥 Github

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Эта статья объясняет логику работы одноразовых паролей (OTP) при оффлайн-генерации токенов!

🌟 Рассматриваются алгоритмы, такие как HOTP (основанный на счётчике) и TOTP (основанный на времени), их криптографические основы, включая использование HMAC, и процесс синхронизации между клиентом и сервером. Также обсуждаются преимущества и ограничения этих методов, а также их реализация в реальных системах безопасности.

🔗 Ссылка: *клик*

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🔍 Эта статья исследует работу с типом данных "Big Decimal" (большие десятичные числа) в различных языках программирования и как преодолевать различия в их реализации!

🌟 В статье рассматриваются особенности работы с большими числами с фиксированной точностью в таких языках, как Java, Python, JavaScript, Go и других. Автор объясняет, как решать проблемы точности при вычислениях с большими числами, особенно в финансовых приложениях и других критичных к точности областях. Также обсуждаются библиотеки и инструменты, которые помогают обеспечивать корректность арифметических операций и унифицировать подходы между языками программирования.

🔗 Ссылка: *клик*

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Bellman — это библиотека на языке Go для работы с API крупных моделей ИИ (LLM), таких как OpenAI, Anthropic, Gemini (Google), и других!

🌟 Она предоставляет унифицированный интерфейс для взаимодействия с различными поставщиками ИИ, позволяя легко переключаться между ними. Также включает сервис bellmand, который выступает как прокси для API-ключей, упрощая интеграцию с различными моделями. Библиотека поддерживает общие функции, такие как чат, структурированные данные, инструменты и работу с бинарными данными.

🔐 Лицензия: MIT

🖥 Github

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопрос: Один из ваших товарищей по команде отправил этот код на проверку. Этот код несет потенциальную угрозу. Определите ее и предложите решение для ее устранения.

package main 

import (
"fmt"
"time"
)

func main () {
ch := make ( chan int )

go func () {
time.Sleep( 2 * time.Second)
ch <- 42
fmt.Println( "Отправлено: 42" )
}()

val := <-ch
fmt.Println( "Получено:" , val)

fmt.Println( "Продолжение выполнения..." )
}


🌟 На первый взгляд ничего подозрительного в этом коде. Если мы попробуем его запустить, он действительно скомпилируется и запустится без каких-либо заметных проблем.

[Running] go run "main.go"

Отправлено: 42
Получено: 42
Продолжение выполнения...

[Done] exited with code=0 in 2.124 seconds


💡 Сам код тоже кажется в порядке. У нас есть правильно реализованное параллельное потребление с двумя горутинами, работающими независимо. Давайте разберем код и посмотрим, что происходит:

🌟 Канал ch создан с помощью make(chan int). Это небуферизованный канал.

🌟 Запускается горутина, которая спит 2 секунды, а затем отправляет значение 42 на канал.

🌟 Основная функция выполняет операцию чтения по ch с помощью val := <-ch.

🔍 Опять же, кажется, все в порядке. Но на самом деле операция отправки задерживается. Анонимная горутина ждет 2 секунды, прежде чем отправить значение в канал. Поэтому, когда мы запускаем этот код, основная функция начинает считывать канал и ожидает там значение, прежде чем канал будет заполнен значением. Эта операция блокирует дальнейшее выполнение кода.

❗️ Подобная блокировка может вызвать серьезные проблемы с параллелизмом. Если основная горутина (или любая критическая горутина) блокируется на неопределенное время, ожидая данные, это может помешать выполнению других важных задач, что приведет к взаимоблокировкам или неотзывчивому поведению.

💡 Чтобы избежать блокирования чтения, можно использовать неблокирующие альтернативы, такие как оператор select с вариантом по умолчанию. Оператор select в Go — это мощная функция, которая позволяет goroutine ожидать несколько операций связи, что позволяет выполнять неблокирующие операции и обрабатывать несколько каналов. Оператор select работает, оценивая несколько операций канала и продолжая с первой готовой. Если несколько операций готовы, одна из них выбирается случайным образом. Если ни одна операция не готова, выполняется вариант по умолчанию, если он есть, что делает его неблокирующей операцией.

🔍 Вот его синтаксис:
select { 
case <-ch1:
// Сделать что-то, когда ch1 готов к приему
case ch2 <- value :
// Сделать что-то, когда ch2 готов к отправке
default :
// Сделать что-то, когда ни один канал не готов (неблокируемый путь)
}


🌟 Теперь исправим изначальную проблему с помощью select:
package main 

import (
"fmt"
"time"
)

func main () {
ch := make ( chan int )

// Goroutine для отправки данных в канал через 2 секунды
go func () {
time.Sleep( 2 * time.Second)
ch <- 42
fmt.Println( "Отправлено: 42" )
}()

// Основная функция, выполняющая неблокирующее чтение
for {
select {
case val := <-ch:
fmt.Println( "Получено:" , val)
fmt.Println( "Продолжение выполнения..." )
return
default :
fmt.Println( "Значения не были получены" )
time.Sleep( 500 * time.Millisecond) // Некоторое время ждем, чтобы предотвратить зацикливание
// обрабатываем поток выполнения инструкций и операций, которые должны быть продолжены
}
}
}



@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Эта статья описывает процесс создания службы доставки payload'ов вебхуков в Go!

💡 Автор объясняет, как создать прокси-сервис для перенаправления событий GitHub Webhooks на локальный сервер. В статье рассмотрены архитектура решения, использование server-sent events (SSE) для потоковой передачи данных, а также настройка сервера и CLI-приложения.

🔗 Ссылка: *клик*

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 go2rtc — это универсальное open-source приложение для стриминга с камер, поддерживающее различные протоколы, такие как RTSP, WebRTC, RTMP, HLS, HomeKit и другие!

🌟 Оно позволяет стримить с разных источников, включая RTSP камеры, USB-камеры и устройства HomeKit, обеспечивая низкую задержку и простоту настройки. Включает поддержку двухстороннего аудио, согласования кодеков и транскодирования. Также интегрируется с такими платформами, как Home Assistant, и поддерживает стриминг в браузеры и другие популярные сервисы.

🔐 Лицензия: MIT

🖥 Github

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️Легкий способ получать свежие обновления и следить за трендами в разработке на вашем языке. Находите свой стек и подписывайтесь:

МАШИННОЕ ОБУЧЕНИЕ: t.me/ai_machinelearning_big_data
C++ t.me/cpluspluc
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Хакинг: t.me/linuxkalii
Devops: t.me/DevOPSitsec
Data Science: t.me/data_analysis_ml
Javascript: t.me/javascriptv
C#: t.me/csharp_ci
Java: t.me/javatg
Базы данных: t.me/sqlhub
Python собеседования: t.me/python_job_interview
Мобильная разработка: t.me/mobdevelop
Docker: t.me/DevopsDocker
Golang: t.me/Golang_google
React: t.me/react_tg
Rust: t.me/rust_code
ИИ: t.me/vistehno
PHP: t.me/phpshka
Android: t.me/android_its
Frontend: t.me/front
Big Data: t.me/bigdatai
Собеседования МЛ: t.me/machinelearning_interview
МАТЕМАТИКА: t.me/data_math
Kubernets: t.me/kubernetc
Разработка игр: https://yangx.top/gamedev
Haskell: t.me/haskell_tg
Физика: t.me/fizmat

💼 Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://yangx.top/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://yangx.top/addlist/mzMMG3RPZhY2M2Iy

😆ИТ-Мемы: t.me/memes_prog
🇬🇧Английский: t.me/english_forprogrammers
🧠ИИ: t.me/vistehno

🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
📕Ит-книги бесплатно: https://yangx.top/addlist/BkskQciUW_FhNjEy
👣 Эта статья рассказывает о создании инструмента на Go для проверки доменов электронной почты!

💡 Автор объясняет, как определить, является ли домен корректным и имеет ли он необходимые DNS-записи, такие как MX (mail exchange), SPF (Sender Policy Framework) и DMARC (Domain-based Message Authentication). Эти проверки помогают оценить легитимность домена и его готовность для отправки и получения электронной почты.

🔗 Ссылка: *клик*

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Эта статья посвящена проблеме состояний гонки на уровне базы данных в контексте конкурентного доступа!

🌟 Автор рассматривает сценарий, когда несколько пользователей одновременно пытаются приобрести последний доступный товар, что может привести к некорректным операциям, таким как двойное бронирование или превышение доступного запаса. Даже при использовании конкурентных процессов и горутин в языке Go, такие проблемы могут возникать на уровне базы данных, когда несколько приложений одновременно обращаются к одним и тем же данным.

🔗 Ссылка: *клик*

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Эта статья объясняет, как организовать обработку данных в Go через последовательность этапов с использованием горутин и каналов!

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

🔗 Ссылка: *клик*

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Сodenire Playground

Онлайн песочница с открытым исходным кодом для запуска кода.

Создана на основе образов Docker с надежной изоляцией, предоставляемой Google gVisor
#golang

Github

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 GoTTH — стек для быстрого создания полнофункционального веб-приложения на Go!

🌟 Он включает современные технологии, такие как HTMX для улучшения взаимодействия с пользователем, TailwindCSS для стилизации, Turso LibSQL (производственный вариант SQLite) для работы с базой данных, и Templ в качестве шаблонизатора.

💡 GoTTH ориентирован на простоту развертывания, предлагая поддержку Docker и встроенные инструменты, такие как live-reload с помощью air. Проект отлично подходит для быстрой разработки серверной и клиентской частей приложения, включая поддержку маршрутизации, баз данных и UI-компонентов, интегрированных с минимальными усилиями.

🖥 Github

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 В этой статье автор делится опытом разработки безголового браузера на языке Go, предназначенного для тестирования веб-приложений с использованием HTMX!

🌟 Он описывает процесс создания инструмента, который позволяет эффективно тестировать поведение веб-страниц без необходимости в полноценном браузере, что ускоряет цикл разработки и тестирования.

🔗 Ссылка: *клик*

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Эта статья посвящена интеграции OpenTelemetry в приложения на Go!

🌟 Автор объясняет, как OpenTelemetry, являясь открытым фреймворком для наблюдаемости, помогает собирать и экспортировать трассировки, метрики и логи из приложений, стандартизируя процесс сбора телеметрических данных и облегчая интеграцию с такими инструментами, как Grafana. В статье рассматриваются ключевые компоненты OpenTelemetry, включая провайдеры, ресурсы, экспортеры и коллекторы, а также их роль в сборе, обработке и отправке телеметрических данных во внешние системы.

🔗 Ссылка: *клик*

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Эта статья посвящена созданию платформы для совместной работы в реальном времени с использованием Go и WebSockets!

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

🔗 Ссылка: *клик*

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Приятное улучшение в Go 1.24:

Команда go build теперь устанавливает версию основного модуля (BuildInfo.Main.Version) в скомпилированном двоичном файле на основе тега или коммита системы контроля версий.

При наличии незафиксированных изменений добавляется суффикс +dirty.

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