.
На первых своих собеседованиях я этого не знал. А ведь разработчики не просто наблюдали за мной — они ожидали. Ожидали, что я буду действовать по следующему алгоритму:
Уточнить задание
- Спросите: «Что вы подразумеваете под словом палиндром?».
- Это отвечает на вопрос: приступит ли кандидат к решению задачи немедленно — даже не осознавая, что ее технические условия не ясны до конца? Или немного подумает и уточнит требования?»
«Мы имеем в виду такую последовательность, которая читается одинаково слева направо и справа налево. Ваше решение должно быть чувствительно к регистру: маленькая 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 минут в день. Так информация переместится в долгосрочную память, и вы сможете вспомнить ее даже при экстремальном стрессе на собеседовании.
- Не подвергайте себя всем этим мучениям только ради того, чтобы пройти тест на доске. Цельтесь выше! Поставьте перед собой задачу стать более профессиональным программистом!
ссылка на оригинал статьи https://habr.com/ru/company/otus/blog/481210/
Добавить комментарий