❓ Что такое импортируемый и исполняемый пакеты?
Импортируемые пакеты содержат библиотечные функции и структуры данных, которые могут быть использованы в других пакетах. Исполняемые пакеты содержат функцию main() и являются точкой входа для выполнения программы. Исполняемые пакеты всегда имеют имя main
👍8🥱4
С Новым годом и Годом Змеи! 🐍 Пусть этот год принесет вам успех, рост и меньше усилий для достижения больших целей. Мы в Proglib Academy пришли с хорошими новостями в начале года.
🌟 Обновления курсов!
Мы работаем над тем, чтобы ваше обучение было проще и эффективнее. Вот что мы уже улучшили:
📈 Data Science: улучшили блок «Геометрическая прогрессия и векторная алгебра» — ключевой этап курса, который идет сразу после теории множеств.
Он закладывает фундамент для работы с данными: от анализа роста и убывания величин (геометрическая прогрессия) до понимания многомерных пространств и операций с векторами. Знания которых пригодятся в машинном обучения и аналитики.
🐍 Python: обновили курс с учетом последней версии Python 3.9.5, добавив актуальные материалы и улучшив структуру. Чтобы вы могли лучше закрепить пройденный материал, мы добавили новые интересные задачи и практические примеры.
Учебный процесс стал еще удобнее и эффективнее, а вы сможете быстрее освоить современные инструменты и техники программирования
Общие обновления:
- Перезаписали демо-курсы и презентации. Чтобы вы точно одурели с этой прикормки.
- Сократили время проверки домашних заданий, ответы теперь приходят быстрее.
- Видео теперь без перекрытий, презентации стали четче, а задания логичнее.
Но главное — мы растем для вас и с вами. Ваша обратная связь помогает нам становиться лучше. Делитесь идеями, и вместе мы создадим лучший образовательный продукт для вас!
💡 С 27.01.25 цены изменятся на 10%.
Пример: Математика для DS (Базовый): 20,990 → 23,090 ₽. Это позволяет нам делать курсы еще круче.
Давайте сделаем 2025 год годом вашего профессионального успеха! 🚀
Выбрать курс
🌟 Обновления курсов!
Мы работаем над тем, чтобы ваше обучение было проще и эффективнее. Вот что мы уже улучшили:
📈 Data Science: улучшили блок «Геометрическая прогрессия и векторная алгебра» — ключевой этап курса, который идет сразу после теории множеств.
Он закладывает фундамент для работы с данными: от анализа роста и убывания величин (геометрическая прогрессия) до понимания многомерных пространств и операций с векторами. Знания которых пригодятся в машинном обучения и аналитики.
🐍 Python: обновили курс с учетом последней версии Python 3.9.5, добавив актуальные материалы и улучшив структуру. Чтобы вы могли лучше закрепить пройденный материал, мы добавили новые интересные задачи и практические примеры.
Учебный процесс стал еще удобнее и эффективнее, а вы сможете быстрее освоить современные инструменты и техники программирования
Общие обновления:
- Перезаписали демо-курсы и презентации. Чтобы вы точно одурели с этой прикормки.
- Сократили время проверки домашних заданий, ответы теперь приходят быстрее.
- Видео теперь без перекрытий, презентации стали четче, а задания логичнее.
Но главное — мы растем для вас и с вами. Ваша обратная связь помогает нам становиться лучше. Делитесь идеями, и вместе мы создадим лучший образовательный продукт для вас!
💡 С 27.01.25 цены изменятся на 10%.
Пример: Математика для DS (Базовый): 20,990 → 23,090 ₽. Это позволяет нам делать курсы еще круче.
Давайте сделаем 2025 год годом вашего профессионального успеха! 🚀
Выбрать курс
❓ Что такое руны?
В Go руны (тип rune) представляют собой символы Unicode и являются синонимом типа int32. Руны используются для представления символов, которые могут занимать более одного байта в кодировке UTF-8.
👍4🥱2
❓Как вы реализуете поддержку флагов командной строки в Go? Опишите, как вы бы создали программу, которая принимает следующие флаги:
-name (строка, имя пользователя, обязательный)
-age (целое число, возраст, необязательный, по умолчанию 18)
-verbose (булев флаг, включение подробного вывода, необязательный)
Также объясните, как вы бы обработали ошибки, например, если обязательный флаг не передан.
Для реализации поддержки флагов командной строки в Go используется стандартный пакет flag. Сначала определяются флаги с помощью функций flag.String, flag.Int и flag.Bool. Например, флаг name будет обязательным, age — необязательным со значением по умолчанию 18, а verbose — булевым флагом для включения подробного вывода.
После определения флагов вызывается flag.Parse(), чтобы обработать аргументы командной строки и заполнить значения переменных.
Затем добавляется проверка, чтобы убедиться, что обязательный флаг name не пустой. Если он пустой, программа завершается с ошибкой и выводит справку по использованию флагов с помощью flag.Usage().
Если все флаги корректны, их значения выводятся.
Если требуется поддержка коротких флагов или пользовательских типов, можно использовать сторонние библиотеки, такие как cobra или urfave/cli, так как стандартный пакет flag этого не поддерживает.
-name (строка, имя пользователя, обязательный)
-age (целое число, возраст, необязательный, по умолчанию 18)
-verbose (булев флаг, включение подробного вывода, необязательный)
Также объясните, как вы бы обработали ошибки, например, если обязательный флаг не передан.
После определения флагов вызывается flag.Parse(), чтобы обработать аргументы командной строки и заполнить значения переменных.
Затем добавляется проверка, чтобы убедиться, что обязательный флаг name не пустой. Если он пустой, программа завершается с ошибкой и выводит справку по использованию флагов с помощью flag.Usage().
Если все флаги корректны, их значения выводятся.
Если требуется поддержка коротких флагов или пользовательских типов, можно использовать сторонние библиотеки, такие как cobra или urfave/cli, так как стандартный пакет flag этого не поддерживает.
👍10❤2
❓ Что такое «Memory ballast»?
Это техника оптимизации работы сборщика мусора (GC) в Go, при которой в программе намеренно выделяется большой объём памяти (например, слайс var ballast = make([]byte, 1<<30)), чтобы повлиять на поведение GC.
👍9🤔2
❓ Почему сейчас не используют «Memory ballast»?
Потому что в Go 1.19+ появилась runtime/debug.SetMemoryLimit — более гибкий и безопасный способ управления сборщиком мусора (GC). Раньше Ballast был хаком для снижения частоты запусков GC, но теперь есть официальное решение, которое не требует выделения лишней памяти и лучше интегрировано в язык.
Библиотека Go для собеса
❤6
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
❓ Что такое graceful shutdown?
Graceful Shutdown (корректное завершение работы) — это механизм безопасного завершения работы приложения, при котором:
1️⃣ Завершаются все текущие операции (например, обработка сообщений из очереди).
2️⃣ Освобождаются ресурсы (закрытие соединений с БД, файлов, сетевых сокетов).
3️⃣ Принимаются новые задачи только до определенного момента, после чего система начинает «затухание».
Библиотека Go для собеса
👍13🥱2❤1
❓ Что особенного в chan struct{}?
chan struct{} используется, когда значение не имеет значения — только сам факт сигнала
🔥11👍3
❓ Почему chan struct{} считается более «правильным» вариантом для сигнализации, чем chan bool?
🔹 struct{} занимает 0 байт в памяти, в отличие от bool (1 байт).
🔹 Закрытый канал struct{} не вызывает панику при чтении.
🔹 Каналы bool могут вызвать путаницу, если их используют для нескольких сигналов (true, false).
🔹 chan struct{} передаёт только факт события, без лишней информации, что делает код чище и читаемее.
👍22🌚2
❓ В чем разница между //go:build и // +build
// +build — это старая форма условной компиляции, которая использовалась до Go 1.17. Она пишется перед пакетом и требует пустой строки после всех директив
//go:build — это новая форма, введенная в Go 1.17. Она улучшает читаемость, так как использует логические выражения:
//go:build — это новая форма, введенная в Go 1.17. Она улучшает читаемость, так как использует логические выражения:
👍16❤1
❓ Разница между ParseAddr и MustParseAddr из пакета netip
ParseAddr возвращает netip.Addr и error, если переданный IP-адрес некорректен. Позволяет безопасно обработать ошибки.
MustParseAddr вызывает panic, если адрес неверный. Используется, когда ошибка невозможна
👍9❤🔥1
❓ Как работает пагинация в API? Какие есть подходы?
Пагинация в API — это разбиение большого набора данных на отдельные страницы для оптимизации скорости работы и снижения нагрузки на сервер. Вместо отправки всех данных сразу API возвращает ограниченное количество записей на каждый запрос.
Подходы:
• Offset-Limit — задаются параметры offset (смещение) и limit (количество записей).
Пример: GET /users?offset=20&limit=10.
Недостаток: низкая производительность при больших данных, так как база сканирует записи до нужного смещения.
• Cursor-based (Keyset Pagination) — вместо смещения используется уникальный идентификатор последней записи (cursor).
Пример: GET /users?cursor=abc123&limit=10.
Такой метод быстрее, так как использует индексы базы данных.
• Page-based — клиент указывает номер страницы и размер.
Пример: GET /users?page=2&size=10.
Недостаток: возможны пропуски или дубли, если данные обновляются между запросами.
🔥10😁5❤1👍1🥱1
❓ Что такое BDD-подход?
BDD (Behavior-Driven Development) — это методология разработки, основанная на описании поведения системы на понятном языке. В отличие от TDD, BDD фокусируется на сценариях использования (Given-When-Then), делая тесты понятными для всей команды, включая бизнес-аналитиков.
В Go для BDD часто используют Ginkgo, который позволяет писать структурированные тесты в стиле «Describe → Context → It». Это улучшает читаемость, облегчает поддержку и помогает согласовать требования между разработчиками и заказчиками.
👏11
❓ Для чего используется go mod?
go mod — это система управления зависимостями в Go, которая позволяет фиксировать версии пакетов, автоматически загружать их и работать без GOPATH
При инициализации модуля (go mod init) создается файл go.mod, который хранит информацию о зависимостях, а go.sum содержит контрольные суммы для проверки их целостности.
Основные команды:
• go get — добавляет/обновляет зависимости.
• go mod tidy — удаляет неиспользуемые пакеты.
• go mod vendor — создает локальную копию зависимостей.
👍15😁1🥱1
❓ Как работает sync.Once под капотом
Под капотом sync.Once использует атомарную переменную и мьютекс:
1. При первом вызове once.Do(f) проверяется, выполнена ли уже функция f.
2. Если нет, sync.Once блокирует выполнение других горутин и запускает f().
3. После завершения выполнения устанавливается флаг, предотвращающий повторные вызовы.
👍7🥱1
Swipe right or swipe left
Что делать, если твои мэтчи в жизни не такие точные, как твой код?
Спокойно, 14 февраля в 19:00 по МСК мы разберём, как ML анализирует speed dating и предсказывает match.
📌 Мы возьмем реальные данные со speed dating.
📌 Обучим модель, которая скажет: match или swipe left.
📌 Разберём, какие признаки реально важны (спойлер: работа в IT — не прям гарантия успеха (наши маркетологи подтверждают 😥).
💡 Приходи, если хочешь прокачать свой Python, ML и, возможно, станешь идеальной парой, как самый стильные форсы.
👉 Записаться
Что делать, если твои мэтчи в жизни не такие точные, как твой код?
Спокойно, 14 февраля в 19:00 по МСК мы разберём, как ML анализирует speed dating и предсказывает match.
📌 Мы возьмем реальные данные со speed dating.
📌 Обучим модель, которая скажет: match или swipe left.
📌 Разберём, какие признаки реально важны (спойлер: работа в IT — не прям гарантия успеха (наши маркетологи подтверждают 😥).
💡 Приходи, если хочешь прокачать свой Python, ML и, возможно, станешь идеальной парой, как самый стильные форсы.
👉 Записаться
😁1
❓ Что такое fallthrough в Go
fallthrough — это ключевое слово, используемое внутри switch, которое позволяет явно передавать управление следующему case, даже если его условие не совпадает.
По умолчанию в Go выполнение switch завершается после первого совпавшего case, но если добавить fallthrough, выполнение продолжится с следующим case, без проверки его условия
👍14
❓ Чем interface{} отличается от any?
interface{} — это пустой интерфейс, который может хранить значение любого типа.
any — это просто алиас (type any = interface{}), введённый в Go 1.18 для удобочитаемости кода.
👍26🥱4
❓ Как ведёт себя select {} без case
Если написать select {} без case, программа зависнет навсегда. Это называют блокирующим select'ом.
😁20👍8🥱1