JavaRush /Java блог /Random /Опыт прохождения собеседования
Galina
8 уровень

Опыт прохождения собеседования

Статья из группы Random
Собеседовалась я в одну Американскую компанию, у которой есть офисы и в Санкт-Петербурге, и в Саратове, и в Харькове, и в Польше, ну и в Силиконовой долине Калифорнии. Много русских там.
собеседование ИТ
Назначили мне техническое интервью на позицию junior QA with java. Я готовилась, писала ручкой на бумаге код задачек по массивам, спискам, коллекциям. Без подглядывания куда-либо. Это, кстати, оказалось не просто. Интервью было по hangouts. В начале собеседования интервьюер попросил рассказать о себе. Затем перешли к задачкам. Он пошарил документ со мною, где был код и мы оба одновременно видели действия друг друга. Первая задачка была на массив с вариантами ответов. Я не буду давать здесь ответ, но хочу предупредить что нужно быть внимательным. Легко проанализировать начало выполнения кода и не заметить небольшой подвох ближе к концу.

//Task1
// What will be the value of the “values” variable after execution of the following code snippet?
//
    public static void main(String[] args) {
        int[] values = {23, 12, 13, 17, 23, 19};

        for (int i = 0; i < values.length - 1; i++) {
            if (values[i] > values[i + 1]) {
                int t = values[i];
                values[i] = values[i + 1];
                values[i + 1] = t;
            }
        }
    }

// 1. {12, 13, 17, 19, 23, 23}
// 2. {23, 23, 19, 17, 13, 12}
// 3. {12, 13, 17, 23, 19, 23}
// 4. {12, 13, 23, 17, 19, 23}
Интервьюер спрашивал "Что делает задачка?" и "Какой вариант ответа правильный?". И "Что напоминает эта задачка?" На последний вопрос я ответила, что напоминает сортировку пузырьком, только там два цикла и один вложенный, который начинается с конца. Эту задачку я решила. И даже обрадовалась, что легко было. Затем шла вторая задачка "Счастливый билет". Где сумма первых трех цифр равна сумме трех последних в 6-ти значном числе.

// Task2
// boolean isMyTicketLucky(? ticketNumber);

// Notes:
// - You need to choose a type of the ticketNumber input parameter yourself.
// - Ticket number consists of 6 digits like 123456 or 404404.
// - The method returns true if sum of the first three digits is equal to sum of the last three digits.
// If the sums are different the method returns false.

    public static void main(String[] args) {
        //isMyTicketLucky("123006");
        System.out.println(isMyTicketLucky("123006"));
    }
Здесь нужно самому выбрать тип номера билета во входящем параметре. Integer или String. Для обоих типов есть решение задачки. Решение для типа билета Integer.

private static boolean isMyTicketLucky(int ticketNumber) {

        int number1 = ticketNumber / 100000;
        int number2 = (ticketNumber / 10000) % 10;
        int number3 = (ticketNumber / 1000) % 10;
        int number4 = (ticketNumber / 100) % 10;
        int number5 = (ticketNumber / 10) % 10;
        int number6 = ticketNumber % 10;

        return number1 + number2 + number3 == number4 + number5 + number6;
    }
Решение для типа билета String.

private static boolean isMyTicketLucky(String ticketNumber) {
        return ticketNumber.charAt(0) + ticketNumber.charAt(1) + ticketNumber.charAt(2)
                == ticketNumber.charAt(3) + ticketNumber.charAt(4) + ticketNumber.charAt(5);
    }
К сожалению я растерялась и не смогла решить вторую задачку во время интервью. После задачек были вопросы о SQL, SQL Join, system version control. Ну и совсем в конце спросил "Есть ли вопросы?" Я попросила дать критику моего собеседования, и интервьюер отметил, что ему понравилось, что я вслух рассуждала что делал код в первой задачке. Я прям шла по коду и проговаривала, что делает каждая строка и каждая итерация в цикле. Это было мое первое интервью в IT. Я его не прошла, но зато я знаю над чем работать сейчас и что подучить.
Комментарии (15)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Mr. Alex Уровень 16
30 сентября 2018
Вот еще решение для второй задачки (Для String) "Счастливый билет" - сумма первых цифр равна сумме последних в числе. Если эти сумы равны, значит сумма этих сумм равна 0 =). Тогда мы сразу можем добавлять первые [0..N/2) и отнимать последнее [N/2, N) цифр, где N - количество цифр в числе.

private static boolean isMyTicketLucky(final String ticketNumber) {
        final int blockLength = ticketNumber.length() / 2;
        int sum = 0;
        for (int i = 0; i < blockLength; i++) {
            sum += ticketNumber.charAt(i) - ticketNumber.charAt(blockLength + i);
        }
        return sum == 0;
}
Что-то подобное можно для integer написать, используя деление. Можно еще рекурсивное деление сделать, но это плохой подход.
Евгений Иванов Уровень 39
26 сентября 2018
Первая задачка должна кидать ArrayIndexOutOfBoundsException
Евгений Гродно Уровень 36 Expert
3 мая 2018
Одно из решений, лучше делегировать уже реализованному, и так как со String получилось симпатичней и короче, отправляем int в метод обработки.

private static boolean isMyTicketLucky(int ticketNumber) {
return isMyTicketLucky(new String(ticketNumber));
}
Ярослав Уровень 40 Master
2 мая 2018

        int number3 = (ticketNumber / 1000) % 10 % 10;
        int number4 = (ticketNumber / 100) % 10 % 10 % 10;
        int number5 = (ticketNumber / 10) % 10 % 10 % 10 % 10;
        int number6 = ticketNumber % 10 % 10 % 10 % 10 % 10;
Что это за безумный код? Зачем по 6 раз остаток от деления на 10 искать? Достаточно же раза. У нас на первом семестре первого курса уже бы за такое расстреляли))) Данный код очень хорошо демонстрирует, что суть написанного тот, кто писал код, не понимает. Есть число например: 123456. Когда мы делаем деление на 10 - мы отсекаем одну цифру справа. Отсекаем мы N чисел, где N - степень десятки. 123456/10 = 12345 А остаток от деления нужен, чтобы вытащить последнюю цифру. 12345%10 = 5. Потому мы просто срезаем одну цифру и достаем новую последнюю цифру числа. Когда же запись есть, вроде: int number6 = ticketNumber % 10 % 10 % 10 % 10 % 10; То: 123456%10 = 6. 6%10 = 6 6%10 = 6 6%10 = 6 6%10 = 6 Просто бесполезные команды.
Vladimir Уровень 40 Master
2 мая 2018
Самое важное, что в таких случаях debugger у тебя в голове клацает F7. Рядом его нет, как и нет IDE. И тут становится ясно, в теме ты или нет. :)
Tural Aliyev Уровень 11
2 мая 2018
кайф