Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Как я выбил собеседование в Facebook

Anna | 2.07.2014 | нет комментариев

В этой статье я расскажу о том, как мне, ничем не знаменательному студенту, без специальных задач удалось выбить собеседование в одной из компаний списка «Biggies» — Facebook.

Сразу к делу: решение задачки школьного яруса на гитхабе. Прилепил тематическую мордочку, сделал все в традициях Objective-C, должно компилиться на маках. Верю, данное чтиво откроет глаза многим русским студентам, насколько легко дозволено попасть в огромные компании своей желания.

К сожалению, FB не является моей приоритетной целью; следственно съезжу на интервью, посмотрю на вопросы и напишу следующую статью о том, что же спрашивали и что же я могу спросить на интервью в моей студии.

Заинтересовавшихся умоляю под кат.

(Господа минусующие! Пожалуйста, напишите, что не так со статьей. А то я легко поделился своим навыком, и сразу такой леденящий и безмолвный прием)

Предупрежу предварительно: не разделяю текст на части, потому что, схоже, получится он небольшим; каждая предыстория и решение заняли у меня не больше 2-х часов. Пожалуйста, не необходимо себя готовить к чему-то неестественному — я подозреваю, что эту задачку дают в русских школьных кружках программирования.

Шел вторник, мне нечего было делать позже института, я забежал на лекцию Facebook на кампусе за бесплатной пиццей. Кстати, я съел три куска, впрочем, самая аппетитная пицца, на моей памяти, была на презентации Electronic Arts. Ребята от Цукерберга набили полный зал студентов, около 150 человек. Побеседовали про процесс подачи заявки в FB, про серию интервью и решили пару-тройку простеньких задачек типа «Реализовать поиск дубликатов в массиве» — задачки яруса детского сада на 30-40 секунд подумать.

Я было теснее собирался уходить — пицца кончилась, а мне становилось крепко уныло. Тем больше, я поспел каждому наскучить — поднимал руку прежде всех и неизменно предлагал решение отменнее. На середине лекции меня вообще перестали спрашивать и обращать на меня внимание, что, определенно, крепко меня расстроило. Впрочем, в заключение, нам дали «задачку на дом», а основной рекрутер сказал скинуть ему на email решение, если внезапно появится оное.

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

image

По началу, я позабыл про эту задачку, но переписал ее на постер, тот, что мне подарили за результаты. А иным раздавали футболки — ну за что меня так? За то, что много отвечал.

Мне стало тоскливо в автобусе по пути домой (целых 10 минут вытерпеть трудно), вот я и накидал приблизительный алгорифм на том же постере. Когда я приехал домой, я выпил пару энергетиков для того, Дабы сберечь резкость ума еще на пару часов, и начал писать код на Objective-C. Потому что я не умею плюсы на довольном ярусе. Потому что я вот такой бездельник.

На скорую руку накидал интерфейс программы и сделал его слегка тематическим — внезапно придет рекрутеру сотня решений, и все идентичные? Тут необходимо как-то выделиться из оравы!

image

Ну, не суть значимо. За основу матрицы я взял двумерный массив. В моем случае, NSArray из NSArray из NSNumber. И сразу же написал способ итога этого массива в необходимое окошко. Окошком был WebView — в нем дозволено комфортно возвести табличку на HTML:

Осмотрительно, код!

/**
 *  Способ, тот, что показывает содержимое массива в WebView
 *
 *  @param result Массив массивов цифр
 */
- (void)printResult:(NSArray *)result
{
    // Примитивный css с необходимым шрифтом, размером и расположением текста в таблице
    NSString *css = @"<style>*{font-size:17px; font-family:\"Helvetica\";}  td{text-align:center;}</style>";

    // Создаем изменяемую строку с необходимым css и начинаем таблицу
    NSMutableString *resultString = [NSMutableString stringWithFormat:@"%@<table>",css];

    // Итерируем по основному массиву
    for (NSArray *inner in result) {
        // Начинаем строку таблицы
        [resultString appendString:@"<tr>"];

        // Итерируем по внутреннему массиву
        for (NSNumber *number in inner) {
            // Начинаем столбец в строке
            [resultString appendString:@"<td>"];

            // Показываем цифру
            [resultString appendString:[number stringValue]];

            // Заканчиваем столбец в строке
            [resultString appendString:@"</td>"];
        }

        // Заканчиваем строку в таблице
        [resultString appendString:@"</tr>"];
    }

    // Заканчиваем таблицу
    [resultString appendString:@"</table>"];

    // Показываем наш HTML в WebView
    [self.resultWebView.mainFrame loadHTMLString:resultString baseURL:nil];
}

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

Осмотрительно, код!

/**
 *  Способ для генерации массива с круговой матрицей
 *
 *  @param side Сторона матрицы (квадрата)
 *
 *  @return Массив массивов цифр, скажем, [[1,2,3],[8,9,4],[7,6,5]]
 */
- (NSArray *)getNumbersArrayForSide:(int)side
{
    // Инициализируем массив
    NSMutableArray *result = [NSMutableArray array];

    // Заполняем массив требуемой длины нулями
    for (int i = 0; i < side; i  ) {
        NSMutableArray *temp = [NSMutableArray array];
        for (int j = 0; j < side; j  )
            [temp addObject:[NSNull null]];
        [result addObject:temp];
    }

    // Нынешняя сторона квадрата, тот, что мы рисуем
    int currentSide = side;
    // Нынешнее смещение квадрата
    int offset = 0;
    int currentNumber = 1;

    // Повторяем, пока не достигнем центра квадрата
    while (offset < (side/2.0)) {
        // Нарисуем верхнюю линию
        for (int i = 0; i < currentSide; i  ) {
            result[offset][offset i] = @(currentNumber);
            currentNumber  ;
        }

        // Нарисуем правую линию
        for (int i = 0; i < currentSide-2; i  ) {
            result[1 offset i][side-1-offset] = @(currentNumber);
            currentNumber  ;
        }

        // Нарисуем нижнюю линию
        if (side/2 - offset > 0) {
            for (int i = 0; i < currentSide; i  ) {
                result[side-1-offset][side-1-i-offset] = @(currentNumber);
                currentNumber  ;
            }
        }

        // Нарисуем левую линию
        for (int i = 0; i < currentSide-2; i  ) {
            result[side-2-offset-i][offset] = @(currentNumber);
            currentNumber  ;
        }

        // Увеличиваем смещение, сокращаем нынешнюю сторону
        offset  ;
        currentSide-=2;
    }

    return result;
}
  • Решил сделать матрицу надобного размера, заполненную NSNull объектами; а позже заполнять ее необходимыми числами.
  • Всякую итерацию сторона квадрата уменьшается на 2, потому что мы отрезаем по одному числу с 2-х сторон.
  • Смещение — это координата начала нынешнего квадрата (и «x», и «y» — они идентичные).
  • У всякого квадрата вначале рисуется верх, потом правая сторона, потом низ, потом левая сторона.
  • В случае, если сторона квадрата равна 1, низ рисовать не необходимо; напротив, центральное число будет на 1 огромнее. Отчего? А вот и вам домашнее задание :)

А вот и итог для стороны квадрата, равной восьми:

image

Успешно завершив кодинг и тестинг, я отправил письмо с моим резюме и решением на email основного рекрутера. Сегодня вечером я нашел результат: меня поблагодарили и пригласили на интервью в офис.

Добросовестно сказать, я был потрясен. Наверно же, люди присылали решения получше: отчего я? Оказалось, все легко. Из телефонного разговора я осознал, что из 150 человек в лекционной отправили решение только трое (я в их числе). У одного решение не скомпилилось, у иного примитивное консольное решение на плюсах, а у меня вот такой славный глазу UI. Схоже, выбор был явствен.

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

Спасибо, что дочитали до конца! Вот так, при помощи решения задачки школьного яруса, у меня удалось заполучить собеседование в Facebook. Я уверен в том, что есть решение проще, и безрассудно крепко хочу о нем узнать! Пожалуйста, поделитесь своим методом решения в комментариях.

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

 

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB