💳 Trustee Plus — твоя персональна картка європейського банку: 3 хвилини і 10 євро 👉
Марія БровінськаУвійти в ІТ
3 вересня 2022, 09:30
2022-09-03
50 питань та відповідей щодо програмування для підготовки до технічного інтерв'ю
Готуючись до співбесіди, багато програмістів-початківців поняття не мають, яких питань очікувати від інтерв’юрів — чи це співбесіда в стартап, чи в технологічний гігант на кшталт Amazon, Microsoft або Google. У статті на Hacker Noon розробник Джавін Ползібрав питання, які люблять ставити на таких інтерв’ю, а також відповіді на них та додаткові ресурси для підготовки.
Усі завдання, які з великою ймовірністю запропонують кодеру на технічній співбесіді, можна умовно розділити на дві групи: загальні логічні завдання типу «змінити значення змінних, не використовуючи тимчасову змінну», а також питання структур даних і алгоритмів. Найчастіші з останніх: масиви, зв’язкові списки, рядки, двійкові дерева, а також різні питання алгоритмів — саме вони будуть розглянуті нижче.
Але перш ніж приступити до них, потрібно добре вивчити ці теми, або принаймні освіжити навички вирішення завдань з них. Для цього можна пройти курс з алгоритмів і структур даних Роберта Хорвіка: частина 1 і частина 2 .
Список найбільш поширених питань для співбесід з програмування.
1. Масиви
Масив — це найважливіша структура даних, що зберігає набір елементів у безперервній ділянці пам’яті. Це улюблена тема інтерв’юерів, і багато питань щодо неї можна очікувати в будь-якій співбесіді, наприклад, на реверс, сортування або пошук елементів масиву.
Головний плюс такої структури даних, як масив — він забезпечує швидкий пошук складністю Про (1) при знанні індексів, але додавання та видалення елементів з нього відбувається повільно, тому що не можна змінювати розмір масиву після створення. Щоб збільшити або зменшити масив, потрібно створити новий і скопіювати всі елементи зі старого.
Щоб з легкістю відповідати на питання, пов’язані з масивами, потрібно добре розбиратися як із самими масивами, так і з базовими конструкторами, такі як рекурсія та основні оператори.
Ось найчастіші питання:
Як знайти пропущене число у заданому масиві цілих чисел від 1 до 100? (Рішення)
Як знайти число, що повторюється, в заданому масиві цілих чисел? (Рішення)
Як знайти найбільше та найменше число в невідсортованому масиві? (Рішення)
Як знайти всі пари в масиві цілих чисел, сума яких дорівнює заданому числу? (Рішення)
Як знайти числа, що повторюються в масиві, якщо їх кілька? (Рішення)
Як видалити повторювані елементи із заданого масиву Java? (Рішення)
Як сортувати масив цілих чисел без додаткової пам’яті за допомогою алгоритму швидкого сортування? (Рішення)
Як видалити елементи, що повторюються, з масиву без додаткової пам’яті? (Рішення)
Як змінити порядок елементів у масиві на зворотний без додаткової пам’яті в Java? (Рішення)
Як видалити елементи, що повторюються, з масиву без використання колекцій? (Рішення)
Ці питання допоможуть не тільки розвинути навички вирішення завдань, а й прокачати знання з масивів. Більш складні питання по темі можна знайти в курсі алгоритмів The Coding Interview Bootcamp: Algorithms + Data Structures, розробленому спеціально для підготовки до співбесід у таких технологічних гігантах, як Google, Microsoft, Apple або Facebook.
Ще одна базова структура даних — зв’язковий список. Як і масив, це лінійна структура даних, і елементи у ньому зберігаються лінійно, але на відміну від масиву — на безперервних областях. Вони розкидані в пам’яті та з'єднуються за допомогою вузлів. Зв’язковий список — ніщо інше, як список вузлів, кожен з яких містить власне дані та посилання на наступний вузол.
Завдяки такій структурі додавати та видаляти елементи у зв’язному списку досить легко, тому що потрібно просто змінити посилання без необхідності створювати новий список. При цьому шукати складніші елементи; пошук за однозв’язковим списком займає лінійний час O (n). У цій статті можна докладніше прочитати про відмінності між масивами та списками.
Є різні види зв’язкових списків: однозв’язний список, який дозволяє пересуватися тільки в один бік: на початок або на кінець; двозв’язний перелік, що дає можливість переміщення як вперед, так і назад; кільцевий список, що формує зациклену структуру.
Щоб успішно справлятися з питаннями лінійних списків, важливо добре знати рекурсію. Якщо витягти з зв’язкового списку один вузол, структура, що залишилася, як і раніше, буде зв’язковим списком, і тому для багатьох завдань у цій темі більш простими є рекурсивні рішення, ніж ітеративні.
Запитання для співбесіди:
Як знайти центральний елемент в одному списку за один прохід? (Рішення)
Як перевірити заданий список на циклічність? Як знайти вихідний вузол циклу? (Рішення)
Як знайти суму двох зв’язкових списків, використовуючи стек? (Рішення)
Ці питання допоможуть розвинути вміння вирішувати завдання на зв’язкові списки та поглибити знання цієї структури даних. Якщо вони викликають труднощі, можна оновити знання структур даних і алгоритмів, пройшовши курс Data Structures and Algorithms: Deep Dive Using Java .
Крім масивів та зв’язкових списків, ще однією популярною темою є рядки: питання щодо них незмінно звучать на кожній співбесіді на посади у програмуванні.
Плюсом тут можна вважати те, що знаючи масиви, дуже легко вирішувати завдання на рядки, тому що рядок є масивом символів. Отже, всі методи, засвоєні при вирішенні питань на масиви, можна використовувати і для вирішення питань на рядки.
Ось найчастіші з них:
Як вивести символи, що повторюються, з рядка? (Рішення)
Як вивести перший символ, що не повторюється, з рядка? (Рішення)
Як зробити реверс заданого рядка з використанням рекурсії? (Рішення)
Як перевірити, що рядок складається лише із цифр? (Рішення)
Як знайти символ, що повторюється, в рядку? (Рішення)
Як порахувати кількість голосних та приголосних звуків у заданому рядку? (Рішення)
Як порахувати, скільки разів у рядку зустрічається заданий символ? (Рішення)
Як знайти всі можливі перестановки елементів рядка? (Рішення)
Як зробити реверс слів у заданому реченні, не використовуючи класи-колекції? (Рішення)
Як перевірити, чи один рядок є перестановкою іншого? (Рішення)
Як перевірити, чи є заданий рядок паліндромом? (Рішення)
Здатність вирішити ці питання свідчить про досить хороший рівень володінь рядками. Більш просунуті завдання можна знайти у книзі « Алгоритми. Посібник з розробки » Стівена Скієни .
Усі розглянуті вище структури — лінійні, проте насправді уявити всю інформацію в такий спосіб неможливо, і тут допомагає така структура даних, як дерево.
Дерево дозволяє зберігати дані як ієрархії. Залежно від способу зберігання інформації, існують різні типи дерев, наприклад, двійкове дерево, в якому кожен вузол має не більше двох дочірніх елементів. Поряд із двійковим деревом пошуку, це одна з найпоширеніших деревоподібних структур даних, а значить, по ньому обов’язково попадеться безліч питань, включаючи їх обхід, підрахунок вузлів, визначення глибини та збалансованості дерева.
Секрет успішного проходження питань, пов’язаних із двійковим деревом — ґрунтовне знання теорії, наприклад, що таке розмір чи глибина двійкового дерева, що таке лист та вузол, а також розуміння основних алгоритмів обходу дерева: у прямому, симетричному та зворотному порядку.
Крім питань, що стосуються структур даних, у більшості співбесід на посаду програміста ставлять питання щодо алгоритмів, проєктування, порозрядних операцій, а також загальні логічні завдання.
Дуже важливо добре підготуватися на ці теми, тому що на реальних співбесідах з них часто трапляються несподівані каверзні питання. Якщо вирішувати їх заздалегідь, вони не викличуть проблем, а це додасть впевненості в собі, пояснюючи рішення інтерв’юеру.
Мануал для джуна. Що треба знати новачку у frontend-розробці перед співбесідою на проєкт мрії: запитання для інтерв'ю та приклади тестових
Створювати ІТ-продукти можна на різних рівнях і вдосконалювати їх як зсередини, (backend), так і ззовні (frontend). Візьмемо, наприклад, сайт. Спеціаліст може працювати із завданнями «під капотом», а може розвивати інтерфейс сайту, застосунку чи спеціальне програмне забезпечення для бізнесу, щоб вони були зручними, зрозумілими та функціональними.
Останнім якраз займається frontend-інженер. Що ще треба знати джунам про frontend-розробку, що не варто робити перед співбесідою та на які запитання відповісти, щоби бути готовим на 100% — Frontend Engineer у Levi9 Олексій Горбунов розклав все по поличках у цьому матеріалі.
«Після випуску про IT-Generation хочеться зробити тред про те, як IT-школи вас най**ують». Відомий IT-блогер Діма Малєєв розповів, що думає про IT-освіту
Відомий IT-блогер Діма Малєєв розповів своє ставлення до IT-курсів, які наразі продукуються в Україні. «Після сьогоднішнього випуску про IT-Generation, хочеться зробити невеликий тред про те, як IT-школи вас най**ують, продаючи курси, які вам ніяк не допоможуть. І навіть якщо ви виграєте грант від програми — ви просто згаєте час», — написав він у Twitter.
Публікуємо його допис із частковою цензурою.
Дякую за цікавий матеріал. Скажіть будь-ласка задачіз теорії графів такі як пошук дерева мінімальної ваги (https://www.mathros.net.ua/znahodzhennja-najkorotshogo-shljahu-v-orijentovanomu-grafi-za-algorytmom-dejkstry.html), пошук в гдибину (ширину), алгоритми розмальовки графа і так далі, стануть у пригоді на співбесіді по програмуванню чи ні?