Сейчас идет активная раскрутка университета Innopolis, все IT группы в vk.com отметились рекламными постами этого университета, а многие и не раз. Интереса ради я заполнял в ихнем личном кабинете свои данные, прошел тест английского языка. Спустя некоторое время мне позвонил их менеджер и предложил пройти IT тест.
Что такое Innopolis?
Это новый университет недалеко от Казани, вернее даже целое пространство со своим городком, где должны будут выпускаться специалисты западного уровня, но в России. Фишка в том, что преподавание будет проходить на английском с приглашенными преподавателями из западных университетов. Ну и наверняка все самые новые достижения в компьютерных науках будут преподаваться.
Сам университет представляет из себя с виду футуристичное такое стеклянное здание. Все сделано на высоком уровне, судя по фото, и внутри университета и вся инфраструктура. Даже общага не похожа на русскую общагу, а скорее на общагу из американских фильмов про студентов.
Ну так вот тест.
Сначала я проходил тест английского и он показался мне достаточно простым, просто проверка грамматики и фразеологизмов. Но IT тест меня удивил.
Во первых он на ангийском, во вторых я не ожидал там увидеть вопросы про деревья, графы, двоичные коды, булеву алгебру и прочее, что я уже давно забыл из университета и как практикующий 5 лет web программист использовал только 1 раз (на сколько я помню).
Тест содержит 30 вопросов и на него дается 60 минут. Я закончил за 50 и перестал его выполнять, мне просто больше нечего было добавить. И да, тест достаточно сложный, как по мне.
Это будет общий обзор, не подробный, т.к. наверное нельзя разглашать содержание теста.
Для начала было предложено вспомнить что такое коньюнкция и дизъюнкция (надеюсь парвильно написал) или операции с битами, типа XOR, OR, AND, NOR и прочее. Вообще на операции с битами было много вопросов. Из этой области задач был вопрос о трех кнопках, которые включают по 2 лампы разгого цвета, и надо было решить, как нажать эти кнопки так, чтобы зажечь опеределнные лампы.
Еще из этой области были вопросы с выходыными сигналами, которые были представлены графиком и что получится, если один наложить на другой. Т.е. по битовым операциям надо готовиться.
По булевым выражениям так же присутствуют вопросы по законам Моргана или нужно составить булево выражение по фразе, что по моему просто.
Были вопросы про нотацию большого O (то, что используется для указания сложности алгоритма). Вообще я с этим плохо знаком и по ходу теста очень быстро многое гуглил, в основном попадал на англоязычную wikipedia.
Вопросы по графам, по прохождению оптимального пути, по обходу графа по алгоритму и вопросы по теории, например – что такое взвешенный граф.
Вопросы по деревьям были по практике и теории. Где-то надо было обойти дерево и выбрать последовательность, где-то были просто вопросы вроде – что такое сбалансированное бинарное дерево.
В конце только несколько вопросов по коду. Представлены достаточно маленькие сниппеты на C++ и я не сразу узнал синтаксис этого языка, подумал что Java, но по определению массива как {} догадался. По сниппетам кода нужно было в уме (или на листике) посчитать что будет в выводе, по сути пройти несколько итераций вложенных циклов в голове в основном.
Тут я решил, и всегда так считаю, что быстрее набрать код и посмотреть что получится. Я поспользовался сервисом Coding Ground и быстро набирая сниппеты смотрел результаты.
Из нового по С я узнал, что эквивалент выражения a[i] это *(ip+i) через указатели. Это хорошо описано тут – https://www.eskimo.com/~scs/cclass/notes/sx10e.html
Ниже я не сдержусь разместить пару сниппетов С++ кода похожих на снипеты из теста.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#include <iostream> using namespace std; void f(int i,float x=0, char ch='a') { printf("%1.0f %d %c ", x,i,ch); } void ff(int n, char a, char b, char c) { if (n>0) { ff(n-1, c,a,b); printf("%d %c %c %c ", n,a,b,c); } } int main() { /*int i,j,temp; int a[3]= {1,2,3}; for (i=0;i<2;i++) { temp=a[i]; for(j=2;j>=0;j--) { a[j] = temp*j; } } for (i=0;i<=2;i++) { cout << a[i] << endl; } cout << "Hello World" << endl; */ /* f(1,2); f(1,'\0'); f(1); f(1,2,'b'); */ ff(3, 'x','y','z'); return 0; } |
В принципе это все, что я набирал по ходу теста для проверки результата. Я не представляю как это считать на листике, как предлагается в тесте, с использованием таблицы состояний переменных.
Вывод
Тест рассчитан на академический уровень знаний. Легче всего его будет проходить свежевыпущенным бакалаврам и специалистам (или магистрам) т.к. в голове еще свежи все эти знания с лекций и университетский дух еще не был вытеснен практичным духом работы. Что же касается уже практикующийх много лет специалистов – это зависит от области и стека технологий, но в целом я уверен, что теорию забывают все, и без дополнительной подготовки не обойтись.
Проблема только в том, что список тем для подготовки перед прохождением теста не предоставляется, что очень жаль.