Кажется, существует ОГРОМНОЕ несоответствие между тем, что я ожидаю от кого-то, кто несколько лет изучал программирование в университете, и тем, что на самом деле знают.
Я не чувствую, что задаю слишком сложные вопросы в интервью. Некоторые из моих обычных вопросов:
В чем разница между ссылочным типом и типом значения?
Если кажется, что интервьюируемый действительно не понимает свой собственный ответ, или если он не знает терминологию, которую я использую, я попадаю в более подробные сведения, прося его объяснить мне, что происходит, когда я пишу int i = 0; в методе, как насчет объекта o = 0, объекта o = new MyClass () и т. д ...
По сути, я делаю все, что в моих силах, чтобы обмануть собеседника и рассказать мне о стеке вызовов, куче и т. Д., И я стараюсь придерживаться концепций, не зависящих от языка. Если собеседник скажет мне, что он много сделал на C, C ++ или C #, я углублюсь в конкретный язык и, возможно, в детали реализации.
При необходимости я спрашиваю собеседника о том, что такое колл-стэк или где хранятся аргументы, переданные функции на нужном им языке.
большинство опрошенных просто не имеют представления о том, что такое колл-стэк, не говоря уже о соображениях бокса и т. д.
В чем разница между абстрактным классом и интерфейсом. В каких случаях вы должны использовать один над другим?
Обычно я также прошу их представить дизайн небольшой библиотеки с вариантом использования, целью которого является использование некоторого наследования и некоторых абстрактных фабрик.
Большинство опрошенных не имеют ни малейшего представления о том, какой может быть истинная цель наследования. Они обычно знают некоторые ключевые слова (виртуальные, переопределить и т. Д.), Но не знают, когда их использовать, не говоря уже о том, что такое виртуальная таблица.
Несмотря на то, что я заранее просматриваю резюме, даже для людей с 5-летним опытом работы в реальных проектах со сложной архитектурой, я бы сказал, что менее 25% всех опрошенных могут правильно ответить на эти два вопроса. И когда я говорю правильно, я не имею в виду «углубленный» ... просто чтобы иметь приблизительное представление о том, что такое концепция.
Что касается юниоров, у меня все хорошо с тем, что я найму кого-то, кто не знает, как хорошо организовать свое время, или кого-то, кто, например, не привык к процессам промышленного строительства, но у меня такое чувство, что если кто-то не слышал этого слова " callstack "после нескольких лет изучения информатики он либо глуп, либо немотивирован, либо выбрал свой университет очень неразумно.
Вы думаете, я здесь слишком экстремист? Распространено ли изучать эти основные понятия после окончания университета? Вы знаете людей, которые не были знакомы с ними и через несколько лет стали очень хорошими разработчиками программного обеспечения? И вы думаете, что у моей компании могут быть проблемы с привлечением талантливых людей, или вы сталкиваетесь с такими же проблемами в вашем собственном процессе найма?
Редактировать. Что касается «немедленного типа», то это был просто буквальный перевод с французского на английский, как мы обычно делаем наши интервью на французском языке. Я исправил это в своем вопросе. Но, тем не менее, я думаю, вы все прекрасно понимаете, что я имел в виду, что делает мою точку зрения, не так ли?