10 вопросов программирования на C ++ на собеседовании

Если вы программист на C ++, то знаете, как важно подготовиться к собеседованию. Знание правильных вопросов и ответов может повысить или снизить ваши шансы на получение должности.

Ниже приведены некоторые из наиболее часто задаваемых вопросов на собеседовании по программированию на C ++ и ответы на них, которые стоит ожидать на интервью.

Что такое строковый класс С ++?
Std :: string - это шаблонный контейнер для символьных строк. Он поддерживает основные операции, такие как: конкатенация, сравнение и итераторы. Наиболее распространенная реализация этого шаблона в C ++ 11 и последующих версиях называется std :: basic_string или просто «basic_string».

В чем разница между строкой c ++ и std :: string?
Простым ответом было бы то, что оба являются контейнерами для символьных строк. Основное различие заключается в том, как они реализованы. Std :: basic_string представляет свое содержимое с помощью вектора символов, а строка C ++ хранит их внутри себя как часть строкового объекта.

В чем преимущества использования строк c ++ перед std :: strings?
Основное преимущество заключается в том, как они реализованы: вектор символов против внутреннего представления. Это означает, что когда вы используете строку C ++, если кому-то нужно скопировать ее или изменить ее содержимое, ему / ей нужно будет только сделать глубокую копию строки, а с std :: string вам нужно будет сделать полную копию .

Объясните, что означает «оператор разрешения области видимости» или ::?
Оператор разрешения области позволяет получить доступ к именам, объявленным во внешнем блоке, без необходимости явно указывать их пространство имен. Например: если у нас есть код вроде

int external_var = 123;

пространство имен нс {int inner_var = 999; }

затем оператор разрешения области видимости позволяет нам получить доступ к external_var без необходимости указывать ее пространство имен: :: outer :: inner. В этом примере мы будем иметь в виду «ns :: inner». Есть две другие формы оператора разрешения области видимости:

- :: begin - относится к пространству имен непосредственно над текущим уровнем или, что эквивалентно, @namespace в XAML.

- :: end - относится к пространству имен, которое находится ниже этого, или, что эквивалентно, ns :: ns_var в C ++ и «ns»: «inner» в XML.

Что такое инкапсуляция?
Инкапсуляция - это процесс объединения или объединения данных и функций в единое целое. Это важно, потому что это предотвращает доступ к данным, которые могут не быть предназначены для публичного использования, в то же время позволяя другому коду вне самого объекта взаимодействовать с теми же функциями. Преимущества этого можно увидеть на следующем примере:

class myClass {имя публичной строки; int age = 31; }

Если вы хотите получить доступ к данным объекта, все, что вам нужно сделать, это создать указатель или ссылочную переменную и присвоить ей адрес этого класса. Это также даст нам доступ для чтения и записи к этим переменным. Но если вы не будете осторожны, вы можете изменить частные переменные.

Что подразумевается под «частным» и «публичным» в c ++?
Доступ к публичным функциям или членам можно получить из любой точки программы; тогда как частные не могут. Таким образом, объявляя идентификатор как «частный», он гарантирует, что только другие идентификаторы того же типа, в том же классе или пространстве имен, могут получить к нему доступ.

Что такое виртуальность?
Виртуальные методы - это методы, которые существуют только в качестве заполнителя для переопределения производных классов; они называются «виртуальными», потому что содержат по крайней мере один вызов функции другого виртуального метода, и все функции, из которых исходят эти вызовы, также должны быть объявлены с ключевым словом «виртуальный» в базовом классе.

Что такое виртуальная функция?
Виртуальная функция - это функция, объявление в классе которой включает ключевое слово virtual. Когда вы включаете это ключевое слово, происходит несколько вещей. Прежде всего, когда производные классы создаются из исходного базового класса, содержащего виртуальный метод, каждый должен также содержать по крайней мере одну функцию с той же сигнатурой, что и виртуальный метод в его базовом классе. Во-вторых, когда объект выделяется из производного класса и на нем выполняется вызов функции одного из этих виртуальных методов, это может быть переопределено любой другой функцией с тем же именем внутри другого производного класса - даже если эти функции находятся внутри некоторого сторонний код или библиотека.

Что такое рефакторинг?
Рефакторинг - это процесс модификации кода для улучшения его читабельности, ремонтопригодности и возможности повторного использования без изменения функциональности или поведения. Это непросто, но действительно окупается, когда вам действительно нужно что-то изменить, а вы не можете, потому что код находится в плохом состоянии.

В чем разница между строкой c ++ и std :: string?
Основное различие заключается в том, как они реализованы: вектор символов против внутреннего представления. Это означает, что когда вы используете строку C ++, если кто-то, когда вы используете строку C ++, если кому-то нужно скопировать ее или изменить ее содержимое, ему / ей нужно будет только сделать глубокую копию строки, а с std :: строка, вам нужно будет сделать полную копию.

Как можно улучшить код?
Есть несколько способов рефакторинга кода C ++. Один из способов - использовать «метод извлечения», который извлечет часть вашего кода на C ++, вроде функции C ++, и поместит ее в другое место. Это хороший способ упорядочить код C ++ и сделать его более читабельным.

Помимо вопросов по кодированию, рекрутеры обычно просят рассказать больше о себе во время собеседования. Так что хорошо, если вы подготовите ответы на следующие вопросы:

- Каковы ваши сильные и слабые стороны?
- Как бы вы охарактеризовали себя как сотрудник?
- Почему мы должны вас взять на работу?
- Когда вам приходилось брать на себя ответственность за проект, который не работал удовлетворительно, или когда что-то пошло не так в компании, что вы с этим делали?
- Расскажите о своем стиле управления?
- Как бы вы поступили с коллегой, который плохо себя чувствует, или с коллегой, который не ладит с другими в офисе?
- Каковы ваши ожидания в отношении этой должности и в чем вы видите проблемы и возможности для роста?
- Почему я должен нанять вас, а не кого-то другого, как кого-то еще в этой компании?
- Как вы думаете, в чем заключаются ваши основные сильные и слабые стороны по сравнению с должностью, которую я ищу?
- Как бы вы охарактеризовали себя как сотрудник?

Чтобы подготовиться к собеседованию в качестве разработчика C ++, вам также следует принять во внимание эти 6 советов:
- Подготовьте ответ на вакансию, на которую собираетесь претендовать, исходя из вашего опыта, почему вы квалифицированы и что выгодно для этой компании?
- Потренируйтесь отвечать на эти вопросы с другом или кем-то еще, который время от времени будет их задавать, чтобы не казалось, что это ваш первый раз.
- Подготовьтесь к интервью, изучив информацию об этой компании и, если возможно, узнайте некоторых из ее конкурентов, чтобы проявить интерес к тому, что они делают.
- Не оставляйте вопросы без ответа, но постарайтесь ответить на них как можно короче, потому что никому не нравятся длинные ответы, которые никуда не ведут или слишком расплывчаты.
- Подготовьте список вопросов, которые нужно задать интервьюеру, когда придет ваша очередь, но убедитесь, что они не слишком личные или оскорбительные, например «Сколько вы зарабатываете?»
- Изучите информацию об этой компании и, если возможно, узнайте некоторых из ее конкурентов, чтобы проявить интерес к тому, что они делают.

Если вас попросят пройти тест на кодирование во время собеседования, постарайтесь к нему подготовиться. Вот несколько вопросов о тестировании программирования на C ++, с которыми вы, скорее всего, столкнетесь во время собеседования:

- Напишите программу, которая вычисляет общую сумму всех чисел в данном списке

int main () {int counter = 0; while (! cin) {cout << "Пожалуйста, введите input:" << endl; ввод символов; cin >> input; если (cin.eof ()) перерыв; счетчик ++; } cout << "Введен ввод:" << endl

cout << "Сумма чисел в списке:" << counter

return 0;}

- Вычислить и распечатать сумму всех целых чисел от n до m включительно, используя цикл

int main () {int sum = 0; для (int n = 0, m = 1000000; n <= m; ++ n)

сумма + = n;}

- Напишите функцию, которая будет возвращать среднее значение пяти чисел, введенных пользователем. Функция должна принимать массив в качестве входных данных и выводить результат на экран.

int main () {int input [] = {0, 0, 0, 0}; cout << "Введите пять чисел:" << endl; cin >> input;

cin.get (); return (input [0] + input [i]) / n;}

- Напишите программу для вычисления квадратного корня из целого числа

int main () {ввод с плавающей запятой; cin >> input;

return sqrt (input);}

- Напишите программу для вычисления факториала целого числа. Факториал вычисляется путем умножения последовательных целых чисел, начиная с единицы и заканчивая n. Например, факториал четырех будет: (один * два * три * четыре)

int main () {

return (n) * (factorial (ni));}

Имея под рукой эту информацию, вы должны быть хорошо подготовлены к собеседованию на работу в качестве разработчика C ++.
HR Блог для IT рекрутера в Телеграм
Хочешь всегда получать новые статьи, бесплатные материалы и полезные HR лайфхаки! Подписывайся на нас в Telegram! С нами подбор ит персонала становится проще ;)
Хотите найти талантливого сотрудника?
Оставьте заявку и получите в подарок список вопросов для сбора рекомендаций на кандидата