#Собес #github
🤔 Что такое Git и GitHub?
💬 Кратко:
Git — это система контроля версий, которая позволяет отслеживать изменения в коде, возвращаться к старым версиям и работать над проектом совместно с другими разработчиками. GitHub — это платформа, где можно хранить код в облаке, делиться им и управлять проектами с помощью Git. Вместе они помогают эффективно работать над проектом в команде.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Что такое Git и GitHub?
💬 Кратко:
Git — это система контроля версий, которая позволяет отслеживать изменения в коде, возвращаться к старым версиям и работать над проектом совместно с другими разработчиками. GitHub — это платформа, где можно хранить код в облаке, делиться им и управлять проектами с помощью Git. Вместе они помогают эффективно работать над проектом в команде.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#Собес #stream #input #output
🤔 Что такое поток (stream) в C++?
💬 Кратко:
Поток в C++ — это абстракция для операций ввода/вывода, представляющая собой последовательность символов, считываемых или записываемых на устройства, такие как консоль или файл. Потоки, такие как стандартный ввод (cin) и стандартный вывод (cout), позволяют удобно работать с вводом и выводом.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Что такое поток (stream) в C++?
💬 Кратко:
Поток в C++ — это абстракция для операций ввода/вывода, представляющая собой последовательность символов, считываемых или записываемых на устройства, такие как консоль или файл. Потоки, такие как стандартный ввод (cin) и стандартный вывод (cout), позволяют удобно работать с вводом и выводом.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
❤1🐳1
Что такое Draw Call (Batches) и почему они убивают производительность
Когда Unity рисует сцену, она не “стримит картинку”, а отдельно отрисовывает каждый объект.
Перед каждым рендером процессор говорит видеокарте:
Такая команда называется Draw Call.
Если у тебя на сцене 100 объектов - будет 100 Draw Calls.
И каждое обращение CPU → GPU стоит времени.
Почему это проблема
Видеокарта отлично справляется с рендером, но процессор задыхается, когда надо постоянно передавать команды.
Чем больше объектов и материалов - тем выше нагрузка на CPU, и тем ниже FPS.
Как сократить Draw Calls
Согласитесь - было бы эффективнее один раз передать информацию о многих объектах со сцены, а не передавать её маленькими кусочками.
В Unity есть такой механизм. Это называется Batching.
Делится на два вида:
1. Static Batching - для неподвижных объектов.
Если у тебя есть объекты на сцене, которые не будут двигаться (стены, окружение, декор) - отмечай их галочкой Static. Найти её можно в верхнем-правом углу в инспекторе объекта.
Unity объединит их в один большой меш на этапе сборки сцены.
2. Dynamic Batching - для подвижных.
Включается в Edit → Project Settings → Player → Other Settings → Dynamic Batching.
Автоматически будет работать для всех остальных объектов, не попавших в Static Batching. Наиболее эффективен для маленьких объектов.
Главное условие работы batching’а
Объекты должны использовать один и тот же материал.
Если у каждого свой - batching не сработает.
Поэтому, одна из твоих задач - сократить количество используемых материалов.
Конечно, оставить один материал на всю игру невозможно - но это и не требуется.
Как проверить количество Draw Calls
В Game View → Stats смотри строчку Batches.
Это количество вызовов после всех оптимизаций.
Ориентиры, рекомендуемые Unity:
До 200 Draw Call - для мобильных
До 2000 Draw Call - для ПК
Итог
Draw Calls - количество "приказов" от CPU на GPU отрисовать объект.
Меньше приказов = меньше лагов и больше FPS.
Для уменьшения - сокращение количества материалов, использование Static Batching для неподвижных объектов, Dynamic Batching - для подвижных.
🚀 Пост Guru Unity: @Minerope
Когда Unity рисует сцену, она не “стримит картинку”, а отдельно отрисовывает каждый объект.
Перед каждым рендером процессор говорит видеокарте:
“Вот меш, вот материал, вот позиция - рисуй”
Такая команда называется Draw Call.
Если у тебя на сцене 100 объектов - будет 100 Draw Calls.
И каждое обращение CPU → GPU стоит времени.
Почему это проблема
Видеокарта отлично справляется с рендером, но процессор задыхается, когда надо постоянно передавать команды.
Чем больше объектов и материалов - тем выше нагрузка на CPU, и тем ниже FPS.
Как сократить Draw Calls
Согласитесь - было бы эффективнее один раз передать информацию о многих объектах со сцены, а не передавать её маленькими кусочками.
В Unity есть такой механизм. Это называется Batching.
Делится на два вида:
1. Static Batching - для неподвижных объектов.
Если у тебя есть объекты на сцене, которые не будут двигаться (стены, окружение, декор) - отмечай их галочкой Static. Найти её можно в верхнем-правом углу в инспекторе объекта.
Unity объединит их в один большой меш на этапе сборки сцены.
2. Dynamic Batching - для подвижных.
Включается в Edit → Project Settings → Player → Other Settings → Dynamic Batching.
Автоматически будет работать для всех остальных объектов, не попавших в Static Batching. Наиболее эффективен для маленьких объектов.
Главное условие работы batching’а
Объекты должны использовать один и тот же материал.
Если у каждого свой - batching не сработает.
Поэтому, одна из твоих задач - сократить количество используемых материалов.
Конечно, оставить один материал на всю игру невозможно - но это и не требуется.
Как проверить количество Draw Calls
В Game View → Stats смотри строчку Batches.
Это количество вызовов после всех оптимизаций.
Ориентиры, рекомендуемые Unity:
До 200 Draw Call - для мобильных
До 2000 Draw Call - для ПК
Итог
Draw Calls - количество "приказов" от CPU на GPU отрисовать объект.
Меньше приказов = меньше лагов и больше FPS.
Для уменьшения - сокращение количества материалов, использование Static Batching для неподвижных объектов, Dynamic Batching - для подвижных.
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #blueprint #bind #event
🤔 Напишите Blueprint для создания простого UI, отображающего здоровье игрока
💬 Кратко:
Чтобы создать простой UI, отображающий здоровье игрока, создайте новый Widget Blueprint и спроектируйте макет UI с полоской здоровья или текстовым элементом. В Blueprint персонажа добавьте ссылку на Widget Blueprint, создайте его экземпляр и привяжите переменную здоровья к элементу UI для обновления отображения в реальном времени.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Напишите Blueprint для создания простого UI, отображающего здоровье игрока
💬 Кратко:
Чтобы создать простой UI, отображающий здоровье игрока, создайте новый Widget Blueprint и спроектируйте макет UI с полоской здоровья или текстовым элементом. В Blueprint персонажа добавьте ссылку на Widget Blueprint, создайте его экземпляр и привяжите переменную здоровья к элементу UI для обновления отображения в реальном времени.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
❤2
#Собес #git
🤔 Каковы преимущества использования Git?
💬 Кратко:
Git позволяет отслеживать изменения в коде, работать в команде без риска потерять данные, создавать ветки для новых функций, а затем легко объединять их. Это быстрое, надёжное и популярное решение для управления версиями.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Каковы преимущества использования Git?
💬 Кратко:
Git позволяет отслеживать изменения в коде, работать в команде без риска потерять данные, создавать ветки для новых функций, а затем легко объединять их. Это быстрое, надёжное и популярное решение для управления версиями.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
❤1
#book #паттерны
📚 Game Programming Patterns
Бесплатная книга о шаблонах программирования в контексте разработки игр. В каждой главе описывается отдельный шаблон и приводится конкретный пример его использования. Это, пожалуй, основное преимущество книги: она всегда демонстрирует достоинства того или иного шаблона. Автор также указывает ограничения различных шаблонов и рассказывает о том, как они эволюционировали. Все примеры написаны на C++, но они короткие и легко читаются. Еще один плюс данного ресурса – колонка с дополнительными комментариями автора, устраняющими любые пробелы, которые могли быть в оригинальной книге.
Перейти к материалу
👉 База вопросов 👉 Новости
📚 Game Programming Patterns
Бесплатная книга о шаблонах программирования в контексте разработки игр. В каждой главе описывается отдельный шаблон и приводится конкретный пример его использования. Это, пожалуй, основное преимущество книги: она всегда демонстрирует достоинства того или иного шаблона. Автор также указывает ограничения различных шаблонов и рассказывает о том, как они эволюционировали. Все примеры написаны на C++, но они короткие и легко читаются. Еще один плюс данного ресурса – колонка с дополнительными комментариями автора, устраняющими любые пробелы, которые могли быть в оригинальной книге.
Перейти к материалу
👉 База вопросов 👉 Новости
❤1
#Собес #multiple_return_values #references #pointers
🤔 Может ли функция вернуть несколько значений в C++?
💬 Кратко:
Да, функция может вернуть несколько значений, используя ссылки или указатели как параметры, или возвращая кортеж (tuple) или пару (pair).
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Может ли функция вернуть несколько значений в C++?
💬 Кратко:
Да, функция может вернуть несколько значений, используя ссылки или указатели как параметры, или возвращая кортеж (tuple) или пару (pair).
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
❤1
🧹 Сборщик мусора в Unity - как оптимизировать?
Продолжаем тему оптимизаций и сегодня поговорим о сборщике мусора.
Сборщик мусора (GC) - это система, которая освобождает память, когда объект больше не используется.
Проблема в том, что во время сборки мусора игра фризится - GC останавливает всё, чтобы убрать неиспользуемые объекты.
Поэтому, ваша цель - уменьшить количество мусора и управлять сборкой вручную, когда это безопасно.
1️⃣ Включите инкрементальный GC
Unity поддерживает Incremental GC. В таком случае сборка мусора выполняется не целиком, а частями - по кадрам.
Так фризы становятся почти незаметными.
Включается в Project Settings → Player → Other Settings → Configuration → Incremental GC.
2️⃣ Собирайте мусор вручную в удобные моменты
Вместо того, чтобы GC отрабатывал в важные моменты геймплея - можно самому вызвать сборку в визуально простые моменты игры, где фризы экрана будут незаметны.
Обычно это экраны пауз - часто они статичные, или имеют простую анимацию.
Вызов сборки мусора:
3️⃣ Не используйте конкатенацию строк в циклах или Update
Каждая конкатенация строки == новый объект и мусор для сборки. Если цикл состоит из 16 итераций - будет создано 16 строк, что окажет большую нагрузку на GC.
Плохо:
Хорошо:
4️⃣ Кешируйте строки
Типичная ошибка - обновление текста при любом обновлении счётчика или постоянно в Update.
Кешируйте текст и обновляйте только при изменении значения.
Плохо:
Хорошо:
5️⃣ Используйте NonAlloc-версии методов
Многие API в Unity создают мусор: Physics.OverlapSphere, Physics.Raycast и т.д.
Иногда есть версии с суффиксом NonAlloc:
При написании своих методов - следуйте той же идее: не создавайте новые массивы, если можно переиспользовать старые.
💡 Вывод и дополнительные материалы
Оптимизация GC - это не сложно.
Главное - избегать лишних аллокаций и управлять сборкой в удобные моменты.
Чем меньше мусора вы создаёте, тем плавнее идёт игра.
Статья от Unity по оптимизации GC
Профайлинг GC от GameDevGuru
🚀 Пост Guru Unity: @Minerope
Продолжаем тему оптимизаций и сегодня поговорим о сборщике мусора.
Сборщик мусора (GC) - это система, которая освобождает память, когда объект больше не используется.
Проблема в том, что во время сборки мусора игра фризится - GC останавливает всё, чтобы убрать неиспользуемые объекты.
Поэтому, ваша цель - уменьшить количество мусора и управлять сборкой вручную, когда это безопасно.
Unity поддерживает Incremental GC. В таком случае сборка мусора выполняется не целиком, а частями - по кадрам.
Так фризы становятся почти незаметными.
Включается в Project Settings → Player → Other Settings → Configuration → Incremental GC.
Вместо того, чтобы GC отрабатывал в важные моменты геймплея - можно самому вызвать сборку в визуально простые моменты игры, где фризы экрана будут незаметны.
Обычно это экраны пауз - часто они статичные, или имеют простую анимацию.
Вызов сборки мусора:
GC.Collect();
Каждая конкатенация строки == новый объект и мусор для сборки. Если цикл состоит из 16 итераций - будет создано 16 строк, что окажет большую нагрузку на GC.
Плохо:
string ConcatExample(string[] stringArray) {
string result = "";
for (int i = 0; i < stringArray.Length; i++) {
result += stringArray[i]; // каждый раз - новый объект
}
return result;
}Хорошо:
private StringBuilder _sb = new StringBuilder(16);
string ConcatExample(string[] stringArray) {
_sb.Clear();
for (int i = 0; i < stringArray.Length; i++) {
_sb.Append(stringArray[i]); // используем StringBuilder - так создадим только один объект строки
}
return _sb.ToString();
}
Типичная ошибка - обновление текста при любом обновлении счётчика или постоянно в Update.
Кешируйте текст и обновляйте только при изменении значения.
Плохо:
public Text scoreBoard;
public int score;
void Update() {
string scoreText = "Score: " + score.ToString(); // создаём новый объект каждый кадр
scoreBoard.text = scoreText;
}
Хорошо:
public Text scoreBoard;
public string scoreText;
public int score;
public int oldScore;
void Update() {
if (score != oldScore) {
scoreText = "Score: " + score.ToString(); // создаём новые объект, только если значение изменилось
scoreBoard.text = scoreText;
oldScore = score;
}
}
Многие API в Unity создают мусор: Physics.OverlapSphere, Physics.Raycast и т.д.
Иногда есть версии с суффиксом NonAlloc:
Physics.OverlapSphereNonAlloc(position, radius, colliders);
При написании своих методов - следуйте той же идее: не создавайте новые массивы, если можно переиспользовать старые.
Оптимизация GC - это не сложно.
Главное - избегать лишних аллокаций и управлять сборкой в удобные моменты.
Чем меньше мусора вы создаёте, тем плавнее идёт игра.
Статья от Unity по оптимизации GC
Профайлинг GC от GameDevGuru
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1🐳1
#Собес #mvc #cpp #csharp
🤔 Senior Game разработчик в RedRift
Техническое собеседование. Вилка: 3000$-4000$. Были классические вопросы по работе в команде, оптимизациям, Addressables, архитектуре.
💬 Вопросы:
- Какие отличия между C++ и C# бросаются в глаза?
- Где применим паттерн MVC (или MV-паттерны в целом)?
- Если MonoBehaviour удалён, но ассет через Addressables не выгружен — что произойдёт?
- Если использовать Addressables, как выгрузить ассет из памяти?
- В какой момент в Addressables ассеты выгружаются из памяти?
👉 Все вопросы из этого собеседования (16)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
🤔 Senior Game разработчик в RedRift
Техническое собеседование. Вилка: 3000$-4000$. Были классические вопросы по работе в команде, оптимизациям, Addressables, архитектуре.
💬 Вопросы:
- Какие отличия между C++ и C# бросаются в глаза?
- Где применим паттерн MVC (или MV-паттерны в целом)?
- Если MonoBehaviour удалён, но ассет через Addressables не выгружен — что произойдёт?
- Если использовать Addressables, как выгрузить ассет из памяти?
- В какой момент в Addressables ассеты выгружаются из памяти?
👉 Все вопросы из этого собеседования (16)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
❤2
#book #паттерны
📚 Game Programming Patterns
Бесплатная книга о шаблонах программирования в контексте разработки игр. В каждой главе описывается отдельный шаблон и приводится конкретный пример его использования. Это, пожалуй, основное преимущество книги: она всегда демонстрирует достоинства того или иного шаблона. Автор также указывает ограничения различных шаблонов и рассказывает о том, как они эволюционировали. Все примеры написаны на C++, но они короткие и легко читаются. Еще один плюс данного ресурса – колонка с дополнительными комментариями автора, устраняющими любые пробелы, которые могли быть в оригинальной книге.
Перейти к материалу
👉 База вопросов 👉 Новости
📚 Game Programming Patterns
Бесплатная книга о шаблонах программирования в контексте разработки игр. В каждой главе описывается отдельный шаблон и приводится конкретный пример его использования. Это, пожалуй, основное преимущество книги: она всегда демонстрирует достоинства того или иного шаблона. Автор также указывает ограничения различных шаблонов и рассказывает о том, как они эволюционировали. Все примеры написаны на C++, но они короткие и легко читаются. Еще один плюс данного ресурса – колонка с дополнительными комментариями автора, устраняющими любые пробелы, которые могли быть в оригинальной книге.
Перейти к материалу
👉 База вопросов 👉 Новости
❤3
#Собес #unity #addressables #content_management
🤔 Какие ещё задачи решают Addressables, помимо загрузки/выгрузки?
💬 Кратко:
Addressables решает задачи: управления зависимостями ассетов, обновления контента без перевыпуска приложения, организации контента по платформам, анализа использования ресурсов, и создания DLC/дополнительного контента. Это комплексная система управления контентом.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Какие ещё задачи решают Addressables, помимо загрузки/выгрузки?
💬 Кратко:
Addressables решает задачи: управления зависимостями ассетов, обновления контента без перевыпуска приложения, организации контента по платформам, анализа использования ресурсов, и создания DLC/дополнительного контента. Это комплексная система управления контентом.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
❤3
#Собес #assetbundle #manifest #loadasset
🤔 Как организовать использование ассетов в Unity для большого проекта?
💬 Кратко:
Для большого проекта в Unity нужно использовать AssetBundles для организации и загрузки ассетов. Сначала создается манифест для управления зависимостями, затем ассеты группируются в логичные пакеты. Для загрузки можно использовать методы LoadAsset с асинхронной загрузкой. Также важно использовать сжатие для оптимизации.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Как организовать использование ассетов в Unity для большого проекта?
💬 Кратко:
Для большого проекта в Unity нужно использовать AssetBundles для организации и загрузки ассетов. Сначала создается манифест для управления зависимостями, затем ассеты группируются в логичные пакеты. Для загрузки можно использовать методы LoadAsset с асинхронной загрузкой. Также важно использовать сжатие для оптимизации.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#Собес #structure #oop #class
🤔 В чем разница между структурой и классом в C#?
💬 Кратко:
Класс и структура в C# похожи, но имеют ключевые различия. Класс — это ссылка на объект, а структура — это значение. Классы обычно используются для более сложных объектов, а структуры — для небольших, легких объектов.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 В чем разница между структурой и классом в C#?
💬 Кратко:
Класс и структура в C# похожи, но имеют ключевые различия. Класс — это ссылка на объект, а структура — это значение. Классы обычно используются для более сложных объектов, а структуры — для небольших, легких объектов.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#Собес #git_clone
🤔 Что делает Git-клон?
💬 Кратко:
Команда
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Что делает Git-клон?
💬 Кратко:
Команда
git clone создаёт копию существующего репозитория, включая всю историю изменений, файлы и ветки. Это используется, чтобы начать работу с проектом, который уже находится в удалённом репозитории.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Как проходит типичное техническое собеседование Unity-разработчика
Привет! За свою карьеру я прошёл более 15 собеседований, и сейчас расскажу про наиболее частую структуру.
1. Самопрезентация
После короткого смолтока вас попросят рассказать о себе.
Это не просто формальность - по вашему рассказу формируется первое впечатление.
Расскажите:
• над какими проектами работали
• за что отвечали
• какие задачи решали и чем гордитесь
Совет: запишите рассказ на аудио и послушайте. Поймёт ли человек, который впервые вас видит, чем вы занимались и в чём ваша ценность? Можно отправить запись другу для проверки.
После этого интервьюер может уточнить детали из резюме или спросить о вещах, которые вы не упомянули.
2. Технический блок
Здесь проверяют ваши знания по C# и Unity. Список тем зависит от компании, но чаще всего спрашивают:
1. Устройство памяти в C#. Отличия поведения ссылочных и значимых типов.
2. Garbage Collector - что это такое, как работает.
3. Отличия классов и структур. Ограничения структур. Boxing & Unboxing.
4. Коллекции и алгоритмы. Как "под капотом" работают стандартные коллекции, оценка сложности (Big O) операций с этими коллекциями (добавление, удаление, обращение). Могут затронуть популярные алгоритмы сортировки и обхода графа.
5. Асинхронность и многопоточность в C#
6. Блок Unity. Спрашивают что-то из перечисленного: Addressables / Оптимизации / Шейдеры и графический пайплайн / Сборка билда / Клиент-серверное взаимодействие / Unit тесты / Полезный стек - UniTask, Zenject, R3
Подсказка: читайте описание вакансии - по нему можно понять, на чём будет акцент.
3. Вопросы по процессам
В этом блоке собеседующие проверят ваши софт скиллы, используя вопросы о вашем поведении в команде.
Примеры вопросов:
• Как проводите code review?
• Как оцениваете время на выполнение задач?
• Что делаете, если ТЗ неполное?
• Как решаете конфликты?
• Что вас мотивирует в работе?
• Что делаете, если не успеваете в дедлайн?
4. Live-coding
Редкая практика, но бывает - примерно в 1 из 5 собеседований.
Вам дают задачу, вы демонстрируете экран и решаете её в реальном времени.
Примеры задач:
• Алгоритм нахождения матчей на match-3 поле;
• Обход графа;
• Проектирование - например, реализовать инвентарь или отревьюить код.
5. Ваши вопросы
Возможно, это будет неожиданностью - но по этому блоку вас продолжают оценивать.
Необходимо показать, что не просто вы пришли ради денег, а подходите к выбору компании осознанно, настроены на долгосрочное сотрудничество, хотите принести им пользу.
Хорошие вопросы:
• Как проходит онбординг новых сотрудников?
• Как часто проводятся performance review и что учитывается?
• Какие направления развития у компании сейчас в приоритете?
• Есть ли менторство или обмен опытом внутри команды?
• Есть ли единые стандарты кодстайла и архитектуры?
• Как работаете с техдолгом - планово или “по ходу”?
• Используете ли собственные фреймворки / пайплайны?
• По каким метрикам оцениваете успех проекта - доход, удержание, отзывы игроков?
• Какие ближайшие планы на развитие проекта?
🚀 Пост Guru Unity: @Minerope
Привет! За свою карьеру я прошёл более 15 собеседований, и сейчас расскажу про наиболее частую структуру.
1. Самопрезентация
После короткого смолтока вас попросят рассказать о себе.
Это не просто формальность - по вашему рассказу формируется первое впечатление.
Расскажите:
• над какими проектами работали
• за что отвечали
• какие задачи решали и чем гордитесь
Совет: запишите рассказ на аудио и послушайте. Поймёт ли человек, который впервые вас видит, чем вы занимались и в чём ваша ценность? Можно отправить запись другу для проверки.
После этого интервьюер может уточнить детали из резюме или спросить о вещах, которые вы не упомянули.
2. Технический блок
Здесь проверяют ваши знания по C# и Unity. Список тем зависит от компании, но чаще всего спрашивают:
1. Устройство памяти в C#. Отличия поведения ссылочных и значимых типов.
2. Garbage Collector - что это такое, как работает.
3. Отличия классов и структур. Ограничения структур. Boxing & Unboxing.
4. Коллекции и алгоритмы. Как "под капотом" работают стандартные коллекции, оценка сложности (Big O) операций с этими коллекциями (добавление, удаление, обращение). Могут затронуть популярные алгоритмы сортировки и обхода графа.
5. Асинхронность и многопоточность в C#
6. Блок Unity. Спрашивают что-то из перечисленного: Addressables / Оптимизации / Шейдеры и графический пайплайн / Сборка билда / Клиент-серверное взаимодействие / Unit тесты / Полезный стек - UniTask, Zenject, R3
Подсказка: читайте описание вакансии - по нему можно понять, на чём будет акцент.
3. Вопросы по процессам
В этом блоке собеседующие проверят ваши софт скиллы, используя вопросы о вашем поведении в команде.
Примеры вопросов:
• Как проводите code review?
• Как оцениваете время на выполнение задач?
• Что делаете, если ТЗ неполное?
• Как решаете конфликты?
• Что вас мотивирует в работе?
• Что делаете, если не успеваете в дедлайн?
4. Live-coding
Редкая практика, но бывает - примерно в 1 из 5 собеседований.
Вам дают задачу, вы демонстрируете экран и решаете её в реальном времени.
Примеры задач:
• Алгоритм нахождения матчей на match-3 поле;
• Обход графа;
• Проектирование - например, реализовать инвентарь или отревьюить код.
5. Ваши вопросы
Возможно, это будет неожиданностью - но по этому блоку вас продолжают оценивать.
Необходимо показать, что не просто вы пришли ради денег, а подходите к выбору компании осознанно, настроены на долгосрочное сотрудничество, хотите принести им пользу.
Хорошие вопросы:
• Как проходит онбординг новых сотрудников?
• Как часто проводятся performance review и что учитывается?
• Какие направления развития у компании сейчас в приоритете?
• Есть ли менторство или обмен опытом внутри команды?
• Есть ли единые стандарты кодстайла и архитектуры?
• Как работаете с техдолгом - планово или “по ходу”?
• Используете ли собственные фреймворки / пайплайны?
• По каким метрикам оцениваете успех проекта - доход, удержание, отзывы игроков?
• Какие ближайшие планы на развитие проекта?
Please open Telegram to view this post
VIEW IN TELEGRAM
#course #ооп #case
📚 Практический анализ ПО с моделированием на UML
Целью курса является обучение слушателей теоретическим основам объектно-ориентированного подхода, практическим методам визуального проектирования и технологии разработки программного обеспечения с использованием компьютеризированных систем разработки (CASE
Перейти к материалу
👉 База вопросов 👉 Новости
📚 Практический анализ ПО с моделированием на UML
Целью курса является обучение слушателей теоретическим основам объектно-ориентированного подхода, практическим методам визуального проектирования и технологии разработки программного обеспечения с использованием компьютеризированных систем разработки (CASE
Перейти к материалу
👉 База вопросов 👉 Новости
#Собес #prefab #instantiation #components
🤔 Что такое префаб в Unity и как бы вы использовали его в реальном проекте?
💬 Кратко:
Prefab в Unity — это сохраненный шаблон игрового объекта, который можно многократно использовать в проекте. Это позволяет создать объект (например, врага с AI, модель, анимации) один раз и повторно использовать его в разных частях игры, что упрощает управление и обновление.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Что такое префаб в Unity и как бы вы использовали его в реальном проекте?
💬 Кратко:
Prefab в Unity — это сохраненный шаблон игрового объекта, который можно многократно использовать в проекте. Это позволяет создать объект (например, врага с AI, модель, анимации) один раз и повторно использовать его в разных частях игры, что упрощает управление и обновление.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
MV* паттерны в Unity: разложим по полочкам
На собеседовании нас просят рассказать о каждом из них, правильно расположив стрелочки на схеме взаимодействия классов.
Но если отбросить всю эту теорию, смысл у них один - разделить ответственность между слоями кода.
И в этом посте я раскрою этот смысл, чтобы стало понятно зачем использовать эти паттерны, без необходимости запоминать куда стрелочки на схеме смотрят.
Принцип, из которого выросли все MV*
Любой UI или игровой экран можно разложить на три слоя:
1. Бизнес-логика (Model) - хранит и обрабатывает данные.
Пример: здоровье персонажа, инвентарь, внутренняя экономика.
2. Презентация (View) - показывает игроку информацию.
Пример: полоска HP, надписи, окна, анимации.
3. Связующее звено (Controller / Presenter / ViewModel) - решает, когда и что обновить.
Главная идея MV* - разные причины для изменений должны быть в разных местах.
Так, если мы поменяем бизнес-логику, то не придётся изменять код UI.
И наоборот - сменили виджет отображения UI (с текстового поля со значением процентов на полоску здоровья с конкретными значениями) - вся игровая логика здоровья осталась нетронутой.
Пример без разделения:
Пока одна панель - всё ок.
Но потом приходит геймдизайнер и говорит:
И ты полностью переписываешь компонент, уничтожая старую логику.
Каждое новое изменение = переписывание и логики хп, и его отображения.
Чтобы избежать постоянного переписывания UI кода, необходимо создать:
1. HealthModel, в которой будет находиться бизнес-логика
2. HealthView, который будет заниматься отображением (UI)
3. HealthPresenter, который связывает Model и View. Например, просто слушает события из Model и вызывает методы по обновлению View
В таком случае, если хочешь добавить вторую полоску здоровья - просто сделай второй HealthView и подпиши его на ту же модель.
Старый код останется полезным, и его можно будет использовать для других задач.
Посмотреть изменённый код можно тут
Смысл, который стоит запомнить
MV* - паттерн не ради паттерна.
Он необходим, чтобы изолировать причины изменений и отображение изменений.
И когда завтра геймдизайнер захочет 3 разных шкалы HP, ты просто подключишь новые View — без изменения логики HP и переписывания старого кода View.
🚀 Пост Guru Unity: @Minerope
На собеседовании нас просят рассказать о каждом из них, правильно расположив стрелочки на схеме взаимодействия классов.
Но если отбросить всю эту теорию, смысл у них один - разделить ответственность между слоями кода.
И в этом посте я раскрою этот смысл, чтобы стало понятно зачем использовать эти паттерны, без необходимости запоминать куда стрелочки на схеме смотрят.
Принцип, из которого выросли все MV*
Любой UI или игровой экран можно разложить на три слоя:
1. Бизнес-логика (Model) - хранит и обрабатывает данные.
Пример: здоровье персонажа, инвентарь, внутренняя экономика.
2. Презентация (View) - показывает игроку информацию.
Пример: полоска HP, надписи, окна, анимации.
3. Связующее звено (Controller / Presenter / ViewModel) - решает, когда и что обновить.
Главная идея MV* - разные причины для изменений должны быть в разных местах.
Так, если мы поменяем бизнес-логику, то не придётся изменять код UI.
И наоборот - сменили виджет отображения UI (с текстового поля со значением процентов на полоску здоровья с конкретными значениями) - вся игровая логика здоровья осталась нетронутой.
Пример без разделения:
public class Health : MonoBehaviour
{
[SerializeField] private TMP_Text _text;
[SerializeField] private Image _bar;
private float _hp = 100;
public void TakeDamage(float dmg)
{
_hp -= dmg;
_text.SetText($"{_hp}");
_bar.fillAmount = _hp / 100;
}
}
Пока одна панель - всё ок.
Но потом приходит геймдизайнер и говорит:
“Добавь полоску над персонажем и окно статистики.”
И ты полностью переписываешь компонент, уничтожая старую логику.
Каждое новое изменение = переписывание и логики хп, и его отображения.
Чтобы избежать постоянного переписывания UI кода, необходимо создать:
1. HealthModel, в которой будет находиться бизнес-логика
2. HealthView, который будет заниматься отображением (UI)
3. HealthPresenter, который связывает Model и View. Например, просто слушает события из Model и вызывает методы по обновлению View
В таком случае, если хочешь добавить вторую полоску здоровья - просто сделай второй HealthView и подпиши его на ту же модель.
Старый код останется полезным, и его можно будет использовать для других задач.
Посмотреть изменённый код можно тут
Смысл, который стоит запомнить
MV* - паттерн не ради паттерна.
Он необходим, чтобы изолировать причины изменений и отображение изменений.
И когда завтра геймдизайнер захочет 3 разных шкалы HP, ты просто подключишь новые View — без изменения логики HP и переписывания старого кода View.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🔥1
#Собес #mvc #cpp #csharp
🤔 Senior Game разработчик в RedRift
Техническое собеседование. Вилка: 3000$-4000$. Были классические вопросы по работе в команде, оптимизациям, Addressables, архитектуре.
💬 Вопросы:
- Какие отличия между C++ и C# бросаются в глаза?
- Где применим паттерн MVC (или MV-паттерны в целом)?
- Если MonoBehaviour удалён, но ассет через Addressables не выгружен — что произойдёт?
- Если использовать Addressables, как выгрузить ассет из памяти?
- В какой момент в Addressables ассеты выгружаются из памяти?
👉 Все вопросы из этого собеседования (16)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
🤔 Senior Game разработчик в RedRift
Техническое собеседование. Вилка: 3000$-4000$. Были классические вопросы по работе в команде, оптимизациям, Addressables, архитектуре.
💬 Вопросы:
- Какие отличия между C++ и C# бросаются в глаза?
- Где применим паттерн MVC (или MV-паттерны в целом)?
- Если MonoBehaviour удалён, но ассет через Addressables не выгружен — что произойдёт?
- Если использовать Addressables, как выгрузить ассет из памяти?
- В какой момент в Addressables ассеты выгружаются из памяти?
👉 Все вопросы из этого собеседования (16)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
❤1
#Собес #application_layer #mail_services #file_transfer
🤔 Назовите некоторые службы, предоставляемые прикладным уровнем в интернет-модели.
💬 Кратко:
Прикладной уровень предоставляет такие службы, как электронная почта (SMTP), передача файлов (FTP), управление доступом (SSH) и сетевой виртуальный терминал (Telnet).
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Назовите некоторые службы, предоставляемые прикладным уровнем в интернет-модели.
💬 Кратко:
Прикладной уровень предоставляет такие службы, как электронная почта (SMTP), передача файлов (FTP), управление доступом (SSH) и сетевой виртуальный терминал (Telnet).
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал