Перейти к содержимому
На этой странице

Основны программирования

Все темы QA

Что такое ООП? Назовите его принципы с примерами?

Объектно-ориентированное программирование (ООП) — это методология программирования, основанная на концепции объектов, которые объединяют данные и методы их обработки в единые сущности. Основные принципы ООП включают:

  • Инкапсуляция: Скрытие деталей реализации объекта от внешнего мира и предоставление интерфейса для взаимодействия. Пример:
public class Car {
    private String model;
    private int year;

    public void setModel(String model) {
        this.model = model;
    }

    public String getModel() {
        return model;
    }
}
  • Наследование: Механизм, позволяющий одному классу наследовать свойства и методы другого класса. Пример:
public class Animal {
    public void eat() {
        System.out.println("Animal is eating");
    }
}

public class Dog extends Animal {
    public void bark() {
        System.out.println("Dog is barking");
    }
}
  • Полиморфизм: Возможность объектов с одним интерфейсом вызывать методы, которые будут выполнять различные действия в зависимости от типа объекта. Пример:
public interface Shape {
    void draw();
}

public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Circle is drawn");
    }
}

public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Rectangle is drawn");
    }
}
  • Абстракция: Выделение общих характеристик объекта и игнорирование лишних деталей для упрощения представления. Пример:
public abstract class Vehicle {
    abstract void move();
}

public class Car extends Vehicle {
    @Override
    void move() {
        System.out.println("Car is moving");
    }
}

public class Bicycle extends Vehicle {
    @Override
    void move() {
        System.out.println("Bicycle is moving");
    }
}

Эти принципы помогают создавать более гибкие, поддерживаемые и масштабируемые программы.


Что такое интерфейс? Что такое абстрактный класс? Чем они отличаются?

В контексте объектно-ориентированного программирования (ООП):

  1. Интерфейс (interface):

    • Это абстрактный тип данных, который определяет поведение объекта без конкретной реализации.

    • В Java интерфейс может содержать абстрактные методы, default- и static-методы с реализацией, а начиная с Java 9 также private-методы. Его поля являются public static final; состояния экземпляра и конструкторов нет.

    • Классы могут реализовывать несколько интерфейсов.

    • Пример:

      public interface Drawable {
          void draw();
      }
  2. Абстрактный класс (abstract class):

    • Это класс, который не может быть инстанциирован напрямую, а может содержать как абстрактные, так и конкретные методы.

    • Абстрактный класс может иметь конструкторы и переменные экземпляра.

    • Подкласс должен реализовать все абстрактные методы абстрактного класса или сам быть абстрактным.

    • Пример:

      public abstract class Shape {
          abstract void draw();
          void display() {
              System.out.println("Displaying shape");
          }
      }
Отличия:
  • Интерфейс:

    • В Java интерфейс может содержать абстрактные методы, default- и static-методы с реализацией, а начиная с Java 9 также private-методы. Его поля являются public static final; состояния экземпляра и конструкторов нет.

    • Не имеет конструкторов.

    • Поддерживает множественное наследование.

    • Используется для определения контрактов.

  • Абстрактный класс:

    • Может содержать как абстрактные, так и конкретные методы.

    • Имеет конструкторы.

    • Поддерживает одиночное наследование.

    • Используется для создания базовой функциональности, которая может быть расширена в подклассах.

Собеседования: Тестирование

Смотри записи интервью, узнай, какие вопросы задают и как отвечают кандидаты.

Вопросы и ответы

Не нашли ответ? Напишите мне в чат. Я делаю Шпаргалку и сам отвечаю на сообщения. Расскажите, что не работает или чего вам не хватает. Может, смогу сразу взять это в работу.

Откуда взяты вопросы?

Из реальных собеседований. Основой подборки стал опыт Вадима Новосёлова: он проходил интервью и записывал вопросы. Подробнее о материалах.

Насколько эти вопросы актуальны?

Эти вопросы встречались нам на реальных собеседованиях в 2025 году. Мы регулярно проходим собеседования и пополняем подборку новыми вопросами. Основы профессии и ключевые технологии остаются востребованными годами, а детали конкретных инструментов и версий стоит сверять с текущей документацией.

На какой уровень рассчитана подборка?

Мы проходили собеседования на вакансии уровня Middle+, а иногда и на Senior-позиции. Вопросы из этих интервью вошли в подборку. Направления работы: QA-инженер, Тестировщик ПО, Инженер по автоматизации тестирования. Глубина обсуждения зависит от вакансии: будь готов объяснить основную идею, привести практический пример и разобрать ограничения и альтернативы решения.

Этот вопрос точно будет на моём собеседовании?

Гарантии нет: набор вопросов зависит от компании, задач команды, уровня вакансии и самого интервьюера. Эти вопросы уже встречались на реальных собеседованиях, но на твоём интервью ту же тему могут проверить другой формулировкой, практической задачей или обсуждением твоего опыта. Используй подборку, чтобы разобраться в теме: объясняй идею своими словами, приводи примеры и готовься обсудить ограничения и альтернативы решения. Так будет проще ответить и на знакомый вопрос, и на неожиданные уточнения.