Співбесіда з PHP. 250+ запитань для Junior, Middle та Senior
Пропонуємо список питань, які ставлять українським розробникам на технічних співбесідах з PHP. Звісно, він не є вичерпним, проте має перевагу: його формували спеціалісти, які проводять інтерв’ю в різних ІТ-компаніях.
Попередні статті рубрики присвячені Python , .NET , JavaScript та Java .
Junior
Загальне
1.Що таке посилання?
2.Які основні операції з використанням посилань?
3.Назвіть прості типи даних, підтримувані в РНР?
4.Що таке інкремент і декремент, у чому різниця між префіксним і постфіксним інкрементом і декрементом?
5.Що таке рекурсія?
6.У чому різниця між =, == і ===?
7.Які знаєте принципи ООП?
8.Яка система типів використовується в PHP? Опишіть плюси та мінуси.
9.Чим відрізняються ключові слова: include і require, mysql_connect і mysql_pconnect?
10.Що таке інтерфейси? Чи використовуєте їх? Якщо так — розкажіть про це.
11.Що таке абстрактний клас і чим він відрізняється від інтерфейсу?
12.Чи може абстрактний клас містити приватний метод?
13.Які модифікатори видимості є в РНР?
14.Які магічні методи ви знаєте і як їх застосовують?
15.Що таке генератори і як їх використовувати?
16.Що робить оператор yield?
17.Що таке traits? Альтернативне рішення? Наведіть приклад.
18.Опишіть поведінку під час використання traits з однаковими іменами полів і/або методів?
19.Чи будуть доступні приватні методи trait в класі?
20.Чи можна компонувати traits в trait?
21.Розкажіть про обробку помилок і винятки (try catch, finaly і throw).
22.Що таке type hinting, як працює, навіщо потрібен?
23.Що таке namespace’и та навіщо вони?
24.Порівняння значень змінних у РНР і підводні камені? Приведення типів. Що змінилося в PHP 8 у цьому контексті?
25.Як працює session у РНР, де зберігається, як ініціалізується?
26.Суперглобальні масиви. Які знаєте? Як використовували?
27.Порівняйте include vs required, include_once vs required_once.
28.Що означає складність алгоритму?
29.Що таке замикання в PHP? Наведіть приклад.
30.Яка різниця між замиканням у PHP і JavaScript?
31.Що таке пізнє зв’язування? Розкажіть про поведінку та застосування static.
32.Як перевизначити зберігання сесій?
33.Розкажіть про SPL-бібліотеку (Reflection, autoload, структури даних).
34.Розкажіть про принципи SOLID.
35.Розкажіть про шаблони GRASP.
36.Розкажіть про Dependency Injection: що таке DI-контейнери? Які є варіанти реалізацій?
37.Що вам відомо про MVC?
38.Що вам відомо про шаблони GoF?
39.Що вам відомо про шаблони, які застосовуються в ORM?
40.Напишіть/розкажіть на PHP приклад реалізації патерну Singleton.
41.Що таке Docker? Яким є принцип його роботи?
42.Що таке LAMP/NAMP?
43.Розкажіть про regexp.
44.Розкажіть про SSH-протокол.
45.Що таке PDO?
46.Що нового з’явилося в PHP 8?
47.Що таке PHP PEAR?
48.Які версії PHP досі підтримуються?
49.У чому різниця між GET і POST?
50.Чим відрізняються оператори BREAK і CONTINUE?
51.Чи є різниця між одинарними та подвійними лапками?
52.Що таке Cookie і навіщо вони використовуються?
53.Що не можна зберігати в Cookie і чому?
54.Якому середовищу розробки віддаєте перевагу й чому?
Git
55.Якою командою додати зміни?
56.Якою командою зафіксувати зміни?
57.Якою командою відправити зміни у віддалений репозиторій?
Бази даних
58.Що таке транзакція?
59.Що таке нормалізація?
60.Що таке денормалізація? Для чого вона потрібна?
61.Які є типи зв’язків у базі даних?
62.Що означає твердження про те, що СУБД підтримує контроль посилальної цілісності зв’язків?
63.Якщо використовувана вами СУБД не підтримує каскадні видалення для підтримки посилальної цілісності зв’язків, що можна зробити для досягнення аналогічного результату?
64.Що таке первинний і зовнішній ключі?
65.Які відмінності між первинним і унікальним ключами?
66.Які є типи JOIN і в чому відмінності?
67.Що таке курсори в базах даних?
68.Що таке агрегатні функції SQL? Наведіть кілька прикладів.
69.Що таке міграції?
70.Розкажіть про зв’язки один до одного, один до багатьох, багато до багатьох.
71.Назвіть і поясніть три будь-які агрегувальні методи.
72.Навіщо використовують оператор угруповання GROUP BY?
73.У чому різниця між WHERE і HAVING? Наведіть приклади.
74.У чому різниця між операторами DISTINCT і GROUP BY?
75.Для чого потрібні оператори UNION, INTERSECT, EXCEPT?
76.Опишіть різницю типів даних DATETIME і TIMESTAMP.
77.Які ви знаєте рушії таблиць і чим вони відрізняються?
78.Які способи оптимізації продуктивності баз даних знаєте?
79.Що таке партиціонування, реплікація і шардинг?
80.Чим відрізняються SQL від NoSQL бази даних?
81.Які бувають NoSQL бази даних?
82.Які типи даних є в MySQL?
83.Різниця між LEFT JOIN, RIGHT JOIN, INNER JOIN?
84.Різниця між JOIN і UNION?
85.Що таке індекси? Як вони впливають на час виконання SELECT, INSERT?
86.Що таке збережені процедури, функції та тригери в MySQL? Для чого вони? Наведіть приклади використання.
87.Як організувати збереження вкладених категорій у MySQL?
Laravel
88.Які є зв’язки і як вони реалізуються в Laravel?
89.Що таке поліморфні зв’язки, як вони працюють?
90.Що таке middleware? Навіщо це? На якому етапі виконується?
Composer
91.Що таке Composer?
92.Чим відрізняється require від require-dev?
Практичні завдання
93.Спроєктуйте базу даних для зберігання інформації про книги та їхніх авторів. Напишіть запит для вибірки всіх авторів і кількості написаних ними книг.
94.Є матриця 3?3. Порахуйте діагоналі, тільки парні/непарні числа в діагоналях.
95.Ваш застосунок видає 500 помилку. Опишіть послідовність пошуку проблеми.
96.Напишіть функцію, яка визначає, чи слово є паліндромом.
97.Який результат видасть такий код:
If (-1) print "True" else print "False"
98.Який результат видасть такий код:
$a = 3; $b = 2; echo (int) $a/(int) $b;
99.Який результат видасть такий код:
var_dump (array_merge ([2 => 'a'], [3 => 'b']));
100.Є масив товарів у випадковому порядку із вказанням виробників. Напишіть метод для його сортування, щоб максимальна кількість перших товарів відповідала такому критерію: кожний наступний товар мав виробника, відмінного від попереднього.
101.Чому буде дорівнювати $ x після виконання виразу $ x = 1 + «1%» + «$ 1»?
102.Є масив Integer, напишіть можливі способи, як збільшити кожен елемент на одиницю (+1).
103.Схематично реалізувати структуру (класи) для завдання:
- Створити API для розміщення постів у Facebook та Google.
- URL для розміщення постів Google www.google.com/new-post?text=
- URL для розміщення постів Google facebook.com/add-post?message=
104.Є таблиці 2?3 і 3?2. Select * from a, b . Яка розмірність результату?
Order | ||
id | user_id | money |
User | |
id |
До таблиці є запити:
- всі юзери з конкретного міста;
- всі видалені користувачі;
- всі видалені користувачі з конкретного міста.
Які індекси для таблиці найкраще поставити?
User | |
city_id | deleted (bool) |
105.Напишіть запит для збільшення значення column1 на +1 для id = 2
id | column1 |
1 | 1 |
2 | 2 |
106.Напишіть цикл for так, щоб аргумент циклу змінювався в геометричній прогресії.
107.Чому дорівнюють вирази:
print (!! "false")
print (!! true)
print ((int) '125g7')
print ((int) 'x52')
108.Який результат виконання функції? Як виправити результат?
in_array (1, [0, '0', true])
109.Напишіть клас з реалізацією всіх можливих способів суворої типізації даних з урахуванням можливостей PHP 7.4.
Laravel:
110.Напишіть метод для зв’язку «багато до багатьох». У методі додайте умову для значення, яке збережено в поле проміжної таблиці. Наприклад, є студенти та курси, на які вони записалися. Запис студента на курс повинен бути підтверджений. Підтвердження зберігається в проміжній таблиці як is_approve. Для моделі студентів має бути метод approvedCourses.
111.Напишіть запит з використанням моделі Query Builder, який буде відповідати запиту:
Select * from `users` where ( 'age'> 21 and ( 'has_education' == 1 or 'work_experience'> 2))
112.Напишіть artisan-команду для створення моделі та міграції для неї.
113.Напишіть artisan-команду для очищення кешу фреймворку.
Middle
Загальне
1.Як передаються змінні (за значенням або за посиланням)?
2.Які процеси відбуваються, коли користувач вводить у браузері URL?
3.Що таке варіативна функція або splat-оператор?
4.Що таке OWASP?
5.Які типи вразливостей знаєте? Як від них захищатися?
6.Що таке ідемпотентні методи? Які HTTP-методи є ідемпотентними для REST?
7.Що таке stateless?
8.SOAP vs REST. У чому різниця?
9.Які методи авторизації використовують для побудови API?
10.Що може містити інтерфейс?
11.Клас містить властивість, яка, своєю чергою, є об’єктом. Що буде містити ця властивість у клонованому об’єкті: посилання на той самий дочірній об’єкт чи копію дочірнього об’єкта? Що потрібно зробити, щоб це змінити?
12.Що таке Mock? Де використовують і навіщо?
13.Що таке PSR?
14.Опишіть реалізацію одного з шаблонів проєктування.
15.Що таке Redis?
16.Як зберігаються дані в Redis/Memcached?
17.Розкажіть про доцільність застосування Redis/Memcached для кешування. Які плюси та мінуси?
18.Назвіть відмінності між nginx і Apache.
19.Що таке Opcash? Як він працює?
20.Що таке JIT? Як він працює?
21.Навіщо потрібне ключове слово final?
22.Що нового в РНР 7/8?
23.Що таке SOLID, DRY, KISS, YAGNI?
24.Назвіть патерни проєктування, з якими доводилося працювати.
25.Що таке проста фабрика?
26.Що таке Service Layer і де його варто застосовувати?
27.Як влаштований Singleton і чому його вважають антипатерном?
28.Що таке ідемпотентність?
29.Опишіть життєвий цикл HTTP-запиту?
30.Що таке купа і стек?
31.Що таке рефлексія?
32.Що таке хеш-функція і де вона використовується?
33.Як застосовуються черги в РНР?
34.Як у загальних рисах працює OPcache?
35.Що таке GRASP?
36.Що таке TDD?
37.Чим відрізняються модульні тести від інтеграційних?
38.Що таке трейти? Як застосовувати на практиці?
39.Як вирішити конфлікти під час використання trait?
40.Як працює автозавантаження класів?
41.У чому різниця між стеком і чергою?
42.Розкажіть про Unit Tests (required), Functional Tests (optional). Моки і стаб у PHP.
43.Уявімо ситуацію, в якій нам потрібно викликати приватний метод, як це зробити?
44.Опишіть різницю між PHP-FPM і PHP на сокеті.
45.Як би ви реалізували завантаження великих звітів з великою кількістю даних (файли від 1 гігабайта до N гігабайтів).
46.Як би ви імпортували 50-гігабайтний файл xml в базу даних?
47.Чому після PHP 5 йде відразу 7, куди поділася 6?
48.Чи є різниця між self і this у PHP?
49.Що таке PuTTY?
50.У нас є важливий PHP-файл, його треба запускати кожні 20 секунд, як би ви це зробили?
51.Як розшифрувати 644 в правах на файл у Linux?
52.Що таке Opcode?
Git
53.У чому різниця між merge і rebase?
54.Якою командою можна зробити ресет змін, не втративши їх?
55.Що таке stash і навіщо він потрібен?
Бази даних
56.Яка різниця між MyISAM i InnoDB? У яких випадках і що краще застосовувати?
57.Як знайти та оптимізувати «важкі» запити?
58.Які є типи індексів?
59.Як зберігати координати точки на карті в БД?
60.Які типи індексів бувають у RDBMS?
61.Яку властивість полів БД потрібно враховувати під час вибору типу індексу?
62.Коли варто використовувати індекси, які є переваги та недоліки?
63.Що таке ACID?
64.Що таке план виконання запиту і як його дізнатися?
65.У чому різниця між типами даних CHAR і VARCHAR у SQL?
66.Яке призначення транзакцій? Розкажіть про принцип роботи.
67.Назвіть 3–4 нормальні форми реляційних БД.
68.Яке призначення реплікації? Які є типи зв’язків і в чому різниця між ними?
69.Що таке індексація? Які є типи індексів? Який сенс їх використовувати?
70.Що таке повнотекстовий пошук у MySQL? Як він реалізується?
71.Що таке cursor у MySQL-процедурах?
72.Розкажіть про RabbitMQ або Gearman.
73.Що знаєте про Solr/ElasticSearch ?
74.Що таке дедлоки MySQL?
75.Чи впливає порядок JOIN на план виконання MySQL-запиту?
Laravel
76.Як і які формуються запити під час використання методу with ()?
77.Чим відрізняються методи with () і load ()?
Практичні завдання
78.Вам потрібно спарсити продукти та їхні ціни з інтернет-магазину. За допомогою чого будете це робити і які основні нюанси потрібно врахувати?
79.Для сайту користувачів необхідно зробити механізм додавання і відображення аватарок. Як би ви його реалізували?
80.Який результат видасть такий код:
class Test { public $ value; } $a = new Test; $a->value = 1; $b = $ a; $b->value = 2; echo $a->value;
81.Які модифікатори доступу допустимі в реалізації методу getName:
abstract class Cls { protected abstract function getName (); } class Child extends Cls { (Public, protected, private) function getName () {} }
82.Реалізуйте чергу повідомлень, використовуючи MySQL для зберігання даних. Як уникнути ситуації, коли декілька воркерів отримають в обробку однакове повідомлення?
83.Є матриця з числами 3?3. Як знайти числа, що не мають парних/непарних сусідів?
84.Є мануал на API від Європейського центрального банку з курсом валют. Потрібно знайти мінімуми-максимуми за 5 років, а потім те саме, але з розбивкою за місяцями.
85.Збережіть свою бібліотеку в БД. Потрібно зберегти назви книг і імена авторів. Запропонуйте структуру таблиць. Виведіть звіт «книга — кількість співавторів».
86.Реалізуйте примітивний роутинг, який забезпечує роботу Рауса за шаблоном "/ {class_name}/{method_name} /"
87.Напишіть архітектуру, яка ґрунтується на базовій абстракції. Дочірні класи розширюються за допомогою інтерфейсів. Реалізацію однакових методів виконайте, використовуючи трейти (реалізовувати в абстракції).
88.Напишіть запит, у результаті виконання якого виведеться значення «id» і «val», якщо значення стовпця column> 5 => val = val1 інакше val2.
id | column | val1 | val2 |
1 | 1 | ‘a’ | ‘d’ |
2 | 6 | ‘b’ | ‘e’ |
3 | 2 | ‘c’ | ‘f’ |
89.Laravel: напишіть розклад, який буде виконуватися щоп’ятниці кожної години у 15 хвилин.
90.Напишіть кастомну artisan-команду, яка в консоль буде виводити поточний час.
Senior
Загальне
1.Як ви розумієте REST?
2.Що таке Copy-on-write?
3.Що таке пізнє статичне зв’язування?
4.Що таке CQRS?
5.Що таке cohesion і coupling?
6.Як можна отримати значення приватної властивості класу в рантаймі?
7.Як можна отримати значення приватної властивості класу в рантаймі без використання рефлексії?
8.Чи варто використовувати в методах значення за замовчуванням null. Якщо ні, то чому?
9.Чи варто повертати null з методів. Якщо ні, то чому і як писати код у таких випадках?
10.Чи варто передавати null як параметр методів. Якщо ні, то чому і як писати код?
11.Як ви розумієте Special Case/Null Object і де його варто застосовувати?
12.Який підхід варто застосувати під час тестування коду, який має зовнішні залежності (наприклад, звернення до API Google)?
13.Що таке DDD?
14.Що таке мікросервісна архітектура?
15.Які є способи комунікації між мікросервісами?
16.Розкажіть про ReactPHP або Swoole.
17.Що таке фільтр Блума?
18.Що таке gap locks у MySQL?
19.Навіщо потрібне кешування? Яку проблему воно розв’язує?
20.Які види кешсховищ знаєте і застосовували? Чим вони відрізняються?
21.Чим характеризується ефективність кешування?
22.Наведіть найскладніший приклад кешування з практики.
23.Що таке sensitive дані? Як зберігаються в базі? Як відображаються в логах?
24.Коротко розкажіть про історію PHP. Що з’являлося в кожній версії? Куди розвивається PHP на ваш погляд? Що нового в останній версії?
25.Як у PHP очистити пам’ять?
26.Що таке антипатерни? Наведіть кілька прикладів.
27.Як зробити рефакторинг великого legacy-проєкту. Як це аргументувати/продати PM’у, замовнику?
28.Чим відрізняється Dependency Injection від Service Locator?
29.Розкажіть про витоки пам’яті в PHP. Наведіть приклади. Як боролися?
30.Як працює Garbage Collector? Коли є сенс викликати?
31.За яким принципом будете вибирати архітектуру для своєї майбутньої програми?
32.З якими видами архітектури застосунків стикалися?
33.Структури даних. Які знаєте, які використовували на практиці?
34.З якими ще видами API стикалися? Які були проблеми? Як вирішували?
35.Як ви розумієте Exception flow у контексті PHP.
36.Розкажіть про автоматичні аналізатори коду PHP (Roundcube тощо).
37.Розкажіть про Performance & профілювання PHP-коду (Xdebug, XHprof тощо).
38.Розкажіть, як би ви реалізували систему, коли є багато джерел даних, які повертають у різних форматах дані про користувача. Є одержувачі даних, які вибирають, з яких джерел вони хочуть приймати дані API.
39.Розкажіть про проєкт, яким по-справжньому пишаєтеся. Які технологічно незвичні рішення ви застосували для його успішної реалізації?
40.Як ви організовуєте тестування коду? Коли покриття тестами нераціональне? Чи були у вас такі проєкти?
Git
41.Як змінити лише повідомлення останнього коміта?
42.git rebase -i HEAD ~ 3 що робить ця команда і які можуть виникнути проблеми під час її застосування?
43.Навіщо команда git bundle?
44.Якою командою можна влити коміт у поточну гілку?
45.Як виконати склеювання комітів?
Бази даних
46.Які структури даних підтримує Redis?
47.Що мається на увазі під поняттям «тригер» у SQL?
48.Яка різниця між реляційними та нереляційними СУБД?
49.Які NoSQL СУБД знаєте?
50.Що таке ACID Compliance?
51.Що таке Views? Які переваги й недоліки?
52.Що таке рівні ізоляції транзакцій?
53.Що таке concurrent query?
54.Що таке кластерні індекси?
55.Як побудувати соціальну мережу, яка витримає навантаження у 100 тисяч відвідувачів в онлайні. І зможе пропонувати користувачам, наприклад, з Нью-Йорка, у друзі людей, які живуть у цьому місті. Даних багато, працювати система має швидко. Як усе зберігати? За яким принципом будувати запити?
Практичні завдання
56.Який принцип порушено в коді та як можна виправити код?
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; } else if (is_a($shape, 'Triangle')) { $area[] = $shape->radius * $shape->radius * pi(); } } return array_sum($area); } }
57.Є масив зі 10 млн унікальних рядків. Програма отримує новий рядок, необхідно знайти всі рядки з масиву, що задовольняють критерій: відстань Левенштейна до нового рядка менше як 3 операції.
58.Потрібно побудувати сервер посилання емейлів. Які б класи/шари/абстракції ви виділили?
59.Як би ви реалізували скорочувалку урлів, стискач/розтискач зображень, парсер останніх повідомлень форуму, де згадується певний бренд, перевірку цін на товари у конкурентів?
Дякуємо за підготовку статті Денису Оленіну , Владиславу Карпенку , Євгену Кубаю , Вадиму Проніну , Володимиру Кочеткову , Сергію Воробєю , Олегу Гриньківу , В’ячеславу Долі , Олександру Шарамку , Дмитру Каленюку , Олегу Висоцькому , Олександру Конотопу , Артему Висоцькому , Сергію Андрусенку .
Наступний матеріал готуємо про C#. Якщо ви співбесідуєте фахівців різних рівнів на позицію C#-розробника, пишіть на [email protected] .
Опубліковано: 01/03/21 @ 11:00
Розділ php
Рекомендуємо:
Обговорюємо рейтинг міст, відкриті зарплатні вилки, примхи розробників та Clubhouse. Подкаст DOU #6
Запускаємо пет-проєкт у велике плавання, або Як вивести свою ідею на ринок
Держи код, что делать дальше — разберешься. Инструкция по выживанию в legacy-проектах
JetBrains: как получить бесплатный официальный ключ (лицензию)
Оптимизируем процесс тестирования: на какие подходы стоит обратить внимание