Оценка кандидатов на вакансии программистов-разработчиков, IT компании (Google, Яндекс, Microsoft, VmWare, Лаборатория Касперского, ABBYY и другие) сейчас в обязательном порядке включает технические интервью. Такие собеседования стали хорошей возможностью показать себя для одаренных и технически подготовленных кандидатов, но для большинства соискателей это скорее испытание. Если вы один из тех, кто уже проходил весь процесс отбора вплоть до этапа собеседования и затем потерпел неудачу, наша статья поможет вам подготовиться наилучшим образом.
Хотя сам термин может показаться страшноватым, опасаться нечего, поскольку этим инструментом пользуются IT компании – ваши потенциальные работодатели, а все задаваемые вопросы прямо или косвенно относятся к вашей предстоящей работе.
Технические собеседования стали обычным явлением в компьютерной индустрии, так как в них существует жесткая конкуренция за рабочие места. Там, где техническое интервью по каким-либо причинам не проводится, вы лишаетесь возможности показать свои лучшие качества в техническом плане и это может стоить вам работы в хорошей фирме, куда, возможно, вы идеально подходите.
Для человека, ищущего работу в индустрии IT, важнейшим этапом отбора является именно техническое собеседование.
Важно понимать, что именно, т.е., какой набор технических знаний и навыков, представители работодателя хотят в вас увидеть, и насколько это совпадает с тем, чем вы владеете реально. Важным оцениваемым параметром является способность решать вопросы программирования. Детально проверяется глубина и объем знаний и технических навыков, которыми вы обладаете. Эта оценка может проводиться самыми разными способами, в том числе постановкой задач написания кода, логическими головоломками, групповыми собеседованиями, тестами на знание языков программирования. Учитывая все это, постараемся определить приоритеты, на которые вам стоит обратить пристальное внимание при подготовке к собеседованию.
Высоко установите планку собственной оценки, чтобы сразу начать карьеру с высокооплачиваемой работы. Если вы не сделаете для себя подобной установки и согласитесь на невысокую зарплату ради набора опыта, то вам, скорее всего, придется потратить довольно много времени, чтобы перейти на работу с достойной оценкой вашего труда. Чтобы успешно получить высокооплачиваемую работу, вам нужно научиться хорошо себя продавать. Это означает, что вы должны быть в состоянии четко заявить о своих технических достижениях, используя продуманный сценарий, основанный на вашем реальном техническом мастерстве. Представители работодателя должны получить четкое представление о том, что вы сможете привнести в компанию.
О тактиках успешного собеседования читайте в наших отдельных статьях:
Как отвечать на вопрос: «Почему вы хотите эту работу?»
3 простых способа запомниться на собеседовании
Как на собеседовании говорить о размере зарплаты
Не вдаваясь в тонкости собеседования, можно сказать, что специалисты HR, проводящие интервью, как правило, – тонкие психологи, и по незаметным на первый взгляд деталям вашего поведения, таким как признаки нервозности, неуверенности, какие-либо нюансы телодвижений, смогут сделать вывод о пригодности кандидата. Таким образом, ваше техническое интервью может закончиться, еще не успев начаться.
Вы должны научиться демонстрировать привлекательное поведение: важно иметь хорошую осанку, держаться открыто, делать уместные жесты. Поведенческий анализ показывает, что, если вы будете закрытым, вы не сможете этого скрыть, и такое поведение может быть истолковано не в вашу пользу.
Вам будут задавать четко сформулированные вопросы чисто технического характера. Поэтому не давайте длинных путаных ответов с целью сохранить лицо и затянуть время. Будьте точны, ваша речь должна быть четкой и лаконичной. Представители работодателя предпочитают иметь дело с людьми, которые ценят свое и чужое время и способны сделать интервью понятным и приятным.
В процессе собеседования проверяется не только глубина ваших знаний, но и способность справляться с трудностями. Может возникнуть ситуация, когда вы не готовы ответить на какой-либо вопрос и лучше признаться, что вы не вполне владеете материалом темы, чем пытаться угадывать или придумывать ответ.
Не забудьте сказать, что вы обязательно вернетесь к данному материалу и вникните в него. Это дает возможность представителю отдела кадров компании убедиться в том, что вы открыты и готовы учиться.
Это обязательная часть любого технического интервью. Лучшим способом проверить основательность ваших знаний будет применение их на практике, т.е., вас могут попросить написать какую-нибудь программу на доске или листе бумаги и детально объяснить порядок ее работы.
Старайтесь мыслить логически, убедитесь, что ваша программа надежна. Если вы не можете сию минуту вспомнить что-либо из синтаксиса или функций — не паникуйте, это не столь важно. Главное показать глубокие знания в базовых концепциях программирования, таких как условия и циклы. Если у вас плохой почерк, используйте отступы и место между строками кода.
Важно, чтобы все технические проекты, над которыми вы работали, находили отражение в вашем резюме. Убедитесь, что те из них, которые тесно связаны с профилем работы, на которую вы претендуете, находятся в начале списка. По возможности, получите отзывы на ваши проекты, это повысит доверие к проектам и вашему вкладу в них. Будьте готовы рассказать и показать свои проекты во время технического интервью — это даст вам много очков.
Следует помнить, что не все представители работодателя могут владеть специфическими техническими знаниями. Сначала попробуйте простыми терминами рассказать о целях проектов, над которыми вы работали ранее. Главное суметь объяснить, каким образом ваши проекты могут применяться у нового работодателя.
Вашей задачей будет детально обосновать ответы, которые вы даете. Большинство вопросов в любом техническом интервью будут начинаться с «что?», но все заканчиваются «почему?». К примеру, если вы проведете различие между массивами данных 1D и 2D, наверняка можете ожидать последующего вопроса, основанного на вашем ответе. Также вы должны быть в состоянии ответить, почему вы выбрали тот или иной инструмент или программное обеспечение.
Заранее ознакомьтесь с программным обеспечением и технологиями, которые использует ваш потенциальный работодатель, вам обязательно зададут подобные вопросы. К примеру, если вы проводите собеседование для Foursquare, вас могут попросить внедрить таблицу лидеров на языке сценариев, Dropbox уделяет больше внимания чистому коду и сторонним проектам. Поэтому, постарайтесь просмотреть часто задаваемые вопросы собеседований, проводимых компанией, в которую стараетесь попасть. Все IT компании различны, но каждая старается найти специалистов «под себя», имеющих необходимые данные и специфичные знания.
Узнав о платформе, используемой нанимателем, обязательно вникните в ее основы. Обратите внимание на те аспекты данной технологии, которые отличают ее от других, убедитесь, что вы знакомы с используемой терминологией и лексиконом. Кроме того, подробно изучите реальные проекты, над которыми трудятся разработчики, использующие эту технологию в отрасли. Все это будет для вас хорошим подспорьем в техническом собеседовании.
Отличным ресурсом для подготовки к техническому интервью и его этапу решения алгоритмических задач является LeetCode — это сайт обмена информацией по тестам на программирование, которые задают при отборе кандидатов в FAANG (Facebook, Amazon, Apple, Netflix, Google и другие компании этого уровня).
Волнение, которое вы можете испытывать перед собеседованием, имеет большое значение. Если вы не уверены в себе, нельзя рассчитывать, что интервьюер найдет вас идеальным для предлагаемой роли. Вы должны думать о собеседовании с оптимизмом!
Бояться – это естественно, но нельзя позволять страху полностью завладеть вами. Если задуматься, прохождение технического интервью не так уж сложно. Подготовьтесь, расслабьтесь и у вас все получится.
Есть довольно много вопросов, которые периодически повторяются в технических интервью. Пересмотрите эти вопросы и убедитесь, что вы сможете достаточно уверенно ответить на них. Точно так же существует масса логических головоломок, которые практикуются в собеседованиях, постарайтесь подготовиться к ним. Если возможно, попробуйте выяснить, какие вопросы задавали фирмы-работодатели в предыдущих собеседованиях. В большинстве случаев компании имеют определенный набор вопросов и требований для обязательной проверки комиссией по найму.
Знание этих вопросов может помочь вам ознакомиться со стандартной моделью технического интервью.
C++ часто является первым изучаемым разработчиками языком объектно-ориентированного программирования. Будучи одним из первых разработанных языков, он повлиял на структуру многих других языков. Поэтому, если вы знаете C++, то изучение другого объектно-ориентированного языка программирования становится легче. Даже после трех десятилетий существования, C++ остается одним из широко используемых в разработке языков программирования. Новичку в программном обеспечении, чрезвычайно важно знать основы C++, особенно в контексте требований технического собеседования.
Ниже рассмотрим часто задаваемые вопросы технического собеседования для программирования на C++ и варианты ответов на них.
Чем C ++ отличается от C?
C ++ поддерживает как процедурный, так и объектно-ориентированный программный код (также известный как мультипарадигма), тогда как C является чисто процедурным языком. C++ особенно ориентирован на защиту данных. Это делается с помощью модификаторов для членов класса. Данные в C более подвержены проникновению в систему безопасности. В C++ более одной переменной могут указывать на одно и то же место в памяти посредством поддержки ссылочных переменных. С не поддерживает это. C++ имеет встроенные возможности обработки исключений, а C — нет. C++ поддерживает перегрузку функций, когда функция может иметь более одного определения. C не поддерживает эту опцию.
В чем разница между классом и объектом?
Класс можно рассматривать как проект автомобиля. Сам проект не создает автомобиль. Он только определяет структуру автомобиля, что и куда идет, и т. д. Используя этот план, вы можете указать размеры для каждого элемента, который затем может помочь в создании автомобиля. А сам автомобиль можно сравнить с объектом. Любое количество автомобилей может быть создано из чертежа. Аналогично, любое количество объектов может быть создано из класса. Следовательно, класс — это определение типа данных, в котором указывается структура данных.
Что такое инкапсуляция?
Инкапсуляция — это механизм, используемый классами для сокрытия данных вне класса. Как данные, так и функции, которые работают с данными, инкапсулированы в классе. Инкапсуляция также называется скрытием данных, поскольку она имеет очевидную функцию скрытия данных. Каждый тип данных в классе будет иметь спецификаторы доступа, которые в основном детализируют, как к данным можно получить доступ. Существует 3 спецификатора доступа — частный, публичный и защищенный.
Что такое абстракция данных?
Снова используя автомобильную аналогию, мы знаем, что нажатие на педаль газа ускоряет транспортное средство, а отжатие — замедляет его. Вы не задумываетесь о том, каким именно образом обеспечивается ускорение – большей подачей бензина или еще чем-либо, вам это абсолютно все равно. Это похоже на концепцию абстракции данных. Внутри класса могут быть определенные данные и функции, которые он выполняет. Однако все, что нам нужно знать (будучи частью внешнего мира), это то, что делает определенный класс, а не то, как именно он это делает.
Что такое наследование?
Наследование — это механизм, посредством которого один класс наследует свойства другого. Это помогает разбить программный код на модули и повторно использовать код, что, в свою очередь, помогает оптимизировать память.
Ниже мы приведем 22 наиболее часто задаваемых вопросов по вопросам программирования на C во время этапа технического собеседования в различных компаниях. Ниже приведены вопросы для интервью на C, от простого до продвинутого уровня. Даже если вы новичок в C, эти вопросы помогут вам лучше понять структуру языка.
1) Каковы основные характеристики языка программирования C?
2) Что происходит, когда вы компилируете программу на C?
Каждый раз, когда вы компилируете программу на C, происходит многоэтапный процесс. Процесс, как показано ниже.
3) Какая польза от заголовочных файлов в C?
Заголовочные файлы содержат определения и набор правил функций, используемых в программах. Например, когда вы используете printf () или scanf () в своей программе, вам необходимо включить библиотечную функцию stdio.h. В противном случае ваш компилятор покажет ошибку. Это связано с тем, что стандартные функции ввода и вывода printf () и scanf () хранятся в этом заголовочном файле. Аналогично, каждый заголовочный файл хранит набор предопределенных функций, которые облегчают программирование.
4) Что произойдет, если заголовочный файл будет включен дважды?
Когда препроцессор видит #include, он заменяет #include содержимым указанного заголовка. Используя include guard (#), вы можете предотвратить многократное включение файла заголовка в процессе компиляции. Таким образом, если заголовочный файл с правильным синтаксисом включен дважды, второй игнорируется.
5) Может ли программа быть скомпилирована без функции main ()?
Да, компиляция возможна, но выполнение невозможно. Однако, если вы используете #define, мы можем выполнить программу без использования main (). Например:
#include <stdio.h> #define startmainvoidstart () {printf («Hi»);}
6) Каковы основные типы данных в C?
7) Можно ли хранить 32768 в переменной типа данных int?
Тип данных Int может хранить значения от 32768 до 32767. Для хранения 32768 необходимо использовать модификатор с типом данных int и, следовательно, можно использовать Long Int. Если нет отрицательных значений, можно использовать unsigned int.
8) Какие ключевые слова используются в C?
В C есть 32 различных ключевых слова, и каждое из них выполняет определенную функцию. Эти ключевые слова также называются зарезервированными словами
9) В чем разница между статическими и глобальными переменными?
Глобальные переменные — это переменные, которые определены вне функции. Область действия глобальных переменных начинается с момента их определения и длится до конца файла/программы. А статические глобальные переменные являются частными по отношению к исходному файлу, в котором они определены, и не конфликтуют с другими переменными в других исходных файлах с таким же именем.
10) Что такое утечка памяти в C?
Утечка памяти происходит, когда программисты создают память в куче и забывают удалить ее. Это снижает эффективность работы системы.
11) Что такое статическое и динамическое распределение памяти?
12) В чем разница между ++a и a++?
++a называется префиксом приращения. Сначала значение, хранящееся в переменной а, увеличивается, а затем присваивается той же переменной. А++ называется постфиксным приращением. Значение, хранящееся в переменной a, увеличивается после выполнения конкретной строки.
13) В чем разница между while (0) и while (1)?
While (1) является бесконечным циклом, который будет выполняться до появления оператора break. Аналогично, while (2), while (3), while (255) и т. д. будут давать только бесконечные циклы. В то время как, while (0) делает полную противоположность этому. Когда используется while (0), это означает, что условия всегда будут ложными. Таким образом, в результате программа никогда не будет выполнена.
14) Что такое висячий указатель в C?
Указатель, ведущий на разыменованную область памяти, называется висячим указателем, т.е., указатель, указывающий на ячейку памяти, которая удаляется. Есть три разных способа, где указатель может действовать как висячий указатель.
15) В чем разница между пустым(void) и нулевым(null) указателем?
Нулевые указатели обычно не указывают на правильное местоположение. Указатель инициализируется как NULL, если мы не знаем о его значении во время объявления. При этом указатели Void являются указателями общего назначения, которые не имеют какого-либо связанного с ними типа, и могут содержать адрес переменной любого типа. Таким образом, тип данных, на которые он указывает, может быть любым.
16) В чем разница между передачей(Pass) по значению и передачей по ссылке?
При передаче по значению изменения, внесенные в аргументы вызываемой функции, не будут отражены в вызывающей функции. В то время как при передаче по ссылке изменения, внесенные в аргументы вызываемой функции, будут отражены в вызывающей функции.
17) Что такое указатель на указатель в языке программирования C?
Переменная-указатель, которая содержит адрес другой переменной-указателя, называется указателем на указатель. Например, рассмотрим следующую программу.
int main(){ int v1 = 54; int *pointer2;// pointer for var int **pointer1;// double pointer for ptr2 pointer2 = &v1;// storing address of var in ptr2 pointer1 = &pointer2;// Storing address of ptr2 in ptr1 printf(«Value of v1 = %dn», v1); printf(«Value of v1 using single pointer = %dn», *pointer2 ); printf(«Value of v1 using double pointer = %dn», **pointer1);return 0;}
18) Разница между функциями malloc() и calloc()?
Библиотечные функции malloc и callocare, которые динамически распределяют память, что означает, что память выделяется во время выполнения из сегмента кучи. Malloc и Calloc отличаются количеством используемых аргументов, методами их инициализации, а также возвращаемыми значениями.
19) В чем разница между массивами и указателями?
Несколько различий между массивами и указателями:
20) В чем разница между структурой и Союзом?
21) Напишите программу для вывода «Hello World» без точки с запятой?
#include <stdio.h> voidmain () {if (printf («helloworld»)) {}}
22) Как поменять местами два числа без использования третьей переменной?
#include<stdio.h>main(){inta=1,b=8;printf(«Beforeswappinga=%db=%d»,a,b);a=a+b;//a=30b=a-b;//b=10a=a-b;//a=20printf(«Afterswappinga=%db=%d»,a,b);getch();}
Компании, использующие техническое интервью — это, по сути, все компании IT сектора, а также IT отделы банков, производственных компаний, торговых компаний и других крупных технологических производств. Среди них мы подробно писали о следующих:
Яндекс: о компании, работе, устройстве, тестах и собеседовании
Microsoft: как устроиться на работу, пройти тесты и собеседование
Oracle: все об устройстве, тестах и собеседовании
VMware: все о процессе отбора сотрудников, тестах и интервью
Cisco в России и СНГ: работа, трудоустройство, тесты и собеседование
Также рекомендуем к прочтению большую обзорную статью на Хабре об опыте прохождения нескольких технических собеседований Подготовка к собеседованиям в IT-гиганты: как я преодолела проклятье алгоритмического собеседования
Если вы хотите работать разработчиком в таких компаниях как Google, Яндекс, Microsoft, VmWare, Лаборатория Касперского, ABBYY или в иной компании IT индустрии, то будьте готовы к этапу технических интервью. Мы считаем, что залог успеха – в качественной предварительной подготовке. Узнайте, что вас ожидает на техническом собеседовании, тестах и HR собеседовании и уделите время, чтобы подготовиться. На HRLider мы собрали для вас материалы, которые помогут качественно и всесторонне подготовиться в любую компанию. Удачи!