Так вот, собеседование проходило по такому плану
  1. JavaCore
  2. ООП
  3. REST
  4. Базы данных
  5. Инстрменты, которыми пользуешься.
<h2>JavaCore</h2>
  • Вначале меня попросили нарисовать иерархию интерфейсов у Коллекций (это было не сложно, там всего их несколько (Collection, List, Set, Queue, Map).
  • В чем различие ArrayList и LinkedList (это один из самых заезженных вопросов и ответов в инетах просто тьма).
  • Обсудили скорость выполнения запросов в них и какая разница между листами.
  • Вопрос про класс Object. Какие у него методы, что они делают.
  • Рефлексия. Что делает метод getClass(). Очень интересный вопрос, разберите его. Особенно про то, как получить всё про класс, пусть даже там приватные методы или переменные.
  • Спросили за многопоточность. Слабенько, как я считаю, так рассказать как ты понимаешь что такое многопоточность. Что нужно, чтоб запустить новый поток. Реально, если вы 20+ уровень, то эти вопросы для вас покажутся смешными.
  • Что можешь сказать про Stream. Это имеется в виду не про Java 8. Имеется в виду потоки ввода и вывода. Как базовые интерфейсы, какие они (символьные и байтовые). На понимание, никакой конкретики.
  • Исключения. Здесь опять-таки попросили нарисовать иерархию исключений, какие бывают, какие из них checked, а какие unchecked. Что нужно делать с Runtime исключениями. Назовите самое часто попадающее (NullPointerException). Вопрос с тем, что нужно делать с checked исключениями(пробрасывать дальше или обработать — понятно и то и другое).
<h2>ООП</h2>
  • Что такое ООП в двух словах?
  • Какие еще есть парадигмы программирования? В чем их различие от ООП
  • Какие основные принципы ООП (наследование,полиморфизм и инкапсуляция)? Рассказать про каждый из них. Пока всё абстрактно, не привязываясь к какому-то языку.
  • Задача на понимание проектирования систем: есть Лошадь и Птица. Нужно получить Пегаса. принцип "has a" и "is a"
<h2>REST</h2>
  • Что такое REST. В Википедии об этом говориться очень круто. Реально статьи из Википедии для ознакомления хватит.
  • HTTP. Здесь тоже общие фразы. Его методы, для чего каждый из них.
  • Коды состояния HTTP. На какие пять частей делиться, расскажите про самые известные (200,204,404,500,501). Зачем они. Спросили еще про 401 и 403. Но я не знал их. Сказали они важные.
<h2>Базы данных</h2>Здесь я рассказал, что знаю MySQL. Рассказал про три нормальные формы. Рассказал про Join'ы, какие бывают и нарисовал пересечение областей, в котором используются разные джоины. Рассказал про то, как я понимаю реляционную БД. Не забыл еще о про MongoDB — это NoSQL база данных. Через некоторе время я напишу и про это. Очень хорошо знать и разбираться, что такое транзакция. Что такое ACID. Что такое уровни изолируемости. Эти знания дают понять, какой уровень. <h2>Другие инструменты</h2>Здесь мы прошлись по моем резюме. У меня было написано, что использую Maven/Gradle для сборки, использую JIRA для тасков, git, Docker, Swagger. Для Continuous Integration — Stash, Bamboo, Puppet. Для тестирования JUnit, Mockito, JMeter. Я мог что-то забыть, поэтому если интересно — спрашивайте в комментариях постараюсь ответить. Всем кому статья понравилась и была полезна — оценивайте и пишите в комментариях. Так же, подписывайтесь на мой гитхаб аккаунт romankh3 См. также мои другие статьи: - Как найти работу? Советы по рассылке резюме. Статья из группы Random - История Успеха. 20 часов в неделю программирования, магистратура и личная жизнь