Реклама партнера — Название партнёра
UNIT.City — місце, де люди працюють... КРАЩЕ! Обирай свій простір просто зараз 👉

110 питань, які часто ставлять на технічних інтерв'ю для Frontend Developer, і відповідей на них із практичного досвіду спеціаліста з JavaScript, HTML і React

Fullstack-розробник Максим Головко поділився переліком питань, які зібрав сам під час технічних співбесід на позицію Frontend Developer. Він також підготував відповіді на них. 

Leave a comment
110 питань, які часто ставлять на технічних інтерв'ю для Frontend Developer, і відповідей на них із практичного досвіду спеціаліста з JavaScript, HTML і React

Fullstack-розробник Максим Головко поділився переліком питань, які зібрав сам під час технічних співбесід на позицію Frontend Developer. Він також підготував відповіді на них. 

«Сподіваюся, це стане у пригоді під час пошуку роботи вашої мрії», — пише Максим Головко. 

Ось гайд від нього для Frontend Developer, який допоможе підготуватись до співбесіди.

Зміст

HTML CSS

1. Що таке DOCTYPE і для чого він потрібен? Що буде, якщо його не вказати?

DOCTYPE вказує тип поточного документа. Це необхідно, щоб браузер розумів, як слід інтерпретувати поточну веб-сторінку, оскільки HTML існує у кількох версіях. Браузер спробує відобразити сторінку в режимі сумісності (quirks mode). Це може призвести до того, що в різних браузерах сторінка відображатиметься по-різному.

2. Для чого потрібні мета-теги?

Мета-теги — це теги, які надають пошуковим системам додаткову інформацію про сторінку сайту. Наприклад, механізми пошукових систем звертаються до мета-тегів для отримання опису сайту, ключових слів та інших даних. Мета-теги для сайту розміщуються всередині <head>.

3. Чим відрізняється блочний елемент від строчного?

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

Приклади блокових елементів: <div>, <p>, <ul>, <ol>, <h1>
На відміну від блокового, рядковий елемент не переноситься на новий рядок, а розташовується у тому ж рядку, що й попередній елемент. Ширина рядкового елемента залежить від його вмісту. Блокові елементи не можна вкладати в рядкові. 

Приклади рядкових елементів: <a>, <span>, <strong>, <em>, <img>

4. Чому деякі символи можуть відображатись на сторінці у виді квадратів?

Це може виникати через те, що деякі браузери можуть не підтримувати певні символи операційної системи. Також може відрізнятися кодування. Або не підключено потрібний шрифт з іконками.

5. Що таке семантична верстка? Які семантичні теги знаєте?

Це верстка орієнтована на структурування html-документів. У ній використовуються теги, які поділяють код на логічні блоки, що явно показують їх роль і зміст у структурі сторінки. Семантична верстка відрізняється від блокової лише елементами, що використовуються при структуризації сторінки. У блоковій верстці використовують в основному тільки елемент div, а в семантичній використовуються крім div ще безліч інших тегів, таких як: header, main, section, footer, nav, aside. Вона підіймає сайт вищче у результатах пошуку та допомагає скрін рідерам правильно читати сайт і робить його більш доступним для людей с обмежиними можлиіостями

6. Які типи заголовків існують в HTML?

HTML підтримує шість різних типів заголовків. Ці заголовки відрізняються за розміром шрифту, починаючи з найбільшого. 

h1 — найбільший заголовок. h6 — найменший заголовок. 

h1 має бути лише 1 на сторінці.

7. Що називається потоком докумнта в HTML? Чи можна його змінювати?

Потоком документа HTML називається порядок виведення елементів на сторінку. У звичайному вигляді всі блоки виводяться у порядку, у якому записані всередині HTML-документа. Так потік можна змінювати за допомогою css правил, наприклад, за допомогою position: absolute.

8. Які існують способи підключення JavaScript до html-сторінки? У чому між ними різниця?

Перший спосіб — вставити скрипт у блок script. Другий спосіб — підключити скрипт за допомогою додавання посилання на файл JavaScript async defer. Бажано всі скрипти підключати наприкінці блоку body.

  1. Коли браузер завантажує HTML і доходить до тегу <script>, він призупиняє будувати DOM. Він повинен спочатку завантажити та виконати скрипт, і лише потім обробити решту сторінки.
  2. Атрибут defer повідомляє браузеру, що він повинен продовжувати обробляти сторінку та завантажувати скрипт у фоновому режимі, а потім запустити цей скрипт, коли сторінка завантажилася.
  3. Атрибут async повідомляє браузеру, що він повинен продовжувати обробляти сторінку та завантажувати скрипт у фоновому режимі, а потім запустити цей скрипт, як тільки він буде завантажений. 

9. Які є способи додавання CSS на сторінку?

Перший спосіб — описати селектори та їх значення всередині тегу style.
Другий спосіб — підключити стилі за допомогою додавання посилання на зовнішній файл css, використовують тег link, що розташовується всередині блоку head. Третій спосіб — додати інлайнові стилі для кожного окремого елемента, використовуючи атрибут style.

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

10. Різниця між reset.css и normalize.css?

reset.css — скидає всі стилі в нуль для того, щоб можна було розпочати стилізацію сайту з чистого аркуша.
normalize.css — приводить вихідні стилі до єдиного стану, у всіх браузерах.

11. Що таке critical CSS?

стилі, які необхідні для відтворення першої видимої частини сторінки. Для моментального відтворення критичний CSS вбудовують в HTML, всі інші стилі завантажуються окремим файлом асинхронно.

12. Що таке специфічність селекторів в CSS?

Це спосіб, за допомогою якого браузери визначають, які значення властивостей CSS найбільше відповідають елементу і, отже, будуть застосовані. Специфічність є вагою, що надається конкретному правилу CSS. Найбільшу вагу мають inline стилі. Потім стилі селектора за ID. Найменшу вагу мають селектори по тегу і також селектор зірочки.
Щоб підвищчити специфічність селектори можна комбінувати. Також вона підвишчується після додавання псевдокласів

13. У чому різниця між псевдокласом та всевдоелементом у CSS?

Псевдокласи описують особливий стан елементу. Наприклад, стан натиснутої кнопки. Псевдоелементи відповідають віртуальним елементам. Наприклад, потрібно виділити першу літеру в рядку. Їх немає у дом. дереві і до них неможна звернутися через JS

14. Що таке блочна модель CSS?

Кожен блок має прямокутну область вмісту в центрі, поля навколо вмісту (padding), рамку навколо полів (border) та відступ за межами рамки (margin).

15. Яку роль виконує box-sizing?

Властивість box-sizing визначає як обчислюється загальна ширина та висота елемента. Має дві поведінки:
— content-box це стандартна поведінка. Якщо встановити елементу ширину 100 пікселів, то ширина його контенту буде 100 пікселів, а ширина меж і внутрішніх відступів під час рендеру буде додана до фінальної ширини, що зробить елемент ширше ста пікселів.
— border-box каже браузеру враховувати будь-які межі та внутрішні відступи у значеннях, які вказані у ширині та висоті елемента. Якщо виставити елементу ширину 100 пікселів, то ці 100 пікселів будуть містити межі та внутрішні відступи, а контент стискається, щоб виділити для них місце. Зазвичай це полегшує роботу з розмірами елементів. 

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

Є п’ять видів позиціювання:

  • static — стандартне позиціювання;
  • relative — позиціювання щодо самого себе;
  • absolute — позиціювання відносно найближчого відносно позиціонованого предка, або до body якщо його немає;
  • fixed — позиціювання відносно viewport;
  • sticky — липке позиціювання, яке може змінювати своє значення з relative на fixed під час прокручування сторінки.

Fixed relative виймають елемент із потоку.

17. Що робить властивість z-index?

Ця властивість визначає положення елемента або елементів, розташованих по осі z. У загальному випадку елементи з більшим z-index перекривають елементи з меншим. Ця властивість працює тільки для елементів, у яких значення position встановлено як absolute, fixed або relative.

18. У чому різниця між px, em, rem?

  • px — базова абсолютна одиниця виміру;
  • em — одиниця виміру відносно поточного розміру шрифту;
  • rem — одиниця виміру відносно розміру шрифту елемента <html>.

19. Що таке гумова, адаптивна та відзивчива верстка? У чому між ними різниця?

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

Адаптивна верстка реалізується за допомогою медіа правил. Це дає змогу для кожного окремого розміру екрана відображати різну верстку. Будь-яка зміна розміру вікна відбувається ривками, після досягнення однієї із зазначених точок перелому. За допомогою медіа правил можна визначити як буде виглядати верстка на мобільних пристроях

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

20. У чому різниця між visibility:hidden и display:none?

  • visibility:hidden залишає елемент у нормальному потоці сторінки, і він все ще займає місце. Елемент не відображається у браузері але він все ще займає місце в просторі.
  • display:none видаляє елемент із нормального потоку сторінки, що дозволяє іншим елементам заповнити його місце. Він більше не займає місце хоча він є у вихідному коді.

21. Що таке repaint и reflow?

Під час завантаження сторінки, якщо вона не порожня, завжди виконується щонайменше по одному reflow та repaint. Далі ці події виникають у таких випадках: 

  • 1 — частина дерева відображення потребує перерахунку, тобто у якогось вузла змінилися ширина, висота чи координати відносно х у. Викликається подія reflow. 
  • 2 — в результаті змін частина контенту, що відображається, повинна оновитися. Йдеться в першу чергу про властивості стилів що не впливають на розмір координат та розташування елемента наприклад колір фону. Викликається подія repaint. Якщо викликається reflow, після нього обов’язково викликається і repaint. Але зворотне хибно: repaint може викликатися незалежно від reflow. 

Підія ревлоу завжди більш ресурсозатратна за подію репеинт.

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

Абсолютні адреси повинні починатися із зазначення протоколу (зазвичай http://) та містити ім’я сайту. 

Відносні посилання ведуть відлік від кореня сайту чи поточного документа. (/path)

23. Різниця між тегом та елементом?

Теги використовують для позначення початку та кінця вмісту HTML елемента.

Елемент складається з тегів та вмісту.

24. Коли ви використовуєте <button>, а коли <a>?

  • Кнопка — це функціональний елемент, тобто елемент, який відповідає за виконання певної функції після натискання на неї.
  • Посилання — це елемент навігації, тобто елемент, який відповідає за взаємозв’язок розділів веб-ресурсу (або різних ресурсів) між собою. Не слід використовувати кнопки як програмну навігацію на сайті оскільки це погано впливає на СЕО та доступність

25. Для чого потрібен атрибут type у кнопки?

type визначає тип кнопки, який встановлює її поведінку у формі. На вигляд кнопки різного типу ніяк не відрізняються, але у кожної такої кнопки свої функції. Існує 3 типи: button, reset і submit. За замовчуванням встановлено значення submit.

26. Різниця між checkbox та radio?

  • radio — створює перемикання між варіантами та дозволяє вибрати тільки один з них.
  • checkbox — застосовується у формі для вибору кількох значень.

27. Що таке наслідування стилів в CSS? І що таке каскадність в CSS?

Коли вказується стиль елемента, частина властивостей може бути успадкована його дочірніми елементами та нащадками. Наприклад, якщо задати колір тексту для body, то всі дочірні елементи та нащадки його успадкують.

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

28. В чому різниця між контентними і оформлюючими/декоративними зображеннями?

За допомогою контентних зображень до користувачів доноситься корисна інформація. Щоб додати контентне зображення на сторінку, в розмітці використовується тег <img>. Для таких зображень необхідно заповнювати атрибут alt, який описує те, що зображено на картинці.

Декоративні зображення використовуються виключно для оформлення. Такі зображення не несуть для користувача корисну інформацію. Декоративні зображення слід реалізовувати за допомогою CSS наприклад background css.

29. Чому у <img> та <input> не має псевдоелементіов:before, :after?

Псевдоелементи:before та:after дають результат тільки для тих елементів, які мають вміст. А у <img> та <input> вмісту немає.

30. Що таке flex-контейнер та flex-елемент?

Flex-контейнер встановлює новий гнучкий контекст форматування для його вмісту. Flex-контейнером є той елемент, у якого задано властивість display: flex або display: inline-flex.
Flex-елементом є кожен дочірній елемент flex-контейнера. Текст що міститься у флекс контейнері огортається анонімним флекс елементом

31. Що таке flex-вісь?

Flexbox визначає поняття головної та допоміжної осі. Елементи flex завжди розміщуються вздовж головної осі. При цьому головна вісь може бути розташована горизонтально чи вертикально. Спочатку головна вісь розташована горизонтально з напрямком елементів справа наліво. Головна вісь завжди перпиндикулярна допоміжній. Напрямок головної осі можна змінити за допомогою властивості flex-direction.

32. Які переваги svg перед png або jpeg?

  1. На відміну від растрової графіки, SVG не втрачає якості при масштабуванні.
  2. Браузеру не потрібно запитувати картинку у сервера, оскільки він сам її малює, отже, продуктивність підвищується.
  3. За допомогою CSS/JS можна змінювати параметри графіки на сайті, наприклад, фон, прозорість або межі. Також SVG можна анімувати.
  4. Об'єкти SVG важать набагато менше растрових зображень.

JS

1. Типи даних в JavaScript?

Існує 8 типів даних. 7 примітивних та 1 складний тип даних. 

Примітивні типи: number, string, boolean, symbol, bigInt, null, undefined. 

Складний тип — object. Він використовується для колекцій даних та для оголошення більш складних сутностей. Також він передається за посиланням, а прості типи даних за значенням.

2. Що таке NaN?

NaN (not a number) — це значення, що отримується в результаті виконання числової операції над не числовим значенням. Наприклад множення або ділення рядка, приведення рядка який не містить число до number. NaN має тип даних number. NaN не дорівнює самому собі. Перевірку на NaN можна зробити за допомогою Number.isNaN

3. В чому різниця між null та undefined?

undefined (невизначеність) являє собою значення за замовчуванням: 

  1. змінної, яку оголосили без ініціалізації;
  2. функції, яка нічого не повертає явно;
  3. неіснуючої властивості об'єкта.

null — це значення «відсутності значення». 

Присвоюється змінній явно. TypeOf null поверне тип object, тому щоб перевірити на null треба використовувати оператор строгої рівності

4. Чим відрізняється строга рівність від не строгої (=== і ==)?

Строга рівність порівнює значення за типом даних та значенням. Нестрогa приводить значення до одного типу, а потім ці значення порівнює. 

5. Логічні оператори!, &&, ||. Як працюють?

  • Логічне «І» (&&) — Перевіряє до першого фолс. Повертає останнє true, якщо всі аргументи є true. Якщо один з аргументів є false, повертає його. Якщо всі аргументи false, повертає перший false.
  • Логічне «АБО» (||) — Перевіряє до першого тру. Повертає перший аргумент, який є true. Якщо всі аргументи є false, повертає останній false.
  • Логічне «НІ» (!) — Це унарний оператор, який інвертує логічне значення свого операнда. Якщо операнд є true, повертає false, і навпаки.

6. Що таке use strict і для чого він потрібен?

use strict — це директива, яка вмикає суворий режим у JavaScript. Її зазвичай ставлять на початку скрипту або функції. Ось чому це важливо:

  1. Вона забороняє використовувати небезпечні чи заплутані функції, що може допомогти уникнути помилок.
  2. У суворому режимі помилки, які раніше просто ігнорувалися, тепер видають виключення. Це полегшує відлагодження.
  3. Ні в якому разі не можна додавати властивості до простих типів, таких як числа чи рядки.
  4. Загалом, use strict робить код надійнішим і безпечнішим.

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

7. Чому результатом порівняння двох схожих об’єктів буде false?

Тому що об'єкти — це типи даних, що передаються за посиланням. 2 однакові на вигляд об'єкта мають різні посилання, і тому операція порівняння повертатиме false.

8. Як перевірити ідентичність 2х обєктів?

Є два способи:

  1. використовувати JSON.stringify для приведення об'єктів у рядок та порівняти їх вже як 2 рядки. Такий підхід має обмеження. Якщо в об'єкті будуть методи або symbol — JSON.stringify не зможе конвертувати їх у рядок.
  2. написати або використати з бібліотеки функцію deepEqual, яка буде проходити циклом по ключах двох об'єктів і перевірятиме значення цих ключів. Функція має працювати рекурсивно.

9. Як зробити копію об’єкта?

Існує поняття глибокого та поверхневого копіювання. Глибоке — це копіювання об'єкта та всіх його рівнів вкладеності. Поверхневе — це копіювання лише першого рівня вкладеності, а для решти копіюється посилання.

Способи поверхневого копіювання:

  1. використовувати spread оператор (…)
  2. використовувати Object.assign ()

Способи глибокого копіювання:

  1. використовувати JSON.stringify — JSON.parse для конвертування об'єкта в рядок і потім назад. Має обмеження щодо копіювання методів та symbols
  2. написати або використати з бібліотеки функцію deepClone яка буде рекурсивно проходитиме за ключами об'єкта та копіюватиме їх у новий об'єкт.

10. Чим відрізняються змінні var, let и const?

  1. var — можна ініціалізувати після оголошення, можна змінювати, має функціональну область видимості, має hoisting. Змінна підіймається на верх своєї області видимості, а значить до неї можна звернутися до її оголошення у такому випадку її значенням буде undefined. Зараз майже не використовують під час написання нового коду.
  2. let — змінну можна ініціалізувати після оголошення, можна змінювати, має блокову область видимості, не має hoisting.
    const — змінну обов’язково потрібно ініціалізувати під час оголошення, не можна змінювати, має блокову область видимості, не має hoisting.

11. Як дізнатись, чи являються дані масивом?

Для цього можна використати метод isArray ().

12. Які перебираючі методи масивів ви знаєте?

Існує 6 методів:

  1.       forEach — для перебору масиву. Не повертає нічого, примає функцію що буде викликана для кожного елемента масиву
  2.       filter — для фільтрації масиву, приймає колбек функцію і повертає новий масив, котрі міститиме лише ті елементи які задовульняють умову.
  3.       every/some — для перевірки масиву, приймають колбек функію і повертають бульові значення, на основі виклику колбеків.
  4.       map — для трансформації масиву в масив. Приймає колбек функцію і повертає новий масив який міститеме у собі результати виклику колбек функції
  5.       reduce/reduceRight — для проходу по масиву з обчисленням значення. Приймає колбек функцію і повертає будь яке значення що буде результатом виконання колбек функції
  6.       sort — сортує масив,. Приймає колбек функцію що визначає порядок сортування повертає той самий масив на якому викликалася функція, також цей масив мутується

13. Як об’єднати масиви?

Є декілька способів:

  • Можна використовувати метод concat (). 
  • Можна використовувати spread оператор та об’єднати ці масиви в один загальний масив.

14. Як дізнатись, чи знаходиться елемент в масиві?

Є декілька способів

  1. Використати метод includes, який повертає true якщо елемент знаходиться у масиві.
  2. Використати метод indexOf який повертає індекс знайденого елемента в масиві або -1 якщо елемента в масиві немає.
  3. Також можна використати метод find, який повертає знайдений елемент, або повертає undefined.

15. Чи можна використовувати цикл for in для масивів? Які недоліки такого методу?

Цикл for…in можна використовувати для масивів, але це не рекомендується. Основні недоліки:

  1. Перебирає всі властивості, включаючи ті, що додані в прототип, що може призвести до неочікуваної поведінки.
  2. Порядок елементів не гарантований.
  3. Менша продуктивність у порівнянні з for, forEach або for…of.

Краще використовувати for…of або forEach для масивів.

16. Що таке підняття (hoisting)?

Це механізм у JavaScript, в якому змінні типу var та оголошення функцій, пересуваються вгору своєї області видимості перед тим, як код буде виконаний. Так змінні типу var та function declaration вважаються оголошеними з самого початку виконання функції не залежно від того в якому місці фунції реально знаходиться їх оголошення за умови що вони не знаходяться у вкладеній функції.

17. Яким буде значення змінної var при зверненні до неї до її об’явлення?

Оскільки на змінні типу var розповсюджується hoisting такі змінні вважаються оголошеними з самого початку виконання функції не залежно від того у якому  місці функції реально знаходиться їх оголошення тому значенням такої змінної буде undefined так само як і в оголошеній але не ініціалізованій змінній.

18. Що буде, якщо звернутись до змінних let/const до початку їх обявлення?

Буде помилка типу ReferenceError бо на ці змінні не розповсюджується hoisting бо змінної ще не існує.

19. Що таке область видимості (Scope)? Яка вона буває?

Це місце, де ми маємо доступ до змінних або функцій. JS має 4 типи областей видимості: глобальна, функціональна, блокова (ES6) та область видимості eval. На змінні типу var не розповсюджується блокова область видимості для такого типу існує лише глобальна функціональна та область видимості eval.

20. Різниця між Function Declaration та Function Expression?

Function Expression — це змінна у яку записали функцію і на неї не розповсюджується hoisting, а на Function Declaration hoisting розповсюджується. Тому Function Expression створюється, коли виконання доходить до нього, а потім вже може використовуватися. Function Declaration можна використовувати у всьому скрипті (або блоці коду, якщо функцію оголошено в блоці).

21. Що таке callback функції?

Callback-функції — це функції, які передаються як аргументи в інші функції та викликаються після завершення певних операцій, зокрема асинхронних. Вони дозволяють виконувати код після виконання запиту або обробки події. Наприклад, при завантаженні даних з сервера callback може використовуватися для обробки результатів запиту.

Це важливо для управління асинхронністю в JavaScript, оскільки дозволяє уникнути блокування потоку виконання програми. Однак, надмірне використання callback-функцій може призвести до так званого «callback hell», що ускладнює читання і підтримку коду. У таких випадках зазвичай рекомендується використовувати проміси або async/await для спрощення роботи з асинхронним кодом.

22. Чим стрілкова функція відрізняється від звичайних функцій?

Стрілочна функція не має власного this. Вона бере його за місцем створення. У звичайній функції this визначається під час виклику. Стрілочна функція не має arguments. Стрілочна функція не має prototype. Стрілочна функція має короткий синтаксис неявного повернення значення.

23. Чи є аналог arguments для стрілкових функцій?

Аналога немає. Але можна використовувати rest оператор (…) для того, щоб зібрати всі параметри з якими викликана функція в масив. Такий підхід можна вважати кращим оскільки він дає можливість зібрати залишкову частину параметрів з якими викликана функція, arguments завжди міститиме усі параметри також за допомогою rest усі параметри міститимуться в масиві, а з ним працювати зручніше ніж з псевдомасивом.

24. Як визвати функцію із затримкою в 5 секунд?

Щоб викликати функцію із затримкою в 5 секунд, у JavaScript можна використовувати функцію setTimeout. Ось як це робиться:

  • setTimeout приймає два аргументи: перший — це функція, яка буде виконана, а другий — затримка в мілісекундах (5000 мс у нашому випадку). Після 5 секунд виконається передана функція.

25. Що таке лексичне оточення (Lexical Environment)?

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

26. Що таке лексичне оточення (Lexical Environment)?

У несуворому режимі це window. У суворому — undefined.

27. Що таке замикання (Closures)? Для чого воно використовується?

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

Замикання корисні тим що дозволяють пов’язувати дані що знаходяться у лексичному оточенні з функцією яка працює з цими даними JS не дозволяє створювати приватні властивості або методи в класі але це можна емулювати також на основі замикання базується техніка каррування та інкапсуляції

28. Що таке IIFE?

Immediately Invoked Function Expression — це функція, яка викликається або виконується одразу після створення або оголошення. Все що знаходиться всередині цієї функції не доступне з зовні її часто використовують для виконання функції ініціалізації певних налаштувань одразу після завантаження сторінки.

29. Основні принципи ООП?

  • Інкапсуляція — дозволяє приховати внутрішній стан об'єкта та expose лише необхідні методи для взаємодії з ним. Це забезпечує контроль доступу до даних і зменшує ризик їх некоректного використання.
  • Наслідування — можливість створення нового класу на основі вже існуючого. Наслідування дозволяє повторно використовувати код, спрощуючи процес розробки та зменшуючи дублювання.
  • Поліморфізм — здатність об'єктів різних класів реагувати на однакові методи по-різному. Поліморфізм дозволяє використовувати один інтерфейс для роботи з різними типами об'єктів, що підвищує гнучкість коду.

30. Що таке this?

Це посилання на контекст виклику функції. Контекстом є об'єкт, який в цей момент виконує або викликає функцію. Для стрілочної функції — це об'єкт у якому вона створена, а у звичайній функції — яким вона викликана. 

Контекстом може бути:
this в об'єкті — вказує на сам об'єкт
this в класі — вказує на екземпляр класу
глобальним контекстом є window (або undefined в режимі use strict)

31. Як можна змінити контекст виклику функції?

Існує 3 методи: call, apply, bind.

  • Сall та apply викликають функцію із заданим контекстом. В call параметри фунції після this передаються як перерахування, а в apply у вигляді масиву.
  • Bind не викликає функцію він повертає нову функцію із вже назавжди прив’язаним контекстом.

32. Чи можна змінити контекст функції, яку повернув метод bind?

Ні, bind прив’язує контекст назавжди. Але можна використати початкову функцію і викликати на ній call, apply, або bind для підміни контексту

33. Чи можна змінити контекст стрілкової функції?

Ні. Стрілочна функція не має методів call, apply, bind і своїх аналогів. Також вона використовує контекст у якому її створили, а не контекст у якому її викликали. Це означає що підмінити контекст виклику стрілочної функції не можна

34. Що таке прототип об'єкту?

Це шаблон об'єкта. Він використовується як запасний варіант для властивостей та методів, що існують у цьому об'єкті.

Наприклад ми звертаємося до властивості об’єкта якщо ця властивість не буде знайдена у самому об’єкті JS шукатиме її у прототипі цього об’єкта. Це також один зі способів обміну властивостями та функціональністю між об'єктами. Наприклад ми маємо декілька об’єктів які мають містити однакові методи чи властивості їх можна розмістити в прототипі такий варіант є більш вигідним з точки зору використання пам’яті аніж варіант де ці ж методи чи властивості будуть зберігатися окремо в кожному з об’єктів. Це основна концепція прототипного наслідування в JS.

35. Як працює прототипне наслідування в JS?

Коли ми хочемо прочитати властивість з об'єкта, а вона відсутня — JavaScript спробує прочитати його з прототипу об'єкта. Якщо властивості немає в прототипі, JavaScript намагатиметься його прочитати з прототипу прототипу, і т. д. доки властивість не буде знайдено або ланцюжок прототипів не закінчиться. У такому разі JavaScript поверне undefined. У JS глобальний прототип це object, а у самого object прототипом буде null

36. Як створити об`єкт в якому не буде прототипу?

Використати Object.create (). Цей метод приймає першим аргументом об'єкт, який буде прототипом об'єкта, який він поверне. Якщо ми викличемо Object.create () з аргументом null, буде створено об'єкт без прототипу. А також ми можемо створити об’єкт, а потім замінити йому прототип за допомогою Object.setPrototypeOf (), але цей спосіб є менш зручним.

37. Як перевірити, чи являється властивість об’єкта його особистою властивістю або це властивість прототипу?

Можна використовувати метод hasOwnProperty, який повертає true або false, в залежності від того, чи містить об'єкт зазначену властивість, як власну властивість, чи ні.

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

Є метод Object.freeze (), який «заморожує» об'єкт від змін. Цей метод працює тільки в один бік. Скасувати дію цього методу вже неможливо.

Є метод Object.seal (), який забороняє додавати нові властивості, але вже наявні властивості можна змінювати.

Також є метод Object.preventExtensions (), який забороняє додавати нові властивості в об'єкт.

39. Чим відрізняється функція конструктор і клас?

Клас — це синтаксичний цукор над функцією конструктора. Під час створення екземпляра класу, методи описані в ньому потрапляють у прототип, а методи описані всередині функції конструктора потраплять у сам екземпляр. Для того, щоб методи, описані всередині функції конструктора, потрапили в прототип, їх потрібно окремо туди додати. Також клас має більш звичний синтаксис для ООП.

40. Що потрібно зробити, щоб метод класа потрапив до його екземпляру?

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

41. Що таке LocalStorage та SessionStorage?

LocalStorage та SessionStorage — це два типи веб-сховищ, які використовуються для зберігання даних у браузері.

LocalStorage зберігає дані безстроково. Це означає, що інформація залишиться навіть після закриття браузера. Видалити її можна лише за допомогою JavaScript або якщо користувач сам очистить кеш браузера. Обсяг зберігання зазвичай становить до 5 МБ. Важливо зазначити, що старі браузери, такі як Internet Explorer 7 і нижче, не підтримують цю функцію. Також дані в LocalStorage прив’язані до домену, тобто вони недоступні для інших сайтів.

SessionStorage, зберігає дані тільки під час поточної сесії вкладки. Це означає, що як тільки вкладка буде закрита, усі дані в ній буде втрачено. Кожна вкладка браузера має своє власне SessionStorage, тож дані не діляться між вкладками. Обсяг зберігання також складає до 5 МБ, і, як і у випадку з LocalStorage, старі браузери, такі як IE 7 і нижче, не підтримують цю функцію.

42. Що таке Promise?

Це об'єкт, який використовують для відкладених та асинхронних обчислень. Обгортка для значення невідомого на момент створення проміса він дозволяє обробляти результати асинхроних операцій так ніби вони були б синхронними, замість кінцевого результату асинхронного методу повертається обіцянка отримати цей результат у певний момент у майбутньому.

Promise має 3 стани: 

  • очікування (pending): початковий стан, не виконаний та не відхилений. 
  • виконано (fulfilled): операцію завершено успішно. 
  • відхилено (rejected): операцію завершено з помилкою.

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

43. Для чого потрібен метод Promise.all та Promise.race?

Очікує виконання всіх промісів або відхилення будь-якого з них. Повертає проміс, який виконається після виконання всіх промісів. Результатом успішного виконання цього промісу буде масив з результатами виконання очікуваних промісів. У випадку, якщо будь-який з промісів буде відхилено, Promise.all також буде відхилено з помилкою. У нього є аналог Promise.allSetled, який виконується як тільки всі отримані проміси завершені (виконані або відхилені), що містить масив результатів виконання отриманих промісів.

Очікує виконання або відхилення будь-якого з отриманих промісів. Повертає проміс, який буде виконано або відхилено з результатом виконання першого виконаного або відхиленого промісу.

44. Що таке async/await і для чого він потрібен?

Ключове слово async робить створену функцію асинхронною. Функція async може містити вираз await, який призупиняє виконання функції async і чекає відповіді від переданого Promise, потім відновлює виконання функції async і повертає отримане значення. Вона дозволяє обробляти результати асинхронних операцій так якби вони були синхронними, також це функція заавжди повертає проміс.

45. Як обробити помилки в async/await?

Існує два способи:

  1. Перший для цього можна використовувати функцію try catch в тілі блока try буде виконуватися функція в якій потенційно може статися помилка і тоді втиконається блок cath.
  2. Другий обробити помилку async/await функції так якби обробляли помилку у звичайному промісі для цього треба викликати метод cath після виклику функції.

46. Що таке event loop?

Це механізм, який відповідає за виконання коду, збору та обробки подій та виконання підзадач із черги.

У концепції event loop є кілька блоків:

  • call stack — відповідає за створення контексту виконання функції. Кожна функція, що викликається, потрапляє в call stack і видаляється з нього по закінченню своєї роботи.
  • heap — це велика не структурована область пам’яті, в якій зберігаються оголошені змінні, функції тощо.
  • third party API — API, яке надає оточення. Наприклад, метод fetch, який надається браузером. Часто це весь АРІ який не є частиною JS
  • queue — список завдань, що підлягають обробці. Кожне завдання асоціюється з деякою функцією, яка буде викликана, щоб опрацювати це завдання.

Ці функції завжди будуть викликатися по черзі після того як повністю звільниться call стек.

47. Що таке CRUD?

CRUD — це абревіатура, що означає чотири основні операції для роботи з даними: Create (Створити), Read (Читати), Update (Оновити) та Delete (Видалити). Ці операції дозволяють додавати нові записи, переглядати існуючі, редагувати їх та видаляти. CRUD є основою для побудови багатьох додатків, особливо в контексті роботи з базами даних, веб-додатками та API.

React

1. Для чого потрібен Virtual DOM в React?

Віртуальний DOM — це концепція програмування, в якій «віртуальне» представлення інтерфейсу користувача зберігається в пам’яті та синхронізується з «справжнім» DOM за допомогою бібліотеки, такої як ReactDOM. Ця техніка дозволяє покращити продуктивність на клієнтській стороні, уникаючи прямої роботи з DOM шляхом роботи з легким JavaScript-об'єктом, що імітує DOM-дерево. 

Спочатку React вносить усі зміни у віртуальний DOM потім застосовує їх на справжньому DOM.

2. Різниця між virtual DOM та shadow DOM?

Virtual DOM — повне представлення реального DOM-дерева у вигляді JavaScript-об'єкта. Його найважливішою особливістю є групування змін та виконання одиночного рендерингу замість безлічі дрібних. Звичайна JS бібліотека

Shadow DOM — це нативна реалізація в браузері, яка дозволяє створити свій, ізольований, DOM. Всередині Shadow DOM створюється окремий «піддокумент», до якого можна застосовувати свої стилі, інкапсульвані від впливу зовнішнього середовища. Прикладами елементів з Shadow DOM є елементи input select option.

Обидві концепції використовуються для оптимізації і підвищення продуктивності роботи программи

3. В чому різниця між state та props?

  • props — передається в компонент ззовні. 
  • state — внутрішній стан компонента, стан часто називають локальним або інкапсульваним тому що він доступний лише в середині компонента і прихований від інших, компонент може передавати свій стан в низ по дереву у вигляді пропс для дочірніх компонентів.

4. В чому різниця між класовим та функціональним компонентом?

У класових компонентів є state, а у функціональних його немає. Але стан для функціонального компонента можна додати за допомогою хука useState. У класових компонентів є методи життєвого циклу, а у функціональних його немає. Але деякі методи життєвого циклу для функціонального компонента можна реалізувати за допомогою хука useEffect.

Після появи хуків можливості функціональних компонентів стали майже такими самими як і у класових.

5. Які є методи життєвого циклу в React?

В React є 3 фази: монтування, оновлення та розмонтування. У кожній із цих фаз є свої методи життєвого циклу. 

Монтування ці методи викликаються у наступному порядку коли екземпляр компонента створюється і додається в DOM:

  • constructor () 
  • static getDerivedStateFromProps () 
  • render () 
  • componentDidMount () його часто використовують як місце куди додають слухачів подій, а також роблять запити на зовнішній API

Оновлення може бути викликана через зміни у властивостях або стані ці методи викликаються у наступному порядку коли компонент повторно рендериться:

  • static getDerivedStateFromProps () 
  • shouldComponentUpdate () 
  • render ()
  • getSnapshotBeforeUpdate () 
  • componentDidUpdate () 

Розмонтування викликається коли компонент видаляється з DOM

  • componentWillUnmount () Його часто використовують як місце де зазвичай прибирають слухачів подій.

Також є методи життевого циклу для обробки помилок ці методи викликаються у разі помилки під час рендеру у методі життевого циклу або у конструкторі будь якого дочірнього компонента

  • static getDerivedStateFromError () 
  • componentDidCatch () 

6. Як обновити state в класовому компоненті?

Для того, щоб оновити стан у класовому компоненті, можна використовувати метод setState. Цей метод є асинхронним і React може згрупувати кілька викликів setState () в одне оновлення для поліпшення продуктивності. Метод setState може приймати функцію для того, щоб оновити стейт на основі вже наявного state. Виклик методу setState завжди призводить до оновлення компонента.

7. Чому setState — це асинхронна функція?

Це потрібно для того, щоб React зміг згрупувати кілька викликів setState () в одне оновлення для покращення продуктивності. Виклик setState призводить до оновлення компонента, тому setState зробили асинхронною, щоб «дочекатися» поки всі компоненти викличуть setState () у своїх обробниках подій, перш ніж почати повторний рендер. Це позбавляє непотрібних повторних рендерів.

8. Що потрібно зробити, щоб компонент обновився?

Для того, щоб оновився компонент потрібно. Змінити state, шляхом виклику метода setState або щоб змінився props також оновити компонент можна завдяки виклику метода forceUpdate.

9. Як попередити/відмінити лишнє оновлення компоненту?

Існує кілька способів:

  • реалізувати метод життєвого циклу shouldComponentUpdate, який скасовує ререндер, якщо з нього повернути значення false. Але тут слід бути обережними адже процес порівняння пропсів та станів може вимагати більше часу ніж відбувається ререндер, а це погано позначиться на продуктивності;
  • успадкуватися від PureComponent при створенні класового компонента. PureComponent вже реалізує shouldComponentUpdate на рівні поверхневого порівняння значень.

10. Що таке PureComponent і в чому його особливість (memo)?

PureComponent схожий на React Component відмінність полягає в тому що React Component не реалізує метод життевого циклу shouldComponentUpdate

В більшості випадків PureComponent можна використовувати замість написання власного shouldComponentUpdate. Але він робить лише поверхневе порівняння пропс і станів. Якщо вони містять складні структури даних еффекта від реакт PureComponent може не бути. Якщо метод render реакт компонента завжди рендерить однаковий результат за одних і тих самих пропс і станів для покращення продуктивності у деяких випадках можна використовувати PureComponent.

11. Для чого потрібен key?

key — це спеціальний рядковий атрибут, який потрібно вказувати під час створення списку елементів. Ключі допомагають React визначати, які елементи були змінені, додані чи видалені. Їх необхідно вказувати, щоб React міг зіставляти елементи масиву з плином часу. Значеннями key мають бути унікальні значення що не змінюються, не рекомендовано використовувати індекс елементів масиву як ключ оскільки це погано впливає на продуктивність.

12. Для чого потрібен Fragment (<> </>)

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

13. Для чого потрібні портали?

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

14. Що таке refs?

Рефи дають можливість отримати доступ до DOM-вузлів або React-елементів, створених у рендер-методі. Також рефи можуть зберігати в собі будь-яку іншу інформацію, окрім DOM-вузла. У атрибут компонента або елемента реф можна передати функцію яка викличиться з цим елементом або компонентом один раз під час монтування компонента.

15. Що таке context? Скільки context? може бути в проєкті?

У React-додатку дані передаються зверху вниз від батьківського до дочірнього елемента за допомогою props. Однак, подібний спосіб використання може бути надто громіздким для деяких типів props, які необхідно передавати до багатьох компонентів у додатку. Контекст надає спосіб ділитися такими даними між компонентами без необхідності явно передавати пропси через кожен рівень дерева.

16. Для чого потрібні render props?

Render props — це патерн у React, який дозволяє компонентам ділитися логікою, передаючи функцію в якості пропса. Компонент з render prop приймає функцію, яка повертає React-елемент, і викликає її замість свого власного методу рендерингу. Важно відзначити, що render prop може бути будь-яким пропсом, який використовується в компоненті, і є функцією, що відповідає за рендеринг. Також слід пам’ятати, що використання render props може знизити переваги PureComponent, оскільки вони можуть викликати зайві перерисовки.

17. Для чого потрібні HOCs?

Компонент вищого порядку — це функція, яка приймає компонент та повертає новий компонент. Це потрібно для того, щоб винести певну бізнес-логіку в одне місце та знову використовувати її шляхом композиції компонентів. Прикладом хук є функція connect з бібліотеки редакс.

18. Як реалізувати компонент запобіжника (Error Boundary)?

Запобіжники — це компоненти React, які виловлюють помилки JavaScript в будь-якому місці дерев їх дочірніх компонентів, зберігають їх у журналі помилок і виводять запасний UI замість дерева компонентів, що впало. Класовий компонент є запобіжником, якщо він реалізує хоча б один із методів життєвого циклу: static getDerivedStateFromError () або componentDidCatch (). Запобіжники відловлюють помилки під час рендирингу в методах життевого циклу і конструкторів дерев компонентів які розташовані під ними але запобіжники не зловлять помилку у слухачів подій асинхронному коді серверному рендерингу і в самому запобіжнику.

19. Які можливості відкривають хуки? Які хуки ви знаєте?

Хуки дозволяють використовувати стан та інші можливості React без написання класів. Хуки дозволяють повторно використовувати логіку стану, не зачіпаючи дерева компонентів. Так за допомогою хуків можна вирішувати велику кількість проблем які раніше вирішувались завдяки HOCs. Хуки дозволяють розбити один компонент на маленькі функції згідно їх призначення, а не на основі методів життевого циклу завдяки цьому хуки легко використовувати в різних компонентах.

20. Які правила використання хуків?

 Хуки — звичайні JavaScript-функції, але є два правила, яких потрібно дотримуватися. Не викликайте хуки всередині циклів, умовних операторів чи вкладених функцій. Натомість завжди використовуйте хуки тільки всередині React-функцій або всередині власного хука, до повернення будь-якого значення з них. Також, при створенні власного хука, його ім’я має починатися з «use».

21. Для чого потрібен useEffect?

Хук useEffect дає можливість виконувати побічні ефекти у функціональному компоненті. 

  • Якщо передати функцію в useEffect, вона буде викликатися після кожного рендеру та оновлення. Аналог компонент didMount і компонент didUpdate.
  • Якщо передати функцію та її залежність в useEffect, вона буде викликатися після рендеру і щоразу, коли її залежність змінюється. 
  • Якщо передати функцію в useEffect, яка повертає іншу функцію, ця функція буде викликана перед розмонтуванням компонента. Аналог компонент willAnmount.

22. Чим відрізняється useEffect від useLayoutEffect?

Вони дуже схожі:

  • useEffect викликається після рендеру та оновлення компонента. 
  • useLayoutEffect викликається синхронно перед рендером та оновленням компонента. Оновлення заплановані в середині useLayoutEffect будуть повністю синхронно застосовані перед тим як браузер отримає шанс здійснити рендер. useLayoutEffect запускається у тій же фазі, що і componentDidMount та componentDidUpdate. 

23. Що таке «линивая» ініціалізація стану в useState і useReducer?

Коли початковий стан є результатом виклику якоїсь функції, його можна ініціалізувати «ліниво» для того, щоб при кожному оновленні компонента ця функція не викликалася оскільки результат її виклику буде проігноровано. Для цього в useState або useReducer потрібно передати функцію, яка поверне початковий стан, і буде викликана лише один раз, під час першого рендеру.

24. Чим useRef відрізняється від createRef?

Різниця в тому, що коли потрібно створити ref всередині функціонального компонента, використовуючи createRef, він буде створюватися щоразу, при монтуванні або коли оновлюється компонент. А використовуючи useRef, він створюється 1 раз під час монтування.

25. Для чого потрібні useMemo та useCallback?

  • Хук useMemo буде повторно обчислювати мемоізоване значення лише тоді, коли значення якоїсь із залежностей змінилося. Ця оптимізація допомагає уникнути дорогих обчислень під час кожного рендеру.
  • Хук useCallback поверне мемоізовану версію колбека, який змінюється лише тоді, коли змінюються значення однієї із залежностей. Це корисно під час передачі колбеків оптимізованим дочірнім компонентам, які покладаються на рівність посилань для запобігання непотрібним рендерам.

26. Для чого потрібен redux? Який він має data flow?

Redux — це бібліотека для керування станом програми. У звичайному додатку React компоненти мають свій state і можуть передавати його в якості props для дочірніх компонентів. У React-redux програмах є один глобальний state, на який підписуються компоненти, яким потрібно з нього читати дані.

27. Що таке redux middleware?

Redux middleware надають сторонню точку розширення між відправкою екшену і моментом, коли цей екшен досягає редюсера. Redux middleware часто використовують для логування, повідомлення про помилки, спілкування з асинхронним API, роутингу тощо. Найпопулярнішими редакс миделварами є редакс санк и редакс сага.

28. Де потрібно робити side effects в redux?

Redux натхненний функціональним програмуванням і з коробки виконання побічних ефектів у ньому немає місця. Зокрема функції редюсера завжди повинні бути чистими функціями типу (state, action) => newState. Однак, мідлвари Redux-а дозволяють перехоплювати екшени та додавати до них складну поведінку, що включає побічні ефекти.

29. Що таке next () функція в redux middleware?

Виклик next (action) в middleware призведе до того, що дія буде передана наступному middleware, а потім в редюсер. Це потрібно, щоб дотримуватися ланцюжка викликів middleware і action потрапив в редьюсер.

30. Для чого потрібні redux селектори?

Селектори — це гетери для стану redux. Як і гетери, селектори інкапсулюють структуру стану та можуть використовуватися повторно. Якщо раптом змінюється структура state то зміни потрібно буде внести тільки у селекторі, а не у всьому додатку.  Селектори також можуть обчислювати похідні властивості та кешуватися якщо при цьому використовувати бібліотеку reSelect.

31. Чим відрізняється action від action creator?

  • action — це об'єкт, який описує, що сталося в цьому об’єкті завжди має бути властивість type усі інші властивості не є обов’язковими, але зазвичай використовують payload
  • action creator — це функція, яка може приймати якісь параметри та повертає action.
Читайте головні IT-новини країни в нашому Telegram
Читайте головні IT-новини країни в нашому Telegram
По темi
Читайте головні IT-новини країни в нашому Telegram
За тиждень на вакансію Frontend Developer з зарплатою до $4000 відгукнулися 680 разів: як виглядає топ вакансій на Djinni з найбільшою кількістю відгуків
За тиждень на вакансію Frontend Developer з зарплатою до $4000 відгукнулися 680 разів: як виглядає топ вакансій на Djinni з найбільшою кількістю відгуків
По темi
За тиждень на вакансію Frontend Developer з зарплатою до $4000 відгукнулися 680 разів: як виглядає топ вакансій на Djinni з найбільшою кількістю відгуків
«Не соромтеся проговорювати з інтерв’юером навіть ті рішення які ви не впевнені як імплементувати». Поради Frontend Engineer як успішно пройти лайвкодинг під час співбесіди
«Не соромтеся проговорювати з інтерв’юером навіть ті рішення, які ви не впевнені, як імплементувати». Поради Frontend Engineer, як успішно пройти лайвкодинг під час співбесіди
По темi
«Не соромтеся проговорювати з інтерв’юером навіть ті рішення, які ви не впевнені, як імплементувати». Поради Frontend Engineer, як успішно пройти лайвкодинг під час співбесіди
Frontend Developer із Києва створив сервіс для кулінарів де кожен може додавати редагувати шукати рецепти. Як працює Cooking Time
Frontend Developer із Києва створив сервіс для кулінарів, де кожен може додавати, редагувати, шукати рецепти. Як працює Cooking Time
По темi
Frontend Developer із Києва створив сервіс для кулінарів, де кожен може додавати, редагувати, шукати рецепти. Як працює Cooking Time
Дайджест свіжих вакансій від IT-роботодавців на jobs.dev.ua: Node.js Frontend Product Manager та інші
Дайджест свіжих вакансій від IT-роботодавців на jobs.dev.ua: Node.js, Frontend, Product Manager та інші
По темi
Дайджест свіжих вакансій від IT-роботодавців на jobs.dev.ua: Node.js, Frontend, Product Manager та інші
Also Read
Одвічне питання: чим Java відрізняється від JavaScript. Детальний гайд
Одвічне питання: чим Java відрізняється від JavaScript. Детальний гайд
Одвічне питання: чим Java відрізняється від JavaScript. Детальний гайд
Для когось відповідь на питання про різницю Java й JavaScript є очевидною — тут починаються жарти про подібність між килимом й автомобілем (Java схожа на JavaScript так само, як «car» на «carpet»). Попри це, деякі люди ще можуть мати помилкове уявлення, вважаючи, що це дві назви тої самої мови, або що технології тісно пов’язані. Спробуємо трохи прояснити ситуацію.
Мануал для джуна. Python Developer: запитання на співбесіді, практичні завдання та поради для початківців
Мануал для джуна. Python Developer: запитання на співбесіді, практичні завдання та поради для початківців
Мануал для джуна. Python Developer: запитання на співбесіді, практичні завдання та поради для початківців
Джунів, які шукають роботу, проходять купу співбесід та отримують відмови замість оферів, під час війни побільшало. А все тому, що до співбесід необхідно ретельно готуватися. dev.ua продовжує серію матеріалів про те, що треба знати джунам для проходження співбесіди й отримання омріяного оферу від першого роботодавця.  Олександр Ковтунов, Python Software engineer компанії Ajax Systems, який також проводить співбесіди для junior- і middle-фахівців, розповів про професію Python Developer і надав поради, як початківцям долучитися до професії.
Хочу стати програмістом. З чого почати і як вибрати між Java Script, PHP, Python та іншими
Хочу стати програмістом. З чого почати і як вибрати між Java Script, PHP, Python та іншими
Хочу стати програмістом. З чого почати і як вибрати між Java Script, PHP, Python та іншими
Діана Смелікова, операційний директор Wezom Academy, у своєму блозі на DOU пояснила, з чого почати вивчати програмування та яким мовам варто налагодити перевагу на початковому етапі. Ось 5 важливих порад від неї.
Заханти мене, якщо зможеш. Які IT-фахівці наразі в супер-дефіциті: ТОП вакансій від найбільших роботодавців
Заханти мене, якщо зможеш. Які IT-фахівці наразі в супер-дефіциті: ТОП вакансій від найбільших роботодавців
Заханти мене, якщо зможеш. Які IT-фахівці наразі в супер-дефіциті: ТОП вакансій від найбільших роботодавців
LinkedIn рясніє сотнями вакансій для айтішників, IT-рекрутери раз у раз намагаються схантити хороших фахівців, а фахівці неквапливо вибирають роботодавця. На DOU опубліковано вдвічі більше вакансій, ніж рік тому, а djinni наповнюється все новими й новими позиціями. Ринок IT сильно перегрітий, і сьогодні склалася парадоксальна ситуація, при якій на одного претендента припадає десяток рекрутерів.  Деяких фахівців найняти особливо складно. dev.ua розпитав топових українських IT-роботодавців про те, яких фахівців їм найняти найскладніше і чому. 
1 comment

Have important news to share? Message our Telegram bot

Key events and useful links in our Telegram channel

Discussion
No comments yet.