top of page

170+ питань на співбесіду з Unity Developer різних грейдів


170-pytan-na-spivbesidu-unity-developer

Як проходить співбесіда з Unity Developer? Ми зібрали великий перелік поширених питань для спеціалістів різних ґрейдів — Junior, Middle, Senior. Він допоможе виявити прогалини у знаннях та заповнити їх, готуючись до співбесіди. Сергій Потапов, Head of Engineering в Keiki та Юра Нероба, Unity Tech Lead в Holy Water поділилися, як проходять технічні інтервʼю в їхніх компаніях, на які хард та софт-скіли звертають увагу, чому в геймдеві знадобиться прикладна математика, UI та бізнес-логіка.




UI, оптимізація та бізнес-логіка — як наймають в Keiki



Serhiy-Potapov-Head-of-Engineering-Keiki

Keiki — освітній застосунок для дітей, і ми маємо досить специфічні вимоги до найму розробників, пов'язані зі специфікою ніші. У нашому проєкті немає складних ігрових механік, тому для нас не так важливі глибокі знання фізики, роботи з 3D, мультиплеєром, що може бути невід'ємною складовою для роботи над AAA ігровим проєктом. Водночас кількість контенту в застосунку — велика, і постійно збільшується. Через це для нас важливо, щоб кандидат знав, як оптимізувати продуктивність і вагу застосунку. Також ми прагнемо забезпечити зручну і приємну взаємодію користувача з продуктом, тому необхідно, щоби розробник вмів збирати складний та адаптивний UI.


Ми не використовуємо фіксований перелік питань і формуємо його, виходячи з вимог до позиції, досвіду кандидата, виконаного тестового завдання. Водночас кожна співбесіда складається з питань про Unity, C#, архітектуру.



Від кандидатів ми очікуємо розуміння того, як працює двигун Unity: життєвий цикл об'єктів, їхні види, принципи роботи ієрархії та розміщення об'єктів на сцені. Важливо, щоби кандидат розумів, як працює рендеринг, робота з пам'яттю, і вмів оптимізувати ці процеси. Також ми перевіряємо знання C#, принципів та патернів програмування. Навіть джун повинен вміти писати чистий і зрозумілий код, який можна масштабувати.


Окрему увагу звертаємо на підхід кандидата до розробки й вміння розв'язувати проблеми. Наприклад, як кандидат діятиме в умовах нестачі часу? Що є першочерговим — вирішення бізнес-задачі чи дотримання принципів програмування та чистого коду? Де треба приділити більше часу і зробити якісно, а де треба зробити швидко і «брудно». Ми шукаємо людей, які за допомогою своїх знань можуть приймати ефективні рішення і виконувати задачі бізнесу.


У Keiki ми приділяємо багато ресурсу розвитку команди та культури розробки. Тому на співбесіді звертаємо увагу на мотивацію людини, її софт-скіли і Team Fit. Нам важливо, щоб людина знала, чого хоче, прагнула розвиватися разом із командою, привносити нові знання і рішення у продукт й при цьому вміла знаходити спільну мову з колегами, критикувати та пропонувати рішення.



Прикладна математика та UI — як наймають в Holy Water


Ura-Neroba-Unity-Tech-Lead-Holy-Water

Зазвичай технічне інтервʼю складається з питань з розробки, C#, Unity, Математики. Крім навичок програмування та інструментів, в геймдеві важливо мати базові знання з лінійної алгебри та тригонометрії. Важливо бути знайомим з концепцією кватерніонів, знати, як відбуваються операції з векторами, матрицями. Але ключове тут — розуміти, як ці знання застосувати на практиці. Кандидат має не просто вміти обчислити скалярний добуток векторів, а знати навіщо це в розробці.


Питання з математики допомагають правильно оцінити рівень розробників, зокрема тих, хто опановував професію самостійно. Кандидатам, які вивчали лише код, зазвичай складніше знайти рішення, вони часто вирішують проблеми через вигадування велосипедів або методом «милиць».


Питання залежать від ігрового жанру та напряму, в якій працює компанія. В певних компаніях буде фокус на роботу з 3D, а в інших з цієї теми не поставлять жодного питання. Holy Water створює продукт в жанрі візуальних новел. Ми використовуємо єдиний список питань для всіх ґрейдів різної складності. Кожне інтервʼю проходить індивідуально, спираючись на досвід кандидата та його відповіді. Питання можуть варіюватися: більш заглиблюватися в окремі теми або пропускати нерелевантні.


Кандидат має добре знати, як працює мова C#, середовище Unity, відповідно до свого рівня вміти пояснити принципи SOLID, DRY, KISS тощо. По Unity ми питаємо про власний комерційний досвід, на яких проєктах працював, чим займався, який досвід роботи з UI-елементами. На багатьох проєктах UI — це те, що робиться зазвичай в останню чергу і поспіхом, але для нашого проєкту це важливо. Тому один з критеріїв відбору — наскільки добре кандидат знає, як працювати з UI, як його налаштовувати, які в цьому процесі є підводні камені тощо.


Якщо кандидат не знає відповіді, можна просто зізнатися в цьому. Або спробувати прикинути: «якщо щось інше працює за схожим принципом, це повинно працювати так само». Той, хто шукає відповідь, проводить аналогії та старається сформувати гіпотезу, завжди отримує додатковий плюс, навіть, якщо дає неправильну відповідь.



170-pytan-na-spivbesidu-unity-developer-junior


Питання для Junior


C#


1. Які принципи ООП ви знаєте? Як вони реалізовані в C#?

2. Що таке класи, структури даних та колекції?

3. Яка між ними відмінність? Поясніть місця використання кожного поняття.

4. Поясніть, що таке масиви?

5. Є два масиви: на 200 та на 2000 елементів. Якщо з першого треба взяти 190 елемент, а з другого 1900, ці операції займатимуть різний чи однаковий час? Чому?

6. Чи можна додати елементи до масиву? Як?

7. Якщо у нас є змінна, яка має тип абстрактного класу, об'єкти якого типу ми можемо помістити в неї?

8. Для чого потрібні інтерфейси? Наведіть приклади використання.

9. Що таке модифікатори доступу та ключові слова?

10. Readonly, const, virtual, override, abstract, ref, out, lock — що це означає? Де використовується?

11. Що таке Generic методи? Наведіть приклади використання?

12. Як відбувається перевантаження таких методів?

13. Які структури даних ви знаєте?

14. Array, List, Dictionary, Queue, Stack — яка між ними різниця?

15. Як вони влаштовані та де які структури краще використовувати?

16. Яка різниця між event та delegate?

17. Для чого використовуються Action Func i Predicate?

18. JSON — що це? Для чого використовується?

19. Що таке серіалізація та десеріалізація?

20. Які ви знаєте атрибути? Як вони працюють?

21. Що таке івенти? Як вони викликаються?



Git


22. Як влаштований репозиторій?

23. Які команди ви використовували?

24. У чому різниця між commit та push?

25. Чи є досвід вирішення конфліктів в Git? Які стратегії використовували?



Shcho-pytaut-u-Junior-Unity-Developer

Unity


26. Що таке Unity і які його основні особливості?

27. Що таке ігровий двигун?

28. Що таке gameobject?

29. Що таке сцена?

30. Префаби — що це і для чого?

31. У чому різниця між сценою та префабом в Unity?

32. Що репрезентують префаби? В чому відмінність від ScriptableObject?

33. Які є компоненти в Unity?

34. Яка послідовність виклику методів в скриптах Unity?

35. Що таке життєвий цикл Unity?

36. Що таке MonoBehaviour? Опишіть його життєвий цикл?

37. В чому різниця між Update, FixedUpdate та LateUpdate? Які з ними є проблеми та які існують альтернативи?

38. Які є базові класи в Unity? Для чого вони використовуються?

39. Що таке Coroutine, де вони «живуть»?

40. Для чого використовується IEnumerator?

41. Як використовуються GetComponent, Find?

42. Які є плюси та мінуси використання GetComponent, Find? Які є схожі методи?

43. Як ви реалізуєте рух об'єкта в Unity?

44. Які є основні кроки для створення анімації в Unity?

45. Як ви реалізуєте зіткнення (collision) об'єктів в Unity?

46. Як ви використовуєте скрипти для взаємодії з об'єктами в Unity?

47. Як ви реалізуєте мультиплеєр в Unity?



Math


48. Sin, Cos, Tan, Cotan — як знайти та для чого використовуються?

49. Що таке вектор, як його знайти?

50. Що собою представляє довжина вектора?

51. Що таке нормалізація вектора? Як її обчислити?

52. Як відбувається додавання та віднімання векторів?

53. Що таке скалярний добуток?

54. Що таке кватерніон? Як він репрезентується?

55. Яким чином кватерніон можна використовувати замість кутів Ейлера?

56. Що таке матриця? Прикладне використання в геймдеві?

57. Як здійснюється множення та додавання матриць?

58. Як обчислити матрицю повороту на кут?



170-pytan-na-spivbesidu-unity-developer-middle

Питання для Middle


C#


59. Чого вам не вистачає в С#, що є в інших мовах?

60. Чим відрізняється модель пам'яті С#?

61. Назвіть принципи розробки клієнт-серверних застосунків на прикладі ігор?

62. У чому відмінність інтерфейсу від абстрактного класу?

63. У чому відмінність між значеннями та посиланнями в C#?

64. Що таке namespaces в C#? Як вони використовуються?

65. Які є особливості наслідування в C#?

66. Як ви реалізуєте поліморфізм в C#?

67. Інкапсуляція — поясніть, як застосовували на практиці?

68. Абстракція — поясніть, як ви застосовували на практиці?

69. Що таке делегати? Як вони використовуються в C#?

70. Які є особливості обробки винятків (exception handling) в C#?

71. Як ви керуєте пам'яттю в C#?

72. Як працює Garbage Collector в C#?

73. Що таке async/await Task?

74. Як працює механізм асинхронності в C#?

75. Як працює механізм рефлексії, де використовується?

76. Що таке компілятор? Які основні функції він виконує в C#?

77. Що відбувається під час компіляції C# коду?

78. Які вихідні файли виходять після компіляції?

79. В чому різниця між компіляцією та інтерпретацією програмного коду? Які переваги та недоліки кожного підходу?

80. Що таке Intermediate Language (IL)? Як він використовується в C#?

81. Розкажіть, що таке Common Language Runtime (CLR). Як він впливає на виконання C# коду?

82. Як ви можете перевірити, чи правильно компілюється ваш C# код перед запуском програми в Unity?



Unity


83. Які плюси та мінуси Unity ви можете назвати?

84. Опишіть свій досвід роботи з Particle System, його механізм роботи.

85. Опишіть свій досвід роботи з вбудованими анімаціями та твінами. Які проблеми можуть виникати під час використання перших і других?

86. Що таке Camera.main?

87. Які є види камер в Unity та налаштування до них?

88. Що таке Матеріали, для чого використовуються?

89. Як працює механізм Layers? Яка різниця з Тегами?

90. Що таке профайлер?

91. Як працює фрейм дебагер?

92. Які є налаштування текстур в Unity?

93. Як працює серіалізація об'єктів?

94. Що відбувається на старті гри?

95. Що таке шейдери (shaders) і як вони використовуються?

96. Як створити новий шейдер? Опишіть свій досвід використання.

97. Що таке API Editor? Поділіться досвідом написання власних допоміжних засобів в Unity.

98. Які є можливості рендерингу в Unity?

99. Як ви створюєте скелетні анімації (skeletal animations) для персонажів в Unity?

100. Як ви використовуєте механіку зв'язків (constraints) для контролю руху об'єктів?

101. Як ви реалізуєте перехід між анімаційними станами (animation states) в Unity?

102. Чи користувалися ви компонентом Rigidbody в Unity? Опишіть свій досвід.



UI


103. Назвіть основні компоненти Unity UI?

104. Опишіть досвід роботи з різними UI компонентами?

105. Які є методи групування об'єктів в Unity UI?

106. Опишіть можливі проблеми використання вбудованих компонентів?

107. Що таке Canvas? Опишіть його плюси і мінуси?

108. Опишіть свій досвід верстки адаптивного інтерфейсу.

109. Що таке LayoutGroup?

110. Який порядок відмалювання UI елементів?

111. Яке призначення систем подій (event systems) в Unity UI?

112. Як системи подій допомагають забезпечити взаємодію між елементами інтерфейсу та сценаріями?

113. Як ви реалізуєте власний елемент інтерфейсу (наприклад, панель здоров'я) з використанням системи інтерфейсу Unity?

114. Розкажіть про відмінності між компонентами UI Text в Unity та TextMeshPro. В якому випадку який з них ви б обрали?

115. Поясніть значення порядку сортування Canvas Sorting Order. Як він впливає на відображення елементів інтерфейсу?


Shcho-pytaut-u-Middle-Unity-Developer


Бізнес-логіка


116. Опишіть свій досвід роботи з Third Party Services.

117. Розкажіть про досвід інтеграції рекламних сервісів (наприклад, AdMob) в ігрові застосунки.

118. Розкажіть про досвід інтеграції аналітичних сервісів (наприклад, Firebase Analytics) для збору даних?

119. Як ви керуєте соціальними сервісами (наприклад, Facebook SDK) для обміну даними та досягненнями між гравцями?

120. Як ви оновлюєте сторонні пакети на Unity до новіших версій? Які підходи ви використовуєте, щоб уникнути конфліктів і несумісностей?

121. Як можна використовувати ремоут-конфіги для налаштування геймплею, механік гри або інших параметрів?

122. Які інструменти або сервіси ви використовували для налаштування ремоут-конфігів?

123. Що таке Unity Web Requests?

124. Опишіть свій досвід роботи з клієнт-серверною взаємодією.



Математика


125. Які математичні принципи використовуються при розрахунку траєкторій руху об'єктів в грі?

126. Як обчислити відстань між двома об'єктами в тривимірному просторі?

127. Як розрахувати кут між двома об'єктами або векторами?

128. Як обчислити інтерполяцію між значеннями для плавних анімацій у грі?

129. Як ви розрахувати оптичні ефекти у грі, такі як відображення reflection чи refraction світла?

130. Як знайти вектор, перпендикулярний двом векторам?

131. Запропонуйте алгоритм, який видає елемент з масиву, залежно від вірогідності його випадіння.



Архітектура


132. Розкажіть про досвід реалізації MVC, MVP, шарів в архітектурі.

133. Що таке події в C# і Unity3D?

134. Що таке ObjectsPool в проєктуванні?

135. Патерни Commands, ServceLocator, Singletone — опишіть суть та як використовувати?

136. Принципи SOLID — опишіть своїми словами, для чого навіщо вони потрібні.

137. Що таке Dependency Injection (DI)? Яка його роль в розробці ігор або додатків на Unity.

138. Розкажіть про основні переваги використання IoC-контейнера.

139. Як ви імплементуєте IoC-контейнер в Unity?



170-pytan-na-spivbesidu-unity-developer-Senior

Питання для Senior


Оптимізація


140. Які є способи оптимізації під різні платформи?

141. Опишіть головні виклики, які виникають під час оптимізації ігор для мобільних пристроїв. Як ви їх вирішували?

142. Розкажіть про техніки управління розміром текстур та компресії зображень для зниження використання пам'яті.

143. Як ви використовуєте Level of Detail (LOD) для забезпечення оптимізованого рендерингу на мобільних пристроях?

144. Яким чином ви оптимізуєте шейдери для підтримки різних мобільних пристроїв?

145. Які підходи ви використовуєте для управління об'ємом об'єктів на сцені для оптимізації продуктивності?

146. Як ви тестуєте продуктивність гри на різних мобільних пристроях, і які критерії використовуєте для оцінки продуктивності.



С#


147. Розкажіть про асинхронне програмування в C#. Які ключові слова та механізми ви використовуєте для роботи з асинхронним кодом?

148. Яким чином ви здійснюєте обробку винятків в C#? Розкажіть про рекомендовані підходи до керування винятками у ваших проєктах.

149. Які прийоми ви використовуєте для забезпечення безпеки та захисту даних?

150. Поясніть концепцію качиної типізації. Як цього досягти в C#?

151. Яка різниця між методами GetHashCode і Equals у C#?

152. Поясніть клас Tuple і варіант його використання в C#.

153. Що таке локальні функції в C# і як їх можна використовувати?

154. Що таке LINQ (Language Integrated Query) і як ви його використовуєте для роботи з колекціями та запитами у C#?



Shcho-pytaut-u-Senior-Unity-Developer

Архітектура


155. Які принципи архітектури програмного забезпечення ви застосовуєте у своїх проєктах Unity?

156. Розкажіть про архітектурні шаблони, які ви використовуєте в ігровій розробці.

157. Як ви розділяєте логіку гри та інтерфейс відображення (UI) у своїх проєктах?

158. Яким чином ви розбиваєте ваші проєкти на модулі або підсистеми для полегшення розробки та підтримки?

159. Як ви організовуєте комунікацію між різними системами або модулями?

160. Які інструменти або фреймворки ви використовуєте для побудови архітектури у своїх проєктах Unity?

161. Як ви керуєте станом (state management) гри та об'єктів у вашій архітектурі?

162. Як ви розгортаєте і керуєте системами у вашій архітектурі, такими як система аудіо, система фізики тощо?

163. Як ви здійснюєте інтеграцію зовнішніх сервісів та сторонніх SDK у своїх Unity-застосунках?

164. Як ви організовуєте систему обробки івентів та реакції на різні геймплейні події у своїх іграх?

165. Розкажіть про свій досвід у впровадженні аналітики та збору даних про поведінку користувачів для аналізу продуктивності та удосконалення геймплею.

166. Як ви підходите до тестування гри або застосунку в Unity? Розкажіть про використані методики.

167. Як ви оцінюєте ефективність геймплейних механік та ігрових систем?

168. Як ви обробляєте аудіо у своїх ігрових проєктах? Розкажіть про використання звукових ефектів та музики.

169. Як ви реалізуєте систему керування гравцем у вашому ігровому проєкті?

170. Як ви створюєте систему збереження прогресу та управління станами гри?

171. Як використовуєте алгоритми для генерації рівнів гри?

コメント


Підписуйся на нашу розсилку та отримуй корисні матеріали першим!

Надаючи вашу електронну адресу, ви погоджуєтесь з нашою Політикою приватності.

Дякуємо, що підписалися.

image-from-rawpixel-id-5996033-png.png
bottom of page