#Собес #gitflow
🤔 Какие различные стратегии ветвления вы знаете?
💬 Кратко:
Централизованный рабочий процесс (Centralized Workflow). Веткой разработки по умолчанию является main, и все изменения фиксируются в этой ветке. Этот рабочий процесс не требует других веток, кроме главной.
Рабочий процесс разветвления функций (Feature Branching Workflow). Основная идея рабочего процесса разветвления функций заключается в том, что разработка всех функций должна вестись в специальной ветке, а не в основной.
Рабочий процесс Gitflow. Gitflow определяет строгую модель ветвления, разработанную вокруг релиза проекта. Это обеспечивает надежную основу для управления большими проектами. Она назначает очень специфические роли различным веткам и определяет, как и когда они должны взаимодействовать. В дополнение к функциональным веткам используются отдельные ветки для подготовки, поддержки и записи релизов.
Рабочий процесс Forking. Forking Workflow принципиально отличается от других популярных рабочих процессов Git. Вместо того чтобы использовать единый серверный репозиторий в качестве “центральной” кодовой базы, он предоставляет каждому разработчику свой серверный репозиторий. Это означает, что каждый участник имеет не один, а два Git-репозитория: частный локальный и публичный серверный. Чаще всего Forking Workflow встречается в публичных проектах с открытым исходным кодом.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Какие различные стратегии ветвления вы знаете?
💬 Кратко:
Централизованный рабочий процесс (Centralized Workflow). Веткой разработки по умолчанию является main, и все изменения фиксируются в этой ветке. Этот рабочий процесс не требует других веток, кроме главной.
Рабочий процесс разветвления функций (Feature Branching Workflow). Основная идея рабочего процесса разветвления функций заключается в том, что разработка всех функций должна вестись в специальной ветке, а не в основной.
Рабочий процесс Gitflow. Gitflow определяет строгую модель ветвления, разработанную вокруг релиза проекта. Это обеспечивает надежную основу для управления большими проектами. Она назначает очень специфические роли различным веткам и определяет, как и когда они должны взаимодействовать. В дополнение к функциональным веткам используются отдельные ветки для подготовки, поддержки и записи релизов.
Рабочий процесс Forking. Forking Workflow принципиально отличается от других популярных рабочих процессов Git. Вместо того чтобы использовать единый серверный репозиторий в качестве “центральной” кодовой базы, он предоставляет каждому разработчику свой серверный репозиторий. Это означает, что каждый участник имеет не один, а два Git-репозитория: частный локальный и публичный серверный. Чаще всего Forking Workflow встречается в публичных проектах с открытым исходным кодом.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
👍1
Forwarded from YeaHub
💼 Как реально подготовиться к собеседованию в IT
Подготовка к собеседованиям в IT — это не только заучивание вопросов, но и работа с системой: понимание того, что реально спрашивают, как повторять материал и как не тратить время впустую.
В этом видео разбираем:
- как готовиться к IT-собеседованиям без хаоса
- какие вопросы чаще всего задают на технических интервью
- как выстроить регулярную подготовку и отслеживать прогресс
- где брать реальные вопросы с собеседований
- как повторять материал эффективно, а не «по кругу»
- какие ресурсы использовать для изучения тем
- как аналитика по вопросам помогает готовиться точнее
Показываю подход к подготовке с использованием YeaHub: база реальных вопросов с собеседований, тренажёр для повторения, статистика по популярным и сложным темам, а также подборка полезных материалов.
Видео будет полезно тем, кто:
- готовится к собеседованиям в IT
- ищет первую работу или планирует смену компании
- устал от бесконечных списков вопросов без структуры
https://yeahub.ru - платформа для подготовки к собесам
https://t.me/yeahub - основной канал
Ссылка на видео: клик
Подготовка к собеседованиям в IT — это не только заучивание вопросов, но и работа с системой: понимание того, что реально спрашивают, как повторять материал и как не тратить время впустую.
В этом видео разбираем:
- как готовиться к IT-собеседованиям без хаоса
- какие вопросы чаще всего задают на технических интервью
- как выстроить регулярную подготовку и отслеживать прогресс
- где брать реальные вопросы с собеседований
- как повторять материал эффективно, а не «по кругу»
- какие ресурсы использовать для изучения тем
- как аналитика по вопросам помогает готовиться точнее
Показываю подход к подготовке с использованием YeaHub: база реальных вопросов с собеседований, тренажёр для повторения, статистика по популярным и сложным темам, а также подборка полезных материалов.
Видео будет полезно тем, кто:
- готовится к собеседованиям в IT
- ищет первую работу или планирует смену компании
- устал от бесконечных списков вопросов без структуры
https://yeahub.ru - платформа для подготовки к собесам
https://t.me/yeahub - основной канал
Ссылка на видео: клик
👍1
#repository #godotengine
📚 Godot Engine
Официальный исходный код открытого кросс‑платформенного игрового движка Godot. Это полноценная среда для разработки 2D‑ и 3D‑игр, включающая редактор, скриптовый язык GDScript (похожий на Python), систему сцен и узлов, инструменты анимации, физику и рендеринг. Репозиторий содержит всю кодовую базу движка, документацию, примеры, а также систему отслеживания задач и обсуждений. Подходит как для изучения архитектуры движка, так и для внесения собственных изменений, создания плагинов или сборки кастомных версий.
Перейти к материалу
👉 База вопросов 👉 Новости
📚 Godot Engine
Официальный исходный код открытого кросс‑платформенного игрового движка Godot. Это полноценная среда для разработки 2D‑ и 3D‑игр, включающая редактор, скриптовый язык GDScript (похожий на Python), систему сцен и узлов, инструменты анимации, физику и рендеринг. Репозиторий содержит всю кодовую базу движка, документацию, примеры, а также систему отслеживания задач и обсуждений. Подходит как для изучения архитектуры движка, так и для внесения собственных изменений, создания плагинов или сборки кастомных версий.
Перейти к материалу
👉 База вопросов 👉 Новости
❤1👎1
#Собес #input #touch #accelerometer
🤔 Как бы вы обработали функциональность, специфичную для устройства, такую как сенсорный ввод или данные акселерометра, в Unity?
💬 Кратко:
В Unity для работы с устройственными особенностями, такими как сенсорный ввод или данные акселерометра, используется класс Input. Для сенсорного ввода применяются Input.touchCount и Input.GetTouch, чтобы получить количество касаний и информацию о каждом касании. Для данных акселерометра используется Input.acceleration, который возвращает вектор, представляющий ускорение по трем осям устройства. Рекомендуется абстрагировать эти данные через интерфейсы, чтобы легко адаптировать код под разные устройства.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Как бы вы обработали функциональность, специфичную для устройства, такую как сенсорный ввод или данные акселерометра, в Unity?
💬 Кратко:
В Unity для работы с устройственными особенностями, такими как сенсорный ввод или данные акселерометра, используется класс Input. Для сенсорного ввода применяются Input.touchCount и Input.GetTouch, чтобы получить количество касаний и информацию о каждом касании. Для данных акселерометра используется Input.acceleration, который возвращает вектор, представляющий ускорение по трем осям устройства. Рекомендуется абстрагировать эти данные через интерфейсы, чтобы легко адаптировать код под разные устройства.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
👍1
Forwarded from YeaHub
Дорогие айтишники, коллеги, друзья!
2025 год был непростым: рынок был медленным и непредсказуемым, вакансий было мало, конкуренция высокая. Но мы все это пережили — и получили важный урок: лучшее время действовать — сейчас.
На горизонте 2026 года есть позитивные сигналы:
— Ключевая ставка снижается, найм постепенно размораживается.
— Оптимизации и сокращения будут уходить в прошлое.
— Рынок станет более прозрачным и предсказуемым, но конкуренция останется высокой.
Что это значит для нас с вами:
— Адаптация и постоянное развитие становятся ключом к успеху.
— Тесты, резюме, навыки и нетворкинг — важнее, чем когда-либо.
YeaHub в 2026 году будет помогать вам побеждать рынок:
— 100+ новых собеседований уже в январе, с регулярным добавлением новых.
— Сервис лайвкодинга — решайте реальные задачи с собеседований.
— Новые сервисы и продукты: тесты с вариантами ответов, статьи, роадмапы и курсы.
К команде YeaHub присоединились новые бекендеры, аналитики, а также AQA и QA-специалисты. Мы выходим из бета-режима, выстроили основные процессы разработки и контроля качества и теперь фокусируемся на стабильности, масштабировании и высоком качестве платформы.
Поддержите нас и зафиксируйте текущие тарифы:
— Новые выгодные тарифы на 3 и 12 месяцев уже доступны.
— Цены вырастут в 2 раза к запуску лайвкодинга — зафиксируйте их заранее.
👉 Членство YeaHub
Вместе мы будем действовать, готовиться и побеждать рынок. Каждый ваш выбор, каждая подписка — это поддержка YeaHub и возможность создавать ещё больше полезного контента и сервисов для вашей подготовки.
Всем офферов ✊🏻
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #csharp #delegate #unity
🤔 Senior Game разработчик в компанию Awem Games
Техническое собеседование. Весна 2024. Большое количество вопросов по процессам, работе в команде, опыту.
💬 Вопросы:
- В чем разница между структурой и классом в C++?
- Что такое индексаторы (Indexers) в C#?
- Что такое расширяющие методы (Extension Methods) в C#?
- Что такое рефлексия (Reflection) в C#?
- Что такое многопоточное программирование в .NET?
👉 Все вопросы из этого собеседования (27)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
🤔 Senior Game разработчик в компанию Awem Games
Техническое собеседование. Весна 2024. Большое количество вопросов по процессам, работе в команде, опыту.
💬 Вопросы:
- В чем разница между структурой и классом в C++?
- Что такое индексаторы (Indexers) в C#?
- Что такое расширяющие методы (Extension Methods) в C#?
- Что такое рефлексия (Reflection) в C#?
- Что такое многопоточное программирование в .NET?
👉 Все вопросы из этого собеседования (27)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
Что такое Zenject и зачем он нужен?
Zenject - легковесный фреймворк для dependency injection, специально сделанный для Unity, чтобы упростить доставку объектов в нужные части кода.
Для этого Zenject использует контейнер (он же DiContainer). Это объект, который хранит все биндинги, создаёт объекты (при желании) и предоставляет одну и ту же зависимость в разные места.
Для того, чтобы настроить Zenject используется Context. Это ассет, который преднастраивает контейнер, зависимости которого интегрируются в Unity.
Контекст бывает двух видов:
- SceneContext - для зависимостей контекста сцены.
- ProjectContext - для глобальных зависимостей.
Сам биндинг зависимостей происходит в классе, который наследуется от Installer и MonoInstaller. Мы переопределяем метод InstallBindings и прописываем условия внедрения зависимостей. InstallBindings - это место, где стоится граф зависимостей. По сути, он является нашим Composite Root.
После настройки биндингов, мы можем спокойно получить зависимость. Например, как получить этот биндинг:
Использовать атрибут [Inject].
Таким образом, просто указав интерфейс и его реализацию, у нас прокидывается нужная зависимость. И не нужно использовать сложные шаблоны проектирования, всё работает под капотом.
Детально про возможности Zenject можно прочитать в официальной документации. Она довольно понятным языком описывает все возможности Zenject, в том числе и за пределами биндинга (фабрики, пулы, сигналы, код которых указан выше). Но я предпочитаю использовать только DI, чтобы не сильно зависеть от этого фреймворка.
Ссылка на документацию: https://github.com/modesttree/Zenject
🚀 Пост Guru Unity: @Minerope
Zenject - легковесный фреймворк для dependency injection, специально сделанный для Unity, чтобы упростить доставку объектов в нужные части кода.
Для этого Zenject использует контейнер (он же DiContainer). Это объект, который хранит все биндинги, создаёт объекты (при желании) и предоставляет одну и ту же зависимость в разные места.
Для того, чтобы настроить Zenject используется Context. Это ассет, который преднастраивает контейнер, зависимости которого интегрируются в Unity.
Контекст бывает двух видов:
- SceneContext - для зависимостей контекста сцены.
- ProjectContext - для глобальных зависимостей.
Сам биндинг зависимостей происходит в классе, который наследуется от Installer и MonoInstaller. Мы переопределяем метод InstallBindings и прописываем условия внедрения зависимостей. InstallBindings - это место, где стоится граф зависимостей. По сути, он является нашим Composite Root.
using UnityEngine;
using Zenject;
public class GameInstaller : MonoInstaller
{
public GameObject enemyPrefab;
public SomeComponent sceneComponent;
public override void InstallBindings()
{
// привязать интерфейс к реализации как синглтон
Container.Bind<IGameService>().To<GameService>().AsSingle();
// привязать конкретный инстанс (например, инспекторный компонент)
Container.BindInstance(sceneComponent).AsSingle();
// фабрика для создания врагов из префаба
Container.BindFactory<Enemy, Enemy.Factory>()
.FromComponentInNewPrefab(enemyPrefab);
// пул для часто создаваемых объектов (с использованием poolable API)
Container.BindMemoryPool<Bullet, Bullet.Pool>()
.WithInitialSize(20)
.FromComponentInNewPrefab(bulletPrefab);
}
}
После настройки биндингов, мы можем спокойно получить зависимость. Например, как получить этот биндинг:
Container.Bind<IGameService>().To<GameService>().AsSingle();
Использовать атрибут [Inject].
using UnityEngine;
using Zenject;
public class GameView : MonoBehaviour
{
private IGameService _gameService;
[Inject]
public void Construct(IGameService gameService)
{
_gameService = gameService;
}
private void Start()
{
_gameService.StartGame();
}
}
Таким образом, просто указав интерфейс и его реализацию, у нас прокидывается нужная зависимость. И не нужно использовать сложные шаблоны проектирования, всё работает под капотом.
Детально про возможности Zenject можно прочитать в официальной документации. Она довольно понятным языком описывает все возможности Zenject, в том числе и за пределами биндинга (фабрики, пулы, сигналы, код которых указан выше). Но я предпочитаю использовать только DI, чтобы не сильно зависеть от этого фреймворка.
Ссылка на документацию: https://github.com/modesttree/Zenject
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#Собес #gitflow
🤔 Какие различные стратегии ветвления вы знаете?
💬 Кратко:
Централизованный рабочий процесс (Centralized Workflow). Веткой разработки по умолчанию является main, и все изменения фиксируются в этой ветке. Этот рабочий процесс не требует других веток, кроме главной.
Рабочий процесс разветвления функций (Feature Branching Workflow). Основная идея рабочего процесса разветвления функций заключается в том, что разработка всех функций должна вестись в специальной ветке, а не в основной.
Рабочий процесс Gitflow. Gitflow определяет строгую модель ветвления, разработанную вокруг релиза проекта. Это обеспечивает надежную основу для управления большими проектами. Она назначает очень специфические роли различным веткам и определяет, как и когда они должны взаимодействовать. В дополнение к функциональным веткам используются отдельные ветки для подготовки, поддержки и записи релизов.
Рабочий процесс Forking. Forking Workflow принципиально отличается от других популярных рабочих процессов Git. Вместо того чтобы использовать единый серверный репозиторий в качестве “центральной” кодовой базы, он предоставляет каждому разработчику свой серверный репозиторий. Это означает, что каждый участник имеет не один, а два Git-репозитория: частный локальный и публичный серверный. Чаще всего Forking Workflow встречается в публичных проектах с открытым исходным кодом.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Какие различные стратегии ветвления вы знаете?
💬 Кратко:
Централизованный рабочий процесс (Centralized Workflow). Веткой разработки по умолчанию является main, и все изменения фиксируются в этой ветке. Этот рабочий процесс не требует других веток, кроме главной.
Рабочий процесс разветвления функций (Feature Branching Workflow). Основная идея рабочего процесса разветвления функций заключается в том, что разработка всех функций должна вестись в специальной ветке, а не в основной.
Рабочий процесс Gitflow. Gitflow определяет строгую модель ветвления, разработанную вокруг релиза проекта. Это обеспечивает надежную основу для управления большими проектами. Она назначает очень специфические роли различным веткам и определяет, как и когда они должны взаимодействовать. В дополнение к функциональным веткам используются отдельные ветки для подготовки, поддержки и записи релизов.
Рабочий процесс Forking. Forking Workflow принципиально отличается от других популярных рабочих процессов Git. Вместо того чтобы использовать единый серверный репозиторий в качестве “центральной” кодовой базы, он предоставляет каждому разработчику свой серверный репозиторий. Это означает, что каждый участник имеет не один, а два Git-репозитория: частный локальный и публичный серверный. Чаще всего Forking Workflow встречается в публичных проектах с открытым исходным кодом.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#video #unity
📚 FREE Complete Unity Game Development Courses
Полный бесплатный курс по разработке игр на Unity — от базовых уроков для начинающих до продвинутых тем, охватывающий основы интерфейса, C#-скрипты, 2D/3D-разработку и практические проекты, чтобы помочь вам освоить Unity и создать собственные игры шаг за шагом
Перейти к материалу
👉 База вопросов 👉 Новости
📚 FREE Complete Unity Game Development Courses
Полный бесплатный курс по разработке игр на Unity — от базовых уроков для начинающих до продвинутых тем, охватывающий основы интерфейса, C#-скрипты, 2D/3D-разработку и практические проекты, чтобы помочь вам освоить Unity и создать собственные игры шаг за шагом
Перейти к материалу
👉 База вопросов 👉 Новости
👍1
#Собес #jit_compiler #clr #intermediate_language
🤔 Расскажи про JIT-компиляцию
💬 Кратко:
Компилятор JIT (Just-In-Time) в .NET отвечает за преобразование промежуточного кода (IL) в машинный код, который специфичен для операционной системы и процессора, на котором выполняется программа. Он работает в момент выполнения приложения, что позволяет повысить эффективность использования ресурсов.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Расскажи про JIT-компиляцию
💬 Кратко:
Компилятор JIT (Just-In-Time) в .NET отвечает за преобразование промежуточного кода (IL) в машинный код, который специфичен для операционной системы и процессора, на котором выполняется программа. Он работает в момент выполнения приложения, что позволяет повысить эффективность использования ресурсов.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Что такое реактивное программирование и причём здесь R3?
Реактивное программирование - это парадигма, в котором вместо того, чтобы напрямую связывать объекты, мы реагируем на изменения и уведомляем объекты о них. Объекты в свою очередь сами решают, что с этой информацией делать. Уведомление происходит с помощью потока событий. Сам поток событий представляет из себя некоторый менеджер событий, на который можно подписаться и отписаться.
Пример. У нас есть здоровье персонажа. Где оно хранится? Например, у Player, который при нанесении урона его дёргает и меняет его стейт.
В реактивном программировании, вместо того, чтобы хранить здоровье и дёргать его каждый раз, мы отправляем уведомление в поток событий, который уже в свою очередь уведомляет здоровье о том, что ему был нанесён урон. Таким образом, теперь Player и Health не связаны напрямую. Изменения происходят через поток событий.
Если вы посмотрите на свой ООПшный код, то вы возможно увидите, что множество действий у вас происходит в рантайме и на них необходима реакция. У вас есть объект, который получает ссылку на другой объект для подписки. Этого можно избежать, передавая потоки событий вместо самих объектов. Таким образом, мы отказываемся от прямого контроля в пользу обмена данных через потоки событий.
R3 - это фреймворк для юнити, который был создан для упрощения внедрения реактивного программирования в ваш код.
Для это используются:
ReactiveProperty<T> - это свойство, за которым непосредственно ведётся наблюдение. Если его значение изменилось - об этом отправляется уведомление.
Observable<T> - это абстракция потока событий.
Он сам по себе ничего не хранит, а лишь сообщает: «произошло событие - вот данные».
На Observable можно подписаться, применить к нему операторы (фильтрация, трансформация, объединение потоков) и в итоге получить реакцию в нужном месте кода.
Простой пример:
Здесь:
• EveryUpdate() - поток событий, который срабатывает каждый кадр
• Where - фильтрация
• Subscribe - реакция
Никаких Update, флагов и проверок по всему коду.
Чем R3 отличается от простых ивентов?
На первый взгляд кажется что реактивность не отличается от ивентов, просто другой синтаксис.
Но ключевое отличие - композиция и управление жизненным циклом.
С реактивщиной вы можете легко:
• объединять потоки
• трансформировать данные
• ограничивать частоту событий
• отменять цепочки событий
Например обработать событие когда hp стало 0, но только один раз:
Без R3 такой код будет намного длиннее и грязнее.
Контроль жизненного цикла - R3 умеет автоматически отписываться от событий вместе с GameObject:
GameObject уничтожился - подписка тоже. Без утечек и забытых отписок.
Когда R3 реально удобен?
• UI (биндинги, состояния, реакция на данные)
• игровые состояния (HP, статы, бафы, дебафы)
• ввод (Input, тайминги, кулдауны)
• асинхронщину и цепочки событий
То есть там, где:
• много изменений во времени
• много зависимых реакций
• хочется меньше связности
Итог
R3 - это инструмент, который:
• снижает связность
• упрощает работу с событиями
• делает код декларативным
• заставляет думать потоками, а не состояниями
Если сказать просто - то это как LINQ в C#. Вы можете фильтровать коллекции самостоятельно, написав огромные циклы for. Но вам предоставлен инструмент с готовыми методами, который позволяет писать более декларативно, писать "что именно нужно сделать", а не "как сделать то, что нужно".
Ссылка на репозиторий R3 с документацией и инструкцией по установке
🚀 Пост Guru Unity: @Minerope
Реактивное программирование - это парадигма, в котором вместо того, чтобы напрямую связывать объекты, мы реагируем на изменения и уведомляем объекты о них. Объекты в свою очередь сами решают, что с этой информацией делать. Уведомление происходит с помощью потока событий. Сам поток событий представляет из себя некоторый менеджер событий, на который можно подписаться и отписаться.
Пример. У нас есть здоровье персонажа. Где оно хранится? Например, у Player, который при нанесении урона его дёргает и меняет его стейт.
В реактивном программировании, вместо того, чтобы хранить здоровье и дёргать его каждый раз, мы отправляем уведомление в поток событий, который уже в свою очередь уведомляет здоровье о том, что ему был нанесён урон. Таким образом, теперь Player и Health не связаны напрямую. Изменения происходят через поток событий.
Если вы посмотрите на свой ООПшный код, то вы возможно увидите, что множество действий у вас происходит в рантайме и на них необходима реакция. У вас есть объект, который получает ссылку на другой объект для подписки. Этого можно избежать, передавая потоки событий вместо самих объектов. Таким образом, мы отказываемся от прямого контроля в пользу обмена данных через потоки событий.
R3 - это фреймворк для юнити, который был создан для упрощения внедрения реактивного программирования в ваш код.
Для это используются:
ReactiveProperty<T> - это свойство, за которым непосредственно ведётся наблюдение. Если его значение изменилось - об этом отправляется уведомление.
var health = new ReactiveProperty<int>(100);
health.Subscribe(value => Debug.Log($"HP: {value}")); // логика, которая будет происходить при изменении
health.Value -= 10; // автоматически уведомит подписчиков
Observable<T> - это абстракция потока событий.
Он сам по себе ничего не хранит, а лишь сообщает: «произошло событие - вот данные».
На Observable можно подписаться, применить к нему операторы (фильтрация, трансформация, объединение потоков) и в итоге получить реакцию в нужном месте кода.
Простой пример:
Observable.EveryUpdate()
.Where(_ => Input.GetKeyDown(KeyCode.Space))
.Subscribe(_ => Jump());
Здесь:
• EveryUpdate() - поток событий, который срабатывает каждый кадр
• Where - фильтрация
• Subscribe - реакция
Никаких Update, флагов и проверок по всему коду.
Чем R3 отличается от простых ивентов?
На первый взгляд кажется что реактивность не отличается от ивентов, просто другой синтаксис.
Но ключевое отличие - композиция и управление жизненным циклом.
С реактивщиной вы можете легко:
• объединять потоки
• трансформировать данные
• ограничивать частоту событий
• отменять цепочки событий
Например обработать событие когда hp стало 0, но только один раз:
health
.Where(hp => hp <= 0)
.Take(1)
.Subscribe(_ => Die());
Без R3 такой код будет намного длиннее и грязнее.
Контроль жизненного цикла - R3 умеет автоматически отписываться от событий вместе с GameObject:
health
.Subscribe(_ => HandleHalthChange())
.AddTo(this);
GameObject уничтожился - подписка тоже. Без утечек и забытых отписок.
Когда R3 реально удобен?
• UI (биндинги, состояния, реакция на данные)
• игровые состояния (HP, статы, бафы, дебафы)
• ввод (Input, тайминги, кулдауны)
• асинхронщину и цепочки событий
То есть там, где:
• много изменений во времени
• много зависимых реакций
• хочется меньше связности
Итог
R3 - это инструмент, который:
• снижает связность
• упрощает работу с событиями
• делает код декларативным
• заставляет думать потоками, а не состояниями
Если сказать просто - то это как LINQ в C#. Вы можете фильтровать коллекции самостоятельно, написав огромные циклы for. Но вам предоставлен инструмент с готовыми методами, который позволяет писать более декларативно, писать "что именно нужно сделать", а не "как сделать то, что нужно".
Ссылка на репозиторий R3 с документацией и инструкцией по установке
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
#Собес #dependency #injection #vcontainer
🤔 Senior Game Developer в компанию Топ хаус
Техническое собеседование. год 2025. Вилка 2500-3500$ . Дата: Октябрь 2025
💬 Вопросы:
- Расскажите про принципы SOLID: SRP, OCP, LSP, ISP, DIP и примеры их применения на практике.
- Если использовать Addressables, как выгрузить ассет из памяти?
- Какие ещё задачи решают Addressables, помимо загрузки/выгрузки?
- Где применим паттерн MVC (или MV-паттерны в целом)?
- Расскажи про использование async await.
👉 Все вопросы из этого собеседования (54)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
🤔 Senior Game Developer в компанию Топ хаус
Техническое собеседование. год 2025. Вилка 2500-3500$ . Дата: Октябрь 2025
💬 Вопросы:
- Расскажите про принципы SOLID: SRP, OCP, LSP, ISP, DIP и примеры их применения на практике.
- Если использовать Addressables, как выгрузить ассет из памяти?
- Какие ещё задачи решают Addressables, помимо загрузки/выгрузки?
- Где применим паттерн MVC (или MV-паттерны в целом)?
- Расскажи про использование async await.
👉 Все вопросы из этого собеседования (54)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
#Собес #backend #rest #api
🤔 Есть ли опыт взаимодействия с backend-разработкой или backend-фреймворками?
💬 Кратко:
Опыт взаимодействия с backend включает работу с REST API, WebSocket-соединениями, системами авторизации, хранением данных, матчмейкингом и сервисами аналитики. Используются фреймворки типа Node.js, Python FastAPI, Go, Java Spring, а также игровые сервисы вроде PlayFab или Firebase. Разработчик должен уметь отправлять запросы, подписываться на события, работать с токенами и понимать архитектуру клиент–backend–game server.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Есть ли опыт взаимодействия с backend-разработкой или backend-фреймворками?
💬 Кратко:
Опыт взаимодействия с backend включает работу с REST API, WebSocket-соединениями, системами авторизации, хранением данных, матчмейкингом и сервисами аналитики. Используются фреймворки типа Node.js, Python FastAPI, Go, Java Spring, а также игровые сервисы вроде PlayFab или Firebase. Разработчик должен уметь отправлять запросы, подписываться на события, работать с токенами и понимать архитектуру клиент–backend–game server.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#trainer #печать
📚 Тренируем печать
Быстро печатать — не просто приятно, а выгодно. Когда пальцы успевают за мыслью, код льётся плавно.
Перейти к материалу
👉 База вопросов 👉 Новости
📚 Тренируем печать
Быстро печатать — не просто приятно, а выгодно. Когда пальцы успевают за мыслью, код льётся плавно.
Перейти к материалу
👉 База вопросов 👉 Новости
🐳1
#Собес #singleton #c#
🤔 Как реализовать паттерн Singleton в C#?
💬 Кратко:
В C# можно реализовать паттерн Singleton несколькими способами, включая:
- Не потокобезопасный Singleton.
- Потокобезопасный Singleton.
- Потокобезопасный Singleton с двойной проверкой блокировки.
- Singleton без блокировки.
- Использование типа
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Как реализовать паттерн Singleton в C#?
💬 Кратко:
В C# можно реализовать паттерн Singleton несколькими способами, включая:
- Не потокобезопасный Singleton.
- Потокобезопасный Singleton.
- Потокобезопасный Singleton с двойной проверкой блокировки.
- Singleton без блокировки.
- Использование типа
Lazy<T> из .NET 4.0 для ленивой инициализации.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Разбор вопроса с собеседований "Как работает Garbage Collector?"
Частый вопросы - и довольно стандартный ответ "Он проверяет, ссылается ли что-то на объект. Если нет, то ставит в очередь на удаление".
Но есть более каверзный вопрос, который в последнее время спрашивают довольно часто "Если у нас есть объект A, который ссылается на объект B и объект B, который ссылается на объект A - удалит ли GC эти объекты?".
Казалось бы, всё очевидно. Если GC действительно работает исключительно по ссылкам, то при такой циклической зависимости, у нас объекты не удалятся.
Оказывается нет, потому что GC работает не только по ссылкам, но и по корням.
Корни - это точки входа для поиска живых объектов: локальные переменные в стеке, регистры, статические поля, GC-handle’ы и т.п. GC начинает обход именно от этих корней и идёт по outgoing ссылкам (от объекта к тем, на кого он ссылается). Если никакой корень не ведёт к группе объектов, то эта группа останется не посещённой и будет считаться мусором - даже если внутри группы объекты сильно ссылаются друг на друга.
Раскроем детальнее, что такое outgoing и incoming ссылки.
Outgoing ссылки - это ссылки, которые объект хранит в своих полях/элементах массива и которыми он указывает на другие объекты.
Пример:
Incoming ссылки - это ссылки на сам объект, которые хранят другие объекты или корни.
Пример:
Корни - это набор входных точек в граф объектов (локальные переменные, регистры, статические поля, GC-handles, очередь финализаторов и т.д.). GC начинает обход от этих точек и помечает всё достижимое. То, до чего не дошёл - считается недостижимым и может быть собран.
GC начинает с корней и идёт по outgoing ссылкам: он посещает объект, смотрит его поля (outgoing) и переходит к объектам, на которые они указывают. GC не перебирает incoming ссылки напрямую - он просто обнаружит incoming, когда придёт по outgoing ссылке от некоторого уже помеченного объекта.
Поэтому зацикл A и B (A.Outgoing -> B и B.Outgoing -> A) без корней останется непомеченным: у GC нет входной точки, чтобы пойти по outgoing к этим объектам.
Таким образом, ответ - да. GC соберёт эти объекты.
🚀 Пост Guru Unity: @Minerope
Частый вопросы - и довольно стандартный ответ "Он проверяет, ссылается ли что-то на объект. Если нет, то ставит в очередь на удаление".
Но есть более каверзный вопрос, который в последнее время спрашивают довольно часто "Если у нас есть объект A, который ссылается на объект B и объект B, который ссылается на объект A - удалит ли GC эти объекты?".
Казалось бы, всё очевидно. Если GC действительно работает исключительно по ссылкам, то при такой циклической зависимости, у нас объекты не удалятся.
Оказывается нет, потому что GC работает не только по ссылкам, но и по корням.
Корни - это точки входа для поиска живых объектов: локальные переменные в стеке, регистры, статические поля, GC-handle’ы и т.п. GC начинает обход именно от этих корней и идёт по outgoing ссылкам (от объекта к тем, на кого он ссылается). Если никакой корень не ведёт к группе объектов, то эта группа останется не посещённой и будет считаться мусором - даже если внутри группы объекты сильно ссылаются друг на друга.
Раскроем детальнее, что такое outgoing и incoming ссылки.
Outgoing ссылки - это ссылки, которые объект хранит в своих полях/элементах массива и которыми он указывает на другие объекты.
Пример:
class Node { public Node Other; public string Name; }
var a = new Node();
var b = new Node();
a.Other = b; // это outgoing ссылка из a на b
a.Name = "A"; // это поле - не ссылка (если бы Name был object/классом, это был бы outgoing)Incoming ссылки - это ссылки на сам объект, которые хранят другие объекты или корни.
Пример:
class Owner { public Target T; }
class Target { }
var owner = new Owner();
var t = new Target();
owner.T = t; // здесь owner.T - incoming ссылка для объекта tКорни - это набор входных точек в граф объектов (локальные переменные, регистры, статические поля, GC-handles, очередь финализаторов и т.д.). GC начинает обход от этих точек и помечает всё достижимое. То, до чего не дошёл - считается недостижимым и может быть собран.
GC начинает с корней и идёт по outgoing ссылкам: он посещает объект, смотрит его поля (outgoing) и переходит к объектам, на которые они указывают. GC не перебирает incoming ссылки напрямую - он просто обнаружит incoming, когда придёт по outgoing ссылке от некоторого уже помеченного объекта.
Поэтому зацикл A и B (A.Outgoing -> B и B.Outgoing -> A) без корней останется непомеченным: у GC нет входной точки, чтобы пойти по outgoing к этим объектам.
Таким образом, ответ - да. GC соберёт эти объекты.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#Собес #optimization #atlas #ui
🤔 Senior + GameDev в X-Flow
Тех.собес. вилка: 3500-4000$. Дата: Июнь 2024
💬 Вопросы:
- Что такое протокол HTTPS?
- Напишите Blueprint для создания простого UI, отображающего здоровье игрока
- Что такое корутины в Unity и когда их использовать?
- Как бы вы реализовали систему UI, независимую от разрешения и соотношения сторон?
- Использовал ли ECS? Если да, то для каких задач?
👉 Все вопросы из этого собеседования (16)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
🤔 Senior + GameDev в X-Flow
Тех.собес. вилка: 3500-4000$. Дата: Июнь 2024
💬 Вопросы:
- Что такое протокол HTTPS?
- Напишите Blueprint для создания простого UI, отображающего здоровье игрока
- Что такое корутины в Unity и когда их использовать?
- Как бы вы реализовали систему UI, независимую от разрешения и соотношения сторон?
- Использовал ли ECS? Если да, то для каких задач?
👉 Все вопросы из этого собеседования (16)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
#Собес #network_layer #datalink_layer #physical_layer
🤔 Назовите аппаратные уровни или уровни поддержки сети в модели OSI.
💬 Кратко:
Аппаратные уровни в модели OSI — это физический уровень, канальный уровень и сетевой уровень. Они отвечают за передачу данных по сети, управление доступом к среде и маршрутизацию пакетов.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Назовите аппаратные уровни или уровни поддержки сети в модели OSI.
💬 Кратко:
Аппаратные уровни в модели OSI — это физический уровень, канальный уровень и сетевой уровень. Они отвечают за передачу данных по сети, управление доступом к среде и маршрутизацию пакетов.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#tool #профиль
📚 Awesome GitHub Profile: ваш профессиональный бренд в цифровом мире
Это уникальный инструмент для персонализации вашего GitHub-профиля, который поможет вам создать впечатляющее портфолио и выделиться среди других разработчиков.
Перейти к материалу
👉 База вопросов 👉 Новости
📚 Awesome GitHub Profile: ваш профессиональный бренд в цифровом мире
Это уникальный инструмент для персонализации вашего GitHub-профиля, который поможет вам создать впечатляющее портфолио и выделиться среди других разработчиков.
Перейти к материалу
👉 База вопросов 👉 Новости
Forwarded from YeaHub
Вот подборка инструментов, которые помогут подготовиться к новым победам:
1. YeaHub — учим самые актуальные вопросы, тренируемся и готовимся к собеседованиям.
2. Записи собесов — закрытый чат с более чем 1000+ реальными собеседованиями. Отличный способ посмотреть, что реально спрашивают.
3. Резюме — используем правильные ключевики, чтобы рекрутеры замечали именно вас. Все необходимые ключи можно найти.
4. Менторство — ищем наставника, который поможет с подготовкой и стратегией выхода на рынок.
Новый год — новые возможности, новый сезон, новые победы!
Всем офферов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM