Telegram Web
Что такое зомби-процесс в линукс

Зомби-процесс — это завершившийся процесс, который всё ещё числится в таблице процессов, потому что его родитель не вызвал wait() для чтения кода завершения. Такой процесс не использует память или CPU, но его PID и запись в таблице остаются.

По сути, это механизм ОС для передачи информации о завершении от дочернего процесса к родительскому. Если родитель забывает забрать статус, зомби остаётся висеть. Один-два зомби не страшны, но их накопление может переполнить таблицу процессов и блокировать запуск новых.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3
Какие знаете бест практис по использованию интерфейсов

1. Чем меньше методов в интерфейсе — тем лучше. Классический пример — io.Reader и io.Writer. Один метод, зато супер универсально.

type Stringer interface {
String() string
}


2. Принимать интерфейсы, а возвращать конкретные типы.

Это удобно и для тестов, и для читаемости. Функция, которая что-то использует, пусть принимает интерфейс, а фабрика или конструктор возвращает конкретный тип.

func Process(r io.Reader) error { ... }       // принимаем интерфейс
func NewBuffer() *bytes.Buffer { ... } // возвращаем структуру


3. Не создавать интерфейсы на будущее. Если абстракция сейчас не нужна — лучше оставить конкретный тип, иначе код будет сложнее без пользы.

4. Переиспользовать стандартные интерфейсы, если они подходят. В стандартной библиотеке уже много хороших примеров — error, fmt.Stringer, context.Context.

5. Осторожно с interface{}. Это, по сути, отключение типизации. Если нужен универсальный контейнер — ок, но в остальном лучше обойтись конкретными интерфейсами или дженериками.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Почему индексация начинается с нуля

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

Массив — это непрерывный участок памяти. Индекс элемента фактически является смещением от начала этого участка. Если первый элемент имеет индекс 0, то его адрес равен base_address + 0 * size. Для второго элемента — base_address + 1 * size и так далее.

Кроме того, нулевая индексация упрощает работу с циклами и диапазонами. Например, цикл for i := 0; i < len(arr); i++ интуитивно проходит весь массив без лишних корректировок. Если бы индексация начиналась с единицы, пришлось бы постоянно делать «−1» или «+1» в выражениях.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Для чего предназначен пакет flag в Go

Пакет flag предназначен для разбора аргументов командной строки в приложениях на Go. Он позволяет определять флаги с конкретными типами (string, int, bool), задавать значения по умолчанию и описание, а затем считывать их в коде.

Это упрощает создание CLI-приложений и обработку параметров запуска без необходимости вручную разбирать os.Args.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚1
Как создать строковый флаг

Для создания строкового флага используется функция flag.String. Она принимает имя флага, значение по умолчанию и описание, и возвращает указатель на переменную. После объявления всех флагов нужно вызвать flag.Parse(), чтобы разобрать аргументы командной строки.

Пример:
var name = flag.String("name", "Guest", "User name")
flag.Parse()
fmt.Println("Hello,", *name)


🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👾1
Как вам вопросы прошедшей недели

Оцените их по шкале 🔥,❤️,👍,😢, 🥱,
где 🔥 — это супер, а 🥱 — это скучно.

Также приветствуется фидбек в комментах.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22🤔3👍2🥱2
Чем отличается flag.StringVar от flag.String

1. flag.StringVar

Принимает указатель на существующую переменную и записывает туда значение флага из командной строки.

Сигнатура: func StringVar(p *string, name string, value string, usage string)

Позволяет явно контролировать, в какую переменную попадёт значение флага.

Обычно используется, когда переменная объявлена заранее и требуется сохранить значение флага именно в неё.

2. flag.String

Создаёт новую переменную (указатель на строку) и возвращает её, а значение устанавливается из командной строки.

Сигнатура: func String(name string, value string, usage string) *string

Возвращает указатель на автоматически созданную переменную.

Удобно, когда нужно быстро объявить переменную и сразу получить её значение по окончании парсинга.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
Как определить булевый флаг

Булевый флаг создаётся через flag.Bool. Если в командной строке указать только имя флага (-v), значение будет true. Можно также явно задать -v=false.

verbose := flag.Bool("v", false, "Enable verbose mode")
flag.Parse()
if *verbose {
fmt.Println("Verbose logging enabled")
}


🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👾1
Время прокачать алгоритмы с 40-процентной скидкой до конца октября

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

🔹 В курсе ты научишься:

— искать ошибки с помощью редакционного расстояния;
— работать с балансированными деревьями и графами;
— решать задачи с динамическим программированием;
— и многое другое, что пригодится на собеседованиях.

🤔 Решаешь задачи только в тг каналах? Пройди курс и отправляйся на реальные собеседования!

🔗 Подробнее о курсе
🤔1
Что такое M:N scheduling

M:N scheduling в Go — это модель планирования, при которой множество горутин (M) выполняется поверх ограниченного количества потоков операционной системы (N). Это отличается от моделей 1:1 (каждая горутина — отдельный системный поток) и N:1 (все горутины на одном системном потоке).

В Go реализована модель M:N с использованием трех основных сущностей:

• G (Goroutine) — легковесная пользовательская горутина с собственным стеком и контекстом исполнения.

• M (Machine) — системный поток, управляемый ОС, на котором реально выполняется код.

• P (Processor) — логический процессор, который связывает горутины с потоками, предоставляя им контекст и ресурсы для выполнения.

Количество P по умолчанию равно числу логических CPU или задается через runtime.GOMAXPROCS. Для выполнения горутин P должен быть привязан к M. Планировщик Go распределяет горутины между доступными P и M.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4👾1
Что произойдёт при нескольких вызовах flag.Parse()

flag.Parse() разбирает аргументы только один раз.

Последующие вызовы не изменят результат, так как парсер уже прошёл по os.Args.

Если нужно повторно разобрать аргументы, например, для тестов, придётся сбрасывать os.Args или использовать кастомный парсер.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3👾1
Какие типовые ошибки могут возникать при использовании конкурентности в Go

Гонка данных. Это когда две части программы одновременно изменяют одну и ту же переменную, и результат получается случайным. Например, счетчик может увеличиться не на ожидаемое число.

Deadlock. Программа может застрять и перестать выполнять работу, если разные части ждут друг друга и никто не может продолжить.

Голодание. Иногда одни части программы забирают все ресурсы, а другие не могут работать — им всегда не хватает доступа.

Ошибка с каналами. Если программа ждет данные из канала, а данные туда никто не отправляет, выполнение остановится и программа заморозится.

Забытый мьютекс. Если забыть разблокировать ресурс, другие части программы не смогут получить к нему доступ и работа остановится.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👏3
Как вам вопросы прошедшей недели

Оцените их по шкале 🔥,❤️,👍,😢, 🥱,
где 🔥 — это супер, а 🥱 — это скучно.

Также приветствуется фидбек в комментах.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍65🥱2
💡 Задача с собесеседования

Недавно в одном известном всем банке кандидату была предложена задача:

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


Вероятности, распределения, матожидание, градиенты — всё это может всплыть на интервью, и даже в продовых задачах.

🎓 Proglib запускает экспресс-курс «Математика для Data Science» — для тех, кто хочет закрыть эти пробелы и понять математику быстро, качественно и без боли.

🔍 На курсе вас ждет:

— линейная алгебра, анализ, теория вероятности и статистика;
— градиенты, матрицы и экстремумы функций;
— математики и алгоритмы машинного обучения;
— много практики.

📅 Старт: 6 ноября
Формат: 10 вебинаров и 3 практических проекта
💬 Поддержка: менторы + Telegram-чат
💰 Стоимость: 37 000 ₽ (есть рассрочка)

🔗 Узнать больше и записаться
🥱4
Как получить неразобранные аргументы после парсинга флагов

После вызова flag.Parse() все оставшиеся аргументы (которые не являются флагами) можно получить через flag.Args().

flag.Parse()
fmt.Println("Remaining args:", flag.Args())


🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2😁1
🔍Тестовое собеседование с Go-разработчиком из VK уже завтра

16 октября(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Go-разработчика.

Как это будет:
📂 Владислав Кирпичов, Go-разработчик в VK, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Владислав будет комментировать каждый ответ респондента, чтобы дать понять, чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Владиславу

Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Go-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.

Переходи в нашего бота, чтобы получить ссылку на эфир
@shortcut_sh_bot

Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
😵‍💫 Устал от бесконечной подготовки к собесам?

Тогда залетай к нам, есть задачка попроще.

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

📱 Перейти в бота
Можно ли определить пользовательские типы флагов

Да, для этого нужно реализовать интерфейс flag.Value с двумя методами:
type Value interface {
String() string
Set(string) error
}


После этого пользовательский тип можно зарегистрировать через flag.Var.

type MyFlag struct{}
func (m *MyFlag) String() string { return "" }
func (m *MyFlag) Set(value string) error { fmt.Println("Set value:", value); return nil }

var my MyFlag
flag.Var(&my, "myflag", "custom flag")
flag.Parse()


🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🔥 Новый курс «Математика для Data Science»

Записывайтесь до 19.10 и получите бонус-курс «Школьная математика» для быстрого освежения знаний! 🚀

🧠 Эксперты-спикеры на курсе:

▫️ Диана Миронидис — преподаватель ВШЭ, автор Яндекс Практикума;

▫️ Ксения Кондаурова — преподаватель Центрального Университета (Т-Банк);

▫️ Маргарита Бурова — академический руководитель программ Wildberries & Russ.

👉🏻 Не упустите шанс улучшить свои навыки
😨 Даже опытные Go-разработчики часто обходят стороной sync.Cond — это слишком «темная лошадка», не так ли? Но именно она может стать вашим самым точным инструментом для управления конкурентностью, если знать, как использовать её правильно.

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

❗️ После вебинара вы перестанете «бояться» sync.Cond, научитесь применять его для оптимизации кода и получите новые инструменты для решения задач конкурентности.

Открытый вебинар проходет 📆 20 октября в 20:00 МСК.
👉 Регистрируйтесь и разберитесь, что скрывает Golang: https://clc.to/1orDKA

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
2025/10/16 16:44:02
Back to Top
HTML Embed Code: