Что спрашивают на собеседовании c
Перейти к содержимому

Что спрашивают на собеседовании c

  • автор:

46 вопросов на собеседовании по C++ от ведущих IT компаний

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

Когда вы работаете над этими проблемами, убедитесь, что вы имитируете среду собеседования: сядьте в тихом месте, говорите вслух, работая над вопросом, и рассчитайте время.

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

  • Вопрос Accenture — Различия между классом и структурой в C ++.
  • Вопрос Infosys — что делает функция Friend в C ++?
  • Вопрос ACI Worldwide — в чем разница между вектором и массивом?
  • Вопрос Accenture — каковы спецификаторы доступа в C ++?
  • Вопрос IBM — что такое функция main () в C ++? Можем ли мы запустить программу без основного метода?
  • Вопрос 23andMe — Что такое наследование в объектно-ориентированном программировании?
  • Вопрос Intel. У вас есть поток бесконечных запросов (например, поисковые запросы Google в реальном времени, которые вводят люди). Опишите, как вы могли бы найти хорошую оценку в 1000 выборок из этого бесконечного набора данных, а затем написать для него код.
  • Infosys вопрос — Вам дается список номеров. Когда вы дойдете до конца списка, вы вернетесь в начало списка (круговой список). Напишите наиболее эффективный алгоритм поиска минимального числа в этом списке. Найдите любой заданный # в списке. Числа в списке всегда увеличиваются, но вы не знаете, где начинается круговой список, например: 38, 40, 55, 89, 6, 13, 20, 23, 36.
  • Вопрос Google — если у вас есть 1 миллион целых чисел, как бы вы их эффективно отсортировали? (измените конкретный алгоритм сортировки, чтобы решить эту проблему)
  • Вопрос Adobe — напишите код для переворота строки.
  • Как C ++ работает с конструкторами и деконструкторами класса и его дочернего класса?
  • Вопрос Adobe: создайте механизм быстрого кэширования хранилища, который, учитывая ограничение на объем кэш-памяти, будет гарантировать, что только наименее использованные элементы будут отбрасываться при достижении кэш-памяти при вставке нового элемента. Он поддерживает 2 функции: String get (T t) и void put (String k, T t).

Начнем с разъяснений
Получив вопрос, подумайте и задайте уточняющие вопросы 15–30 секунд, прежде чем сразу перейти к проблеме. Хотя существует ограничение по времени, вы не должны слишком торопиться. Вот некоторые примеры этих вопросов: «Разрешено ли повторение?» или «Вы хотите вернуть перестановки или комбинации?»

Покажи то, что знаешь
Во время работы заранее предоставляйте информацию о том, что вы делаете, чтобы интервьюер увидел, что вы имеете твердое представление о предмете. Хотя кодирование может занять некоторое время, выгода компенсирует это.

Сделайте контекстные утверждения
Контекстные утверждения — еще один способ показать положительный сигнал. Если вы аргументируете принимаемые решения, вы можете изменить восприятие вашей работы интервьюером. Это может помочь вам, если вы ошиблись, потому что это дает интервьюеру понимание того, о чем вы думали.

Задайте совместные вопросы, чтобы получить помощь
Пока вы работаете над вопросом собеседования, вы можете достичь точки, когда вам понадобится помощь. Вместо того, чтобы просить «подсказки», что не нравится некоторым интервьюерам, попробуйте дать предысторию вашей проблемы и спросить интервьюера, могут ли они помочь вам вести вас по правильному пути. Например, вы можете сказать: «Мои предположения — это X и Y, я подумываю сделать Z. Но я борюсь с решением [проблемы]». Вы также можете спросить:

  • Мне было интересно, есть ли у вас какие-нибудь мысли.
  • Как вы думаете, я иду в правильном направлении?
  • Как вы думаете, мои предположения неверны?

HR Блог для IT рекрутера в Телеграм

Хочешь всегда получать новые статьи, бесплатные материалы и полезные HR лайфхаки! Подписывайся на нас в Telegram! С нами подбор ит персонала становится проще 😉

Вопросы для интервью с разработчиками C и C ++

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

Но в отличие от технологий, о которых заговорили все заголовки, C и C ++ продолжают оставаться рабочими лошадками для многих важных систем, а также для таких областей, как встроенные технологии и игры. В результате по-прежнему на них существует большой спрос. Возникает вопрос: как проверить навыки программистов C и C ++?

И C, и C ++ существуют уже давно, так что о них есть чему поучиться. Для этих стеков технологий созданы разные версии, технологии и ресурсы. Вам нужно использовать определенные вопросы для собеседований на C и C ++, поскольку те, которые вы используете для таких языков, как Java, просто не помогут. Есть концепции, которые вы просто не увидите вне C в C ++. Кроме того, вам понадобится правильный технический бекграунд знаний, чтобы увидеть, есть ли у кого-то навыки C или C ++.

1. Что такое C и что такое C ++?
Первое, что вам нужно понять, это то, что C и C ++ — это не одно и то же. Как вы понимаете, C существует немного дольше, чем C ++. Представленный в 1972 году, к концу того десятилетия C стал де-факто стандартом. Первая версия C ++ появилась только в 1984 году. Но, опять же, потребовалось всего 10 лет, чтобы закрепиться. К началу 90-х годов C ++ приобрел большую популярность.

1.1. В чем разница между C и C ++?
Во-первых, C — это процедурный язык. С другой стороны, C ++ — это язык с множеством парадигм. Он превосходит процедурное и объектно-ориентированное программирование. Кроме того, новые функции делают его практичным выбором для функционального программирования. В большинстве реальных случаев программы на C ++ в той или иной степени будут использовать все доступные парадигмы программирования. Фактически, вы часто будете видеть смешанные вместе все три парадигмы.

Парадигмы программирования — не единственное различие между ними. C довольно близок к машинному уровню и иногда упоминается как «портативный ассемблер». C ++, с другой стороны, ближе к языкам более высокого уровня, таким как Java, C # и D (хотя по-прежнему сохраняет некоторые низкоуровневые функции C).

1.2. Чем похожи C и C ++?
Помимо этих различий, безусловно, есть некоторые сходства. Синтаксис, используемый обоими этими языками, часто называют «синтаксисом семейства C». Поскольку C был настолько популярен, вы фактически обнаружите, что грамматика и синтаксис C являются основой для ряда языков программирования, таких как Java, C #, C ++, D, Objective-C, JavaScript и многих других.

2. Для чего используются C и C ++?
2.1. Для чего используется C?

Поскольку они настолько близки к машинному уровню, C и C ++ в основном используются для приложений, где скорость обработки и ручная настройка более важны, чем время разработки. К ним относятся низкоуровневое программирование (BIOS), встроенное программирование (устройства), системное программирование (операционные системы) и ориентированное на производительность программирование (например, игровые движки, GPU / научные вычисления, криптография).

Реальное преимущество C и C ++ заключается в том, что он дает программисту возможность сказать, что происходит с программой на самом низком уровне, ближайшем к машинному. С одной стороны, это дает C и C ++ невероятную производительность. Обратной стороной этого является то, что существует гораздо меньшая погрешность для правильного написания кода, поскольку в них отсутствует функция управления памятью языков более высокого уровня. Практически это означает, что для написания рабочего кода на C и C ++ может потребоваться гораздо больше времени, чем на языке программирования более высокого уровня, таком как Java или Python.

Поскольку C так близок к машинному уровню, это, по сути, лингва-франка мира программирования. Большинство других языков программирования построены с использованием C, и большая часть программного обеспечения предоставляет свои функции на C. Почти все другие языки могут вызывать функции C.

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

2.2. Для чего используется C++?
C++ был частично разработан для решения некоторых низкоуровневых проблем C при сохранении стиля программирования C. К сожалению, это означает, что кривая обучения C++ невероятно крута, и это гораздо более удобный язык для экспертов. Это может еще больше затруднить использование чужой кодовой базы. К счастью, новые версии C++ позволяют легко и безопасно создать подмножество стороннего кода. Тем не менее, команда программистов должна избегать использования небезопасных конструкций и обеспечивать соблюдение правил.

C ++ раньше был расширением C, но на самом деле это не так с 1998 года. Теперь это в значительной степени собственный язык. Большая часть кода C будет компилироваться на C ++ без его изменения, но ни один из них не является строгим подмножеством другого. Тем не менее, разрыв между ними продолжает увеличиваться по мере выпуска новых стандартов.

2.3. В чем разница между C и C ++?
C ++ позволяет компилировать большинство конструкций и кода C как код C ++, а также позволяет использовать больше инструментов программирования, таких как шаблоны, RAII (Resource Acquisition Is Initialization), классы, лямбда-выражения, более крупную и более мощную стандартную библиотеку и более надежную систему типов. .

В то же время в C есть некоторые инструменты, которых нет в C ++. К ним относятся назначенные инициализаторы и массивы переменной длины (VLA). Общее правило заключается в том , что если среда C ++ присутствует, то вы можете быть на сто процентов уверены , что среда C присутствует. Обратное не обязательно.

3. Что ИТ рекрутер должен знать о C и C ++?
C давно не менялся. Последние две ревизии, C11 и C18, обе довольно незначительны и не предлагают больших изменений. Будущий C21 тоже не выглядит новаторским. C++, с другой стороны, начинает прогрессировать после того, как за последнее десятилетие мало что сделал. Теперь каждые три года с момента выхода C ++ 11 выпускается ревизия, причем ожидается, что C ++ 20 выйдет вовремя.

Почти все доступные библиотеки предоставляют C API или привязку, даже если они написаны на другом языке. C ++ можно использовать для всех этих библиотек. Есть также некоторые библиотеки только для C ++, такие как Boost, Qt и POCO.

3.1. С какими инструментами и методами должен быть знаком разработчик на C или C ++?
Вероятно, наиболее важным для разработчика C является понимание арифметики указателей и того, что составляет неопределенное поведение. Кроме того, разработчик на C должен уметь использовать инструменты отладки, такие как Address / Memory / UndefinedBehavior Sanitizer, Valgrind, отладчики (например, GDB) и инструменты статического анализа кода.

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

Кроме того, если посмотреть на опыт разработчиков, коммерческие проекты и проекты с открытым исходным кодом больше всего говорят о том, на что они способны.

4. Оценка разработчика C или программиста C++ по их резюме.
Резюме — это первое место, где вы можете найти подсказки о том, на что способен ваш кандидат. Для нетехнического рекрутера это часто может быть трудным местом для начала, поскольку информация часто носит технический характер. Чтобы помочь вам, мы составили список вещей, которые нужно искать в резюме разработчика C и C ++.

4.1. Глоссарий C и C ++ для технических рекрутеров
C библиотеки:
Стандартная библиотека C: Библиотека, описанная в стандартном документе C, поставляется с каждым компилятором

Другие, менее широко используемые, но все же популярные библиотеки:
GTK: Библиотека для создания графических пользовательских интерфейсов
Cairo: Библиотека 2d графики
ALSA: Библиотека для взаимодействия с Advanced Linux Sound Architecture
BLAS: Основные подпрограммы линейной алгебры. Эта библиотека используется для эффективных векторных и матричных операций
GMP: GNU Multi Precision. Библиотека, обеспечивающая арифметические операции над числами произвольной точности
cURL: Библиотека многопротокольной передачи файлов. Чаще всего используется для HTTP-коммуникаций
OpenSSL: Коммерческая и очень популярная библиотека, используемая для поддержки криптографии.

Библиотеки C ++
Стандартная библиотека C ++: Библиотека, описанная в стандартном документе C ++, поставляется с каждым компилятором.
Boost: Одна из самых популярных библиотек для C ++, набор из нескольких десятков отключенных библиотек, которые можно свободно использовать в программах на C ++.
Qt: Фреймворк GUI для C ++
STL: Спорный акроним, который обычно означает стандартную библиотеку C ++, но понимается как стандартная библиотека шаблонов , как если бы части, не являющиеся шаблонами, не были ее частью.
Eigen: Библиотека шаблонов C ++ для линейной алгебры (матрицы, векторы, числовые решатели и связанные алгоритмы)
GSL: Рекомендации Поддержка реализации библиотеки, рекомендованная Бьярном Страуструпом, Хербом Саттером и компанией в C ++ Core Guidelines
Loki: шаблоны проектирования
Folly: Набор компонентов C ++ 11, расширяющих стандартную библиотеку. Создан с учетом эффективности и практичности. Разработано Facebook
Abseil: Коллекция библиотек C ++, расширяющая стандартную библиотеку. Создано Google
POCO: Набор библиотек, поддерживающих HTTP, сеть, шифрование и поддержку zip-файлов.
WxWidgets: Библиотека, позволяющая создавать независимые от системы приложения с графическим интерфейсом.
OpenCV: Библиотека компьютерного зрения, разработанная для повышения вычислительной эффективности с акцентом на приложениях реального времени.
OpenMP: Меньше библиотеки и больше спецификации для компиляторов, как расширить C ++, чтобы обеспечить простой и хорошо продуманный параллелизм
IntelTBB: Библиотека шаблонов для параллелизма задач. Разработано Intel

Компилятор: Самый популярный инструмент, используемый для создания исполняемого файла ( приложения ) из исходного кода C / C ++:

  • GCC — Сборник компиляторов GNU
  • MinGW GCC — версия GCC для Windows
  • Clang — компилятор проекта LLVM
  • MSVC (также называется, несколько неправильно, MSVS или Visual Studio) — компилятор Microsoft
  • ICC — компилятор Intel

Статический анализ: Анализ исходного кода на наличие ошибок. Существует коммерческое программное обеспечение, которое может таким образом находить некоторые классы ошибок.

  • CppCheck
  • Clang
  • Klocwork Static Code Analysis
  • PC-Lint
  • Coverity
  • PVS-Studio

  • C89
  • C95
  • C99
  • C11
  • C18
  • C21 (еще не опубликовано),
  • ANSI C
  • Определяет ли кандидат версию используемого языка
  • Работал над типичным проектом на C ++
  • Участвует в крупных проектах, отвечающих уникальным и строгим требованиям.

5.1. Вопросы об опыте кандидата
В1: (C / C ++) Какие ограничения были у ваших предыдущих проектов?

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

В2: (C / C ++) Для каких систем вы программировали?
В некотором смысле программирование для Embedded / Desktop и Linux / Windows / OSX сильно отличается.

В3: (C / C ++) Придерживались ли вы при программировании каких-либо конкретных стандартов?
Кандидат может сказать вам, есть ли у него опыт работы с MISRA и т. Д.

5.2. Вопросы о знаниях и мнениях кандидата
В1: (C ++) Каковы основные различия между C ++ и C?
Этот вопрос позволит кандидату продемонстрировать свое понимание языков, а также то, относятся ли они к C ++ как к небольшому дополнению к языку C или как к отдельному языку с различными шаблонами использования.

В2: (C) Что такое арифметика указателей?
Это в основном для C. Этот вопрос позволит кандидату выразить свое понимание фундаментального способа, которым C работает с памятью.

В3: (C ++) Что такое арифметика указателей?
Этот вопрос даст кандидату возможность выразить свое понимание фундаментального способа, которым C работает с памятью. Осторожно: для C ++ этот вопрос подразумевает использование небезопасных и устаревших шаблонов в вашей кодовой базе.

В4: (C ++, начальный уровень) В чем разница между классом и объектом?
Чтобы определить, понимает ли кандидат основы C ++.

В5: (C ++) Что такое лямбда выражение?
Чтобы определить, знает ли кандидат об улучшениях, достигнутых C ++ после C ++ 03 (лямбда-выражения были введены в C ++ 11), и понимает ли их.

В6: (C / C ++) Что такое блокировки, какие проблемы они решают и каковы потенциальные проблемы с ними?
Это покажет понимание кандидатом блокировок, условий гонки, взаимоблокировок и живых блокировок.

В7: (C / C ++, эксперт) Что такое volatile и как оно соотносится с вопросом о блокировках и синхронизации?
Кандидат должен уметь сказать, что энергозависимость должна использоваться только для доступа к оборудованию, а не для синхронизации.

В8: (C ++) Как создать динамический массив?
Это покажет, будет ли кандидат использовать хороший подход, такой как std :: vector , или устаревший и небезопасный новый .

В9: (C ++) Что такое RAII? Есть ли это на других языках?
Это покажет, знает ли кандидат эту фундаментальную идиому C ++ и понимает ли он, что это означает. Бонусные баллы за описание аналогичных дополнительных функций на других языках, например with () в Python или использование в C #.

В10: (C ++) Можно ли выбросить из деструктора?
Кандидат сможет уточнить детали здесь. Суть в том, что вы можете, но это плохая практика, и она отключена по умолчанию, начиная с C ++ 11, поскольку деструкторы в этом случае неявно не срабатывают .

В11: (C ++) Можете ли вы унаследовать конструктор?
Кандидат может ответить, что это возможно, начиная с C ++ 11, незначительное изменение способа его работы в C ++ 14 и последствия этого изменения.

В12: (C ++) У вас есть виртуальный конструктор?
Краткий ответ — нет, но кандидат может продемонстрировать свое быстрое мышление, упомянув фабричные и прототипные шаблоны.

В13: (C ++) Что такое интерфейс?
Это вопрос с подвохом, потому что C ++ не имеет интерфейсов. Однако в нем есть абстрактные классы, и кандидат должен говорить о них.

В14: (C ++, эксперт) Можно ли реализовать чисто виртуальную функцию?
Да, но удобство использования ограничено.

В15: (C ++, эксперт) Можно ли использовать функцию виртуального шаблона и почему?
Кандидат сможет продемонстрировать свое понимание разницы между временем компиляции и времени выполнения, а также детали реализации, такие как vtables .

В16: (C ++, эксперт) Как бы вы реализовали std :: is_same ?
Программист сможет продемонстрировать свои знания в области метапрограммирования, реализовав этот тривиальный пример.

В17: (C / C ++) Какое изменение (или ряд изменений) в C nn / C ++ nn вам больше всего нравится ?
Чтобы показать, успевает ли кандидат за изменениями в языке (ах), и знает ли он о немного разных идиомах кодирования в разных версиях языка.

В18: (C ++) В чем разница между C ++ 98 и C ++ 11?
C ++ 11 стал серьезным сдвигом в языке C ++, его парадигмах и шаблонах. Кандидат сможет продемонстрировать свои знания об этом важном изменении.

В19: (C / C ++) Как бы вы обнаружили и исправили ошибку повреждения памяти?
Показать мыслительный процесс, знания и инструменты, полезные в таких усилиях.

В20: (C / C ++) У вас есть опыт использования пользовательских распределителей?
Кандидат сможет поделиться своим опытом с пользовательскими распределителями.

В21: (C / C ++) В вашем резюме есть фреймворк / библиотека X, опишите свой опыт работы с ней. Было ли использование хорошим выбором? Есть ли альтернатива, которую вы предпочли или предпочли бы сейчас?
Это открытый вопрос, позволяющий рекрутеру узнать, имеет ли кандидат широкое представление о полях, знает ли альтернативы и понимает ли компромиссы, принимаемые при выборе того или иного решения.

В22: (C / C ++) Какая система сборки вам больше нравится и почему? Как это по сравнению с конкурентами?
Почему вам следует задать вопрос 22: это покажет знания кандидата о системах сборки.

5.3. Поведенческие вопросы, которые следует задать, чтобы понять, как кандидат действовал в прошлом.
В1: Какова ваша самая большая история успеха в программировании? Почему так случилось? Как это повторить?
Этот вопрос позволит кандидату рассказать историю успеха и покажет рекрутеру, заинтересован ли кандидат в решении проблемы или в получении похвалы.

В2: Какая была ваша самая большая ошибка в программировании? Почему так случилось? Как избежать повторения этого в будущем?
Этот вопрос позволит кандидату рассказать потенциально тревожную историю и покажет рекрутеру, открыто ли кандидат в этом вопросе. Это дополнительно покажет, заинтересованы ли они в решении проблемы или в перекладывании вины.

В3 (для более старших вам нравится -уровни заявителей) О, если бы наставник младшего разработчика? Почему? Как бы вы это сделали? Есть ли у вас опыт наставничества других людей?
Это позволит рекрутеру оценить интерес кандидата и необходимые мягкие навыки, необходимые для обмена знаниями.

6. Техническая проверка навыков разработчиков C или C ++ с помощью онлайн-теста кодирования.
С разработчиками C и C ++ вы должны быть абсолютно уверены в том, что очень важно, чтобы они обладали безупречными навыками программирования. C не допускает никакой погрешности, а C ++ не допускает гораздо большего. Конечно, экран резюме и экран телефона могут помочь вам отсеять некоторых из ваших кандидатов. Тем не менее, последнее, что вы хотите сделать, — это пригласить кандидата на техническое собеседование только для того, чтобы обнаружить, что у него никогда не было необходимых вам навыков программирования.

  • Они отражают реальную проделанную работу
  • Они не отнимают у кандидатов слишком много времени, максимум 1-2 часа.
  • Их можно отправлять автоматически и брать с собой куда угодно
  • Они выходят за рамки проверки того, работает ли решение, а также проверяют качество кода и насколько хорошо он работает в крайних случаях.
  • Они максимально приближены к естественной среде программирования и позволяют кандидату получать доступ к тем ресурсам, с которыми он обычно работает.
  • Они позволяют кандидату использовать все библиотеки, фреймворки и другие инструменты, которые он обычно использовал бы.
  • Они находятся на должном уровне, соответствующем способностям кандидата

ТОП-25 популярных вопросов на собеседовании по C++

В этой статье, опубликованной на proglib.io, приводится список распространенных вопросов, с которыми сталкиваются программисты на собеседовании по C++.

Популярные вопросы собеседований по C++

1. Объясните, что такое OOП?

Самый популярный вопрос на собеседовании по C++. Объектно-ориентированное программирование (ООП) – это тип программирования, в котором программист указывает тип данных для операций, функций и структур данных, используемых в коде, а также создает отношения между объектами.

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

2. В чем разница между #import и #include ?

Распространенный вопрос на собеседовании по C++. Оператор #include используется в C++ для включения исходного файла или импорта заголовков файлов, содержащих объявление функций и прочих конструкций, которые будут совместно использоваться в программе. Оператор #import – это «майкрософт-специфичный» оператор, используемый в бинарных библиотеках, таких как DLLили Lib. Он очень похож на #include, ведь загружает все определения функций и заголовка из файла DLL, а разработчик может использовать заголовки так же, как в случае с #include.

Оператор #include позволяет подключать один и тот же файл несколько раз, а #importгарантирует, что препроцессор включает файл только один раз.

3. Что такое статический элемент?

Static – ключевое слово, используемое для придания элементу уникальных характеристик. Для хранения статических элементов, память выделяется только один раз в течение всего жизненного цикла программы. Такие элементы похожи на глобальные переменные, за исключением области видимости (public, private). С их помощью можно ограничить ее использование.

Объявленные методы с тем же именем и параметрами не могут быть перегружены, если любое из них является статическим, плюс статическая функция не может быть объявлена как const, volatileили const volatile.

4. Векторы в C++

Векторы – это своего рода контейнеры для структур данных, которые представляют собой массивы, способные изменять свой размер. Точно так же, как массивы, векторы используют смежные ячейки хранения для своих элементов, это означает, что элементы векторов могут быть доступны с помощью смещений так же эффективно, как и в массивах. Но в отличие от массивов, их размер может изменяться динамически, а хранилищем автоматически управляет сам контейнер.

5. В чем разница между структурой и классом?

В C++ класс является расширением структуры, используемой в ЯП. Класс – это пользовательский тип данных, связывающий данные и зависимые функции в одном блоке. Структура и класс в C++ сильно отличаются, поскольку структура имеет ограниченную функциональность и возможности по сравнению с классом. Структура также является пользовательским типом данных с конкретным шаблоном и может содержать как методы, так и классы. Эти два понятия различаются по назначению: класс используется для абстракции данных и дальнейшего наследования, а структура обычно предназначена для группировки данных.

6. Использование точки в C++

Точка – это чаще всего ссылка на метод или свойство объекта в ООП. Связь между объектом, атрибутами и методами обозначается точкой («.«), установленной между ними. Как точка, так и оператор «->«, используются для ссылки на отдельные члены классов, структуры и объединения. Оператор точка применяется к фактическому объекту, определенному в классе.

7. Чем new() отличается от malloc() ?

New() является препроцессором, в то время как malloc() – методом. Пользователю нет необходимости выделять память при использовании «new«, а в malloc() для выделения памяти необходимо использовать функцию sizeof(). «new» инициализирует новую память в 0, в то время как malloc() сохраняет случайное значение в новой выделенной ячейке памяти.

8. Что такое this?

Один из самых популярных вопросов на собеседовании по C++. Ключевое слово this передается всем нестатическим методам как скрытый аргумент и доступен в виде локальной переменной внутри всех нестатических методов. Оператор this является постоянным указателем, который хранит в памяти ссылку на текущий объект. Он недоступен в статических функциях, т. к. они могут вызываться без какого-либо объекта (используя имя класса).

9. В чем разница между массивом и списком?

Массив – это набор однородных элементов, а список – разнородных.
Распределение памяти массива всегда статическое и непрерывное, а в списке все это динамическое и рандомное.

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

Собеседование по C++

10. Что такое динамическая и статическая типизация?

Статически типизированные языки – это языки, в которых проверка типа совершается во время компиляции, а в динамически типизированных – в рантайме. Поскольку C++ является статически типизированным языком, пользователь должен сообщить компилятору, с каким типом объекта он работает во время компиляции.

11. Что подразумевается под делегатом?

Делегат – это объект, действующий от имени, или в паре с другим объектом, обнаружившим событие во время выполнения программы. Зачастую это просто указатель на функцию, использующую обратные вызовы.
Делегаты могут быть сохранены пользователем. Как правило, они сохраняются автоматически, поэтому можно избежать лишних циклов сохранения и не производить запись повторно.

12. Метод Mutator. Что это?

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

13. Объясните, что такое одиночное и множественное наследование?

Наследование позволяет определить класс, имеющий определенный набор характеристик (например, методы и переменные экземпляра), а затем создать другие классы, производные от этого класса. Производный класс наследует все функции родительского класса и обычно добавляет некоторые собственные функции.
Множественное наследование является особенностью C++, где один класс может наследовать объекты и методы нескольких классов. Конструкторы наследуемых классов вызываются в том же порядке, в котором наследуются базовые классы.

14. Может ли встроенная функция быть рекурсивной?

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

15. Объясните, что такое инкапсуляция?

Среди вопросов на собеседовании по C++ на этом»сыпятся» почти все новички. Инкапсуляция – это механизм объединения используемых данных и функций для сокрытия деталей реализации от пользователя. При этом пользователь может выполнять только ограниченный набор операций со скрытыми членами класса, используя внутренние методы. Эта ООП концепция часто применяется для сокрытия внутреннего представления или состояния объекта от «внешнего мира».

16. Что такое абстракция? Чем она отличается от инкапсуляции?

Абстракция – это механизм предоставления только интерфейсов, сокрытия сведений о реализации и “показ” необходимых деталей функционала. Инкапсуляцию можно понимать как сокрытие свойств и методов от внешнего мира. Класс является лучшим примером инкапсуляции в C++.

17. Что такое встроенные функции? Каков синтаксис для определения?

Встроенная функция – это функция, объявляемая с ключевым словом inline. Всякий раз, когда вызывается встроенная функция, ее полный код подставляется в место вызова. Компилятор выполняет эту подстановку во время компиляции. Встроенная функция может повысить эффективность кода.

Синтаксис для определения функции:

[code]inline void hello()
// function code
>[/code]

18. В чем разница между указателем и ссылкой в C++?

Указатель может быть переназначен n-раз, в то время как ссылка не может быть переназначена после бинда. Указатели могут указывать в NULL, тогда как ссылка всегда ссылается на объект. Программист не может получить адрес ссылки, как это возможно с указателями, но можно взять адрес объекта, на который указывает ссылка, и выполнить действия с ним.

19. Почему C++ является языком программирования среднего уровня?

Почти весь код на С будет успешно работать на C++, но это не дает повода рассматривать его как надмножество C. С++ можно назвать языком среднего уровня, т. к. он обладает чертами ЯП низкого и высокого уровней одновременно.

20. Объясните, что такое полиморфизм?

Еще один из важных вопросов на собеседовании по C++. Полиморфизм – это способность функции работать с разными типами данных. Обычно в ЯП речь идет о двух типах полиморфизма:

  • Полиморфизм подтипов – вызывающий код использует объект, опираясь только на его интерфейс, не зная при этом фактического типа.
  • Параметрический полиморфизм позволяет шаблону, определенному в классе конкретного типа, быть определенным в другом типе.

21. Что такое определение класса?

Класс описывает поведение и свойства, общие для любого конкретного объекта. Это пользовательский тип данных, содержащий собственные данные и функции, к которым можно получить доступ и использовать, создав экземпляр этого класса. Определение класса означает описание схемы элементов для типа данных или объекта. Оно начинается с ключевого слова class, за которым следует имя и тело класса, заключенное в фигурные скобки. Определение класса всегда должно сопровождаться точкой с запятой или списком объявлений.

Вопросы на собеседовании по C++

22. Что означают ключевые слова volatile и mutable ?

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

mutable может использоваться для переменных класса. Такие переменные могут изменяться изнутри функций класса.

23. Что такое виртуальная функция?

Виртуальная функция – это метод, который используется в рантайме для замены реализованного функционала, предоставляемого базовым классом. Виртуальные функции всегда используются с наследованием и вызываются в соответствии с типом объекта, на который указывает или ссылается объект, а не в соответствии с типом указателя или ссылки.

Ключевое слово virtual используется для создания виртуального метода.

24. Что подразумевается под перегрузкой функций и операторов?

Распространенный вопрос на собеседовании по C++. C++ позволяет указывать несколько определений функций или операторов в одной области видимости для нормальной работы в пользовательских классах. Это называется перегрузкой функций и операторов.

Перегруженные функции – это функции не только с одинаковыми именами, но и с разными типами и количеством передаваемых параметров. Приведем несколько классов, в которых можно перегружать, например, арифметические операторы: Complex Number, Fractional Number, Big Integer.

25. Что такое переопределение функции?

Функция становится переопределенной, если производный класс унаследует ее от базового и определит ее у себя. Если функция существует в двух классах (базовый и производный), то при вызове будет выполнена переопределенная функция, а функция базового класса будет проигнорирована.

Какие вопросы задают на собеседование программисту C(Си), не С++?

Что-то давненько я не был на собеседования, а тут меня сами нашли. Решил поискать в интернете и тут, везде C++, а C нету. Может кто подскажет-расскажет? Что спрашивают сейчас?

  • Вопрос задан более трёх лет назад
  • 13452 просмотра

Комментировать

Решения вопроса 1

ThePyzhov

Ответ написан более трёх лет назад

Нравится 5 2 комментария

lSDriim

Дмитрий Фалько @lSDriim Автор вопроса

В первой ссылке есть вопросы, ответы на которые неверны или не точны.

ThePyzhov

Дмитрий Фалько: вы просили только вопросы

Ответы на вопрос 3

lSDriim

Дмитрий Фалько @lSDriim Автор вопроса

Embedded программист

Пока что нашел 2 уровня на Quizful. Неужели больше ничего?

Ответ написан более трёх лет назад

Комментировать

Нравится Комментировать

Senior software engineer (C++/Qt/boost)

Это будет сильно зависеть от предметной области и вакансии. Благо там по самому языку C особо и спрашивать нечего — K&R, ну + мб пару хаков. Cети могут спросить, что-нибудь по осям, про какие-нибудь железяки хитрые, что-то из криптгографии. Как я уже и говорил, будет от вакансии зависеть, так сложно угадать.
ООП и паттерны почти точно не спросят.

Ответ написан более трёх лет назад

Комментировать

Нравится Комментировать

У меня спрашивали, чем
#include
отличается от
#include «some.h»

Ответ написан более трёх лет назад

Комментировать

Нравится Комментировать

Ваш ответ на вопрос

Войдите, чтобы написать ответ

программирование

  • Программирование
  • +2 ещё

Как работает данная программа для STM32?

  • 1 подписчик
  • 6 часов назад
  • 44 просмотра

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *