Эти вопросы тебе будут задавать на собеседовании в Unity Junior Developer. Часть 1

YOUTUBE · 01.12.2025 05:48

Ключевые темы и таймкоды

Введение в собеседование

0:00
  • Обсуждение собеседования на позицию Unity Junior Developer.
  • Разделение собеседования на две части: программирование на C# и разработка игр на Unity.
  • Фокус на практических вопросах, полезных для работы.

Определение программирования

1:00
  • Программирование — это разработка приложений с помощью компьютерного кода.
  • Приложение — результат труда разработчиков, решающий задачу заказчика.
  • Критика подхода, при котором программисты стремятся к максимально сложному решению задачи.

Понятие языка программирования

2:38
  • Язык программирования — это способ передачи задач компьютеру.
  • Язык может рассматриваться как способ записи правил приложения или как договорённость между программистами.
  • Возможность добавления мета-правил к языку.

Нелюбимые языки программирования

4:41
  • Обсуждение нелюбимого языка — ассемблера из-за его сложности для визуального представления.
  • Пример сложности описания простых задач на ассемблере.

Любимый язык программирования

6:50
  • Любимый язык — C#, но также упоминается любовь к функциональным языкам.
  • Ограничения функциональных языков в текущей сфере деятельности.

Недостатки C#

8:25
  • Желание иметь возможность регулировать память в C#, как в C++.
  • Проблемы с безопасными массивами в C# и преимущества небезопасных массивов.

Модель памяти в C# и C++

10:45
  • В C# управление памятью осуществляется автоматически через сборщик мусора.
  • В C++ управление памятью требует ручного вмешательства.
  • Возможность написания собственного сборщика мусора в C++.

Критика сборщика мусора

12:40
  • Иллюзия безопасности сборщика мусора в C#.
  • Примеры утечек памяти в C#, связанные с событиями и подпиской на них.

Массивы и их свойства

13:22
  • Массив — это ссылочный тип данных, который позволяет хранить множество переменных одного типа.
  • Компилятор не перебирает массив, а сразу обращается к нужной ячейке памяти.
  • Элементы массива располагаются в памяти один за другим, что обеспечивает линейную индексацию.

Динамические массивы и списки

16:37
  • В динамических массивах элементы добавляются путём копирования массива в новое место.
  • Списки в C# упрощают работу с массивами, копируя их только при необходимости.
  • Добавление элементов в массив требует создания нового массива, так как после последней ячейки может не быть свободного места.

Типы данных

19:08
  • Ссылочные типы данных ссылаются на объекты в оперативной памяти, позволяя обращаться к ним из любой точки кода.
  • Типы значений создают новые ячейки в памяти, что позволяет оптимизировать работу с кэшами процессоров.
  • При присваивании значения переменной ссылочного типа копируется ссылка, а при значимом типе — само значение.

Объектно-ориентированное программирование ООП

22:47
  • ООП — это метод структурирования кода, основанный на инкапсуляции, наследовании и полиморфизме.
  • Инкапсуляция защищает данные класса от внешнего воздействия.
  • Наследование позволяет одному классу перенимать черты другого, создавая иерархию классов.
  • Полиморфизм позволяет использовать методы класса без знания его конкретного типа.

Абстрактные классы

26:53
  • Абстрактные классы содержат абстрактные методы, которые должны быть реализованы наследниками.
  • Пример использования абстрактного класса: создание общего класса «еда» с методами «купить» и «съесть», которые наследуют конкретные подклассы «помидор», «огурец», «лимон».
  • Абстрактные классы полезны, когда реализация методов в наследниках отличается, например, при разной калорийности или стоимости.

Паттерны проектирования

30:15
  • Паттерны стратегия и шаблонный метод помогают объяснить, зачем нужны абстрактные классы и полиморфизм.
  • Эти паттерны демонстрируют, как можно эффективно структурировать код, используя общие методы и реализуя их по-разному в наследниках.

Введение в делегаты и события

30:28
  • Делегаты — это способ объявить метод.
  • События — это делегаты, которые обращаются к методу в нужный момент.

Особенности делегатов

31:34
  • Делегат отличается от класса тем, что хранит конкретные методы, а не методы и переменные.
  • В делегате описываются параметры метода, который будет подписан на событие.

Синтаксис делегатов

32:33
  • Для описания делегатов часто используется ключевое слово `action`.
  • Пример: `action<int>` описывает метод, который принимает параметр типа `int`.

Полиморфизм и абстрактные классы

34:06
  • Полиморфизм позволяет использовать общую форму метода, а конкретные реализации определяются позже.
  • Абстрактные классы аналогичны делегатам: они описывают общую форму, а конкретные реализации предоставляются позже.
  • Пример: абстрактный класс `Enemy` с методом `attack`, который реализуется по-разному для разных типов противников.

Заключение

35:42
  • Завершение обсуждения делегатов и событий.
  • Анонс следующей части про Unity.