Чего ожидать от технической оценки C ++? [закрыто]

10

Меня попросили пройти технический тест / оценку для работы в качестве младшего разработчика, в основном с использованием C ++. Это мой первый тест / оценка, и он длится 2 часа.

Мой C ++ немного ржавый, так как я недавно делал проекты на PHP.

Это британская компания, однако я предполагаю, что техническое тестирование кандидатов везде будет одинаковым.

Чего мне ожидать в одном из этих тестов?

bearbread
источник
1
Этот вопрос для PHP, но ответы применяются: programmers.stackexchange.com/questions/73654/…
Эрик Уилсон

Ответы:

5

Это C ++, так что вы можете ожидать чего угодно, я имею в виду ДЕЙСТВИТЕЛЬНО все.

Обычно это включает в себя вопросы с подвохом и вопросы о полиморфизме.

Но может быть и что-то простое.

Будьте готовы ответить на вопрос о чем-то вроде: «почему вы сделаете деструктор виртуальным», что такое «изменчивый», «спроектируйте класс» для какой-то нереалистичной задачи, «реализуйте связанный список», «переверните строку» и т. Д.

кодировщик
источник
Я хотел бы добавить "Для чего используется mutableключевое слово?" в категорию ничего.
Том
5

Если это чистый тест C ++ (то есть не тест Windows / MFC / Managed C ++), потратьте несколько часов или день на эффективный C ++ Скотта Мейера, и у вас все получится. Он не охватывает шаблоны и STL, но если бы они были заинтересованы в этом, они, вероятно, не дали бы вам двухчасовой тест. Прошло несколько лет, но я часто брал интервью у разработчиков C ++. Несмотря на то, что идеи в Effective C ++ являются фундаментальными для программирования на C ++, их знали только около десяти процентов кандидатов.

Кевин Клайн
источник
1
+1 за рекомендацию книги - и пропустите Скотт Мейер более эффективная книга C ++. Когда я брал интервью у программистов, я также смотрел на интеллектуальную честность (пытаетесь ли вы блефовать или признаете, что не знаете), знаете ли вы, чего не знаете, и знаете, где найти ответ. (Если взять интервью у кого-то, утверждающего, что он работал на C ++, вопросы были бы гораздо сложнее). Если бы в вашем резюме не было ничего, что подсказывало бы навыки программирования на других языках, я бы также попросил вас написать простую программу и посмотреть, правильно ли вы рассмотрели угловые случаи.
MZB
Я выпускник факультета компьютерных технологий, меня учили, как создавать программы на консоли в C ++, меня учили внедрять деревья бинарных сортировок, дважды связанные списки и т. Д. Затем нас также учили на абстрактных классах, наследовании и полиморфизме, но не как их реализовать. Роль для выпускника, поэтому я не знаю, чего они ждут от меня, потому что у меня нет реального опыта работы с C ++.
медвежонок
4

Ну, это зависит от того, позволят ли вам использовать Google или нет. :П

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

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

(Это в моем общем опыте, я не из Великобритании)

АЕК
источник
Насчёт теории, полиморфизма, наследования. Я знаю только теорию о том, что только что закончил, но я не знаю, как реализовать ее в C ++
bearbread
Их реализация не так сложна, вы, вероятно, можете просмотреть их очень быстро. Важной частью является знание того, когда их целесообразно использовать, когда они вам понадобятся. Они являются скорее функциональной моделью, чем фактическим условием. Я имею в виду, что вы можете уйти, не используя их, но от вас ожидают, что вы узнаете их в случае необходимости.
AJC
@bearbread: сама теория не стоит многого. Прочитайте о шаблонах проектирования и попробуйте их реализовать.
Кароли Хорват
Я знаю шаблоны проектирования, такие как MVC для PHP, это то, что вы имеете в виду?
медвежонок
1

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

Сардатрион - против злоупотребления SE
источник
1
+1. Также сделайте это с другом, который немного более опытен. По очереди программируйте, вы оба узнаете что-то новое.
Том
0

Это правда, что вы можете ожидать чего угодно.

Они сказали, что тест был C ++, но, возможно, это действительно подмножество C C ++, которое они используют в своих тестах (вы будете использовать массивы символов вместо стандартных строк библиотеки). Это будет сложно узнать.

Если это действительно C ++, я бы посоветовал вам ознакомиться с основами:

  • Классы, переменные, массивы
  • ссылки, указатели (и почему вы не должны использовать их по умолчанию)
  • использование ключевого слова const
  • Концепции ориентированных объектов (наследование, полиморфизм ...)
  • Шаблоны

тогда:

  • Стандартное использование библиотеки (std :: string, std :: vector, container, ...)
Nikko
источник
0

То, что было опубликовано, было великолепным, но я добавлю кое-что и историю! Я бы сказал, попрактиковаться в применении того, что вы знаете в C ++, к проблемам в области разработки программного обеспечения. Здорово, если вы знаете все тонкости C ++, но если вы не можете решить проблему, вы бесполезны для компании. Учитывая, что это должность младшего разработчика, я не думаю, что они ожидают, что вы будете знать все о C ++.

Я прошел свой первый технический тест для моей первой работы на прошлой неделе и был удивлен тем, что нашел. Я ожидал чего-то вроде FizzBuzz или чего-то более грубого (это было для Java, кстати), но я обнаружил, что они дали мне файл и заставили меня разобрать его в новом формате, что и было частью работы. Кроме того, они позволили мне использовать Google и их собственные библиотеки. В итоге вам нужно знать C ++, но если вы хотите знать, на что может быть похож тест, взгляните на область позиции, на которую вы претендуете, и поработайте над реализацией C ++ к чему-то в этой области.

Jetti
источник
Я предполагаю, что <1% программистов на C ++ знают все о языке :) Просто возьмем все случаи неопределенного / неопределенного / определяемого реализацией поведения в качестве одного примера.
0

Ты:

  1. Написание кода
  2. принимая множественный выбор
  3. Личное интервью

При написании кода

Они будут ожидать, что вы будете знать (и использовать):

  • RAII
  • Правило трех
  • Понять умные указатели

Вероятно, они будут проверять вас на:

  • наследование
  • Виртуальные функции
  • Сериализация в / из потока
  • перегружать арифметические операторы (не часто используемые в реальной жизни, но легко написать тест вокруг).

Если вам не повезло, они могут подумать

  • Множественное наследование и виртуальные базовые классы - это то, что вы должны знать.
    • Это не так, но некоторые люди сходят с ума.

При выборе нескольких вариантов

  • Понять всю терминологию ОО
  • Знать C ++ способы реализации ОО

Личное интервью

  • Все выше.
  • Знание рекурсии
  • Как преобразовать рекурсию в цикл
  • Как оценить сложность Big O ()
  • Стандартные алгоритмы сортировки (не просто пузырьковые).
Мартин Йорк
источник
1
Я скорее программист на C, чем на C ++, поэтому я не знаю разговоров ... но я никогда не слышал о RIAA и правиле трех. Однако я слышал о RAII (получение ресурсов - это инициализация, т. Е. Ваш деструктор должен очистить свой собственный беспорядок), и я знаю, что если вашему коду требуется копия ctr, оператор присваивания перегрузки или деструктор, ему нужны все три. Мне кажется, что интервью, являющееся пустяковой мелочью в программировании, а не проверкой ваших навыков, говорит о чем-то плохом о компании.
1
И в равной степени, если бы они спрашивали о множественном наследовании и рекурсии, я бы предположил, что их кодовая база - большой беспорядок. Если они ожидают, что вы будете знать все распространенные алгоритмы сортировки, как выполнять развертывание рекурсии, сериализацию объектов и т. Д., Это также скажет что-то плохое о компании. Разве они не ожидают своих разработчиков от роботов? В реальном мире вы ищете такие вещи, прежде чем использовать их. Даже если бы я знал теорию, лежащую в основе всех этих вещей, я бы все равно посмотрел их, просто чтобы убедиться, что я использую оптимальное решение, а не что-то так, поэтому я придумал сам.
@Lundin: Вам не нужно знать шелковистые имена, но вам нужно знать принципы, упоминая их здесь, это облегчает поиск. Вам нужно знать алгоритмы сортировки, потому что вам нужно знать, какой и когда использовать (и, что более важно, почему) (роботы не могут этого делать, но люди делают это очень хорошо).
Мартин Йорк,
В рекурсии или множественном наследовании нет ничего неправильного. Проблема в том, что разработчики используют его (и делают это неправильно). Некоторые проблемы могут быть решены (легко) только с помощью рекурсии (сначала разбирая глубину древовидной структуры).
Мартин Йорк,
@Lundin: см. Devblog.seomoz.org/2011/10/679
Мартин Йорк,
-1

Я получил в моем последнем интервью:

Разница между передачей объекта в функцию по значению / ссылке / указателю и где и почему вы это сделаете.

Поменяйте местами последние 8 битов целого числа, например, RGBA на RGAB.

Что такое RIAA?

Определите шаблон мета-программирования: у вас может возникнуть вопрос с точки зрения «решить эту проблему с TMP ..»

Что означает изменчивое, изменчивое, постоянное и т. Д. И т. Д.? знать все ключевые слова.

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

Многопоточность: потребительские и буферизованные объекты общей памяти.

Еще несколько периферийных вопросов:

Агрегация и составление UML

Шаблоны проектирования: реализация одиночного ... Каковы общие компоненты MVC?

Pepe
источник