вторник, 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 чтоли кодят.

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

четверг, 23 декабря 2010 г.

Парадокс ката з маслам

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

понедельник, 20 декабря 2010 г.

Подарок на Новый Год

Придумал себе подарок на Новый Год.
Кто меня сильно любит, тот может сделать и подарить мне вот такую футболку:


Сделано с помощью редактора Gimp. (Немного рекламы:)

Обновил картинку: теперь вместо "хангук" - "хангуг".

пятница, 17 декабря 2010 г.

Еще один блог

Решил создать другой блог, где буду писать на более технические темы.
Буду писать на английском, чтобы зацепить бОльшую аудиторию.
Надеюсь будет интересно.

Заходите на choboprogrammer.wordpress.com.