Технічна співбесіда з Unity Developer. 150+ запитань для Junior, Middle і Senior

Ми продовжуємо рубрику, присвячену технічним співбесідам у геймдеві. Цього разу наводимо список запитань і приклади тестових завдань для Unity-розробників рівнів Junior, Middle і Senior.

Радимо використовувати цей список лише як орієнтир, що допоможе знайти свої слабкі місця й успішно пройти чи провести співбесіду. І сподіваємось, цей матеріал стане в пригоді всім спеціалістам з Unity, які шукають роботу та наймають фахівців у команду.

⭐ Junior Unity Developer

Читайте також:

🔵 Теорія C# і ООП

  1. Які патерни об’єктно орієнтованого програмування ви знаєте? Які застосовували?
  2. Які принципи програмування ви знаєте? Про що вони?
  3. Що таке рефакторинг? Які прийоми рефакторингу ви знаєте?
  4. Що таке збирач сміття (Garbage Collector)? Що таке покоління збірки сміття?
  5. Чи працювали ви з асинхроними методами? В яких випадках вони використовуються?
  6. Що ви знаєте про впровадження залежності? Для чого це потрібно?
  7. В чому різниця між структурою і класом?
  8. Розкажіть про роботу типів-посилань і типів-значень?
  9. Модифікатори доступу в C# — які вони бувають, в чому між ними різниця?
  10. Що таке Override та заміщення методів?
  11. Яка різниця між abstract і virtual?
  12. Чим відрізняється тип за значенням, та за посиланням? В чому різниця між модифікаторами ref та out?
  13. Що таке перегрузка методів?
  14. Що таке необовʼязкові параметри, в чому буде різниця в роботі з необовʼязковими параметрами та перегрузкою методів?
  15. Що таке івенти? Що таке делегати? Яка між ними різниця?
  16. Що таке Struct (структура)?
  17. Що дає модифікатор static? В чому різниця між статичним класом та звичайним?
  18. Що таке Boxing/Unboxing?
  19. Що таке UpCast/DownCast?
  20. Що таке приведення типів? Які варіанти існують цієї операції? Чи можна привести тип char до int?
  21. Що таке SOLID? Розшифруйте та поясніть три принципа SOLID.
  22. Що таке Linq? Які запити ви знаєте?
  23. Що таке асинхронна таска? Як можна зупинити виконання асинхронної таски?
  24. Чи можна в асинхронній тасці дочекатись виконання методу, якщо так то як?
  25. Що таке MVC і які патерни цього сімейства ви знаєте?
  26. В чому різниця між патерном Фабрика та абстрактна Фабрика?
  27. Що таке DI?
  28. Що таке рефлексія і навіщо вона використовується?
  29. Чи можливе множинне наслідування классів в С#?
  30. Що таке анонімна функція?

🟢 Теорія Unity

  1. Які основні принципи архітектури Unity ви знаєте і як вони впливають на розробку ігор?
  2. Які механіки фізики ви використовували для створення реалістичних рухів об’єктів в іграх?
  3. Що дає компонент Rigidbody?
  4. Що дає компонент Collider, які типи Collider існують? В чому різниця між колайдерами в режимі IsTriggered і звичайному.
  5. Що дає компонента SpriteRenderer?В чому різниця між Order In Layer i Sorting order?
  6. Назвіть основні методи життєвого циклу MonoBehaviour.
  7. Як працюють юнітівські методи Awake, Start, Update, FixedUpdate?
  8. Для чого краще використовувати методи Update(), FixedUpdate(), LateUpdate()?
  9. Чи можна змінити частоту роботи FixedUpdate, для чого це варто робити?
  10. Яка різниця між методами Awake() і Start()? Для чого вони використовуються?
  11. Що таке ScriptableObject? Який патерн програмування він реалізує?
  12. Що таке PlayerPrefs? Які типи даних туди можна зберігати? Які способи зберігання даних ви використовуєте в Unity?
  13. Що таке корутина? Коли буде виконуватись перевірка можливості відпрацювання корутини? В якому потоці виконуються корутини?
  14. Які способи створення 2D-анімації ви знаєте? Які в них недоліки?
  15. З якими анімаціями ви працювали?
  16. Що таке Draw Calls, та як зменшити їхню кількість? Як працює батчинг?
  17. Що таке SpriteAttlas? Коли варто просити художника впакувати спрайти в спрайт атлас, коли це краше робити в редакторі?
  18. Як можна оптимізувати розмір застосунку?
  19. Які шляхи оптимізації використання оперативної памʼяті ви знаєте?
  20. Що таке Unity events?
  21. Які SDK ви інтегрували в Unity?
  22. Чи працювали ви з Firebase, які там є сервіси?
  23. Якщо б вам було завдання зробити «синю зону» з гри жанру battle-royal як би ви її реалізовували?
  24. Що таке Raycast?
  25. Чи знаєте ви що таке Spine?
  26. Чи працювали ви з системою частинок? Які задачі можна вирішити використанням систем часток?
  27. Які системи частинок ви використовуєте для створення ефектів вогню, диму або вибухів в іграх?
  28. Що таке канвас? Скільки канвасів одночасно може існувати на сцені? Коли виникає потреба робити більше одного Canvas?
  29. Які Render Mode полотна (Canvas) ви знаєте? Для чого використовується кожен з них?
  30. Як буде визначатися порядок відмальовування UI елементів? За допомогою чого можна ним керувати?
  31. Якби вам дали на вибір 2 розширення, під які UI дизайнер має відмалювати референс екрану, що це були б за розширення?
  32. Чи працювали ви з Text mesh pro? Який його недолік?
  33. Чи працювали ви з DotWeen?
  34. Які інші сторонні розширення ви використовували для Unity?
  35. Що таке префаби? В чому різниця між префабом і сценою?
  36. Які основні компоненти Unity?
  37. Які типи файлів можна завантажити у Unity?
  38. Чи займалися ви версткою UI? Які знаєте проблеми в роботі з цим?
  39. Які спеціальні папки, імена яких зарезервовано Unity, ви знаєте? Для чого вони використовуються?
  40. Які інструменти профілювання в Unity Editor ви знаєте?
  41. Чи знаєте ви про Layer Collision Matrix і для чого вона застосовується?
  42. Що таке unit testing? Чи використовували ви Test Runner в Unity?
  43. Яка ситуація з асинхронністю в Unity? Які є підводні камені?
  44. Які типи рендерингу ви знаєте? Які в них відмінності?
  45. Що таке запікання світла?
  46. Що таке Render Pipeline? Які пресети RP ви знаєте?
  47. Що краще — 1000 обʼєктів які викликають окремий Update, чи 1 обʼєкт який викликає 1000 апдейтів? Чому?

🟡 Загальні запитання

  1. Як ви розумієте поняття СI/CD?
  2. Чи є у вас власні проекти на git-hub, кодом якого ви б могли поділитись?
  3. Чи є у вас є пет проджекти завантажені на PlayMarket/AppStore чи будь-яку іншу платформу?
  4. Чи є у вас досвід командної розробки? Чи брали ви участь хакатонах чи геймджемах?
  5. Які плагіни ви використовували в своїй роботі чи пет-проєктах? Для яких цілей?
  6. Опишіть найскладнішу задачу, з якою стикалися під час розробки? Чому вона була складною? Як ви впоралися з нею?
  7. Що ви вважаєте своїм великим технічним досягненням на цей момент?

🍰 Задачі на логіку

  1. Як трьома розрізами поділити торт на 8 рівних шматочків?
  2. У вас є 3 ящика з фруктами(апельсини, яблука, мікс-апельсинів і яблук), на кожному з ящиків є наклейка з одним з фруктів/міксом. Кожна наклейка неправдива (в ящику не можуть бути фрукти, які зображені на наклейці). Ви можете засунути руку в один з ящиків, дістати фрукт і по ньому сказати що в інших двох ящиках. В який ящик ви засунете руку?
  3. У вас є 25 коней, за яку мінімальну кількість забігів ви зможете визначити 5 найшвидших?
  4. У вас є 9 монеток, одна з них зіпсована (легша або важча за решту). За яку мінімальну кількість зважень, шальковими вагами ви знайдете зіпсовану монету?

📙 Приклад тестового завдання для Junior Unity Developer

Провідний розробник-початківець проєктує застосунок. Він точно знає, що в ньому буде такий метод:

public static void MarkCheater(Player player) =>

player.Name = «Cheater»;

Що виведеться в лог у такому коді, якщо Player буде struct, а також у випадку, якщо Player буде class?

var player = new Player { Name = «Player 1» };

MarkCheater(player);

Log(player.Name);

де Log — будь-який зручний метод логування.

Після базового знайомства з HR студія може студія може дати як тестове Unity-проєкт зі всіма потрібними асетами. Кандидат має реалізувати мінігру під мобільні платформи від першої особи. Всі задані критерії щодо гравця, ворогів, меню/UI прописані в завданні. Таке тестове можуть дати і джуніор і мідл-спеціалісту — все залежатиме від фінальної реалізації.

Після виконання студія спершу перевіряє відповість всіх критеріїв, якість реалізованих механік і наскільки фінальний білд готовий до гри (грабельний). Тоді відбувається глибша перевірка, де звертають увагу на чистоту коду і структуру. Після цього відбувається детальніша співбесіда з HR (щодо попереднього досвіду, мотивації, зацікавленості в геймдеві, організаційних моментів), співбесіда з CEO і Dev-командою.

⭐Middle Unity Developer

🔵 Теорія C#

  1. Розкажіть про багатопотоковість та асинхронність
  2. Що таке куча та стек? Відмінності та принцип роботи.
  3. Для чого потрібні try, catch, finally? В якому випадку може не виконатися блок finally?
  4. Що таке замикання (closure)? Як воно реалізується в C#/.Net?
  5. Чим відрізняється Value Type від Reference Type?
  6. Як працює стек? В які саме моменти він використовується?
  7. Де зберігається Value Type яке є полем в класі?
  8. Що буде якщо упакувати int value та розпакувати в int-овий enum?
  9. Які є методи класу Object?
  10. Для чого потрібен метод GetHashCode()?
  11. Що саме робить yield інструкція?
  12. Чи працювали ви з IoC-контейнерами?
  13. Як ви відрізняєте модифікацію та розширення у Open/closed принципі?

🟢 Теорія Unity

  1. Питання про UI: чи займалися ви версткою? Які знаєте підходи до оптимізації UI?
  2. Розкажіть, які найкращі практики при роботі з UI ви знаєте?
  3. Чи стикалися ви з проблемами продуктивності застосунку? Які інструменти використовували для локалізації проблеми?
  4. Які дані в собі зберігає меш?
  5. Як ви розумієте графічний пайплайн?
  6. Які компоненти Unity використовуються для керування рухом об’єктів? Поясніть різницю між Transform, Rigidbody і CharacterController.
  7. Що таке mipmap рівень і які його переваги та недоліки?
  8. Є гілка feature/some_ticket_id, успадкована від develop. Тестувальник перевірив гілку, і дав зелене світло на її merge у develop. Ви сіли мержити і виявили конфлікт із високою небезпекою регресії. Ваші дії?
  9. Тестувальник завів баг, але з його кроків ви не можете його відтворити. Продуктові дебаглоги також не дають вам чіткого розуміння про походження бага. При цьому тестувальник може відносно стабільно відтворити баг. Ваші дії?
  10. Чим відрізняються Update, FixedUpdate та LateUpdate?
  11. LateUpdate запускається до рендерінгу кадру чи після?
  12. Як працюють ваші скріпти на інших платформах, наприклад на Android?
  13. Розкажіть про ваш досвід у профайлінгу.
  14. Розділяти інтерфейси ви починаєте на етапі проектування чи коли інтерфейс розростається? Які критерії ви використовуєте для розуміння потреби розділення інтерфейсу?
  15. Як працює багатопоточність в Unity?
  16. Чи доводилось вам писати шейдери? Використовували Shader Graph?
  17. Що таке .asmdef і навіщо вони потрібні?
  18. Як реалізувати систему яка б дозволяла додавати в гру контент без оновлення додатку? Які механізми для цього можна використати?
  19. Наведіть приклад використання патерну «Стратегія» в грі?
  20. Чи доводилось писати Editor-розширення? Якщо так, то які?
  21. Як ви працюєте з колізіями в Unity? Як виявляти зіткнення між об’єктами і як уникнути фізичних проблем, таких як проникання (clipping) або неправильна обробка зіткнень?
  22. Які інструменти Unity ви використовуєте для розробки мультиплеєрних ігор? Розкажіть про декілька можливостей мережевого програмування в Unity.
  23. Які кращі практики ви застосовуєте для керування структурою коду в Unity-проектах? Як ви організовуєте код, щоб підтримувати його читабельним і легко розширюваним?

🟡 Загальні запитання

  1. Наведіть приклад порушення/неправильної реалізації принципу підстановки Барбари Лісков.
  2. Чим фреймворк відрізняється від бібліотеки?
  3. Поясніть що таке бібліотека OpenGL, DirectX в метафорах дуже простими словами (щоб зрозумів навіть учень молодших класів у кількох реченнях).
  4. Як конвертувати біти у десяткові числа? Наприклад яке число вийде з 0×0...0011?
  5. Як від’ємне число записується в бітовому представленні?
  6. Чи працювали ви з графами (математична модель)? Які засоби представлення графа ви знаєте?
  7. Що таке dot-product, cross-product векторів?
  8. Що таке кватерніони і чим вони кращі за кути Ейлера?
  9. Що таке інкапсуляція? Які ще принципи ООП ви знаєте?
  10. Ви завжди дотримуєтесь принципу Single responsibility чи є винятки? Як визначити грань, що буде порушувати принцип?
  11. Які існують способи приведення типу та у чому їх відмінності? У яких випадках використовувати той чи інший?
  12. Що таке Reflection по своїй суті? Да краще її використовувати?
  13. Що значить інверсія залежності у назві принципу Dependency inversion?

📙 Приклад тестового завдання для Unity Middle Developer

Провідний розробник-початківець проєктує застосунок. Він точно знає, що в ньому буде такий метод:

public static void MarkCheater(Player player) =>

player.Name = «Cheater»;

що виведеться в лог у такому коді у випадку, якщо Player буде struct, а також у випадку, якщо Player буде class?

var player = new Player { Name = «Player 1» };

MarkCheater(player);

Log(player.Name);

де Log — будь-який зручний метод логування.

Після відповіді доповнити задачу. Що зміниться, якщо структура буде реалізовувати інтерфейс?

IPlayer player = new Player { Name = «Player 1» };

public static void MarkCheater(IPlayer player) =>

player.Name = «Cheater»;

Senior Unity Developer

🔵 Теорія C#

  1. Як працює garbage collector?
  2. У чому різниця між Array, List. Яка структура даних використовується під капотом у List?
  3. Що таке колізії в Dictionary, як він вміє з ними працювати?

🟢 Теорія Unity

  1. Draw Calls та Batching — що це таке та як працює?
  2. Чи стикалися ви з проблемами продуктивності застосунку? Які зміни застосовували для покращення показників?
  3. Ваші дії для локалізування проблеми просідання фпс на мобільному девайсі? Якщо в редакторі проблема не відтворюється?
  4. Як визначити і які дії потрібні щоб виправити Memory Leak?
  5. Який архітектурний патерн найбільше підходить для реалізації користувацького інтерфейсу в Unity? Чому?
  6. Як ви реалізуєте системи фізики в Unity? Розкажіть про ваш підхід до моделювання фізичних взаємодій об’єктів у грі.
  7. Які стратегії ви використовуєте для забезпечення кодування гри в Unity? Чи використовуєте ви якісь патерни проектування або архітектурні підходи?
  8. Розкажіть про ваш досвід у розробці штучного інтелекту (AI) в іграх з використанням Unity. Які алгоритми ви використовуєте для моделювання поведінки NPC (некерованих персонажів)?
  9. Які навички та практики ви використовуєте для підтримки кодування гри в Unity великими командами розробників?

🟡 Загальні запитання

  1. Чи працювали ви з MVC, MVP, MVVM? Розкажіть про кожен окремо.
  2. Чи працювали з паттерном ECS? Які в нього особливості і коли доцільно його використовувати?
  3. Розкажіть, з чого починаєте новий проєкт?
  4. Які сторонні бібліотеки одразу додаєте, які підходи використовуєте?
  5. Розкажіть про ваш досвід у розробці мультиплеєрних ігор з використанням Unity. Які методи ви використовували для синхронізації стану гри між різними пристроями?
  6. Розкажіть про ваш досвід у розробці мультиплеєрних ігор з використанням Unity. Які методи ви використовували для синхронізації стану гри між різними пристроями?

📙 Приклад тестового завдання для Senior Unity Developer

Провідний розробник-початківець проєктує застосунок. Він точно знає, що в ньому буде такий метод:

public static void MarkCheater(Player player) =>

player.Name = «Cheater»;

що виведеться в лог у такому коді у випадку, якщо Player буде struct, а також у випадку, якщо Player буде class

var player = new Player { Name = «Player 1» };

MarkCheater(player);

Log(player.Name);

де Log — будь-який зручний метод логування.

Після відповіді доповнити задачу. Що зміниться, якщо структура буде реалізовувати інтерфейс?

IPlayer player = new Player { Name = «Player 1» };

public static void MarkCheater(IPlayer player) =>

player.Name = «Cheater»;

Також розробника можуть попросити навести приклад задачі, якою кандидат пишається або була найбільш цікавою. Деякі студії не практикують тестові завдання і можуть попросити про приклад коду, який показує стиль архітектури кандидата. Або ж прикладом може бути тестове завдання для іншої компанії / власні напрацювання, які не підпадають під NDA.

💙 Дякуємо за питання і рецензію

Із підготовкою цього матеріалу допомагали:

  • Віктор Антоненко — Seniour Unity Developer, GGG Games;
  • Олесь Дібрівний — Unity Developer Genesis Tech, Keiki;
  • Іван Бондаренко — Lead Unity Developer Paga Group;
  • Unity Team Lead компанії SUITSME;
  • Гліб Челях — Unity Developer RetroStyle Games;
  • Вероніка Синчук — Human Resources Manager RetroStyle Games;
  • Дмитро Гедзь — Technical Lead iLogos Game Studios;
  • Єгор Піскунов — Head of Development iLogos Game Studios;
  • Владислав Городнянський — Tech Lead iLogos Game Studios.

Підписуйтеся на Telegram-канал @gamedev_dou, щоб не пропустити найважливіші статті і новини

👍ПодобаєтьсяСподобалось13
До обраногоВ обраному17
LinkedIn


Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Ну і по класіке: перша задача, поміняти колір кульки в матч-3 казіно.

Слава богу, я інді юніті дев. І цю ахінею не треба зазубрювати 😆

На практиці шанс зловити питання «для сенйора» на співбесіді у джуна дуже великий тому розбивка ця коту під хвіст. Якось пробувався в компанію (двічі) раз на джуна і раз думаю спробую на мідлову позицію — тестове було однакове (думаю таким грішать частенько).
Та і щось у вас питання частенько дублюються для всіх).

Який архітектурний патерн найбільше підходить для реалізації користувацького інтерфейсу в Unity? Чому?

Цікаве питання, не менш цікаво дізнатися яку відповідь автор(и) бачать як правильну

Питання не моє, але я б сказав, що на нього є кілька відповідей залежно від рівня кандидата. Якщо це джун, то скоріше за все мова йде про MVC-MVP(хоча б варіант з сайту Юніті). Якщо кандидат рівнем по більше, то там можна вже по досвіду розказати, з якими підходами доводилось працювати, які підземні камені, на якому зупинилися в результаті(скоріше за все це знову ж таки буде щось з сімейства MVC)

Підписатись на коментарі