По данным Хабр.Карьеры за июнь, чаще всего среди всех IT-специалистов российские компании искали backend-разработчиков. При этом самым популярным языков программирования, на которых реализуют backend, является Java. Так, доля вакансий Java-разработчиков среди всех вакансий на backend составляет более 35%.

Программный директор факультета backend-разработки направления «Программирование» Skillbox, директор центра подбора IT-специалистов SymbioWay Даниил Пилипенко рассказал, какие умения должен показать джуниор Java-разработчик, чтобы успешно пройти собеседование.

Умение писать код, который легко поддерживать

Ключевой навык любого разработчика, в том числе, на языке Java –– умение писать чистый код. Чем чище код, тем легче другим разработчикам в нём разбираться и вносить изменения. Вот наиболее типичные признаки чистого кода:

  • Понятные названия переменных
    Называть переменные нужно так, чтобы было понятно, что в них содержится. Например, переменную, отражающую количество денег, можно назвать moneyAmount. Названия вроде a, b или c использовать не стоит.

  • Избегание длинных методов
    Краткость облегчает чтение кода, поэтому создавайте методы длиной не более 20-ти строк. Ещё не стоит создавать методы с более чем тремя параметрами. Компактные методы будет легко использовать, тестировать и изменять.

  • Структура классов и методов
    Имена классов, методов и структура самих классов должны быть созданы понятно и с соблюдением принципов объектно-ориентированного проектирования и принципов SOLID.

  • Минимум комментариев
    Код должен быть понятен без комментариев и содержать их минимальное количество. Тогда при работе разработчику не придется погружаться в длительное изучение комментариев и в их актуализацию. С кодом, в котором много комментариев, часто бывает такое, что сам код меняют, а комментарии остаются старые.

  • Структура по правилам фреймворка
    Приложение должно быть структурировано по файлам и папкам в соответствии с правилами фреймворка, на котором пишется этот код. Если вы пишете код на фреймворке Spring, то контроллеры должны быть максимально плоскими и содержать минимум кода, а основная логика должна быть вынесена в сервисы. Кроме того, работать с базой данных нужно только через классы репозиториев –– не в сервисах или в контроллере, а шаблоны Thymeleaf нужно размещать отдельно. Если соблюдать все эти требования, время поиска любого фрагмента кода в приложении снизится до нескольких секунд. При ошибке в приложении разработчик сможет быстро найти класс и метод, который требует исправлений.

  • Низкий уровень вложенности
    Фрагменты с высоким уровнем вложенности операторов друг в друга делают код слабо поддерживаемым. Каждый дополнительный уровень вложенности приводит к излишним нагрузкам на разработчиков при чтении. Если в вашем коде внутри метода есть оператор if, в нём цикл, в нём ещё один оператор if, а внутри него — switch…case, такой код необходимо переписывать и делать менее вложенным.

Чтобы проверить навык написания поддерживаемого кода, на собеседовании могут дать небольшую задачу на так называемый live coding — написание кода в реальном времени под наблюдением. Тот, кто будет собеседовать кандидата, будет оценивать два фактора: работоспособность и поддерживаемость написанного кода. Также обычно смотрят на скорость работы –– время, которое кандидату потребовалось на решение задачи.

Знание фреймворка Spring

Этот фреймворк используется в большинстве современных веб-приложений на Java. Каждый начинающий Java-разработчик должен понимать, как создавать их. Важно знать, прежде всего, Spring Boot –– специальный вариант фреймворка Spring, который позволяет создавать веб-приложения быстро и удобно.

На собеседованиях часто спрашивают про структуру приложений на этом фреймворке, про их конфигурацию, про то, как обрабатывать запросы и формировать ответы в контроллерах, работать с базами данных и с шаблонами, создавать и использовать сервисы. Кроме того, перед собеседованием могу попросить примеры кодов веб-приложений на Spring, написанных соискателем.

Умение работать с массивами и коллекциями Java

Начинающий разработчик должен понимать разницу между массивом и коллекцией, уметь создавать и изменять массивы и работать с классом Arrays. Важно также знать основные виды коллекций –– ArrayList, HashSet и HashMap. Стоит понимать механизмы работы List, Set и Map: это позволит выбирать оптимальную для решения той или иной задачи коллекцию.

Преимуществом на собеседовании станет и знание других коллекций, которые позволяют удобно оперировать наборами элементов –– их в Java много. Например, знать класс Collections, в котором есть большой набор инструментов для работы с коллекциями.

Разберитесь с принципами работы коллекций. На собеседовании могут спросить, например, что произойдет, если в HashSet добавить два разных объекта с одинаковым хэш-кодом. Это важный навык, так как от выбора класса коллекции может сильно зависеть скорость работы реализуемого приложения.

Знание языка запросов SQL

Практически любое веб-приложение использует базу данных (БД), чаще всего реляционную. Такие БД состоят из таблиц, в которых есть столбцы (поля) и строки (записи). Поля могут быть разных типов –– например, числа, строки, даты, JSON и так далее. Таблицы также могут быть связаны между собой. Чтобы работать с реляционными БД, разработчики используют язык запросов SQL.

С помощью SQL можно получать данные из таблиц, добавлять их туда, изменять и удалять, он также позволяет фильтровать и сортировать данные при выводе. Кроме того, с помощью SQL можно управлять и самими БД –– создавать их, добавлять в них новые таблицы, менять их структуру или удалять, а также управлять связями между таблицами. 

Разработчик должен уметь оптимизировать базы данных, таблицы и отдельные SQL-запросы, чтобы делать работу с БД более быстрой и эффективной. На собеседовании вас могут попросить написать какой-нибудь SQL-запрос или рассказать, например, о том, как работают разные типы оператора JOIN.

Знание принципов клиент-серверного взаимодействия

Формат взаимодействия браузера и просматриваемой веб-страницы с сервером обычно четко регламентирован. Для него используется протокол HTTP или его защищенная версия HTTPS. Они описывают форматы запросов к серверу и его ответов.

Разработчик должен знать протокол HTTP хотя бы верхнеуровнево. В частности, он должен понимать структуру запросов и ответов. Они состоят из строки запроса/ответа, заголовков и тела. Строка запроса содержит адрес ресурса и метод запроса, строка ответа содержит код ответа в числовом формате.

Важно знать популярные коды ответов. Например, 2xx –– коды успешных ответов, 3xx –– коды перенаправлений, 4xx –– коды ошибок на клиенте, 5xx –– коды ошибок на сервере. Вспомните популярную ошибку «Страница не найдена», которую может выдавать браузер –– это код ответа 404.

На собеседовании могут также проверить знания стандарта REST. REST –– это надстройка над протоколом HTTP. REST описывает правила клиент-серверного взаимодействия веб-приложений, по которым операции с сущностями соответствуют определённым методам HTTP. Так, метод GET отвечает за получение ресурса, метод POST –– за создание, PUT –– за полное изменение, a PATCH –– за частичное изменение.

Еще REST регламентирует пути запросов: например, при работе с новостями их список можно получить запросом GET /news. Если разработчик хочет создать новость, то он должен применить запрос POST /news. Чтобы получить конкретную новость, нужно ввести запрос GET /news/id, где id — это идентификационный номер этой новости.

Заключение

Конечно, темы вопросов на собеседованиях могут отличаться от компании к компании. Например, у вас могут проверить знания принципов объектно-ориентированного программирования, задавать более сложные вопросы по SQL и HTTP. Начинающему Java-разработчику также стоит хотя бы в общих чертах понимать, как работает вёрстка — технологии HTML и CSS.

Еще соискателю стоит понимать, как работать с системой контроля версий Git, таск-трекерами, командной строкой bash. Эти навыки являются основными, они позволяют начинать работу в новой команде и компании “гладко”. Те, кто владеет перечисленными навыками, очень быстро после выхода на новое место работы начинают приносить пользу своему работодателю.

Комментарии (21)


  1. nin-jin
    28.07.2022 15:27
    +12

    А как же знание фреймворка jQuery?


    1. vedenin1980
      28.07.2022 15:35
      -1

      А его еще проверяют? Сейчас есть react, angular, vue.js, html5, новые функции javascript/typescript разве они не перекрывают все возможности jQuery?

      Нет, я допускаю, что где-то jQuery все еще нужен, но не везде же. Да, нет в jQuery ничего настолько сложно (по сравнению в большой тройкой js framework'ов), чего нельзя было изучить в фоновом режиме, чтобы прямо требовать помнить наизусть его функции.


      1. vedenin1980
        28.07.2022 16:45

        Интересно, мне все равно на минусы, но те кто поставил может напишите хотя бы пару строчек с вашим мнением? Мне правдо интересно, может я чего-то не понимаю.


        1. nin-jin
          28.07.2022 17:40
          +3

          Угу, не выкупил пост-мета-иронию касательно фотки.


          1. vedenin1980
            28.07.2022 18:26

            Ясно, но честно говоря в мире Java я уже столько насмотрелся (включая множество легасси решений 20 летней давности и не особо понимающих менеджеров), что ничуть не удивляюсь если на тех.собесе Java программиста будут вопросы по jQuery и они окажутся чуть ли не ключевыми при принятии решения о найме.


            1. SlavaRa
              29.07.2022 11:02
              +1

              Простите, но какое отношение jQuery имеет к миру Java?


              1. vedenin1980
                29.07.2022 11:25

                «Мир» Java очень большой, это не только backend. Есть еще большие данные, машинное обучение и frontend, в том или ином виде.

                Были аплеты, есть сервлеты, jsp, GWT, многие java программисты приходят в результате к тому или иному виду фулл стека.

                Очень часто даже если занимаешься чисто беком с Rest, требуется создавать небольшие html страницы для мониторинга и админ.панели, что часто тянет за собой желание добавить интерактивности, что добавляет хоть небольшие, но скрипты на js (и как самое простой на jQuery или его аналогах).

                Поэтому к желательному стеку разработчика Java кроме SQL и знания принципов клиент-серверного взаимодействия, можно так же отнести базовые знания git и его аналогов, docker и его аналогов, maven/gradle, jenkins и компаниии, Java IDE и, конечно, хотя бы базовые знания js и html.


        1. Filex
          28.07.2022 17:41

          Я так понимаю вопрос первого комментатора был сарказмом, связанный с последним абзацем этой странной статьй. А вы решили серьезно ответить на данный комментарий.


          1. Exclipt
            28.07.2022 20:39
            +1

            Скорее связанный с первой картинкой статьи


        1. madsunrise
          29.07.2022 11:02

          Думаю вы не уловили сарказм в первом комментарии


        1. cofolunat
          29.07.2022 11:02

          сдается мне, в исходном комменте был сарказм


    1. ScientMan
      29.07.2022 11:03
      -2

      Может я глупый, но как jQuery относится к Java?


  1. 402d
    28.07.2022 18:56
    +1

    Начинающему Java-разработчику также стоит хотя бы в общих чертах понимать, как работает вёрстка — технологии HTML и CSS.

    Автор SkillBox

    Java в качестве бакенда для сайта ? Чувствую выпусникам курсов будет трудно найти нишевую контору


  1. Antharas
    28.07.2022 19:07
    -1

    Какой-то мейнстрим вокруг spring и всей его экосистемы. Есть кучу компаний и решений, не использующих spring, в которых нужны core разработчики. Новичок, конечно же, сразу пойдет хайпить по новомодному стеку, прочитав эту статью - зачем знание core разработки, когда можно писать MVC сутками и плевать как оно работает, имхо. Как будто бы все программирование на Java сводится к построению веб-решений и только.


    1. vedenin1980
      28.07.2022 19:13
      +1

      Spring это не новомодное, есть куда более молодежно модные стекм на Java. Spring давно уже обкатанная рабочая лошадка, которая модная разве что по сравнению с J2EE.


  1. 402d
    28.07.2022 19:07

    На картинке ES6 или TypeScript . Как это связано с разработкой на JAVA для десктопных систем ?


    1. upagge
      28.07.2022 21:18
      +2

      Контент план горит. Надеемся на понимание.


  1. mmMike
    29.07.2022 05:13
    +2

    Краткость облегчает чтение кода, поэтому создавайте методы длиной не более 20-ти строк.

    Ужасный совет. Следуя ему создаются джунами под сотню классов и функций (используемых только в одном месте) и продирайся потом через эту лапшу. В каждом классе по 20..30 строк кода.

    Теперь я понимаю кто эти вредные советы дает.

    А в выскоконагруженных задачах, где борешься за каждую ms так еще эти вызовы влияют на скорость.

    Код должен быть читаем. Если изначально он линеен, то более читаема функция из 300 строк с нормальными комментариями и разделенная на блоки комментариями, чем 15 последовательных вызовов хрен знает чего.

    Хотя.. если платят за количество кода, то это совет "правильный."

    Но терпеть не могу разбирать код который тупо сделан по этому совету без включения мозгов.


  1. mmMike
    29.07.2022 05:18
    +2

    Разработчик должен уметь оптимизировать базы данных, таблицы и отдельные SQL-запросы, чтобы делать работу с БД более быстрой и эффективной. 

    Точно? Ну в общем случае да.

    Но вот не стесняюсь спросить у специалиста Oracle DBA помочь со сложным запросом или сказать "встанет на индекс в этом запросе или нет". Ибо все знать невозможно.


  1. 2ray
    29.07.2022 10:20

    Не вижу в статье ничего относящего к 2022 году


  1. kpmy
    29.07.2022 11:02
    +5

    Хорошо, что умение программировать не требуется.