nmk

Перелік питань для самоперевірки (Лекції 1-18)

Лекція 1

  1. Чим функціонально відрізняються Front-end та Back-end напрямки веброзробки?
  2. Опишіть своїми словами життєвий цикл типового HTTP-запиту від моменту натискання “Enter” у браузері.
  3. Чому спроба розглядати файл .php просто розширенням “Якась папка/index.php” (через подвійне клацання в системі файлів) не спрацює і чому замість HTML ви побачите програмний код? Поясніть роль локального сервера.
  4. За допомогою якої базової мовної конструкції в PHP дані виводяться на екран (в поточний HTTP Response)? Який синтаксичний знак є обов’язковим в кінці цього виразу?
  5. Чому PHP-коментарі (наприклад // TODO: Перевірити пароль) вважаються безпечними, на відміну від HTML-коментарів (<!-- TODO: ... -->), і чи може кінцевий користувач сайту знайти їх через функціонал браузера “Переглянути вихідний код”?

Лекція 2

  1. Знайдіть помилки в іменах цих змінних: $ 5User, $my-city, $First Name, #id.
  2. Яким буде результат виконання $text = "5" + 10; у PHP? Чому (згадайте динамічну типізацію та Type Juggling)?
  3. У чому практична відмінність між одинарними ('...') і подвійними ("...") лапками під час роботи з текстом? Який варіант працює трохи швидше і чому?
  4. Який знак використовується в PHP для “Зшивання” рядків, і чому розробники мови не використовували математичний плюсик (+) для цього, як в JavaScript?
  5. Що поверне вираз ($a === $b) і ($a == $b), якщо $a = "10" (рядок), а $b = 10 (число)? Поясніть концепцію та небезпеку нестрогої рівності.

Лекція 3

  1. Чому використання альтернативного синтаксису (через :) під час виведення HTML-тегів є кращою практикою, ніж обгортання кожного HTML-тегу в великі фігурні скобки { echo "<div>"; }?
  2. Як правильно використовувати тернарний оператор і чим він відрізняється від класичного блоку if?
  3. Які 3 головні переваги структури match порівняно зі старими конструкціями switch-case? Який вид порівняння (строгий чи ні) застосовує match?
  4. З яких 3 ключових аргументів (виразів) складається стандартний цикл for?
  5. У чому практична різниця між ключовими словами break та continue? Наведіть приклади их використання під час ітерації.

Лекція 4

  1. Поясніть сутність принципу “DRY” і як користувацькі функції в PHP допомагають його досягати (не просто поясніть словами, а наведіть приклад із практики).
  2. Що станеться, якщо спробувати викликати таку функцію createUser() і передати в неї меншу кількість параметрів-аргументів, ніж вимагалося під час декларації, та коли параметрам НЕ задано значень за замовчуванням?
  3. Де і чому необхідно розміщувати ті параметри функції, які містять “Значення За Замовчуванням” (на початку функції, в кінці дужок чи довільно) і чим це обґрунтовано?
  4. Розкажіть різницю та наслідки між передачею “за значенням” (by value, без спеціальних символів) і передачею “за посиланням” (by reference, символ &). Яка передача стоїть у PHP “За Замовчуванням”?
  5. Що таке механізм Області Видимості (Variable Scope)? Поясніть концепцію Локальної пам’яті, що знищується по завершенні оператора return. Чи побачить функція змінну $total, якщо ви оголосили її рядком вище до декларації function calculate(...) без слова global?

Лекція 5

  1. Чому спроба доступитись до першого елемента масиву $cars = ['BMW', 'Audi'] через код echo $cars[1]; виведе не BMW, а Audi?
  2. Яким оператором ми розділяємо “Ключ” і його “Значення” під час створення асоціативного масиву? А яким — звичайні змінні під час їх присвоєння?
  3. Чому виведення в браузер структурних даних типу масиву через класичну команду роздрукки echo $userArray; призведе до помилки? Яку утиліту потрібно застосовувати програмісту для перевірки/дебагінгу вмісту $userArray (згадайте var_dump() та print_r)?
  4. У чому головна відмінність (перевага дизайну) циклу foreach при роботі з масивами порівняно із традиційним циклом for ($i=0; ... )?
  5. Назвіть 3 випадки з реального життя сайту (інтернет-магазину чи блогу), коли багатовимірні масиви будуть необхідним способом зберігання структур замість скалярних одиничних змінних.

Лекція 6

  1. Поясніть сутність терміну “Stateless” у протоколі HTTP та аргументуйте, з якою проблемою стикнуться розробники інтернет-магазину при проєктуванні “Кошика покупок” через таку природу протоколу?
  2. Назвіть 3 ключові характеристики, які розрізняють метод розробки ресурсу через GET від POST. Крім способу “сховку” параметрів (URL vs Body), яка суттєва різниця у їхньому цільовому (семантичному) призначенні?
  3. Що таке Суперглобальний масив в контексті PHP? Чому нам не потрібно писати global $_GET у тілі невеликої власної function, щоб його побачити?
  4. Що робить оператор подвійного знака питання ($myAge = $_GET['age'] ?? 18;) і чому його використання є найкращою практикою під час роботи зі структурами даних, отриманими від зовнішнього клієнта (браузера)?
  5. Чим буде небезпечно відправляти форму авторизації (Логін, Пароль) методом GET? Де саме (як мінімум в 3 місцях комп’ютера або мережі) залишиться скомпрометована інформація про введені дані користувача?

Лекція 7

  1. Знайдіть помилку в логіці: “Ми додали атрибут required для поля email і вказали type=email. Це означає, що можемо безпечно й відразу зберігати змінну $_POST['user'] в базі даних”. Поясніть концепцію Клієнтської і Серверної валідацій.
  2. Яким виявиться вміст масиву $_POST всередині PHP, якщо HTML-форма містить елемент <input id="super_login" class="login-field" type="text" /> (але користувач ввів туди “Admin”)? Чому?
  3. Що таке і для якого класу вразливостей застосовують функцію htmlspecialchars()? Що станеться, якщо нею не обгорнути коментар з текстом <script>alert('Hello!')</script>, який написав хакер?
  4. Розроблений вами сайт має дуже велику форму опитування (5 текстових полів, 3 радіокнопки тощо). Розкажіть теоретично концепцію (Як впровадити алгоритм), щоб у разі помилки Валідації користувачу не довелось вводити все наново (Sticky Forms).
  5. Яку перевірку в $_SERVER необхідно реалізувати В САМОМУ ПОЧАТКУ скрипта, який приймає форму, щоб гарантувати, що він спрацює ТІЛЬКИ на події “Submit” з форми, а не на прямому відкритті URL у браузері через Enter?

Лекція 8

  1. Знайдіть помилку і поясніть, чому метод $_POST['avatar_file'] завжди буде повертати просто рядок тексту, а масив $_FILES буде порожнім, якщо форма має вигляд: <form method="POST"><input type="file" name="avatar_file"></form>. Якого фундаментального атрибута тут не вистачає?
  2. Яким числовим кодом помилки error в масиві $_FILES позначається успішне, стовідсоткове скачування файлу на тимчасову територію сервера (Temp dir)?
  3. Де фізично перебуває файл до виклику move_uploaded_file()? Згадайте, якою буде його доля по завершенні роботи upload.php, якщо програміст його так і НЕ перемістить?
  4. Назвіть щонайменше 2 причини, через які категорично заборонено зберігати картинки користувачів (аватарки) на сервері під їхнім оригінальним ім’ям ['name'].
  5. Концепція “White list” (Білого списку) для розширень файлів при завантаженні вважається в рази надійнішою, ніж “Black list” (Чорний список, напр. заборона лише .php і .exe). Чому?

Лекція 9

  1. Поясніть сутність повідомлення-помилки PHP під час розробки Cannot modify header information - headers already sent by...? В який конкретно момент роботи функції session_start() чи setcookie() ця помилка спрацьовує і як її гарантовано уникнути?
  2. Ви розробляєте інтернет-магазин. У вас немає реєстрації (отже немає користувачів у Базі Даних), але люди вже додають товари у “Кошик” покупок. Який механізм краще обрати для зберігання масиву цих товарів: Cookies чи $_SESSION? Обґрунтуйте ризики обох варіантів.
  3. Прочитайте код іншого розробника: if ($_COOKIE['user_is_super_admin'] === 'yes') { /* видалити всю базу даних */ }. Яка фундаментальна архітектурна вразливість допущена в цій системі перевірки прав адміністратора (Access Control)?
  4. Де фізично на комп’ютері розташовуються дані (значення), збережені всередині масиву $_SESSION['login'] = 'Ivan', і чому сторонній клієнт (навіть досвідчений програміст) принципово не здатен прочитати або змінити цей факт зі свого браузера (через F12)?
  5. Який зв’язок (місток) існує між Сесією (що лежить на сервері) та Браузером (який робить stateless-запити)? Як сервер взагалі розуміє, який файл сесії “підняти” для вас і як називається ця єдина технічна кука?

Лекція 10

  1. Згадайте проблему зберігання інформації в умовно складному файлі DB.txt. Назвіть щонайменше дві критичні переваги спеціалізованого Сервера Баз Даних (MySQL чи PostgreSQL) над підходом текстових файлів, особливо в умовах навантаженого Інтернет-Магазину.
  2. Прокоментуйте ієрархію логічної архітектури СКБД. Що таке “Колонка (Стовпець / Column)” порівняно з “Рядком (Записом / Row)”? Що з них є “описом схеми та правил”, а що є “безпосередньо фактичними даними”?
  3. Навіщо програмісту, створюючи таблицю products, обирати формат VARCHAR(100) для колонки “Назви”, якщо можна просто обрати TEXT і більше ніколи не думати й не перейматися про ліміти введеної розрядності символів? На які ресурси впливає цей вимушений ліміт довжини?
  4. Що означає галочка “A_I” (Auto Increment) навпроти стовпця з типом даних Integer при проєктуванні таблиці? Яку проблему логіки розробника Backend-коду вона делегує системі серверу MySQL?
  5. Чому наявність “Primary Key” (Первинного ключа) є життєво необхідною, якщо в системі можуть бути створені 2 записи (Рядки) з абсолютно однаковим логіном та однаковим паролем і аватаркою (повні “Справжні Клони”)? Як ви зробите запит для знищення тільки одного їх?

Лекція 11

  1. Поясніть сутність терміну “Абстракція підключень” в PDO порівняно з MySQLi? Що доведеться змінити програмісту, якщо бізнес перенесе свій сайт з бази MySQL на базу PostgreSQL в обох випадках технологій підключення?
  2. Яким стандартним атрибутом (кодом) PDO ми змушуємо його при будь-якій дрібній синтаксичній неточності SQL “кидати” об’єкт Exceptions, замість того щоб він продовжував роботу зі зламаними даними “по-тихому” (Warning)?
  3. Чому конфігурація з паролем від БД (напр new PDO('mysql:host...', 'root', 'super_secret')) повинна знаходитися у файлі, що містить виключно код PHP без домішок та розширень у вигляді <!DOCTYPE html>, а закриваючий тег ?> там зовсім не бажано писати? Чим виклик файлу може погрожувати виводу Headers?
  4. Опишіть призначення конструкції try { ... } catch() { ... }. Що конкретно станеться з роботою PHP-скрипта (і виконанням решти коду нижче) якщо ми залишимо new PDO() прямо посеред документу БЕЗ обгортки (try/catch), а Базу Даних вимкнуть з розетки?
  5. Згадайте процес підключення через require_once. Що гарантує суфікс _once, порівняно зі звичайним require? Чому для файлу бази (db.php) саме ця форма підключення є найправильнішою, особливо в складних проєктах на десятки файлів?

Лекція 12

  1. Розшифруйте і поясніть кожну з чотирьох літер загальноприйнятого акроніму CRUD. З якими основними SQL-операторами ці літери співвідносяться?
  2. Опишіть, у якому вигляді метод $stmt->fetchAll(PDO::FETCH_ASSOC) віддає нам дані з таблиці. Чому використання прапорця FETCH_ASSOC є кращою практикою, аніж його відсутність?
  3. Чому архітектурно правильно не виводити SQL-запити прямо посеред <ul> списку, а робити $pdo->query в самому верху PHP-файлу (чи в окремому контролері), і лише нижче в HTML ітерувати його через foreach?
  4. Під час складання запиту INSERT INTO users (name, email) VALUES ... ми пропустили стовпець id. Чому база не видасть помилки і звідки вона знатиме, який ID присвоїти новоствореному користувачу?
  5. Згадайте інструкцію header("Location: index.php"); exit;. Що станеться, якщо після додавання товару в кошик через POST, система просто “намалює” сторінку-успіх без редиректа, а користувач випадково натисне F5 (Refresh) у своєму браузері?

Лекція 13

  1. Згадайте небезпеку DELETE FROM users. Якого базового і життєво необхідного слова бракує в цьому запиті, і до яких катастрофічних наслідків призведе його виконання “в лоб” на реальній працюючій системі?
  2. Яким стандартним способом у парадигмі класичної PHP-маршрутизації ми змушуємо скрипт delete.php дізнатись, який саме ID товару хоче видалити користувач, якщо він просто клікає на кнопку <a href=""> без використання форм? Що змінюється в адресному рядку?
  3. В чому полягає різниця між зміною статусу завдання через кнопку “Виконано” та повноцінною зміною заголовка цього завдання? Скільки SQL запитів та проміжних сторінок знадобиться для другого сценарію (форми редагування)?
  4. Назвіть SQL Запит типу UPDATE для таблиці products, з метою зміни виключно поля “price” (ціни) на цифру 25 і тільки для того товару, що має “id” = 89. (Напишіть сам рядок запиту).
  5. Чому наприкінці файлу delete.php (там де ми видалили товар) ми майже завжди змушені прописувати внутрішню функцію header("Location: index.php");? Що саме побачить клієнт браузером і де він “зависне”, якщо ми пропустимо цю команду, але запит до бази спрацює коректно?

Лекція 14

  1. Поясніть логіку хакера (на прикладі логіну через “OR 1=1”), який використовує хибу програміста в прямому зшиванні змінних. Як він примудряється “виконати” запит на автентифікацію з правильним результатом (true), не знаючи пароля?
  2. Яким візуальним математичним символом (або знаком пунктуації) найчастіше розділяються системні Плейсхолдери (Іменовані) в тілі SQL-запиту, підготованого для методу $pdo->prepare()?
  3. Чому спроба хакера написати команду DROP TABLE users і передати її на ваш бекенд, що збудований виключно на Prepared Statements (через асоціативний масив execute([$data])), не призведе до знищення бази і падіння вашої компанії? Яким чином СУБД (База Даних) дивиться на цей текст?
  4. Згадайте архітектурну модель CRUD із 12 лекції. До якої з цих літер (і який саме класичний SQL запит їй відповідає) можна і доцільно застосувати метод “ідентифікації щойно доданого номера” $pdo->lastInsertId()?
  5. Ви написали код $stmt = $pdo->prepare("SELECT * FROM users WHERE email = :my_mail");. Напишіть наступний рядок коду: масив і функцію активації, яка заповнить цей маркер :my_mail значенням “test@test.com” і виконає пошук.

Лекція 15

  1. Уявіть, що ви відкриваєте файл products.php на 800 рядків, де перемішані SQL-запити до кошика товарів, CSS-стилі, та HTML-розмітка заголовків. Вкажіть щонайменше дві критичні проблеми, з якими стикнеться ваша команда, якщо доведеться терміново змінити дизайн кнопок кошика, не поламавши бази даних? Назвіть термін цього хаосу.
  2. Прокоментуйте кожну з трьох складових акроніму MVC (Model, View, Controller). Який саме файл відповідає за підключення до Бази і збереження Завдання згідно з цією архітектурою, а який зобов’язаний бути абсолютно “чистим” від SQL і містити тільки <!DOCTYPE html>?
  3. Як Контролер (наприклад index.php), який успішно дістав масив користувачів з Бази Даних у змінну $users_list, може поділитися (передати) цими даними з окремим файлом дизайну (наприклад views/users.php)? Чому файл дизайну “бачить” цю змінну, хоча в ньому вона не оголошувалася?
  4. В чому полягає критична і фундаментальна різниця у поведінці інтерпретатора між викликами структур include 'shablon.php' та require 'shablon.php'? Які наслідки очікують користувача, якщо цей файл shablon.php був колись випадково видалений з сервера, в обох випадках технологій підключення?
  5. Більшість фахівців радять підключати Шаблон Виводу (require 'views/list.php';) виключно у самому кінці Контралера (найнижчим рядком). Чому підключати Вигляд перед виконанням запитів до Бази ($pdo->query) логічно неправильно і призведе до фатальних помилок при рендерингу $tasks всередині Шаблону?

Лекція 16

  1. Згадайте метафору про “Креслення автомобіля” та “Живий Синій Автомобіль”. Співвіднесіть ці два явища до IT-термінів Class і Object/Instance. У якого з них можна “запитати” вік чи ім’я?
  2. Назвіть 3 фундаментальні, базові стовпи (принципи), на яких тримається вся теорія Об’єктно-орієнтованого програмування. (Словами або просто термінами).
  3. Ви написали Клас “Олівець”. Зробили властивість public $color = 'Red';. Чому спроба написати публічний метод-функцію, який має виводити колір через звичайний класичний код function printColor() { echo $color; } завершиться критичною помилкою (Warning: undefined variable)? Якого 5-літерного кодового слова бракує в тілі цієї функції?
  4. З допомогою якого оператора/команди ми повинні “Народити”, або ж створити новий живий Об’єкт Користувача (ExtInstance), наприклад, від класу Administrator у нашому файлі скрипта index.php?
  5. Згадайте магічний метод Конструктора (__construct). У який саме часовий момент життєвого циклу об’єкта (до його створення, під час створення, або після виконання всіх логік) система (PHP Engine) автоматично викликає і виконує код усередині цього конструктора? Що там зазвичай роблять розробники (що вони їм передають)?

Лекція 17

  1. Згадайте процес хешування. Чому спроба хакера “розшифрувати” вкрадений з вашої бази даних хеш ($2y...) є математично неможливою та вкрай ресурсоємною? Чим він принципово відрізняється від процесу “шифрування” (наприклад перекладу в Base64)?
  2. Яким мінімальним типом (і з якою розрядністю) ви зобов’язані спроєктувати колонку "password" під час створення таблиці users у phpMyAdmin? Що фізично станеться з вашим користувачем, якого ви додасте в БД, якщо ви задасте цій колонці специфікацію VARCHAR(16)?
  3. Що робить допоміжна функція password_verify і з яких двох “аргументів” вона складається під час використання? (Де вона бере сирий порівняльний пароль, а звідки вона дістає еталонний хеш?).
  4. Назвіть (або опишіть загальними словами) ключовий логічний паттерн та етап реєстрації нового Користувача ($registerForm). Яку додаткову “Перевірку Запитом (SELECT…)” ви маєте обов’язково зробити до того, як застосувати INSERT INTO, якщо ми не бажаємо мати два профілі з повністю однаковим Email у базі?
  5. Чому використання застарілих алгоритмів хешування у PHP (наприклад легендарний md5($pswd)) сьогодні категорично не рекомендується в комерційних проєктах?

Лекція 18

  1. Куди націлиться досвідчений розробник, замість панічного перебирання свого коду, якщо його AJAX або POST запит завершився мовчазним “Білим екраном” або помилкою зі статусом серверу 500? Де фізично збираються причини таких переривань?
  2. Ви написали калькулятор, але він повертає Завжди Нуль від суми двох input. Яку комбінацію з двох функцій ви напишете в обробнику одразу після рядка з $_POST, щоб своїми очима побачити, чи дійсно браузер передав вам якісь числа, і не дати скрипту вивести вам черговий “Нуль”?
  3. Назвіть концептуальну різницю між послугою Реєстрації Домену сайту та послугою оренди Віртуального Хостингу для сайту. Чи може сайт фізично працювати тільки на одному з них без другого?
  4. Який проміжний і універсальний текстовий формат (з яким розширенням .???) використовується як стандарт обміну Даними між двома різними версіями і серверами MySQL чи MariaDB для експорту та імпорту існуючих таблиць?
  5. Згадайте Крок №3 Процесу Деплойменту. Яку найголовнішу інформацію, і в якому конкретно найважливішому файлі вашої системи, ви ВИТРАЧАЄТЕ зобов’язання змінити після перенесення папки з файлами за допомогою FTP на орендований сервер Хостингу, щоб застосунок не впав з помилкою Access Denied?