You are on page 1of 7

Що таке інженерія і процес розробки загалом?

- Професія пов’язана з
застосуванням технічних знань для розробки продукту, які потрібні
людству. Послідовність дій спрямованих на створення продукту.

Які знаєте принципи програмування? - KISS - keep it simple, stupid.


Полягає в тому щоб писати код якомога простіше. DRY - don’t repeat
yourself. Не робити копіпасту. YAGNI - You aren't gonna need it. Не писати
те, що не просять.

Чим відрізняються процедурне та об'єктно-орієнтована парадигми


програмування? - У процедурній парадигмі програми організовані в
функції, а у об'єктно-орієнтованій - в класи та об'єкти. У процедурній
парадигмі дані зберігаються у вигляді глобальних змінних, а у об'єктно-
орієнтованій - у властивостях об'єкта.

Які основні принципи ООП (наслідування, інкапсуляція, поліморфізм)? -


Наслідування - один об'єкт можна наслідувати від іншого, новий об'єкт
зберігає функіонал старого. Інкапсуляція - обмеження даних в межах
класу та контроль доступу до них. Дані можуть бути приховані або
доступні тільки за допомогою getter та setter. Поліморфізм дозволяє
об'єктам одного класу мати різну поведінку, тобто клас песик гавкає,
класс кіт наслідується від песика але мявкає.

Що таке множинне наслідування? - Можливість наслідування більше ніж


одного класу. Класс кото-холодильник наслідується від класу кіт і
холодильник.

Які є шість етапів розробки продукту в Software Development lifecycle і


яка різниця між Agile та Kanban? - 6 етапів: планування, аналіз, дизайн,
розробка, тестування, реліз. Основна відмінність в тому, що Agile
орієнтований на розробку, а Kanban на оптимізацію робочих процесів.

Які є методи HTTP-запитів та яка між ними різниця? - GET, POST, PUT,
DELETE, PATCH, OPTIONS.

Як виглядають HTTP-request/response? -
Що таке авторизація і як вона працює? - Перевірка користувача на
право доступу до ресурсу. Спочатку йде аутентифікації користувача, а
потім відправляє йому токен. Токени можуть передаватись по різному, в
cookie, headers або url адресі.

Що таке cookies? - Текстові файли на стороні користувача які зберігають


інформацію про нього, наприклад логін користувача, його товар у
кошику, статистика.

Що таке веб вразливість? - Дефект в застосунку який зловмисник може


використати для своєї вигоди. Базові приклади: SQL ін'єкція,
вразливість файлового шляху.

Які знаєте класичні бази даних? - SQLite, PostgreSQL, MySQL.

Як відбувається взаємодія клієнта і сервера? - Клієнт зазвичай в


форматі JSON відправляє дані на сервер, сервер обробляє запит і
відповідає клієнту.

Які є підходи до проектування API? -


REST - взаємодія відбувається за допомогою звичайних HTTP запитів.
GraphQL - це підхід в якому клієнт визначає що йому потрібно, а сервер
повертає йому ці дані.

Як використовувати патерни програмування? - Паттерн програмування


це рекомендації для розв'язання типових проблем.
Що таке Acceptance Testing і навіщо його використовують? - Вид
тестування для перевірки коду на відповідність вимог бізнесу або
користувача.

Що таке модульні та інтеграційні тести, API-тести? - Модульні тести


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

Як писати unit-тести? - Тест повинен перевіряти лише один аспект коду,


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

Які є best practices у написанні автотестів? - Написання тестів повинне


починатися на ранніх етапах розробки програми. Тести повинні бути
незалежні один від одного. Тести повинні запускатися під час кожної
зміни коду.

Які базові команди системи контролю версій? -


● git init - створює репозиторій
● git clone - створює копію репозиторію локально
● git commit - зберігає зміни в локальному репозиторії
● git push - відправляє зміни на віддалений репозиторій
● git pull - отримує останню версію репозиторію
● git branch - створює перевіряє або видаляє гілку репозиторію
● git merge - зливає зміни з однієї гілки в іншу

У чому різниця між хешуванням і шифруванням? - Відмінність між


хешування та шифруванням в тому, що хешування це не реверсивний
процес, а шифрування реверсивний.

Python — мова, що інтерпретується чи компілюється? - Інтерпретується.


Інтерпретація - переклад мови програмуванн у машинний код по рядках.
Компіляція - переклад мови програмування у машинний код одразу.

Які є змінні та незмінні типи даних? - Незмінні: int, float, complex, str, tuple,
bool, frozenset. Змінні: list, dict, set.
Що таке область видимості змінних? - У Python існують три області
видимості змінних: local (область всередині функції), nonlocal (область
видимості, коли функція вкладена в функцію), global (область за межами
всіх функцій та класів).

Що таке introspection? - Можливість програми динамічно отримувати


інформацію про себе. В Python це функції: type(), dir(), getattr(), hasattr(),
issubclass(), isinstance().

Різниця між is і ==? - is перевіряє чи це один і той же об'єкт в пам'яті (по


id()), == перевіряє тільки значення об'єкта.

Різниця між __init__() і __new__()? - Коли ми створюємо екземпляр класу,


Python викликає метод __new__() для створення нового об'єкту. Потім
він передає цей новий об'єкт в метод __init__() для ініціалізації. __new__()
викликається до створення екземпляру, __init__() викликається після
створення екземпляру.

У чому різниця між потоками та процесами? - Основна відмінність між


процесами та потоками полягає у тому, що кожен процес має свій
окремий адресний простір пам'яті, тоді як потоки використовують
спільну пам'ять.

Які є види імпорту? - Імпорт модулю (import random), імпорт функції або
класу (from random import randint), імпорт всіх функцій з модулю (from
random import *), імпорт з аліасом (import numpy as np).

Що таке клас, ітератор, генератор? - Клас це шаблон який визначає


поведінку об'єктів, вони дозволяють створювати нові типи даних.
Ітератор дозволяє проходити по послідовності значень. Генератор
генерує та повертає послідовність на льоту, а не всі зразу.

У чому різниця між ітераторами та генераторами? - Ітератори


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

У чому різниця між staticmethod та classmethod? - staticmethod робить з


функції класу звичайну функцію, тобто в неї не буде дозволу до
екземплярів класу. classmethod має доступ до класу, але не до його
екземплярів.
Як працюють декоратори, контекстні менеджери? - Декоратор це
функція яка отримує іншу функцію в якості аргументу. Їх
використовують для додавання функціоналу без зміни функції.
Контекстний менеджер with зазвичай використовується для коректного
відкриття та закриття файлів, баз даних, мережеві з'єднання і тд.
Створюється with за допомогою класу з методами __enter__() та
__exit__().

Чи можна використовувати кілька декораторів для однієї функції? - Так.

Чи можна створити декоратор з класу? - Так, в класі повинен бути метод


__call__ який дозволить використовувати клас як функцію.

Які є основні популярні пакети (requests, pytest, etc)? -


● requests - для роботи з запитами на веб ресурси.
● pytest - написання тестів для програм
● numpy - для роботи з масивами та матрицями
● pandas - обробка та аналіз даних
● scikit - для машинного навчання
● tensorflow - для машинного начання
● flask - мінімалістичний фреймворк для створення АПІ
● django - веб фреймворк для розробки веб-додатків

Що таке lambda-функції? - Функція яка не має назви та може бути


використана тільки раз.

Що означає *args, **kwargs та як вони використовуються? -


Використовується для передачі в функцію безлічі кількості аргументів.
● args - кортеж з аргументами для функції
● kwargs - словник аргументів в форматі “{ ключ: значення }”.

Що таке exceptions, <try-except>? - Конструкція для перехоплення


помилок в коді.

Що таке PEP (Python Enhancement Proposal), які з них знаєте (PEP 8, PEP
484)? - Пропозиція щодо покращення Python. PEP 8 - стиль коду. PEP 484
- додає типи анотацій. PEP 342 - додає контекстні менеджери.
Різниця між list і tuple, навіщо вони? - list це змінюваний тип даних, tuple
ні. Кортежі використовуються коли дані не повинні бути змінені після
створення. Також tuple буде швидше працювати ніж list.

Як використовувати вбудовані колекції (list, set, dictionary)? -


● list - список елементів, які можуть повторюватись. Можна дістати
елемент по індексу, індекс елемента, дізнатись кількість
елементів.
● set - множина унікальних елементів.
● dict - словник в якому є ключ який відповідає якомусь значенню.

У чому полягає складність доступу до елементів dict? - Через те що в


словнику доступ до значень відбувається через ключі, тому для доступу
до елементу потрібно знати ключ.

Як створюється об’єкт в Python, для чого __new__, навіщо __init__? -


Спочатку викликається метод __new__, який створює екземпляр класу.
Потім екземпляр передається в __init__, а він вже ініціалізує клас та
повертає його екземпляр.

Що знаєте з модуля collections, якими ще built-in модулями


користувались? -
● Counter - створює словник який містить кількість входжень
кожного елементу.
● defaultdict - то саме що і звичайний словник, але при спробі
доступу до ключа якого немає створює нове значення визначене
за замовчуванням.
● namedtuple - створює іменований кортеж, який є незмінним
об'єктом.
Модулі:
● os - дає доступ до функцій ОС.
● random - генерація випадкових значень.
● datetime - класи для роботи з датами та часом.
● json - функціонал для роботи з JSON.

Що таке шаблонізатор та як у ньому виконувати базові операції


(об’єднувати ділянки шаблона, виводити дату, виводити дані з
серверного боку)? - Це
● {% if %}
● {{ date|date("Y-m-d H:i:s") }}
● {{ variable_name }}
● і т.д. з шаблонів.

Що відбувається, коли створюється віртуальне середовище? - В


директорії, де ми створюємо це середовище, створюється копія
виконуваного середовища Python. Це використовується для того, щоб
бібліотеки з різних застосунків не конфліктували між собою.

Які є базові методи роботи з SQL- базою даних у Python? - Встановлення


з'єднання з базою даних (зазвичай по логіну/паролю), виконання SQL
запиту, отримання результату запиту, закриття з'єднання.

Що таке SQL-транзакція? - Послідовність операцій з базою даних, які


використовуються як єдиний процес. Тобто, якщо будь яка операція не
вдається, то всі операції повинні бути скасовані, база даних повинна
бути повернута до початкового стану.

Як зробити вибірку із SQL-бази з простою агрегацією? - Для здійснення


вибірки з простою агрегацією, можна використовувати ключове слово
GROUP BY у поєднанні з функціями агрегування, такими як COUNT(),
SUM(), AVG(), тощо.

Який вигляд має запит, який виконує JOIN між таблицями й до самих
себе? - У випадку self-join замість двох таблиць ми маємо лише одну
таблицю, але з двома різними псевдонімами. Наприклад, якщо у нас є
таблиця employees зі стовпцями id, name, manager_id, то ми можемо
зробити self-join для знаходження керівників кожного співробітника за
допомогою такого запиту:
● SELECT e.name as employee_name, m.name as manager_name FROM
employees e JOIN employees m ON e.manager_id = m.id;

Як відправляти запити у SQL-базу даних без ORM? - Виконати:


● cursor.execute(“ЗАПИТ НА МОВІ SQL”)
● cursor.commit()

You might also like