Простые. Причем всегда простые. И ты либо знаешь ответ, либо нет. Но есть варианты. (читаем дальше...)
Если ответа не знаешь - можешь попробовать выкрутится, но это сразу становится заметно. Думаю, лучше признать, что "пока я ответа не знаю". Не нужно всего знать. Это вполне нормально. Чем шире знания тем мельче они, напротив чем уже тем глубже. Но основа знать стоит, хоть в теории. Потому совет нумбер 1 - во время собеседования интенсивно записывать непонятные слова и термины в графу "я это пока не знаю, пока".
Если ответ знаешь, возможны варианты. Бывает такое, что заучил ответ и не чувствуешь его, ибо не имеешь опыта. Это заметно. Потому что скорее всего тот кто тебя проверял - проходил тот же путь. А еще возможен вопрос, о котором в книжках не написано - его можно только на опыте получить.
Возможно ты имел подобный опыт, но никогда никому не объяснял "это". В таком случае тебе сложно подобрать нужные слова. Вроде как и знаешь ответ, но приходится подолгу подбирать слова. Кажется это даже хуже чем заучить. У меня получалось что-то вроде "смотрите, как я это понимаю и сделайте из этого вывод". Не знаю насколько эта стратегия выгодна. Пока не знаю.
Возможно ты уже кому-то рассказывал "это" и у тебя много разных вариантов и красочных метафор - но это долго и утомительно. Можно часами рассказывать как "корабли бороздят космические пространства", но скорее всего так ты уйдешь от темы. И тебя могут перебить "мы задали конкретный вопрос".
Самый лучший ответ мне кажется тот, который умещается в одно предложение и доступен для понимания твой Бабушке. Такие ответы рождаются в результате многолетнего опыта рассказываний-пересказываний-переобдумываний и в результате случается прозрение.
Вот как-то так, один простой вопрос и твой на него ответ может многое рассказать о твоем опыте.
А еще понравился очень вопрос "оцените свои знания по 5-бальной шкале". Я растерялся. Оценка подразумевает относительность. Относительно чего оценить знания? Относительно того что хотелось бы? Наверное ПОЛНЫЙ НОЛЬ (круглый скорее). Но на автомате выдал 4-ку. Вообще еще учиться и учиться, иначе бы не искал нового.
Теперь конкретно про вопрос. Самый мой любимый вопрос - какая разница между интерфейсом и абстрактным классом.
левел 1) Не знаю. / Ой! Мы в нашем проекте... (и пошла импровизация)
левел 2) Ну, это когда, это самое - интерфейсы имплементятся какими-то классами. Абстрактные классы наследуются наследниками. Еще, это, интерфейс не содержит логики, а абстрактный класс содержит. А еще, это, Колекция - это интерфейс...
левел 3) Представьте себе пальчиковую батарейку. Вы ее держите в руках и точно знаете, что это пальчиковая батарейка. Если вас попросить описать те критерии, которые позволяют вам утверждать, что это батарейка (к примеру, размером с палец, если засунуть в фонарик - он засветится, вольтметр покажет 1.5 вольта, с одной стороны пимпочка ас другой плоско), то этот список и будет описанием интерфейса "пальчиковая батарейка".
Интерфейс ничего не говорит про, то как батарейка работает и позволяет манипулировать ею просто не задумываясь как она это делает. Фонарику все равно как она устроена, ему главное получить обещанные 1,5 вольта с полюса с пимпочкой и плоского полюса. Обещание - это и есть интерфейс - договор между двумя объектами. И еще, вы просто не узнаете по внешнему виду что у вас в руках - батарейка 777, алкалайн, дюраселл, NiMH аккумулятор или портативный атомный реактор. Придется заглянуть под интерфейс и посмотреть внутреннюю реализацию.
Абстрактный класс это недонаследник - наследник, который программисту предстоит еще доделать. Это уже почти сформированный класс, который вот-вот и можно будет инстансировать объекты. Он используется, если разработчик хочет направить другого разработчика в нужное русло, обеспечить его тем поведением, которое ему пригодится при завершении класса. Это как придумать Фрукт, ожидая, что в будущем кто-то додумает Яблоко, Лимон, Грушу...
Из этого всего можно сделать самый короткий вывод 5 уровня:
- интерфейс говорит о поведении класса и заставляет отвечать его на вопрос "что я делаю?", а абстрактный класс определяет класс-наследник и заставляет его отвечать на вопрос "кто я?".
Я есть живой организм. "Живой организм" - абстрактный класс. "Я" - конкретная реализация класса-наследника "HomoSapiens".
Я веду себя как: программист, семьянин, блогописец, оптимист, люблю: кататься на велосипеде и вкусно покушать, говорю по русски, пишу в тексте очепятки, упрям.
Все это мои интерфейсы. С первым интерфейсом я могу подключиться к IT комапнии. Со вторым могу поддержать Беседу на тему Маленьких Детей. По третьему я сейчас взаимодейтсвую с Blogspot. Четвертый дает мне уверенности, что завтра будет лучше чем Сегодня. Интерфейс "Люблю кататься на велосипеде" зимплементился в детстве и тесно привязывает меня к Велосипеду. "Люблю вкусно покушать" накладывает ограничения на то, какую Пищу я агрегирую. "Говорю по русски" хотелось бы дополнить "I am speak English". "Пишу в тексте очепятки" часто вызывает у читателя улыбку. "Упертость" ....
Кстати собеседование - это взаимодействие двух объектов, с целью определить интерфейсы и то, какой их реализацией обладает этот самый объект-программист с одной стороны, и объект-Компания с другой.
Ну как-то так...
Если нельзя, но очень хочется, то нужно обязательно и ничего в мире не стоит того, чтобы делать из этого проблему!
Интересна Java? Кликай по ссылке и изучай!
столько времени читатели провели на блоге -
сейчас онлайн -
четверг, 18 февраля 2010 г.
Подписаться на:
Комментарии к сообщению (Atom)
Классные аналогии.
ОтветитьУдалитьПасиб! :) Вот это бла бла бла, в котором иногда меня иногда уличают, рождает эти самые аналогии. Когда много об чем-то говоришь то и вдеть это начинаешь на другом уровне, объединять с другим опытом и рождать метафоры.
ОтветитьУдалитьШикарно! Особенно вот это: "Я есть живой организм. "Живой организм" - абстрактный класс. "Я" - конкретная реализация класса-наследника "HomoSapiens"."
ОтветитьУдалитьДаже я, балбес, понял :)
Шикарно демонстрирует ваш уровень.
ОтветитьУдалитьЗа статью спасибо
что значит владеть информацией, спс!
ОтветитьУдалитьспасибо автору
ОтветитьУдалитьСпасибо! )
УдалитьРад, что вам помогло. Статья от затрат на приобретение опыта не освобождает - про собеседования еще много чего интересного можно рассказать, как и про интерфейсы. Но это уже поведаете вы в своем блоге, а тут, в комментариях, оставите линк.
ОтветитьУдалить"Самый лучший ответ мне кажется тот, который умещается в одно предложение и доступен для понимания твой Бабушке."
ОтветитьУдалитьПо вашей логике, самый лучший ответ - левел 2.
А левел 3 явно не вместился не только в одно предложение, но даже в один абзатц! Сплошная демагогия.
"По вашей логике, самый лучший ответ - левел 2."
ОтветитьУдалитьА вот у вас, видать, с логикой некоторые проблемы. Советую не пролистать, а перечитать, ведь вы упустили самое важное "самый короткий вывод 5 уровня".
Автору большое спасибо за отличную статью! Многое стало понятно, особенно, когда прорабатываешь материал и читаешь подобного плана статьи в совокупности с сухими определениями - вырисовывается более-менее прозрачная картина :)