YeaHub Tech
412 subscribers
342 photos
15 videos
2 files
448 links
Новые технологии, советы и обучающие материалы

YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников.

Платформа: https://yeahub.ru

Для связи: @ruslan_kuyanets
Download Telegram
#Собес #profiling #performance #debug
🤔 Что такое профилирование и как его использовать в Go?

💬 Кратко:

Профилирование — это процесс измерения производительности кода. В Go это делается через net/http/pprof, который позволяет собирать метрики CPU, памяти, блокировок и т.д.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🧑‍💻 Вопросы с собесов для Node.js Разработчика

1. Как спроектировать высоконагруженный сервис отправки сообщений?
Высоконагруженный сервис отправки сообщений проектируется как распределённая система, разделённая на микросервисы. Основные компоненты: API-шлюз для приёма запросов, брокер сообщений (например, Kafka или RabbitMQ) для асинхронной обработки и буферизации, и отдельные сервисы-обработчики. База данных используется для хранения состояния сообщений, а кэш (Redis) — для сессий и быстрого доступа. Масштабирование достигается горизонтальным добавлением инстансов обработчиков и использованием балансировщиков нагрузки.

2. Как организуется работа с Legacy-системами при миграции на микросервисы?
Работа с Legacy-системами при миграции на микросервисы организуется через постепенную замену, а не полный переписывание. Чаще всего применяется паттерн "Strangler Fig" (Душитель), когда новый функционал создается как микросервис, а старый монолит постепенно "оборачивается" и замещается. Сначала выделяют отдельные, слабо связанные модули монолита, которые можно вынести в сервисы. Важно обеспечить сосуществование старой и новой систем через API-шлюз или обратные прокси, чтобы клиенты не заметили перехода. Миграция должна быть инкрементальной, с постоянным тестированием и откатом на каждом этапе.

3. Какие подходы к обработке ошибок в распределенной системе используются?
В распределенных системах ошибки неизбежны из-за сетевых сбоев, временной недоступности сервисов или перегрузок. Основные подходы включают повторные попытки (retry) с экспоненциальной задержкой, паттерн "Circuit Breaker" для предотвращения каскадных сбоев, использование "Dead Letter Queue" для анализа неудачных сообщений и обеспечение идемпотентности операций. Эти стратегии помогают системе оставаться устойчивой и восстанавливаться после сбоев.

4. Как дебажить проблему утечки памяти?
Утечка памяти возникает, когда объекты остаются в памяти, хотя больше не нужны. Для дебага используйте инструменты разработчика браузера (например, Chrome DevTools) или профилировщики Node.js. Сделайте несколько снимков кучи (Heap Snapshots) и сравните их, чтобы найти объекты, которые не удаляются сборщиком мусора. Проверьте глобальные переменные, таймеры, подписки на события и замыкания, которые могут удерживать ссылки.

5. Как диагностировать проблему с потреблением памяти в Java-приложении?
Для диагностики проблем с памятью в Java нужно начать с мониторинга JVM с помощью встроенных инструментов, таких как jstat или VisualVM. Следует анализировать графики потребления heap-памяти: если она постоянно растёт и не снижается после полного GC, это указывает на возможную утечку. Далее нужно снять heap dump с помощью jmap или через параметры JVM при OutOfMemoryError и проанализировать его в профилировщике (например, Eclipse MAT) для поиска объектов, удерживающих память. Ключевой шаг — найти причину утечки, например, некорректные кэши или не закрытые ресурсы.

#message_queue #microservices #scalability #legacy_systems #microservices_migration #strangler_fig_pattern #distributed_systems #error_handling #retry #memory_leak #debugging #heap_snapshot #heap_dump #garbage_collection
🔥1
#book #практика
📚 Java Concurrency на практике

Стандарт в разработке. Книга, которая даст вам прочную базу в Java-разработке и поможет изучить непростую тему потокобезопасности. Возможно, книга немного устарела, ей уже много лет. Но погрузиться с ней в основы получится отлично. Ведь книга описывает типичные ошибки написания конкурентных приложений на Java и распространённые ошибки с многопоточностью.

Перейти к материалу

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#article #переводы
📚 PythonTurbo

Переводы статей по Python. Если будете искать что-то конкретное, типа "как добавить элемент в список", вас с большой вероятностью выбросит сюда.

Перейти к материалу

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
👍1
#Собес #куки #хранилище #security
🤔 Как защитить данные в LocalStorage от стороннего JS?

💬 Кратко:

Полностью защитить LocalStorage от чтения/изменения сторонним JS нельзя, так как он доступен в том же контексте. Можно уменьшить риски: хранить только нечувствительные данные, использовать шифрование или HttpOnly-куки для критичной информации.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🧑‍💻 Вопросы с собесов для Node.js Разработчика

1. Как работает Jest под капотом (разница между jsdom и браузером)?
Jest использует jsdom для эмуляции браузерного окружения в Node.js. Это значит, что тесты могут работать с DOM-методами без запуска реального браузера, но не все браузерные API полностью поддерживаются, и поведение может немного отличаться.

2. Почему MutationObserver использует микротаски в Event Loop?
MutationObserver выполняет свои колбэки в микротасках, чтобы изменения DOM обрабатывались сразу после текущей задачи, но до рендеринга и макротасков. Это позволяет быстро реагировать на изменения, сохраняя высокую производительность.

3. Как избежать переполнения кэша?
Можно ограничивать размер кэша и удалять старые записи по принципу LRU (Least Recently Used) или по времени жизни (TTL). Также важно периодически очищать кэш.

4. Как реализовать кэширование данных без библиотек?
Кэширование можно реализовать с помощью объекта или Map, сохраняя данные по ключу и возвращая их при повторных запросах. Это снижает количество повторных вычислений или запросов к серверу.

5. Какие хранилища подходят для больших данных (LocalStorage, IndexedDB)?
Для больших объемов данных лучше использовать IndexedDB, так как оно поддерживает асинхронную работу и хранение структурированных объектов. LocalStorage подходит для небольших объемов (до ~5 МБ) и синхронных операций.

#jest #jsdom #testing #javascript #mutationobserver #event_loop #cache #lru #ttl #map #localstorage #indexeddb
#article #asyncio
📚 Группы асинхронных задач в Python 3.11

Статья посвящена одной из новых возможностей языка Python 3.11 — группам асинхронных задач и улучшенной обработке исключений при их выполнении. Автор объясняет, как в Python 3.11 появился класс asyncio.TaskGroup, который позволяет одновременно запускать несколько асинхронных задач и объединять возникающие ошибки в единый объект ExceptionGroup. Это улучшает контроль над конкурентным выполнением кода и обработкой нескольких исключений, возникающих в разных задачах, что особенно полезно при работе с asyncio. Приведены примеры кода, демонстрирующие различия между традиционным asyncio.gather и современным использованием групп задач для эффективной асинхронной обработки.

Перейти к материалу

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#repository #selenium #автоматизация #тестовыефреймворки
📚 Selenium

Классический open‑source проект для автоматизации браузеров. Репозиторий включает код, документацию и примеры на разных языках (Java, Python, C#, Ruby). Подходит для изучения основ автоматизации, работы с WebDriver и построения тестовых фреймворков.

Перейти к материалу

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #optimizations
🤔 Как можно ускорить работу какой-то функции?

💬 Кратко:

Мемоизация сохраняет результаты выполнения функции для одних и тех же аргументов, чтобы избежать повторных вычислений. Это полезно для тяжелых функций (например, рекурсивных расчетов).

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#channel #laravel
📚 Laracasts

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

Перейти к материалу

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#article #rknn #rockchip
📚 RKNN Toolkit2: конвертация моделей и симуляция NPU Rockchip

Статья показывает, как с помощью rknn-toolkit2 конвертировать нейросеть из PyTorch → ONNX → RKNN для запуска на NPU Rockchip (например, RK3588), включая установку, подготовку модели, оптимизацию (в том числе квантизацию) и симуляцию выполнения на NPU, чтобы анализировать и получать результаты инференса на целевой платформе.

Перейти к материалу

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🧑‍💻 Вопросы с собеседований для DevOps

1. Чем отличаются обычные сенсоры от deferrable-сенсоров?
Обычные сенсоры постоянно занимают worker во время ожидания. Deferrable-сенсоры освобождают worker и «засыпают» до наступления события. Они используют асинхронную модель ожидания. Это позволяет существенно снизить нагрузку на систему. Deferrable-сенсоры лучше подходят для долгих ожиданий.

2. Как работать с несколькими окружениями (Dev / Test / Prod) и релизным пайплайном?
Окружения Dev, Test и Prod используются для разделения этапов разработки. Dev — для разработки, Test — для проверки, Prod — для игроков. Каждое окружение имеет свои настройки и данные. Релизный пайплайн автоматизирует сборку, тестирование и выкладку игры. Это снижает количество ошибок и упрощает выпуск обновлений.

3. Как дождаться готовности базы данных при старте приложения в Docker Compose?
Готовности базы данных можно дождаться через healthcheck, скрипты ожидания или retry-логику в приложении. Самый надёжный способ — комбинация healthcheck и повторных попыток подключения. Docker Compose сам по себе не ждёт готовности сервиса. Поэтому ожидание нужно реализовывать явно. Это стандартная практика.

4. Как реализуется собственный сенсор в Airflow?
Собственный сенсор создаётся путём наследования от BaseSensorOperator. В нём реализуется метод poke, который проверяет условие. Airflow вызывает этот метод с заданным интервалом. Для асинхронной версии используется deferrable-модель и триггеры. Такой подход позволяет реализовать ожидание любых внешних условий.

5. Какие проблемы с ресурсами могут возникать при неправильном использовании сенсоров?
При неправильном использовании сенсоры могут занимать worker-ы на долгое время. Это приводит к нехватке слотов для реальных задач. Scheduler начинает работать медленнее, а DAG-и встают в очередь. Также растёт нагрузка на внешние системы из-за частых проверок. В итоге Airflow становится нестабильным.

#deferrable #sensor #environment #pipeline #docker #compose #database #custom #basesensoroperator #resource
#video #история
📚 Программист из 80-х / История появления интернета и программирования в СССР / Всё о Go

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

Перейти к материалу

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#course #тур #начинающие
📚 Официальный тур по Go

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

Перейти к материалу

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #docker #java #deploy
🤔 Как осуществляется контейнеризация Java-приложений с помощью Docker?

💬 Кратко:

Java-приложение можно контейнеризовать, создав Dockerfile, в котором указывается базовый образ с JDK или JRE, копируется jar-файл и прописывается команда запуска. Это позволяет запускать приложение изолированно, независимо от настроек окружения. Основные шаги — сборка jar-файла, написание Dockerfile и сборка образа с помощью команды docker build.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
👍1
🧑‍💻 Вопросы с собеседований для DevOps

1. Как мы взаимодействуем с Docker на фронтенде?
Фронтенд-разработчики используют Docker для:

- Запуска единой среды разработки (например, Node.js и зависимостей).
- Тестирования приложения в изолированном окружении.
- Упрощения развертывания (деплоя) вместе с бэкендом.

2. Какова цель томов в Docker?
Тома в Docker предназначены для хранения и обмена данными между контейнерами и хост-системой. Они позволяют сохранять данные независимо от жизненного цикла контейнера, обеспечивая сохранность данных при остановке или удалении контейнера. Тома можно использовать для базы данных, конфигураций приложений и логов.

3. Как устранять проблемы с сетевым соединением в Linux?
Для устранения проблем с сетевым соединением в Linux нужно проверить подключение к интернету, настройки сети (IP-адрес, шлюз), файрволл и интерфейс сети. Можно использовать команды ip addr, ifconfig, ip route для диагностики. Также полезно перезапускать сетевой интерфейс с помощью команд ifup и ifdown.

4. Как настроен процесс сборки и деплоя приложения?
Сборку и деплой организуют через CI (GitHub Actions, GitLab CI, Bitrise, Jenkins), где шаги включают: клонирование репозитория, установка зависимостей (CocoaPods, SPM), сборку через xcodebuild, запуск тестов, упаковку .ipa и публикацию в TestFlight/App Store Connect с помощью fastlane.

5. Какие основные принципы контейнеризации реализуются с помощью Docker?
Docker реализует изоляцию процессов, переносимость окружения, повторяемость сборки, минимализм и декларативное описание инфраструктуры. Контейнеры создаются из образов, которые можно запускать на любой машине с Docker.

#deploy #ci/cd #docker_volumes #persistent_data #storage #network #connectivity #firewall #xcodebuild #fastlane #container #image #dockerfile
👍1
#book #практика
📚 Java Concurrency на практике

Стандарт в разработке. Книга, которая даст вам прочную базу в Java-разработке и поможет изучить непростую тему потокобезопасности. Возможно, книга немного устарела, ей уже много лет. Но погрузиться с ней в основы получится отлично. Ведь книга описывает типичные ошибки написания конкурентных приложений на Java и распространённые ошибки с многопоточностью.

Перейти к материалу

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#repository #стиль #чистый #код
📚 Swift style guide

Руководство по стилю кодирования от Raywenderlich. Содержит рекомендации по форматированию кода, именованию переменных и другим аспектам, что способствует написанию читаемого и консистентного кода

Перейти к материалу

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #asyncio #synchronous #integration
🤔 Как в асинхронном коде вызвать синхронную функцию?

💬 Кратко:

Для вызова синхронной функции в асинхронном коде используйте asyncio.to_thread() для CPU-bound задач или loop.run_in_executor() для выполнения в отдельном потоке. Для I/O-bound операций лучше переписать функцию в асинхронную версию.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🔥1
🧑‍💻 Подборка из 5 вопросов для Golang разработчиков

1. Чем B-tree отличается от бинарного дерева?
B-дерево и бинарное дерево решают одну задачу — эффективный поиск, но по-разному. Бинарное дерево имеет не более двух потомков у каждого узла, а B-дерево — много. B-дерево всегда сбалансировано, что гарантирует быстрый поиск, а бинарное может выродиться в список. Главное же отличие в том, что B-дерево оптимизировано для хранения на диске и работы с большими данными.

2. Объясни, что такое Durability (D в ACID) и как она гарантируется?
Durability (Долговечность) — это свойство транзакции, гарантирующее, что一旦 транзакция успешно завершена (зафиксирована), внесенные ею изменения останутся в системе навсегда, даже в случае последующих сбоев (например, отключения питания). Это гарантируется путем записи информации о изменениях в постоянное (немедленное) хранилище, такое как журнал транзакций (WAL), на диск перед тем, как сообщить пользователю об успехе.

3. Чем отличается Read Committed от Repeatable Read?
Основное отличие заключается в том, разрешает ли уровень изоляции неповторяющееся чтение. Read Committed это разрешает: два последовательных чтения одной и той же строки в транзакции могут вернуть разные данные, если другая транзакция изменила и зафиксировала эту строку между чтениями. Repeatable Read гарантирует, что多次读取 одной и той же строки в рамках транзакции вернут одинаковые данные, блокируя или используя снимки данных, чтобы предотвратить ее изменение другими транзакциями.

4. Почему поиск в B-tree работает быстрее полного перебора данных?
Поиск в B-дереве быстрее, потому что он использует принцип двоичного поиска на каждом уровне, что позволяет быстро отбрасывать большие части данных. Вместо проверки каждого элемента (как при переборе), алгоритм за несколько шагов принимает решение, в какую ветку двигаться дальше. Это значительно сокращает количество операций, особенно для больших объемов данных.

5. Что такое идемпотентность (idempotentness)?
Идемпотентность — это свойство операции, которое позволяет выполнить ее много раз без изменения результата за пределами первого выполнения. Проще говоря, если вы вызвали операцию один раз или десять раз, конечное состояние системы будет одинаковым. Это ключевая концепция для обработки повторяющихся запросов в сетях.

#algorithm #data_structure #tree #transaction #acid #durability #isolation #consistency #idempotency #reliability #network
👍1
#article #optimization
📚 Математика на складе. Как оптимизировать хаос

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

Перейти к материалу

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа