Вопросы для собеседования Unity3d программиста

Вопросы для собеседования Unity3d программиста

Несколько лет занимаюсь тем, что коллекционирую хорошие вопросы для собеседования unity3d разработчиков.

Немного информации про эти вопросы: Я как unity3d программист довольно часто бываю на собеседованиях, а иногда их и провожу, поэтому какие-то вопросы я отметил как хорошие и сгруппировал в этот список. Он, конечно же, не претендует на полноту, академичность и я буду очень рад если вы что-то добавите или поправите в комментариях.

С одной стороны: часто бывает, что и в хороших игровых студиях интервью проводит абсолютно неподготовленный лид-разработчик, который морщит лоб и пытается из головы «навскидку» вспомнить какой-то интересный случай, который случался с ним недавно, чтобы спросить о нем кандидата. С этой стороны мой список поможет подготовиться к проведению подобного собеседования.

С другой стороны: Собеседования программистов (в том числе и unity3d программистов) это чаще всего набор стандартных вопросов, на которые просто необходимо знать ответы. Это мат.часть/ликбез, которую совершенно необходимо знать программисту. И перед интервью мой список поможет вспомнить какие-то моменты.

Общие вопросы

С вопросов из этой категории обычно начинаются и заканчиваются интервью unity3d разработчиков, они общие, часто не технические. Цель таких вопросов: познакомиться с кандидатом, послушать о его опыте. Многие из вопросов применимы не только для интервью на позицию unity3d программиста, но и в целом всех программистов.

  • Какие книги по программированию вы читали? Какая из них — любимая? Какая больше всего чему-то научила?
  • Владеете ли вы методом слепой печати?
  • Чем принципиально отличается фреймворк от библиотеки?
  • Что такое инкапсуляция? Какие еще принципы ООП вы знаете? Что такое SOLID, расскажите о принципах.
  • Объясните школьнику что такое графическая библиотека (OpenGL, DirectX), в метафорах, так, чтобы он понял.

Алгоритмы и структуры данных

  • Каким образом отрицательные числа представляются в памяти компьютера? Как из положительного числа получить отрицательное в таком случае? А как обратно?
  • Как получить ближайшую сверху к числу степень двойки?
  • На компьютере массив чисел из 100 элементов сортируется за одну секунду, за сколько секунд отсортируется массив из 100 000 элементов?
  • Что такое “время работы алгоритма”?
  • Зачем “балансируют” дерево?
  • Что такое динамическое программирование? Какие задачи оно решает? Приведите пример.
  • Какие вы знаете способы представления графа?
  • Какой алгоритм используется для нахождения пути?
  • У вас есть односвязный список и указатель на один из его элементов (не последний), как удалить этот элемент из списка, оставив список целостным? Возможно ли решение за О(1)?
  • Что делает эта функция?

  • Что делает следующий код?
  • В случае беззнакового, целочисленного n

  • Даны три числа: a, b, c. Как определить за максимум два сравнения существует ли треугольник со сторонами длиной a, b и с?
  • Определить является ли беззнаковое целое число (unsigned int) степенью двойки? (написать функцию.время работы О(1))
  • Есть односвязный список — постройте перевернутый (обратный) список из данного. Последний элемент указывает на предпоследний, …, второй указывает на первый.

Графика/3D математика/Rendering pipeline

В программировании игр графика это главный инструмент взаимодействия с игроком. «Art is a king»,- говорят в игровых студиях.
Я считаю, что игровой программист должен иметь какое-то представление о том, как устроен графический pipeline и быть хоть немного знакомым с 3d математикой.

  • Что такое lerp? Напишите lerp для float.
  • Что такое dot-product, cross-product векторов? Геометрический смысл этих операций.
  • Расскажите про графический пайплайн, какие системы координат используются на этапах, какие преобразования осуществляются? Что такое drawcall?
  • Какие способы представления ориентации объекта в пространстве вы знаете? Чем хороши кватернионы?
  • Почему slerp работает по кратчайшей дуге?
  • Какие модели освещения вы знаете? Расскажите о принципе работы какой-нибудь из них
  • Когда GPU делает sample текстуры каким образом выбирается mipmap-уровень?
  • Какие данные в себе хранит меш?
  • Для чего нужны нормали? Как нормали преобразуются из одной системы координат в другую (например из локальных координат в мировые, координаты камеры)? Почему таким образом?
  • Есть два вектора — a, b (не ортогональные). Необходимо получить вектор ортогональный плоскости образованной векторами a и b
  • Есть два вектора — a, b (не ортогональные). Необходимо получить вектор ортогональный a или b в плоскости образованной этими векторами
  • Каким образом по вектору нормали и вектору света определить вектор отраженного света?
  • Напишите матрицу поворота вокруг любой из оси

C#/.Net

  • Какой IDE вы пользуетесь? Назовите несколько часто используемых вами short-cut’ов этой IDE. Пробовали ли вы другие IDE? Visual Studio/VS + ReSharper?
  • В чем разница между Lambda и Expression?
  • Что такое замыкание (closure)? Каким образом оно реализуется в C#/.Net?
  • Что такое Boxing/Unboxing?
  • Методы класса Object. Перечислите и расскажите для чего они нужны.
  • Что такое partial классы и для чего они нужны? Partial методы?
  • Какие существуют способы приведения типа и в чем их различия? Как лучше пользоваться?
  • Что вы знаете о Reflection?

Unity3d

  • Рассказать о yield return, yield break и Coroutine в Unity. Как работают yield-инструкции? Как работают Coroutines в Unity?
  • Назовите функции преобразования из локальных координат в мировые и обратно (для точки и для направления). Как работают эти функции? Связано ли их время работы с расположением/вложенностью объекта в иерархии? Реализуйте собственные extension-методы для Transform, которые будут давать такой же результат, как и настоящие.
  • В каком порядке вызываются события MonoBehaviour в процессе рендеринга кадра? Зачем нужны отдельные Update и FixedUpdate?
  • Каким образом Unity обеспечивает кроссплатформенность? Как, например, работает написанная Вами игра на платформе Android?
  • Необходимо интерполировать вектор из A в B за определенный промежуток времени. Каким образом реализовать?
  • Что такое drawcall, batching? Какие возможности предоставляет Unity?
  • Что бы Вы изменили в данном коде для увеличения быстродействия? Как можно еще улучшить этот код? В чем его проблема?
    TComponent это класс-наследник Component и в нем есть метод: DoSomething
  • Какие способы вызвать функцию из компонента, вы знаете/используете? Плюсы и минусы данных способов (Варианты: SendMessage, SendMessageUpwards, BroadcastMessage, вызов через GetComponent (GetComponent().SomeMethod() );
  • В чем отличия делегатов от стандартных C# events, UnityEvent и EventSystem? Что, где и для чего применяется?
  • Что выведет на экран следующий фрагмент кода?
  • Измените код из предыдущего вопроса таким образом, чтобы исключить использование лямбда-выражений и делегатов.
  • Прокомментируйте разницу в нескольких способах получить первый элемент коллекции.
  • Напишите unit-test, который подтвердил бы, что в TestTargetClass OpenConnection вызывается раньше, чем DoSomeStuff

Senior Unity 3D

Как мне кажется вопросы для старшего unity3d программиста, должны провоцировать его рассказать о своем интересном и богатом опыте. И чаще они будут вытекать из разговора с кандидатом. Но все же несколько вопросов-зацепок я люблю:

  • Какие расширения редактора вы писали?
  • Для чего используются классы SerializedObject, SerializedProperty, ScriptableObject, AssetDatabase?
  • С какими проблемами производительности вы сталкивались и каким образом их решали?

Литература и полезные ресурсы

По мотивам этой коллекции вопросов я написал статью для начинающих unity3d программистов, в которой привел книги по темам, которые можно почитать, чтобы восполнить пробелы.

Благодарности

Многие вопросы мне предложили мои коллеги, за что я им очень благодарен. Сейчас уж и не вспомнить, кто именно и какой вопрос предложил.
Но несколько людей я хочу упомянуть. Павел и Даниил из Aggrostudios, Олег из Nival, Павел из Sperasoft, Ян из Aggrostudios/EA/HarborCrew (с которым мы сейчас работаем).
* Если нужно какие-то ссылки на Вас поставить, пришлите

ЛЮБЫЕ ЗАМЕЧАНИЯ ПО ФОРМУЛИРОВКАМ, НОВЫЕ ВОПРОСЫ И КОММЕНТАРИИ КРАЙНЕ ПРИВЕТСТВУЮТСЯ

Понравилась статья? Поделиться с друзьями:
Комментариев: 21
  1. Сергей Кормишин

    Если какие-то опечатки/плохие формулировки, странные вопросы встречаются — смело пишите в комментарии :)

    1. Valentin Simonov

      SerializableObject — имеется в виду сериализация вообще? Такого класса нет.

      1. Сергей Кормишин

        Здравствуйте, Валентин.

        Да верно, ошибка. Наверняка имелся ввиду SerializedObject вместе с SerializedProperty. Это все относится к предыдущему вопросу о том, какие custom-editors приходилось писать.

        Как Вам в целом такой список вопросов? Может добавите Какие-то? Было бы здорово!

        1. Valentin Simonov

          Ну… я для себя понял, что я итервьювер неудачный )8
          Мне надо с человеком именно поработать. Потому что, ну не знает он, например, как отрицательные числа хранятся — вероятно, потому что это в Unity разработке не нужно было никогда… При этом, активно, быстро и ответственно подходит к работе.

          Так что, про вопросы это не ко мне (8 Я сейчас сам-то не на все ответ вспомню.

  2. Sasha Domase

    а ответы можно, в какой-нибудь новой теме и желательно подробне

    1. Сергей Кормишин

      Дело в том, что половина вопросов не имеет четких ответов, они подразумевают дискуссию с кандидатом, чтобы посмотреть как он думает, какой у него опыт.

      На те вопросы, которые конкретные, приводить ответы я не хочу. Я через некоторое время приведу список тем/книг/статей по которым можно поднянуть знания. Это будет полезнее и для кандидатов и для интервьюверов. Правда ведь?

      1. Александр

        Это будет действительно полезно. Я занимаюсь программированием уже 5 лет и до сих пор ответы на многие общие вопросы не знаю (самоучка). Прочел с десяток книг но из общей базы многое пропустил. Ну и естественно если буду куда то пытаться устраиваться на работу прогером то отношение ко мне будет скептическое. Хотя я и веб приложения разрабатываю и десктоп, и бекенд и фронт сам пишу и легко что то новое изучаю и люблю это. Буду ждать список книг и тем)

      2. Eugene Shramko

        Будем ждать!

  3. Ike External

    На протяжении 2 дней читаю, перечитываю, гуглю, чего не знаю.
    Браво!

    1. Сергей Кормишин

      Спасибо!) Я очень рад, что Вам пригодился этот список!

  4. Sergey Molchanovsky

    GetComponent().CallMethod() — такого метода нет, и откуда вы его взяли, непонятно.
    TComponent — нет такого класса, есть просто Component.
    Про SendMessage спросили, а про ивенты, к примеру, ни слова. А эта штука куда более полезная.

    1. Сергей Кормишин

      Сергей, это псевдокод. TComponent по задумке отражает, что-то вроде where TComponent: Component, IInterfaceWithCallMethod и в нем есть метод CallMethod();
      Вопрос я откуда-то взял, у меня непоняток «что за методы и что за TComponent» не возникло, когда на него отвечал, сразу понял, что это псевдокод. (помечу, в вопросе этот факт).

      Про events да, стоит добавить, наверное. Может подскажете хороший вопрос? Мне на ум ничего, кроме: В чем разница между event Action и просто Action не приходит :)

      1. Sergey Molchanovsky

        Отличия стандартного C# event, UnityEvent и EventSystem, что, где и для чего применяется.

        1. Сергей Кормишин

          Класс! Спасибо :)

          1. Eugene Shramko

            Здравствуйте, а данные вопросы по unity, для junior ведь рассматриваются

          2. Сергей Кормишин

            В меру моего понимания вашего вопроса поясню: Грани junior/middle, middle/seniour очень призрачные. В разных студиях абсолютно по-разному происходят так называемые «грейды». Чаще всего это больше связано с временем работы в студии, чем с каким-то мастерством и опытом. Если у Вас совсем нет коммерческого опыта работы программистом, то ищите какой-то священный список вопросов, которые все задают для junior-разработчиков. Его не существует. В разных компаниях по-разному.

            Я пишу статью с советами для начинающих unity3d разработчиков, как учиться (книги, лекции), как устраиваться на работу (советы). Когда будет готова — добавлю сюда комментарием :) Может она ответит на ваш вопрос

          3. Eugene Shramko

            Благодарю за ответ!

  5. Oleksii

    Интересно узнать какие паттерны наиболее часто использовались в проектах?

    1. Сергей Кормишин

      Чаще всего Object Pool, MVC, Strategy, Factory method, Composite, Singleton, Proxy. Лучше не злоупотреблять желанием использовать паттерны, использовать только когда действительно нужно.

  6. Sergey Senkov

    Хорошо бы было еще ответы добавить.

Добавить комментарий

:) :D :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: