Как стать автором
Поиск
Написать публикацию
Обновить
531.99
OTUS
Развиваем технологии, обучая их создателей

Что хотят от кандидатов на собеседовании по написанию кода?

Время на прочтение3 мин
Количество просмотров4.9K
Привет, хабровчане. В преддверии старта курса «Java QA Engineer» делимся с вами продолжением вот этого материала
.




На первых своих собеседованиях я этого не знал. А ведь разработчики не просто наблюдали за мной — они ожидали. Ожидали, что я буду действовать по следующему алгоритму:

Уточнить задание

  • Спросите: «Что вы подразумеваете под словом палиндром?».
  • Это отвечает на вопрос: приступит ли кандидат к решению задачи немедленно — даже не осознавая, что ее технические условия не ясны до конца? Или немного подумает и уточнит требования?»

«Мы имеем в виду такую последовательность, которая читается одинаково слева направо и справа налево. Ваше решение должно быть чувствительно к регистру: маленькая r не идентична большой R».

Начните с примеров

  • Спросите: «В качестве примеров приведены слова «доход» и «шалаш». А что насчет фраз вроде «А роза упала на лапу Азора?». Что насчет пустой строки или строки из одного символа?
  • Это отвечает на вопрос: примет ли кандидат во внимание достаточное количество пограничных случаев? Насколько точным и внимательным он будет?



Прежде чем приступить к описанию кода, кратко ознакомьте интервьюера с алгоритмом


Как кандидат подходит к решению проблемы? Проговаривает ли он свои мысли вслух, чтобы интервьюер их услышал?

Например, string s = "alla".

Мы можем воспользоваться вспомогательным методом для Строки Java, charAt(int i). Введите индекс строки в метод, и он выведет символ в таком индексе:

s.charAt(0) == 'a'
s.charAt(1) == 'l'
s.charAt(2) == 'l'
s.charAt(3) == 'a'

Чтобы узнать длину строки, можно использовать метод length():

s.length == 4

Чтобы узнать последний символ, можно использовать:

int len = s.length
s.charAt(len - 1)

Мы начали отсчет с 0, поэтому последний символ будет «длина минус 1».

Давайте назовем первый символ «first», а последний «last».

  • Если первый символ s.charAt(first) не совпадает с s.charAt(last), то это не палиндром. Выводим false.
  • Если первый символ s.charAt(first) совпадает с s.charAt(last), мы переходим к оценке следующего набора символов, сдвигаясь на один символ от «first» и от «last». Если все совпадает, вывести true.
  • Проверив алгоритм вместе с интервьюером, можно приступать к написанию кода:

public boolean isPalindrome(String s) {
    int first = 0;
    int last = s.length() - 1;
    while (first < last) {
        if (s.charAt(first) != s.charAt(last)) {
            return false;
        }
        first++;
        last--;
    }
    return true;
}

Отладка и тестирование


  • Возьмите изначальные тестовые примеры и попытайтесь представить: что произойдет, если вставить их в код.
  • Интервьюеры проверяют вашу внимательность при отладке. (Заметите ли вы ошибки в собственном коде без подсказок со стороны?).
  • Интервьюеры будут давать подсказки, если вы сумели произвести на них хорошее впечатление. (Если мы будем давать кандидату подсказки, воспользуется ли он ими? Готов ли он прислушаться к чужому мнению? Умеет ли он работать с людьми, занимающими более высокие должности?).

Покажите свой код другим людям и соберите их отзывы


Я показал свое решение задачи про палиндром своему другу-разработчику. Он скорчил гримасу: «Зачем ты использовал переменные «first» и «last»? И зачем задействовал цикл «loop», если можно обойтись «for»? Все можно было сделать короче, элегантнее и быстрее:

public boolean isPalindrome(String s) {
    int len = s.length;
    for (int i = 0; i < len / 2; i++) {
        if ( s.charAt(i) != s.charAt(len - 1 - i)) {
            return false;
        }
    }
    return true;
}

Что дальше


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

  • Найти в интернете задачи по программированию базового уровня.
  • Попробовать решить их с помощью бумаги и ручки.
  • Если вы не можете их решить, ознакомьтесь с официальной документацией языка программирования и посмотрите, какие встроенные методы могут помочь вам.
  • Сформулируйте собственное решение перед тем, как искать чужое. Если вы сами будете собирать информацию и изучать ее, появится вероятность того, что эта информация навсегда осядет в вашей голове.
  • Не устраивайте сеансы зубрежки. Так вы просто сохраните информацию в краткосрочной памяти.
  • Практикуйтесь короткими заходами, по 15 минут в день. Так информация переместится в долгосрочную память, и вы сможете вспомнить ее даже при экстремальном стрессе на собеседовании.
  • Не подвергайте себя всем этим мучениям только ради того, чтобы пройти тест на доске. Цельтесь выше! Поставьте перед собой задачу стать более профессиональным программистом!
Теги:
Хабы:
Всего голосов 11: ↑4 и ↓7-3
Комментарии8

Публикации

Информация

Сайт
otus.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
OTUS