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

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

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

Для связи: @ruslan_kuyanets
Download Telegram
#channel #mvc #опытные #начинающие
📚 Dmitry Afanasyev

Дмитрий Афанасьев ведёт, пожалуй, один из самых популярных и старых каналов в рунете по программированию на PHP. Он не обошёл вниманием как начинающих программистов, посвятив им несколько плейлистов по изучению PHP и созданию интернет-магазина, так и более опытных, записав туториал по созданию собственного MVC-приложения, изучению October CMS, Laravel и Zend Framework 2. Раньше эти курсы были платными, однако теперь автор выложил их в открытый доступ, так что теперь у вас есть эксклюзивные уроки на PHP.

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

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

В этом подкасте мы погружаемся в мир программирования, IT и технологий, с акцентом на Ruby. Ведущий, Сергей Удалов, ruby-тимлид и опытный спикер, делится своими знаниями и опытом, иногда приглашая интересных гостей, а иногда ведя шоу в одиночку.

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

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #environment #deployment #production
🤔 Как работать с тестовыми стендами? (Dev, QA, Prod)

💬 Кратко:

Тестовые стенды (environments) обеспечивают изоляцию этапов разработки. Dev - для активной разработки, QA - для тестирования, Prod - рабочий. Каждый стенд имеет свою конфигурацию, базы данных, и внешние сервисы. Развертывание происходит последовательно через pipeline. Ключевые принципы: идентичность конфигураций, версионность, и минимальные различия между стендами.

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

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

1. Что такое threading?
Threading (многозадачность с потоками) — это возможность выполнять несколько потоков внутри одного процесса. Каждый поток выполняет свою задачу, но все они разделяют общую память и данные, что делает работу с потоками более эффективной для задач с блокирующими операциями, такими как чтение файлов или работа с сетью.

2. Что такое GIL?
GIL (Global Interpreter Lock) — это механизм, который ограничивает выполнение нескольких потоков Python в один момент времени. Он гарантирует, что только один поток может исполнять байт-код Python, что делает многозадачность в Python с потоками неэффективной для вычислительно интенсивных задач.

3. Что такое мультипроцессинг?
Мультипроцессинг — это способ выполнения нескольких процессов параллельно, каждый в своём отдельном адресном пространстве. Это полезно для задач, которые сильно зависят от процессора, таких как вычисления или обработки данных.

4. Что знаешь про ORM?
ORM (Object-Relational Mapping) — это метод, который позволяет работать с базами данных с помощью объектно-ориентированного подхода. Вместо написания SQL-запросов, разработчик работает с объектами, а ORM автоматически преобразует их в SQL-запросы для взаимодействия с базой данных.

5. Что знаешь про Singleton?
Singleton — это паттерн проектирования, который гарантирует, что класс будет иметь только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру. Он используется, когда необходимо управлять единственным состоянием в приложении, например, для работы с конфигурациями или подключениями.

#threading #gil #multithreading #multiprocessing #parallelism #orm #database #singleton #oop
👍1
#course #ооп #алгоритмы
📚 Бесплатный открытый онлайн-курс Хельсинкского университета

Бесплатный открытый онлайн-курс Хельсинкского университета (МООК) по объектно-ориентированному программированию на Java на английском языке. Курс затрагивает основы компьютерного программирования, а также алгоритмы и основы ООП, содержит много упражнений и подходит для обучения с нуля.

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

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#tool #гит
📚 Хочешь изучить Git, не рискуя своей локальной установкой?

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

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

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #javascript #dom #events
🤔 Как подписаться на событие клика кнопки в DOM?

💬 Кратко:

Используйте метод addEventListener для подписки на событие click:
document.querySelector('button').addEventListener('click', () => {
console.log('Кнопка нажата!');
});


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

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

1. Является ли операция ++ атомарной для volatile переменной?
Нет, операция ++ не является атомарной, даже если переменная объявлена как volatile. volatile гарантирует видимость изменений между потоками, но не защищает составные операции. Инкремент состоит из нескольких шагов: чтение, увеличение и запись. Между этими шагами другой поток может вмешаться. Поэтому volatile не решает проблему гонок данных.

2. Как можно избежать deadlock?
Deadlock возникает, когда потоки навсегда ждут освобождения ресурсов друг от друга. Чтобы его избежать, нужно соблюдать единый порядок захвата блокировок, минимизировать синхронизацию и избегать вложенных lock. Также помогают таймауты, неблокирующие структуры данных и высокоуровневые concurrency-абстракции. Проектирование играет ключевую роль. Deadlock проще предотвратить, чем обнаружить.

3. Как обеспечить атомарность операций в многопоточном коде?
Атомарность обеспечивается с помощью синхронизации, блокировок или атомарных классов. Самый простой способ — synchronized. Более гибкий вариант — Lock. Для счётчиков и простых операций лучше использовать классы из java.util.concurrent.atomic. Выбор подхода зависит от задачи и требований к производительности.

4. Что такое virtual threads и в чём их идея?
Virtual threads — это лёгкие потоки, управляемые JVM, а не операционной системой. Они позволяют создавать миллионы потоков без серьёзных накладных расходов. Идея заключается в том, чтобы упростить конкурентный код, сохранив привычную модель потоков. Virtual threads особенно эффективны для задач с большим количеством блокирующих операций. Они появились в рамках Project Loom.

5. Что значит синхронизация на мониторе объекта?
Синхронизация на мониторе объекта означает, что потоки конкурируют за внутренний монитор конкретного объекта. Только один поток может владеть монитором в каждый момент времени. Пока монитор захвачен, другие потоки вынуждены ждать. Это обеспечивает взаимное исключение и корректную видимость изменений.

#volatile #atomicity #deadlock #concurrency #synchronization #virtual #thread #monitor
👍1
#book #php #sql
📚 PHP глазами хакера, Михаил Фленов

Самая противоречивая книга рейтинга: её часто критикуют за поверхностный подход, поэтому специалистам она вряд ли будет полезна. Зато новичкам может подойти как лёгкое, мотивирующее чтение для первого знакомства с темой.

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

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#book #памятка
📚 Памятка PHP/GoLang разработчику для подготовки к собеседованиям

Это методичка(краткий справочник) по темам, знание которых может понадобиться при собеседовании на бэкендера (с уклоном в Golang/PHP) и на работе.

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

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

💬 Кратко:

Для развертывания FastAPI-приложения в продакшн необходимо контейнеризировать приложение с использованием Docker и развернуть его на облачных платформах, таких как AWS или Google Cloud, используя соответствующие сервисы.

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

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

1. Чем REPEATABLE READ отличается от SERIALIZABLE?
REPEATABLE READ гарантирует, что данные, прочитанные в транзакции, не изменятся при повторном чтении. Однако он не защищает от логических аномалий при сложных условиях. SERIALIZABLE обеспечивает максимально строгую изоляцию, как если бы транзакции выполнялись строго последовательно. Это достигается ценой возможных ошибок сериализации и повторных попыток транзакций.

2. В чём разница между B-Tree и Hash-индексом и почему Hash-индексы не поддерживают операции больше/меньше?
B-Tree индекс хранит данные в отсортированном виде, поэтому поддерживает диапазонные запросы. Hash-индекс использует хэш-функцию и не хранит порядок значений. Из-за этого он подходит только для точного поиска по равенству. Операции больше или меньше требуют упорядоченности, которой у Hash-индекса нет. Поэтому такие запросы он не поддерживает.

3. В каких случаях стоит использовать COPY вместо INSERT в Postgres?
COPY стоит использовать при массовой загрузке данных. Он работает значительно быстрее INSERT, потому что минимизирует накладные расходы и сетевые round-trip.

4. В чём суть уровня изоляции SERIALIZABLE?
SERIALIZABLE — самый строгий уровень изоляции транзакций. Он гарантирует, что результат параллельного выполнения транзакций эквивалентен их последовательному выполнению. Это устраняет все виды аномалий чтения. Цена за это — снижение производительности и возможные ошибки сериализации. Используется редко и осознанно.

5. Почему PostgreSQL может не использовать индекс и предпочесть Seq Scan?
PostgreSQL выбирает план выполнения на основе оценки стоимости, а не наличия индекса. Если планировщик считает, что последовательное сканирование будет дешевле, он выберет Seq Scan. Это часто происходит при выборке большого процента строк. Также причиной могут быть устаревшие статистики или неподходящий тип индекса.

#transaction #isolation #btree #index #hash #postgres #copy #insert #serializable #query #planner
🔥1
#course #ios #swift
📚 Онлайн-курс «Разработка под iOS. Начинаем»

Здесь мы сохранили видео онлайн-курса «Разработка под iOS. Начинаем». Курс проходил на платформе Stepik.

В рамках курса затронуты темы:
— язык программирования Swift;
— базовые инструменты Apple для разработчиков;
— как создать интерфейсные элементы приложения и связать их с кодом.

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

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#documentation #база
📚 База знаний школы Systems Education

Большая база ссылок на статьи по различным темам: от работы с требованиями до протокола WebSocket.

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

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #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 и современным использованием групп задач для эффективной асинхронной обработки.

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

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