Golang вопросы собеседований
14.7K subscribers
760 photos
14 videos
1 file
551 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
Download Telegram
🌀 Vuego - шаблонизатор для Go, основанный на модели документа (DOM).
Вдохновлён синтаксисом и поддерживает подмножество его возможностей.

👉 GitHub-репозиторий: https://github.com/titpetric/vuego
#golang
🔥3👍1🥰1
Git Cheatsheet - коротко и по делу

Настройка
git config --global user.name "Name" — задать имя
git config --global user.email "email" — задать почту
git config --list — показать настройки

Старт
git init — создать репозиторий
git clone url — клонировать репо

Стейджинг и коммиты
git status — статус
git add . — добавить все изменения
git reset file — убрать из стейджа
git commit -m "msg" — коммит
git commit --amend — исправить последний коммит

Ветки
git branch — список
git branch name — создать
git checkout -b name — создать и перейти
git branch -d name — удалить

Merge и Rebase
git merge branch — слить ветку
git merge --abort — отменить
git rebase branch — перебазирование

История
git log --oneline — компактная история
git log --graph --all — граф
git diff — показать изменения

Откат
git restore file — вернуть файл
git reset --soft HEAD~1 — откатить коммит, сохранить изменения
git reset --hard HEAD~1 — откатить и удалить изменения
git clean -f — удалить лишние файлы

Удалённые репозитории
git remote -v — список
git push origin branch — запушить
git pull — получить изменения
git fetch — только забрать

Теги
git tag — список
git tag name — создать
git push origin --tags — отправить теги

Stash
git stash — сохранить изменения
git stash list — список
git stash apply — применить

Поиск и анализ
git blame file — кто менял строки
git grep "text" — поиск
git bisect — бинарный поиск бага

Продвинутое
git cherry-pick commit — взять коммит
git revert commit — отменить коммит через новый
git submodule add url — добавить сабмодуль

Полезно сохранить под рукой.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍184🔥3
🖥 Понятное объяснение Docker Networking Models

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

1) Bridge (по умолчанию)
→ Docker создаёт виртуальный мост docker0.
→ Контейнеры общаются друг с другом по внутренним IP.
→ Чтобы получить доступ извне, нужно пробрасывать порты (-p 8080:80).
→ Идеально для локальной разработки и одиночных хостов.

2) Host
→ Контейнер использует сетевой стек хоста напрямую.
→ Нет виртуальной сети и NAT - максимум производительности.
→ Минимальная изоляция.
→ Применяется для мониторинга, логгинга, высокоскоростных сервисов.

3) None
→ У контейнера вообще нет сети.
→ Нет доступа ни к интернету, ни к другим контейнерам.
→ Используется для задач, где требуется полная изоляция.

4) Overlay
→ Сеть, работающая поверх нескольких хостов или в Docker Swarm.
→ Контейнеры на разных серверах могут общаться как будто они в одной сети.
→ Основа для распределённых микросервисных систем.

5) Macvlan
→ Каждый контейнер получает свой MAC-адрес и «видится» как отдельная машина.
→ Контейнеры становятся полноценными участниками вашей физической сети.
→ Полезно, когда контейнеры должны быть напрямую доступны по LAN.

6) IPvlan
→ Похоже на Macvlan, но проще управляет IP-адресами на уровне L3.
→ Хорошо подходит для масштабных систем с жёсткими требованиями к маршрутизации.

Дополнительно:

Сервис-дискавери
→ Внутри Docker работает собственный DNS - контейнеры могут общаться по имени сервиса, а не по IP.

Проброс портов
→ Стандартный вариант доступа извне:
-p 8080:80

Драйверы сетей
→ bridge
→ host
→ overlay
→ macvlan
→ ipvlan

Как выбрать модель?
→ Bridge — одиночный хост, локалка.
→ Host — максимум скорости, минимум изоляции.
→ Overlay — распределённые микросервисы.
→ Macvlan — нужны «настоящие» сетевые адреса.
→ None — полная изоляция без сети.

Правильный выбор сетевой модели Docker напрямую влияет на безопасность, структуру архитектуры и производительность. Чтобы уверенно работать с контейнерами и микросервисами - эти модели нужно знать.
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍5
Как создать эффективное REST API или оптимизировать его? Что сделать для ускорения Redis? Какие секреты скрываются под капотом Android? Что делать при конфликте стилей в микрофронтендах? Что поможет провести продуктивное кросс-ревью в команде?

Своим опытом в самых разных сферах делятся frontend-разработчики, системные аналитики, разработчики под Android и iOS из команды ПСБ.
Читайте в блоге ПСБ на Хабре, делитесь в комментариях своим мнением и опытом!
👣 errors-AsType: идея, которая делает работу с ошибками в Go проще

В Go, чтобы проверить тип ошибки, обычно используют errors.As, но это требует заводить временные переменные и делает код громоздким. В статье предлагается более удобный подход - обёртка AsType, которая сразу возвращает ошибку нужного типа.

Зачем это нужно:

• Код становится короче: никаких var e *MyError заранее.
• Проверка выглядит чище:
if e := errors.AsType[*MyError](err); e != nil { … }
• Удобно, когда нужно последовательно обработать несколько типов ошибок.

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

Кому полезно: всем, кто пишет стабильный продакшн-код на Go и работает с elaborate-ошибками.

https://antonz.org/accepted/errors-astype/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥251🥰1👏1
This media is not supported in your browser
VIEW IN TELEGRAM
👣 Golang: задача про слайсы и append: угадай вывод программы

Вот хитрая задача по Go - идеально, чтобы проверить, насколько хорошо ты понимаешь устройство слайсов, capacity и поведение append.
Подумай, что именно выведет программа и почему.


package main

import "fmt"

func main() {
a := []int{10, 20, 30, 40}
b := a[:2] // [10 20]
c := append(b, 99) // что происходит с a?
a[1] = 777 // влияет ли это на b и c?
c = append(c, 555) // а теперь?

fmt.Println("a:", a)
fmt.Println("b:", b)
fmt.Println("c:", c)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥31
⚡️ CACHING STRATEGIES В СИСТЕМНОМ ДИЗАЙНЕ

Кэширование хранит часто используемые данные в быстром слое, обычно в памяти.
Это снижает нагрузку на базу данных и ускоряет ответы системы.
Один из самых эффективных способов улучшить производительность, масштабируемость и сократить расходы.

ПОЧЕМУ КЭШИРОВАНИЕ ВАЖНО
Экономит запросы к базе
Уменьшает задержку
Справляется с высоким количеством чтений
Укрепляет стабильность при нагрузках
Снижает стоимость инфраструктуры

1) CLIENT-SIDE CACHING
Хранение данных в браузере пользователя.
Используются cookies, localStorage, service workers.
Меньше повторных загрузок статических ресурсов.

2) CDN CACHING
Статические файлы лежат на глобальных edge-серверах.
CSS, JS, изображения, видео, шрифты.
Меньше задержка у глобальных пользователей и разгрузка основного сервера.

3) APPLICATION-LEVEL CACHING
Кэш внутри приложения.
Например, структуры в памяти вроде LRU cache.
Очень быстро, но работает в рамках одного сервера.

4) DISTRIBUTED CACHING
Общий кэш для множества серверов.
Инструменты: Redis, Memcached.
Подходит для горизонтального масштабирования и устраняет дублирование кэша.

5) DATABASE QUERY CACHING
Базы хранят результаты частых запросов.
MySQL Query Cache, Postgres внутренний кэш, MongoDB WiredTiger.
Ускоряет повторные чтения.

6) WRITE-BEHIND
Запись идет в кэш, а в базу — асинхронно.
Снижает задержку записи.
Подходит для систем с высокой нагрузкой на запись.

7) WRITE-THROUGH
Записи попадают в кэш и базу одновременно.
Гарантирует консистентность.
Немного медленнее из-за двойной записи.

8) CACHE-ASIDE
Приложение сначала проверяет кэш.
Если промах — идет в базу, затем помещает результат в кэш.
Гибкий и самый популярный вариант.

9) READ-THROUGH
Приложение всегда читает из кэша.
При промахе сам кэш получает данные из базы.
Кэш всегда остается обновленным.

10) TTL И ПОЛИТИКИ ИСТЕЧЕНИЯ
Каждая запись имеет срок жизни.
TTL, LRU, LFU, FIFO — разные режимы очистки данных.

11) INVALDATION
Ручное удаление ключей, удаление по шаблону, автоматическое истечение по TTL или лимиту памяти.

12) MULTI-LAYERED CACHING
Несколько уровней сразу: браузер, CDN, распределенный кэш, кэш приложения.
Полезно для глобальных систем с большим трафиком.

Совет
Кэширование помогает добиться высокой скорости, низкой нагрузки на базу и хорошей масштабируемости.
Стратегию нужно подбирать исходя из размеров системы, интенсивности запросов и требований к консистентности.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41