Уже почти двадцать лет Java входит в топ-3 самых популярных языков программирования. Она имеет широкий спектр применения: с ней делают и сервера, и сайты электронной коммерции, и игры (Minecraft), и приложения под Android. Java регулярно модернизируется и работает на всех платформах. 

Спрос на Java-разработчиков очень большой. На hh.ru находится свыше 500 вакансий по запросу «Junior java» и более 10 000 вакансий «Java developer». В базе Rubrain.com около четверти исполнителей уровня Middle+ тоже указывают Java как один из своих основных языков программирования.

Поиск it специалистов нацелен не только на тех, у кого есть образование. Некоторые компании проводят собеседования с разработчиками даже не изучая их резюме, основываясь только на практических знаниях.

Перед тем, как нанять в команду разработчика, проводится собеседование. Чаще всего в 2 этапа:

  • общение с рекрутером;
  • общение с главным it-специалистом и руководителем;

Начинающим джуниорам с опытом работы 0-2 года задают общие вопросы: устройство языка, алгоритмы, структура данных, ООП, немного SQL и баз данных. А IT-рекрутеров в первую очередь интересует ваша мотивация, способность к быстрому обучению и работа в команде.

Java программист: как найти работу

Категории вопросов, которые вам зададут почти в любой компании:

  • ООП. Три принципа нужно знать обязательно. Это инкапсуляция, наследование и полиморфизм. Дополнительно к “трем китам” можно отнести и абстракцию, хотя у новичков на собеседовании такое спрашивают редко.
  • Коллекции. Нужно хотя бы общее понятие того, что это и как работает. Знать основные интерфейсы. То, как они реализуются. Их преимущества и недостатки. 
  • Многопоточность. Довольна сложная тема — треды, семафоры, блокировки. Зависит от специфики работы, может быть важным пунктом, а может и не быть вовсе.
  • Структуры данных. Что такое дерево и граф, их отличия. Что такое АВЛ деревья? Чем стек отличается от очереди? Касаемо java: какие классы в java реализуют стек или очередь? Чем LinkedList отличается от ArrayList? Что такое HashSet и его отличие от TreeSet?
  • Понимание разницы между типами объектов. Например, чем абстрактные классы отличаются от интерфейсов; какие модификаторы являются общедоступными, а какие — частными?
  • Библиотека JAR: что это такое, как она используется и как ссылаться на нее в вашем коде.
  • Hibernate и Spring Framework. Это самые популярные фреймворки Java. Большинство компаний стараются нанять разработчика, который умеет использовать фреймворки Spring. Такие как Spring Boot, Spring MVC и Spring Cloud для разработки веб-приложений. Фреймворк Hibernate также очень популярен для сопоставления объектно-ориентированной модели предметной области с реляционной базой данных.

Также хорошо понимать основы HTML и CSS, XML, и иметь общие понятия о СУБД.

Большинство этих тем 100% встретятся на интервью. Некоторые из них (например, вопросы про деревья и графы) на практике редко могут пригодится, но знать о них нужно. На собеседовании от вас скорее ожидают хорошие знания базовых вещей. Но не теряйтесь, если у вас спрашивают термин, который вам не знаком. Так и скажите, вы не можете знать все.

Разработчик Java вопросы на собеседовании

5 примеров вопросов, которые могут задать на собеседовании

     1. Какие типы garbage collectors существуют в Java?

Garbage collectors помогает в неявном управлении памятью. C помощью ключевого слова new вы можете динамически создавать объекты, которые после создания потребляют некоторую память. Когда работа выполнена и на объект больше не осталось ссылок, Java использует garbage, уничтожая объект и освобождает занимаемую им память. 

Существует четыре типа сборщиков мусора:

  • Серийный Garbage Collector
  • Параллельный Garbage Collector
  • CMS Garbage Collector
  • G1 Garbage Collector

     2. Как в Java остановить поток?

В Java есть три метода остановки выполнения потока:

  • Блокировка. Используется для перевода потока в заблокированное состояние. Выполнение возобновляется, как только выполняется условие блокировки. Например, ServerSocket.accept () — метод блокировки, который прослушивает входящее соединение с сокетом и возобновляет заблокированный поток только после того, как соединение установлено.
  • Сон. Используется для задержки выполнения потока на некоторое время. Поток, в котором используется метод sleep (), входит в состояние сна. Время, в течение которого поток должен перейти в состояние сна, указывается в фигурных скобках метода sleep (). Это статический метод.
  • Ожидание. Метод wait () может быть вызван только из синхронизированного блока.

     3. Непрерывные ячейки памяти обычно используются для хранения фактических значений в массиве, но не в ArrayList. Почему?

В случае ArrayList хранение данных в виде примитивных типов данных (например, int, float и т. д.) невозможно. Объекты данных, представленные в ArrayList, имеют ссылки на объекты, расположенные в различных местах в памяти. Таким образом, сохранение фактических объектов или непримитивных типов данных (например, Integer, Double и т. д.) происходит в различных ячейках памяти.

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

     4. В чем разница между ошибкой и исключением?

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

Например, ошибку OutOfMemory невозможно исправить во время выполнения. Хотя она и может быть обнаружена в блоке catch, выполнение приложения будет остановлено и не может быть исправлено.

FileNotFoundException будет сгенерировано, если указанный файл не существует. Или возникнет исключение NullPointerException, если вы попытаетесь использовать нулевую ссылку. В большинстве случаев после исключения возможно восстановление (например, предоставив пользователю обратную связь для ввода правильных значений).

     5. Чем HashSet отличается от TreeSet?

Хотя и HashSet, и TreeSet не синхронизируются и гарантируют отсутствие дубликатов, существуют определенные свойства, которые отличают HashSet от TreeSet.

Для HashSet хэш-таблица используется для хранения элементов в неупорядоченном виде. Однако TreeSet использует красно-черное дерево для хранения элементов в отсортированном виде.

Сложность/производительность. Для добавления, извлечения и удаления элементов сложность, амортизированная по времени, составляет O (1) для HashSet. Временная сложность выполнения тех же операций для TreeSet немного выше и равна O (log n). В целом производительность HashSet выше по сравнению с TreeSet.

Методы: hashCode () и equals () используются HashSet для сравнения объектов. И наоборот, методы compareTo () и compare () используются TreeSet для облегчения сравнения объектов.

Разработчик Java: как стартовать джуниору

Фриланс для программистов

Начинающие разработчики пробуются на различных фриланс-биржах. Некоторым компаниям иногда требуется нанять программиста для специфических проектов. Таким образом можно набить руку и получить неплохой начальный уровень в it-разработке.

Несколько полезных фриланс-бирж для начинающих и опытных программистов:

  • UpWork. Необходимо знание английского языка, для того, чтобы со временем брать крупные заказы. На этой бирже зарубежные компании часто пользуются услугами опытных программистов, но предпочитают общаться лично, поэтому на одном гугл-переводчике далеко не уедешь.
  • Kabanchik. Не самая популярная биржа, но подойдет для начинающих программистов. Заказчиков много, особенно тех, кто хочет получить работу подешевле. Зато можно сделать себе портфолио и получить хороший опыт. Единственный минус — большинство заказов на веб и мобильную разработку. 
  • GlobalFreelance. Для новичков — самое то. Много разных и достаточно простых заданий. Надолго тут не задержишься, зато и руку можно набить, и денег заработать, пока ищешь постоянную работу.
  • Rubrain.com. Подходит, если уже есть опыт. Мы предлагаем программистов топовым российским компаниям («Яндекс», Сбербанк, X5) и зарубежным стартапам. Чаще всего это работа по проектам. Аутсорсинг программистов Java компаниям, которые в них нуждаются. Совсем джунов не берем, но постепенно можно пробовать пройти отбор.
  • Pchel.net. Подходит и новичкам, и более опытным специалистам. Есть Pro-аккаунты, но можно работать и бесплатно. Заданий хватает для всех, но крупные проекты попадаются крайне редко.

Вопросы на собеседовании Junior Java Developer

Несколько советов для новичков:

    1. Постоянно учитесь. Самый важный и самый сложный пункт. В программировании нельзя один раз выучить и забыть. Технологии развиваются очень быстро, придется осваивать новые библиотеки, новые приложения. Чем дальше рост — тем больше разных специфик. Даже самые опытные сеньоры продолжают сталкиваться с проблемами, изучают новые технологии. Компаниям нужны услуги программистов, которые умеют находить выход из любых форс-мажорных ситуаций.
    2. Практикуйтесь. На одной теории далеко не уедешь. Курсы и книги — это очень полезно, но там редко бывают практика, над которой нужно действительно думать. Решайте задачки, пишите несложные программки, пользуясь документацией и вспомогательными материалами. Например, есть очень полезная платформа Codewars. Вы выбираете язык, уровень и она генерирует задачу, а рядом нужно вписать ответ. Чем она хороша? Во-первых, набивается рука — а это очень полезно новичку. Во-вторых, вы получаете практический опыт использования теории не по примерам из книг. Задачи нетипичные, иногда чтобы решить — надо потратить кучу времени. В результате, через несколько недель практики, глядя на задачу вы будете уже сразу представлять, как ее решить. 
    3. Гуглите! Нет ничего постыдного в том, что вы будете искать решение или ответы в интернете. Даже самые опытные программисты могут что-то забыть. К примеру, некоторым просто лень писать большой блок, и они просто копируют уже чей-то готовый код, и просто переписывают его под свой проект. На собеседовании вам необходимо знать и уметь использовать базу. Но когда вы уже приняты — можно (и даже нужно) быстро и эффективно находить информацию любыми способами. Кстати, очень часто сами интервьюеры помогают кандидатам. Они дают намеки, реагируют на идеи и могут направить в нужное русло. Не бойтесь задавать вопросы. Если вы знаете решение, но что-то подзабыли — спросите. 

Получить работу junior-разработчиком Java может быть непросто. Конкуренция жесткая, и большинство компаний озабочены поиском специалистов с определенным опытом. Покажите им, что вы разбираетесь в программировании, можете быстро учиться, работать над своими ошибками и стараться не допускать их в дальнейшем.

Обращайтесь в Rubrain.com, если вам нужны java-девелоперы или если вы хотите получить работу java-программистом.