Джерело: ЮНЕСКО
Вступ:
Перехід від аналітичної ролі до інженерної в галузі ШІ часто є однією з найскладніших змін для фахівців з даними. На відміну від аналітичних ролей, позиції інженера ШІ та інженера з машинного навчання мають більш широкі обов’язки, починаючи від основ машинного навчання і до програмної інженерії. У цій статті я поділюсь своїм досвідом проходження інтерв’ю на посаду інженера ШІ в IBM як людина з аналітичним досвідом.
Тук-тук: Хто там? Це IBM — прокидайся!
Я подав заявку на роль інженера ШІ через LinkedIn.
Мої відчуття, коли я побачив опис роботи: це робота чи запрошення на місію NASA на Марс 😵
Опис роботи зосереджувався на проектуванні, кодуванні та тестуванні інноваційних додатків в таких сферах, як машинне навчання, обчислювальна лінгвістика, обробка природної мови (NLP), семантичний пошук інформації, екстракція, класифікація та підкріплене навчання з вивченням. Команда IBM Watsonx шукала інженера ШІ з досвідом у наступних сферах:
- Створення та підтримка моделей машинного навчання та LLM з акцентом на великі дані.
- Виведення додатків на базі ШІ в продакшн середовища.
- Здатність розробляти та відлагоджувати недетерміновані, адаптивні системи.
- Технічний стек: Python, LLM, Tensorflow або PyTorch, Scikit-learn, Git, моделі Speech-to-Text.
Приблизно через два місяці після подачі заявки я отримав дзвінок для попереднього відбору. Під час цього дзвінка рекрутер здебільшого зосередився на моєму досвіді та оцінив моє знайомство з вимогами команди IBM Watsonx.
Якщо ви хочете дізнатись про мій процес інтерв’ю без заглиблення в деталі, будь ласка, перегляньте мою статтю (Raghu Teja Manchala) нижче.
[
Досвід інтерв’ю в IBM — Інженер ШІ
У цій статті я ділюсь своїм досвідом інтерв’ю на посаду інженера ШІ в IBM, яке включало 3 раунди.
medium.com
](/@raghuteja9966/ibm-interview-experience-ai-engineer-c9d1e4fe0638?source=post_page-----9e75284344e5--------------------------------)
Гра почалася 🤓: Інтерв’ю розпочинається:
Технічне інтерв’ю (1 год 15 хв):
Інтерв'юери: Керівник розробки Watson Assistant, Watson Speech Services (Майстер-винахідник).
Все почалося добре, ми привіталися. Не витрачаючи часу, інтерв’юери одразу перейшли до технічних запитань. Це було добре структуроване інтерв’ю, яке зосереджувалося на наступних темах:
- Проекти
- Машинне навчання та MLOps
- Python
- SQL
- Git
Примітка: В IBM інтерв'ю зазвичай довші. Для вашої зручності я розподілив весь досвід на три частини.
- Частина 1 (ця стаття): Python, SQL та Git.
- Частина 2: Проекти, Машинне навчання та MLOps.
- Частина 3: Кодовий раунд.
Я намагався давати короткі та чіткі відповіді, щоб надати необхідний контекст без витрачання вашого часу на довгу статтю.
Python
Запитання 1: Що таке витік пам'яті? Які основні причини і як ви їх усуваєте?
Мої відчуття: Це питання забрало всю мою впевненість. 😰
Моя відповідь: Коли ми створюємо об'єкти, але забуваємо їх видалити, це може призвести до поступового збільшення використання пам’яті, що зрештою може викликати виснаження пам’яті. Це і є витік пам'яті. Для запобігання цьому використовують збірку сміття, яка автоматично видаляє об'єкти, що більше не використовуються, після певного періоду.
Примітка: Оскільки я не знав точної відповіді, я пояснив щось, що було пов'язано з витратами пам'яті, що я вивчив під час бакалаврату, зокрема збором сміття в Java.
На щастя, близько 80% моїх відповідей були правильними.
Реакція інтерв'юера: Посміхнувся підтримуючи, ніби кажучи: "Ти впораєшся, ще трохи!" 😊
Запитання 2: Методи класу vs Статичні методи?
Мої відчуття: Надія з'явилася. Я усміхнувся. 😊
Моя відповідь:
Метод класу — це метод, який належить класу, а не об'єкту. Ці методи не можна отримати через об'єкти класу. Декоратор “@classmethod” використовується для визначення методів класу, і вони зазвичай використовуються для доступу або зміни змінних рівня класу, спільних для всіх екземплярів.
Статичний метод — це незалежний метод, який не належить ані класу, ані об'єкту. Отже, цей метод не може змінювати або отримувати доступ до даних класу або об'єкта. Декоратор “@staticmethod” використовується для визначення статичних методів, які часто використовуються як допоміжні функції всередині класу.
Реакція інтерв'юера: Захоплено, ніби кажучи: "Нарешті, ми на одній хвилі." 😄
Запитання 3: Як ви отримуєте доступ до методу батьківського класу?
Мої відчуття: Так! Нарешті, просте питання. 😊
Моя відповідь:
Я можу отримати доступ до методів батьківського класу кількома способами:
1. Створивши об'єкт батьківського класу.
2. Наслідуючи батьківський клас в дочірньому класі, а потім отримуючи доступ до методу батька через об'єкт дочірнього класу.
3. Використовуючи super().
Реакція інтерв'юера: Здавалося задоволеним, ніби кажучи: “Добре, ти знаєш основи.” 😊
Запитання 4: Якщо у вас є базовий клас і три батьківських класи з методами з однаковими іменами, який порядок виконання при виклику методу?
Мої відчуття: Так, інтерв'ю проходить добре, сподіваюся, так буде й надалі. 😅
Моя відповідь: Порядок вирішення методів (MRO).
class parent_1:
def example_method(self):
pass
class parent_2:
def example_method(self):
pass
class parent_3:
def example_method(self):
pass
class child (parent_1, parent_2, parent_3):
pass
object = child()
object.example_method()
У цьому випадку дочірній клас успадковує від parent1, parent2 і parent3 в зазначеному порядку.
Отже, інтерпретатор Python шукає метод examplemethod в наступному порядку:
child → parent1 → parent2 → parent_3
Реакція інтерв'юера: Задоволений, як батько, що спостерігає, як його дитина нарешті зав'язує шнурки. 🙃
Запитання 5: Як ви дебагуєте Python код у продакшн системах?
Мої відчуття: Круто! Це питання було як розминка, поки не стало не таким. 🙃
Моя відповідь:
Є кілька способів дебагувати код:
1. Логування
2. Дебаггер у VS Code.
3. Обробка виключень.
Наступне питання: У продакшн середовищі не буде VS Code. Як ви дебагуєте?
Моя відповідь: Інструменти моніторингу.
Реакція інтерв'юера: Цікаво… давайте рухатися далі, поки ми не втомились. 😑
Примітка: У мене не так багато досвіду роботи в продакшн середовищі, тому я не знаю точної відповіді. Якщо у вас є пропозиції, будь ласка, поділіться ними в коментарях — це буде велика допомога!
SQL
Запитання 1: Як ви оптимізуєте SQL запити?
Мої відчуття: Чудово! Рідкісний шанс насправді вразити когось. 😂
Моя відповідь:
Коли я стикаюся з проблемами оптимізації, я слідую цим крокам:
1. Оберіть лише необхідні стовпці:
select * from table; --- Не рекомендується
select column1, column2 from table; --- Рекомендується
2. Приєднуйте великі таблиці на останньому кроці:
Приєднуючи спочатку менші таблиці, ми зменшуємо кількість рядків, що обробляються на наступних етапах, що знижує обчислювальний час майже вдвічі.
3. Фільтруйте або агрегуйте таблиці на ранньому етапі:
Проводьте фільтрацію або агрегацію на ранніх етапах, щоб зменшити обсяг даних перед виконанням важких операцій.
4.
Щасливо, близько 80% з цього було правильним.
Реакція інтерв'юера: Посміхнувся підтримуючи, ніби кажучи: "Ти впораєшся, ще трохи!" 😊
Запитання 2: Методи класу vs Статичні методи?
Мої відчуття: Надія з'явилася. Я усміхнувся. 😊
Моя відповідь:
Метод класу — це метод, який належить класу, а не об'єкту. Ці методи не можна отримати через об'єкти класу. Декоратор “@classmethod” використовується для визначення методів класу, і вони зазвичай використовуються для доступу або зміни змінних рівня класу, спільних для всіх екземплярів.
Статичний метод — це незалежний метод, який не належить ані класу, ані об'єкту. Отже, цей метод не може змінювати або отримувати доступ до даних класу або об'єкта. Декоратор “@staticmethod” використовується для визначення статичних методів, які часто використовуються як допоміжні функції всередині класу.
Реакція інтерв'юера: Захоплено, ніби кажучи: "Нарешті, ми на одній хвилі." 😄
Запитання 3: Як ви отримуєте доступ до методу батьківського класу?
Мої відчуття: Так! Нарешті, просте питання. 😊
Моя відповідь:
Я можу отримати доступ до методів батьківського класу кількома способами:
1. Створивши об'єкт батьківського класу.
2. Наслідуючи батьківський клас в дочірньому класі, а потім отримуючи доступ до методу батька через об'єкт дочірнього класу.
3. Використовуючи super().
Реакція інтерв'юера: Здавалося задоволеним, ніби кажучи: “Добре, ти знаєш основи.” 😊
Запитання 4: Якщо у вас є базовий клас і три батьківських класи з методами з однаковими іменами, який порядок виконання при виклику методу?
Мої відчуття: Так, інтерв'ю проходить добре, сподіваюся, так буде й надалі. 😅
Моя відповідь: Порядок вирішення методів (MRO).
class parent_1:
def example_method(self):
pass
class parent_2:
def example_method(self):
pass
class parent_3:
def example_method(self):
pass
class child (parent_1, parent_2, parent_3):
pass
object = child()
object.example_method()
У цьому випадку дочірній клас успадковує від parent1, parent2 і parent3 в зазначеному порядку.
Отже, інтерпретатор Python шукає метод examplemethod в наступному порядку:
child → parent1 → parent2 → parent_3
Реакція інтерв'юера: Задоволений, як батько, що спостерігає, як його дитина нарешті зав'язує шнурки. 🙃
Запитання 5: Як ви дебагуєте Python код у продакшн системах?
Мої відчуття: Круто! Це питання було як розминка, поки не стало не таким. 🙃
Моя відповідь:
Є кілька способів дебагувати код:
1. Логування
2. Дебаггер у VS Code.
3. Обробка виключень.
Наступне питання: У продакшн середовищі не буде VS Code. Як ви дебагуєте?
Моя відповідь: Інструменти моніторингу.
Реакція інтерв'юера: Цікаво… давайте рухатися далі, поки ми не втомились. 😑
Примітка: У мене не так багато досвіду роботи в продакшн середовищі, тому я не знаю точної відповіді. Якщо у вас є пропозиції, будь ласка, поділіться ними в коментарях — це буде велика допомога!
SQL
Запитання 1: Як ви оптимізуєте SQL запити?
Мої відчуття: Чудово! Рідкісний шанс насправді вразити когось. 😂
Моя відповідь:
Коли я стикаюся з проблемами оптимізації, я слідую цим крокам:
1. Оберіть лише необхідні стовпці:
select * from table; --- Не рекомендується
select column1, column2 from table; --- Рекомендується
2. Приєднуйте великі таблиці на останньому кроці:
Приєднуючи спочатку менші таблиці, ми зменшуємо кількість рядків, що обробляються на наступних етапах, що знижує обчислювальний час майже вдвічі.
3. Фільтруйте або агрегуйте таблиці на ранньому етапі:
Проводьте фільтрацію або агрегацію на ранніх етапах, щоб зменшити обсяг даних перед виконанням важких операцій.
4.
Сподіваюся, це допоможе вам у підготовці до інтерв'ю та вивченні вашої ролі на посаді. Не соромтеся залишати коментар, якщо у вас є питання або відгуки.
Якщо вам сподобалася стаття і ви хочете мене підтримати:
📰 Слідкуйте за мною щоб дізнаватися більше контенту на моєму профілі на Medium
👏 Поставте 50 аплодисментів, щоб допомогти цій історії досягти більшої аудиторії.
🔔 Підключайтеся до мене на LinkedIn
Бажаю вам радісного та успішного шляху навчання! 🤝 Давайте зростати разом!
Перекладено з: How I Cracked My IBM AI Engineer Interview: Part 1 — Technical