суббота, 29 января 2011 г.

Собеседование в Google Korea

26 января у меня было собеседование с гуглом. Этот пост стоило назвать "How I sucked on my interview with Google", но пожалуй воздержусь.

Собеседование было назначено на 3 часа и проходило по телефону, с написанием кода в Google Docs, длительность - 50 минут. В 2:50 я уже сидел за ноутбуком и ожидал звонка, предварительно сделав несколько десятком кругом по комнате, чтобы снять напряжение.

Примерно в три Brian (сотрудник гугла, который проводил собеседование) написал мне в Google Docs и мы начали.

Сначала были различные вопросы:
- Рассказать о каком-нибудь проекте, на котором я работал.
- Над чем мне нравится работать?
- Почему приехал в Корею?

Потом перешли к программистскими задачкам, точнее успели разобрать только одну (Epic FAIL).

Задачка была следующая:
- Есть отсортированный список слов неизвестного размера. Единственный доступ к этому списку осуществляется с помощью API функции getNthWord(). Написать функцию hasWord().

Я сразу сказал, что тут надо модифицировать бинарный поиск и начал думать как. Brian попросил меня произносить вслух свои рассуждения. В режиме диалога мы пришли к кое какой версии решение и я начал кодить.

Единственная мысль, которая лезла мне в голову и упорно блокировала вход другим, была "О Боже, у меня собеседование с гуглом".

Сначала, я пошел вообще не в тем дебри, и написал откровенную фигню.
Затем, после "Чувак, это чета не сильно похоже на бинарный поиск, где вообще range (low, high)?", я решил написать обычный бинарный поиск и двигаться уже от него.

После еще нескольких толчков в нужном направлении, я всё-таки закончил задачу, но Brian сказал, что на остальные задачи времени уже нет, так что мы с ним побеседовали о всяком.

Узнал от него следующее:
- в корейском гугле работает 5-6 иностранцев из Австралии, Швеции, Монголии, Южной Африки, Америки.
- компания международная, но всё равно культура - корейская.
- Brian (вроде из Австралии) работает в Корее 8 лет, в гугле 3 года, до этого работал в Daum (корейский гугл :)).

В общем, чувствовал себя после собеседования не очень хорошо, хотелось вилку в глаз засунуть. Думаю результат был бы лучше, решая я задачи в таких же условиях, как и ЕА. Пока, наверное, не суждено быть мне гуглером. Через 2 дня пришел отказ от гугла.

Могу дать пару советом, тем кто захочет подавать в гугл (советы неудачника :), но может кто поучится на моих ошибках):
- Готовясь к собеседованию найдите старый программистские задачки, не сильно сложные (например, модификации обхода дерева или бинарного поиска). Решайте их, проговаривая внятно и громко свои мысли в слух на английском. Также готовьтесь реагировать на комментарии и замечанию интервьювера.
- Забудьте, что проходите собеседование с гуглом, просто представьте, что помогаете решить задачу своему знакомому.

вторник, 25 января 2011 г.

Собеседование в Нексоне

Вчера было очередное собеседование, на этот раз в Нексоне (не слишком знаменитая (не в Корее) корейская фирма разработчик-палбишер игр). Это был второй тур отбора, первый тур состоял в решении 4 задачек дома за 3 дня. Как оказалось, правильно решил три, на отладку последней задачи времени не хватило.

Назначили собеседование мне на 11 часов, так что пришлось рано утром выезжать из Теджона в Сеул. Порадовало, что оплатили проезд.

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

После того, как меня попросили заполнить бланк для выдачи проездных денег, меня провели в комнату, где меня ожидал интервьювер. Был он всего один, что довольно странно, по опыту собеседований интервьюверов обычно двое (bad cop & good cop).

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

Первый делом, меня попросил описать один из проектов над которыми я работал.
Потом, спросил про то, что я ресерчил в университете. Я год занимался ресерчем на тему рисования линий "выташенных" из 3д модели. Попросил рассказать про существующие методы и сравнить их.

Попросил рассказать решение к одной задаче из "домашнего задания".
Решение сводилось к простому обходу графа.
Спросил, как делать depth-first search и breadth-first search. (Сказал что в одном стэк, а в другом очередь, но сначала напутал что где.)

Затем пошли обычные вопросы:
- Что такое виртуальный метод?
- Как реализован механизм виртуальных методов в С++? (Ответил ему сходу, так как на прошлом интервью, о котором я не писал, разбирали это минут 10 :)
- Рассказать time complexity для insert, delete, search для различных stl контейнеров (vector, list, map).
- Зачем нужна балансировка бинарного дерева?
- UDP vs TCP
- Что такое SYN flooding? (хорошо, что я про него читал когда-то:)
- Deadlock? (спросил бы он еще про deadlock prevention techniques :)
- Starvation?
- Описать calling convenction on x86. (точно не знал, но сказал что через стек передаются параметры и возвратное значение, но не сказал про адрес возврата в вызывающую функцию)
- Что такое buffer overrun? (тут порассуждал что на стеке должен быть адрес функции, который можно переписать. Когда я сказал code injection, он сказал, что нужные слова я знаю и поехали дальше :)
- Почему rand() имеет uniform distribution, а rand() % 100 nonuniform? (тут завис, ответ пришел только в метро на обратной дороге)
- Есть колода карт, как ее рандомно помешать? (придумал O^2 алгоритм с использованием массива флагов)
- Есть несколько методов размешивать карты, как сравнить какой из них лучше? (ответил, но не слишком хорошо, сравнивать соседние карты и смотреть их разницу. Лучше наверное был бы метод использовать какую-нить игры, и идентичных ботов, и смотреть чтобы боты "играли наравне".)

Дальше некоторые отвлеченные вопросы:
- Что по разработке игр читал\пробовал?
- Собираюсь ли я учить дальше корейский язык?
- Сложно ли мне будет работать в команде, где никто не знает английский? (oh yeah!)
- Может девушка у меня южно-кореянка (типа корейский будет мне улучшать)? (Сказал что женат на украинской кореянке).

В конце стандартное, через недельку свяжемся и сообщим результаты (может быть). На все собеседование ушло чуть больше часа.

В общем, я понял, что иностранцев у них мало или нету совсем. Так что им лучше, чтобы я общался с ними на только корейском языке. Я не сильно в восторге от такой перспективы. Буду надеяться, что попаду в дМаркированный списокругую фирму, а нексон про запас.

Интересно, что до конца собеседования он думал, что я - американец :).
Но я укыраина-сарамия :)

References:

суббота, 15 января 2011 г.

Собеседование в EA Korea

В настоящее время усиленно занимаюсь поиском работы. На неделе со мной связался hr (не из ЕА, а из левой фирмы) и предложил подать на позицию гейм-программера в EA Korea. Я решил попробовать, тем более я им напрямую писал, но безуспешно. В общем, написал согласие, и через 4 дня мне уже назначили собеседование в Сеуле.

К собеседованию не готовился, но до этого 3 дня решал задачи, которые прислали из Nexon Korea, как второй этап отбора (об этом позже). В общем, сидел до 3-х ночи 3 дня подряд и кодил на питоне и С++ :).

С небольшим опозданием, прибыл в Сеул, встретился в вышеопомянутым hrом и мы вместе пошли в офис EA. Как оказалось, у них два офиса в одном здании, один на этаж выше Oracle (ака империя зла), чтобы добраться до другого офиса, надо спуститься на первый этаж, а потом сесть в другой лифт (наверное, нагрузку балансируют).

Там встретили два корейцы средних лет, с моим распечатанным резюме и листками с задачками и провели меня в комнату для совещаний (там был большой телевизор и шкавчик, в котором лежали XBOX, PS3 и Wii + гора различных дисков). Еще hrу я сказал, что понимаю почти все на корейском, но говорить мне удобнее на английском. Интервьюверы говорили со мной на корейском, я на английском, с корейскими вставками.

После рассказа о себе на корейком (они меня попросили на корейском, чтобы оценить мой уровень), начали выдавать мне задания. Интервьюверы спрашивали если, что непонятно, а потом выходили. Так что решал я в комфортном одиночестве.

В общем заданий было 4, очень легкие, уровня первого курса ХИРЭ. Я долго не думал, и писал первоe пришедшее в голову решение. Все по программированию Си:

1. Написать реализацию int strcmp(char *s1, char *s2).
Ну эт легко и без вопросов.

2. Написать функцию bool isValidNumber(int n), где n - должен состоять из 9 цифр, и каждая цифра должна встречаться один раз.

Я решил не мудрить, перевел в строку, а потом проверил через int check_array[9], чтобы число встречалось только один раз. В итоге, они сказали, что тут надо математически вывести, а не через перевод в строку, и нашли overflow, так как я не делал декремент.

На вторую попытку вывел через деления, умножения, вычитание формулу для выведение цифры на каждой итерации. В итоге, забыл проверить один граничный случйы, но решение им понравилось. Потом один спросил, знаю ли я, что делает оператор %, я сказал: "Да, а точно, тут же можно легче через него все сделать".

3. Написать функцию bool isRotation(char *s1, char* s2). В общем функцию проверяет, что "CDAB" это rotation "ABCD".

Опять решив не мудрить, я написал функцию, которая находит первый символ в другой строке, а потом в forе смотрит одинаковы ли они. Индексацию по второй строке была круговая. Как оказалось, не учел случай типа ABCА и СААВ, хотя перед решением думал об этом.

После того, как я быстро исправил, мне намекнули, что можно легко решить с помощью strcat и strstr, и спросили как. Я ответил.

4. Чему равен y в следующем коде?
struct Foo
{
int x, y, z;
};

Foo foos[50];

Foo* p1 = &foos[6];
Foo* p2 = &foos[10];
int y = p2-p1;

Я сначала подумал, что подвох какой-то есть, но ничего не нашев, ответил "ну 4". Мне ответили "Правильно, а многие нам отвечают 48, почему?". Оправившись после удивления, я посчитал им возможный ход мыслей многих (sizeof(int)*3*4).

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

И, наконец, настала моя очередь задавать вопросы.
Q: Сколько у вас работает иностранцев?
A: Только 2-е, корейцы из Америки. Общаются с ними сказал аналогичным со мной образом (они - на английском, к ним - на корейском). Что меня немного удивило, так как корейцы из Америки обычно хорошо знают корейский.

Q: Над каким проектами работает ваша студия?
A: Battlefield Online, Fifa Online, Some baseball Online, Some racing Online, Some game for girls Online.

Q: Используете ли вы какие-либо сторонние движки, или все in-house?
A: Все in-house.

На этом собеседование закончилось. Сказали, что свяжутся через неделю, скажут результаты.


Конечно меня сильно удивил легкий уровень задач, меня на собеседовании в program-ace мучали в раз 10 сильнее. Неужели настолько кризис с разработчиками, и остается вопросом над чем работают новобранцы, на ANSI-C чтоли кодят.

Но вскоре мне предстоят еще интервью, где мне точно мозг взорвут.
Пожелайте мне удачи :)