Тесты при приёме на работу

Техническое интервью: что это, примеры вопросов, как успешно пройти

Подготовка

Оценка кандидатов на вакансии программистов-разработчиков, 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++ поддерживает перегрузку функций, когда функция может иметь более одного определения. C не поддерживает эту опцию.

В чем разница между классом и объектом?

Класс можно рассматривать как проект автомобиля. Сам проект не создает автомобиль. Он только определяет структуру автомобиля, что и куда идет, и т. д. Используя этот план, вы можете указать размеры для каждого элемента, который затем может помочь в создании автомобиля. А сам автомобиль можно сравнить с объектом. Любое количество автомобилей может быть создано из чертежа. Аналогично, любое количество объектов может быть создано из класса. Следовательно, класс — это определение типа данных, в котором указывается структура данных.

Что такое инкапсуляция?

Инкапсуляция — это механизм, используемый классами для сокрытия данных вне класса. Как данные, так и функции, которые работают с данными, инкапсулированы в классе. Инкапсуляция также называется скрытием данных, поскольку она имеет очевидную функцию скрытия данных. Каждый тип данных в классе будет иметь спецификаторы доступа, которые в основном детализируют, как к данным можно получить доступ. Существует 3 спецификатора доступа — частный, публичный и защищенный.

Что такое абстракция данных?

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

Что такое наследование?

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

22 наиболее часто задаваемых вопросов по программированию на C и программ в технических собеседованиях

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

1) Каковы основные характеристики языка программирования C?

  • C является платформозависимым языком.
  • C предлагает возможность разбить большую программу на маленькие модули.
  • Возможность программиста контролировать язык.
  • 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»);}

Вопросы технического собеседования по программированию на C: типы данных, переменные и ключевые слова

6) Каковы основные типы данных в C?

  • Int Используется для представления числа (целого числа)
  • Float Используется для представления десятичного числа
  • Double Используется для представления десятичного числа с наивысшей точностью (цифры после десятичной точки)
  • Char Одиночная вводная
  • Void Специальный тип без значения

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), это означает, что условия всегда будут ложными. Таким образом, в результате программа никогда не будет выполнена.

Вопросы по программированию на C: массивы, строки, указатели и функции

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) В чем разница между структурой и Союзом?

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

Простейшие задания на написание кода на C

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 в России и СНГ: работа, трудоустройство, тесты и собеседование

Также рекомендуем к прочтению большую обзорную статью на Хабре об опыте прохождения нескольких технических собеседований 


Если вы хотите работать разработчиком в таких компаниях как Google, Яндекс, Microsoft, VmWare, Лаборатория Касперского, ABBYY или в иной компании IT индустрии, то будьте готовы к этапу технических интервью. Мы считаем, что залог успеха – в качественной предварительной подготовке. Узнайте, что вас ожидает на техническом собеседовании, тестах и HR собеседовании и уделите время, чтобы подготовиться. На HRLider мы собрали для вас материалы, которые помогут качественно и всесторонне подготовиться в любую компанию. Удачи!


Попробовать бесплатно

Пройти примеры тестов

Начать подготовку