top of page
Фото автораКатерина Шевченко

170+ питань на співбесіду PHP для Junior, Middle, Senior



Що питають на співбесіді у PHP розробників? Ми зібрали великий перелік поширених питань з теорії та практики. Зазвичай кандидатам ставлять лише невелику частину питань із цього списку. Але він буде корисним для підготовки до технічного інтервʼю для спеціалістів різних ґрейдів — Junior, Middle, Senior та допоможе виявити прогалини в знаннях. Максим Коханський, Lead Back-end Engineer в OBRIO та Ілля Козинець, Tech Lead в Sendios, партнерській компанії Genesis, поділилися, як вони проводять співбесіди, чого очікують від різних ґрейдів та на що звертають увагу.




Питання для Junior


Зазвичай джуніор-розробникам ставлять здебільшого теоретичні питання, адже у цих спеціалістів мінімальний комерційний досвід або взагалі його немає. «Памʼятаю, як одна з моїх перших співбесід повністю складалася з питань по документації, наче на іспиті: що це за метод, які параметри передає тощо, — згадує Максим Коханський, Lead Back-end Engineer у OBRIO. — Я не прихильник таких питань. Коли сам проводжу співбесіди намагаюся питати про те, що більше потрібно в роботі. Наприклад, значно важливіше розуміти логіку чи вміти написати мініархітектуру для декількох класів, ніж відповісти на питання, які легко загуглити, на кшталт “перелічіть методи роботи з масивами”. З теорії питаю про принципи SOLID. Хоч це абстрактна тема, але важливо в ній орієнтуватися».


У практичних завданнях звертають увагу на нестандартні підходи. «Зазвичай кандидати виконують завдання стандартними способами, як написано в документації. Але один кандидат нас справді здивував, запропонувавши рішення з підключенням модульної системи в Laravel. Ми такого навіть не зустрічали. За цікавий підхід він здобув від нас плюсик. Водночас рішення має бути практичним, а не просто виглядати нестандартним.



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


Також може трапитися питання на уважність. Наприклад, у чому різниця між PHP 6 и PHP 7? Секрет в тому, що шостої версії PHP не існує.



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


1. Як оголосити змінну в PHP?

2. Що таке масив у PHP і як його оголосити?

3. Що таке GET та POST, в чому різниця?

4. Що таке файл cookie і як його встановити в PHP?

5. Що таке клас у PHP і як його визначити?

6. Що таке наслідування в PHP?

7. Що таке поліморфізм у PHP?

8. Що таке інкапсуляція в PHP?

9. Що таке статичний метод у PHP?

10. Як оголосити статичну змінну в PHP?

11. Що таке функція в PHP і як її визначити?

12. Що таке рекурсія в PHP?

13. Як використовується ini_set()?

14. У чому різниця між == та ===?

15. Що відбувається, коли вводиш URL у браузері?

16. Який тип повернення функції, яка нічого не повертає?

17. Що таке принципи SOLID?

18. Що таке REST? Чи використовували ви в роботі і яким чином?

19. Які ви знаєте принципи ООП?

20. Які магічні методи у класу ви знаєте? Як їх застосовують?

21. Коли використовується construct i destruct?

22. Коли використовується метод invoke?

23. Як працюють методи __get i __set?

24. Обробка помилок try catch, finally, throw. Як це працює?

25. Що таке PDO?

26. Яка різниця між preg_match і preg_replace у PHP?

27. Що таке PSR стандарти?

28. Які патерни проєктування ви знаєте? З якими ви працювали?

29. Що таке юніт-тести та функціональні тести?

30. Яке призначення файлу php.ini?

31. Чи підтримується множинне наслідування в PHP?

32. Що таке stdClass у PHP?

33. Чи є різниця між isset і !empty?

34. Розрізняйте echo та print()

35. Яка різниця між $a != $b і $a !== $b?

36. Що означає ключове слово var у PHP?

37. Що ми маємо на увазі під ключами та значеннями?

38. Які відмінності між функціями die() і exit() у PHP?

39. Поясніть, як обробляти винятки в PHP?

40. Які основні відмінності між const і define

41. Яка різниця між isset() і array_key_exists()?

42. Чи можете ви розширити остаточно визначений клас?

43. Як увімкнути звіт про помилки в PHP?

44. Коли краще використовувати require та include?

45. Які різні області дії змінних?

46. Яка різниця між var_dump() і print_r()?

47. Як можна встановити нескінченний час виконання для сценарію PHP?

48. Наведіть кілька прикладів, коли вам доводилося використовувати destruct у своїх класах?

49. Як видалити масив PHP за значенням (не ключем)?

50. Які інструменти та технології використовуєте в роботі?

51. Який досвід роботи з Git? Які переваги ви бачите в роботі з Git?

52. В чому різниця між pull та fetch?

53. В чому різниця між merge та rebase?

54. Чим відрізняється composer.json від от composer.lock ?

55. Чим відрізняються require від require-dev у composer.json?

56. Як налаштувати autoload через composer?

57. Що таке трейт і як його використовувати?

58. Як зробити так, щоби сесії не зберігалися у файлі?

59. В чому різниця між self та this?

60. Що таке агрегатні функції?

61. Що таке http-запит?

62. Які групи кодів відповідей ти знаєш?



Бази даних


63. Як підключитися до БД у PHP?

64. Як отримати дані з БД у PHP?

65. Які є індекси в MySQL?

66. Яке призначення транзакцій? Розкажіть про принцип роботи.

67. Чи можна скасувати транзакцію? Як це зробити?

68. Які знаєте типи звʼязків в базах даних? Чим вони відрізняються?

69. Що таке первинний та зовнішній ключі?

70. Чи може первинний ключ мати значення Null?

71. Що таке індекси?

72. В чому різниця між MyISAM vs InnoDB?

73. Що таке JOIN?

74. Які є види JOIN та в чому різниця?

75. У чому різниця між WHERE і HAVING?

76. Що таке нормалізація та денормалізація?



Практичні завдання


77. Цей клас написано неправильно. Щоб ви переписали?


<?php

class Shape
{
	public $width;
	public $height;
	public function __construct($width, $height)
	{
		$this->width = $width;
		$this->height = $height;
	}
}

class Triangle
{
	public $radius;

	public function __construct($radius)
	{
		$this->radius = $radius;
	}
}

class AreaCalculator
{
	public function calculate($shapes)
	{
		foreach ($shapes as $shape) {
			if (is_a($shape, 'Square')) {
				$area[] = $shape->width * $shape->height;
			} elseif (is_a($shape, 'Triangle')) {
				$area[] = $shape->radius * $shape->radius * pi();
			}
		}
		return array_sum($area);
	}
}
	

78. Які принципи SOLID порушує цей код?



<?php

class Report
{
   private Author $author;
   private string $title;
   private string $content;
   private DateTime $date;

   public function getData(): array
   {
       return [
           'author' => $this->author->fullName(),
           'title' => $this->title,
           'content' => $this->content,
           'timestamp' => $this->date->getTimestamp(),
       ];
   }

   public function printJson(): string
   {
       return json_encode($this->getData());
   }
       
   public function printHtml(): string
   {
       return `<div>
                   <h1>{$this->title}</h1>
                   <div>
                       <p>{$this->date->format('Y-m-d H:i:s')}</p>
                       <p>{$this->author->fullName()}</p>
                       <p>{$this->content}</p>
                   </div>
               </div>`;
   }
}
   

79. Імена яких змінних задані невірно? Чому?



<?php 
$a=1;         
$B=2; 
$b=3;
$first.number=4;
$firstNumberOf=5;       
 
function m_func(){           
  $_local=1;
  $locAl=2;
  $local_var=3;
  $10_local_var=4;
  $local_Var=5;
  $local Var=6;
} 
 
function 5_func(){           
  $___a_A=10;
}            
 
?>
 

80. Нижче спроба виведення значень змінних на екран. При спробі виведення яких змінних інтерпретатором буде видана помилка і чому?



<?php 
 
//Локальні та глобальні змінні
 
$a=1;
 
//Оголосили нову користувацьку функцію m_func()
function m_func(){              
  $b=2; 
  echo $a;
}            
 
$c=3;
    
echo $a.'<br>'; 
echo $b.'<br>';                 
echo $c;
m_func(); 
 
?>
 

81. Що виведе цей код? Чому?



class A {
    public function __construct(string $a){
        $a .= $a;
    }
}

class B extends A {
    public function __construct(int $a){
        $a++;
    }
}

$b = new B(1);

var_dump($b);

82. Напишіть функцію PHP для обчислення факторіала заданого числа за допомогою рекурсії.

83. Напишіть сценарій PHP, який перевіряє адресу електронної пошти за допомогою регулярних виразів.

84. Напишіть функцію PHP для сортування масиву цілих чисел у порядку зростання за допомогою алгоритму bubble sort.

85. Напишіть функцію PHP, щоб видалити всі повторювані значення з масиву.

86. Створіть клас PHP, який реалізує структуру даних черги.

87. Напишіть сценарій PHP, який генерує випадковий пароль із поєднанням літер, цифр і символів.

88. Напишіть функцію PHP для пошуку найбільшого та найменшого значень у масиві цілих чисел.





Питання для Middle / Senior


Під час співбесіди для ґрейдів Middle та Senior інтервʼюери вже не стільки звертають увагу на код, скільки на архітектурні рішення, патерни, які використовує розробник. Часто обом ґрейдам ставлять одні й ті самі питання, але очікування від відповідей мідла менші. «Кандидатів ретельно розпитують про попередній досвід, уточнюють, з якими проблемами стикався та як їх вирішував, в яких процесах працював, від кого приходили завдання, яким був процес рефакторингу коду тощо», — розповідає Ілля Козинець, Tech Lead в Sendios.


Питання, щоби перевірити хард-скіли, стосуються загального стека, з яким працює компанія та кандидат: фреймворки, сервіси кешування (Redis, MemCashed), бази даних MySQL, брокери черг (RabbitMQ тощо), а також патернів, різних методологій, мікросервісів, CI/CD, контейнеризації.


«Сильні софт-скіли — одна з ключових відмінностей сеньйора від мідла. Для нас це пріоритетніше за хард-скіли, тому ми багато питань ставимо саме по цій частині: ставлення кандидата до роботи, вміння пріоритезувати та декомпозувати задачі, здатність генерувати ідеї, вміння комунікувати, — ділиться Ілля Козинець. — Наприклад, у кандидата є ідея (процесна або технічна), яка б, на його думку, могла якісно покращити роботу. Він її презентував команді, але її не взяли в роботу. Які його наступні кроки? Він проаналізує недоліки комунікації чи просто опустить руки? Це важливо і багато говорить про кандидата».




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


89. Чому ви програмуєте на PHP?

90. Які найважливіші технічні навички для Middle / Senior PHP Developer?

91. Опишіть ваш процес виявлення та усунення помилок в існуючому коді?

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

93. Яку проблему вирішує патерн Адаптер? У чому його відмінність від патерну Декоратор?

94. Які принципи SOLID ви найчастіше порушували під час розробки та з якої причини?

95. Чи можете поділитися прикладом успішного впровадження DDD у PHP-проєкт? З якими проблемами ви зіткнулися під час впровадження?

96. Що таке Entity, Aggregate, Value Object в DDD?

97. В чому переваги або недоліки використання Value Object? Навіщо його використовувати?

98. Які ви знаєте способи комунікації між мікросервісами?

99. Як організувати транзакції на рівні мікросервісів?

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

101. Як аргументувати рефакторинг замовнику/керівнику?

102. На що спираєтеся при рефакторінгу? З якою метою ви робите рефакторинг і що плануєте отримати в результаті?

103. Наведіть приклад найскладнішого кешування зі своєї практики?

104. Які відмінності між Redis та Memcached?

105. Які структури даних Redis використовували на практиці?

106. Чи є вас досвід роботи з брокерами черг?

107. Чи використовували RabbitMQ? Які знаєте exchanges?

108. Для чого використовується опція durable в RabbitMQ?

109. Опишіть свій досвід написання документації? Які формати використовували?

110. Як ви зʼєднаєте скрипт, написаний на Python та на PHP? Як зробити, щоби PHP використовував функціонал Python за умови, що ви не можете використовувати функції командної строки?

111. Що таке рефлексія?

112. Що таке OPcache? Що дає та як його використовувати?

113. Які мікросервісні патерни ви знаєте?

114. Що таке stateless та statefull? Як ці сервіси працюють?

115. Шина подій — що це і як використовується?

116. В чому переваги на недоліки асинхронних викликів?

117. Абстрактний клас — що це таке і навіщо він потрібен?

118. Чи існує функція для створення копії масиву PHP в інший?

119. Поясніть різницю між exec(), system() та passthru()?

120. Максимальна кількість аргументів, дозволених у функції в PHP?

121. Поясніть різницю між shell_exec() і exec()

122. Яка різниця між інтерпретатором PHP і обробником PHP?

123. У чому саме різниця між array_map, array_walk і array_filter?

124. Які великі зміни PHP зазнав за останні кілька років?

125. У чому відмінність параметризованих та непараметризованих функцій?

126. Чому ми використовуємо extract()?

127. Для чого використовується оператор Null coalescing?

128. Чи підтримує PHP перевантаження методів?

129. Порівняйте MySQLi та PDO. Які плюси та мінуси?

130. Яка різниця між query(), PDO та execute()?

131. Що таке автозавантаження класів у PHP?

132. Коли краще використовувати require_once, а не require?

133. Чи є якась причина використовувати strcmp() для порівняння рядків?

134. Як би ви створили клас Singleton за допомогою PHP?

135. Як перевірити, чи масив PHP є асоціативним?

136. Які недоліки використання постійного з'єднання в PDO?

137. Поясніть ієрархію винятків, представлену в PHP7?

138. Який найкращий спосіб об’єднати два об’єкти PHP?

139. Як перетворити помилки на винятки в PHP?

140. Що таке оператор yield у PHP?

141. Що краще для звільнення пам’яті за допомогою PHP: unset() чи $var = null?

142. Чи має PHP потоки?

143. Як виміряти час виконання скриптів PHP?



Бази даних


144. Опишіть свій досвід роботи з різними типами баз даних (MySQL, PostgreSQL, MongoDB тощо)?

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

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

147. З якими проблемами безпеки бази даних ви стикалися, і як ви їх вирішували?

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

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

150. Чи реалізували ви механізми кешування для запитів до бази даних у своїх попередніх проєктах? Поясніть переваги та недоліки різних стратегій кешування?

151. У вас є запит до бази даних, який повільно відпрацьовує. Назвіть кілька способів, як це можна виправити. Який з них ви вважаєте оптимальним?

152. Праймері індекс можна створити на одну, дві чи три колонки?

153. Як додати нове поле у велику таблицю в MySQL?

154. Що таке партиціювання, шардування та реплікація?

155. Як зберігати приватні повідомлення у базу даних?

156. Як знайти та оптимізувати «важкі» запити?

157. Що таке sensitive дані? Як вони зберігаються в базі та відображаються в логах?

158. Які ви знаєте структури даних? Які з них використовували на практиці?



CI/CD


159. Чи використовували ви якісь інструменти CI/CD у своїх попередніх проєктах? Які з них і яким чином?

160. Як ви інтегрували модульне тестування та інші типи автоматизованого тестування у свій процес CI/CD?

161. Розкажіть про свій процес розгортання змін коду у виробництві?

162. З якими проблемами ви зіткнулися під час впровадження процесів CI/CD і як ви їх подолали?

163. Розкажіть про свій досвід роботи з інструментами контейнеризації та оркестрації (Docker, Kubernetes)?

164. Як відкотити розгортання, якщо щось піде не так?

165. Як переконатися, що ваші конвеєри CI/CD безпечні та вільні від вразливостей?

166. Чи можете ви поділитися будь-якими найкращими практиками з ваших попередніх реалізацій CI/CD?

167. У вас є завдання, яке передбачає міграцію бази даних, яка виконується доволі довго. Опишіть процес, як би ви це здійснили: чи варто виконувати міграцію разом з кодом? Що робити зі старим кодом? Як підтримувати стару і нову версію базу даних?



Софт-скіли


168. У вас ідея, яка, на вашу думку, може вирішити важливу проблему. Ви презентували її команді, але її не оцінила/не взяли в роботу. Якими будуть ваші наступні дії?

169. У вас є дві пріорітетні задачі з однаковим дедлайном. Ви не встигаєте виконати обидві задачі до дедлайну. Якими будуть ваші наступні кроки?

170. Розкажіть про найбільший факап за свою карʼєру?

171. Щоб ви першочергово імплементували/змінили, маючи зони впливу свого попереднього керівника?


© 2035 by Business Name. Made with Wix Studio™

bottom of page