Як я подолав інтерв’ю на позицію інженера з AI в IBM: Частина 1 — Технічна

pic

Джерело: ЮНЕСКО

Вступ:

Перехід від аналітичної ролі до інженерної в галузі ШІ часто є однією з найскладніших змін для фахівців з даними. На відміну від аналітичних ролей, позиції інженера ШІ та інженера з машинного навчання мають більш широкі обов’язки, починаючи від основ машинного навчання і до програмної інженерії. У цій статті я поділюсь своїм досвідом проходження інтерв’ю на посаду інженера ШІ в 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 (Майстер-винахідник).

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

  1. Проекти
  2. Машинне навчання та MLOps
  3. Python
  4. SQL
  5. Git

Примітка: В IBM інтерв'ю зазвичай довші. Для вашої зручності я розподілив весь досвід на три частини.

  1. Частина 1 (ця стаття): Python, SQL та Git.
  2. Частина 2: Проекти, Машинне навчання та MLOps.
  3. Частина 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 шукає метод example
method в наступному порядку:
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 шукає метод example
method в наступному порядку:
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

Leave a Reply

Your email address will not be published. Required fields are marked *