• Может ли Service иметь репозитории других классов?

    @Akela_wolf
    Extreme Programmer
    Технически вам никто не мешает так делать

    Архитектурно - нужно смотреть по конкретному проекту.
    Ответ написан
    1 комментарий
  • Нормально ли кидать эксепшены в Spring boot web app?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Нормально.
    Ответ написан
    Комментировать
  • Как обратиться в enam по числовому порядку?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Я бы сделал ещё одно поле с геттером:
    public enum DayOfWeek {
        MONDAY(1),
        TUESDAY(2),
        WEDNESDAY(3),
        THURSDAY(4),
        FRIDAY(5),
        SATURDAY(6),
        SUNDAY(7);
    
         @Getter
         private final int number;
    
        DayOfWeek(int number) {
            this.number = number;
        }
    }
    Ответ написан
    Комментировать
  • Глуповатый вопрос - как IntelliJ IDEA будучи написаной на Java может запускаться без JVM?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    У Идеи есть своя джава.
    Она лежит в папке <идея>/jbr
    Ответ написан
    Комментировать
  • Почему не загружается JavaFX controller?

    @MicroKlizma Автор вопроса
    В общем все-таки понял в чем проблема, нужно было добавить этот пакет в файл module-info.java
    А именно, добавить строку
    opens com.app.view to javafx.fxml;
    Ответ написан
    Комментировать
  • Как инвертировать строки в массиве, имплементировав интерфейс Function?

    @Akela_wolf
    Extreme Programmer
    Функциональное программирование - это про применение последовательности функций к аргументам (и про функции высшего порядка). Вообще, если коснулись функционального программирования и списков-массивов, то начинайте смотреть StreamAPI, это вот что ни на есть самая функциональщина в джаве. Вообще в джаве функциональное программирование не так чтобы очень хорошее, если эта тема интересна - идите в Котлин (или Скала, но Скала практически не применяется в промышленном программировании).

    Вашу задачу можно решить, например, вот так:
    import java.util.Arrays;
    
    public class Main {
    
        public static void main(String[] args) {
            Arrays.stream(args).map(Main::reverse).forEach(System.out::println);
        }
    
        private static String reverse(String s) {
            final StringBuilder result = new StringBuilder();
            for (char c : s.toCharArray()) {
                result.insert(0, c);
            }
    
            return result.toString();
        }
    }


    Тут интерфейс используется неявно (в функции map), туда подставлена другая функция - reverse. Если хочется - можно обернуть её в интерфейс.
    Ответ написан
    Комментировать
  • Как исправить hostname для postgres в docker-compose?

    @q2digger
    никого не трогаю, починяю примус
    Ваше приложение должно стучать в postgresqldb , это имя контейнера с базой
    Ответ написан
    6 комментариев
  • Как с консоли считывать поисковый запрос, и выводить результат поиска по Википедии?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Срочно читайте про try-with-resources!

    Ваша задача должна состоять из таких вот методов:
    // Считать запрос
    String request = getRequest();
    
    // Сделать запрос к серверу
    String response = getResponseFromWiki(request);
    
    // Распарсить ответ
    (?) result = parseResponse(response);
    
    // Вывести результат
    showResult(result);

    С запросом к серверу вы, видимо, справились.
    Нужно это все сделать отдельным методом (типа getResponseFromWiki), который будет возвращать полученную строку (или что там у вас вернется)
    Ну и дальше по схеме.
    Ответ написан
  • Как правильно импортировать сторонние классы?

    @Akela_wolf
    Extreme Programmer
    Откройте для себя системы сборки, такие как Maven и Gradle (рекомендую последний). Они позаботятся обо всех зависимостях и правильном размещении их в classpath. Работа над любым более-менее сложным проектом на Java без подобных систем - это одна сплошная непрекращающаяся боль.
    Ответ написан
    4 комментария
  • Зачем нужны интерфейсы для слоев DAO и Service в Java?

    @Akela_wolf
    Extreme Programmer
    Интерфейсы нужны для возможности замены реализации не затрагивая основной код. При использовании интерфейсов основной код ничего не знает об деталях реализации (слабая связанность). Соответственно, реализацию можно вынести в отдельный модуль (изолировать сложность). Если основной код ссылается непосредственно на класс, содержащий реализацию (сильная связанность), то сложность программы возрастает и сопровождение программы усложняется. Поэтому интерфейсы особенно нужны на границах подсистем.

    Если реализация отделена от основного кода, то становится легко подменить её в тестах, например, подсунуть in memory реализацию, вместо БД. См. fake object (не путать с mock). Это еще один важный плюс интерфейсов.

    Возможно, в простых программах интерфейсы не слишком нужны. Но, поскольку вы говорите об учебном примере, то использовать их (приучая сразу к хорошему, правильному стилю) - это правильно.
    Ответ написан
    Комментировать
  • Как убрать стандартные классы li в wp_menu_nav?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    Вы не добавляйте, а заменяйте тогда.
    И третий параметр пропишите, чтобы гарантировано ваш фильтр отрабатывал последним
    add_filter("nav_menu_css_class", fn() => ["nav_list"], PHP_INT_MAX);


    PS А вообще с меню можно сотворить всё что угодно с помощью Walker'а (https://awhitepixel.com/blog/wordpress-menu-walker...)
    Ответ написан
    Комментировать
  • Можно ли стать Java Senior разработчиком, если учится полгода-год по 2-3 часа в день?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Чтобы стать сеньором надо лет 8-10 коммерческого опыта.
    Ответ написан
    Комментировать
  • Что писать в резюме чтобы были шансы куда-то попасть без опыта?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Нормально что с первого захода вас нигде не взяли. Таких как вы тысячи, рекруту реально сложно понять - вы вайтишник или реально хотите посвятить этому жизнь и будете перспективным работником, а не свинтите после первой недели в конторе, потому что "тут оказывается работать надо!". Давайте резюме чаще и не стесняйтесь подавать на более "серьезные" позиции по описанию, часто в требованиях много скилов завышают, просто "на всякий случай, чтобы было", указывайте в письме что "это и это пока не умею, но готов учиться". Чаще всего "мелькающих" рано или поздно пристраивают в конторы.
    Ответ написан
    Комментировать
  • Что писать в резюме чтобы были шансы куда-то попасть без опыта?

    @FedorWK
    1) Нужно больше откликаться (еще больше)
    2) Проекты, которые есть - описать повкуснее. Добавить строчку опыта "частная практика", в которой проекты описать подробнее.
    3) Сесть за более сложный проект, довести хотябы до MVP, задеплоить, чтобы рекрутер смог сам "потыкаться". Как вариант - бот для Телеграма чтобы не писать фронтенд. Также описать в опыте работы.
    4) Участвовать в хайринг ивентах для джунов от конкретных компаний.

    Это все не гарантирует трудоустройство, но шансы должно повысить
    Ответ написан
    1 комментарий
  • Как сформировать и отправить Principal на React Js в Spring Boot приложение?

    @Akela_wolf
    Extreme Programmer
    React-приложение должно послать те данные, которые нужны спрингу, чтобы сконструировать Principal. Распространенный вариант - JWT-токен. Либо идентификатор сессии. Либо еще что-то, нужно смотреть конкретику как у вас сконфигурирован Spring Security в приложении.
    Ответ написан
    Комментировать
  • Как сделать так, что бы репозиторий был полностью независимым от внешней папки с Apache Tomcat?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Не делать такую зависимость. Обычно, пользователи приложений, предназначенных для разворачивания в web-контейнере, готовы к тому, что конфигурация сборщика будет только собирать артефакт, а деплоем они должны будут заниматься самостоятельно. Если стоит задача сделать софт, который будет запускаться сразу без деплоя, то можно использовать встроенный Tomcat или лучше даже Jetty.
    Ответ написан
  • Есть ли жизнь на Java (Бекенд) кроме Финтеха?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Востребован ли стек на новые проекты?

    Очень даже.

    И есть ли топовые (вплане зп) вакансии не в финтех?

    Есть и не мало. Финтеха просто больше.

    Причем везде идет Java 8, иногда Java 11 и комментарии ребят, что там работали - что какое-то копание в легаси без намека на светлое будущее.

    Там - это где? В РосСельхозБанке?
    Ответ написан
    Комментировать
  • Есть ли жизнь на Java (Бекенд) кроме Финтеха?

    @Akela_wolf
    Extreme Programmer
    Есть. Скажу лично про себя - работаю в сфере логистики, у нас в рантайме Java 11, а пишем мы на Kotlin. Стек вполне современный (некоторое количество легаси есть, но не слишком много).

    Еще точно знаю что СДЭК ищет Java-разработчиков, но больше про них ничего сказать не могу.
    Ответ написан
    Комментировать
  • Есть ли жизнь на Java (Бекенд) кроме Финтеха?

    Jacen11
    @Jacen11
    копание в легаси без намека на светлое будущее
    а вы значение слова легаси точно понимаете? не существует проектов без легаси в принципе

    Востребован ли стек на новые проекты?
    да

    И есть ли топовые (вплане зп) вакансии не в финтех?
    ну как бы да, но скорее нет. Изредка пара жирных вакансий на два десятка из финтеха

    Причем везде идет Java 8, иногда Java 11
    еще бывает java 4. Если вам не понятно почему нет 9, 10 версии и новее 11, то у меня большие вопросы к вашей компетенции

    когда же уже наконец то люди поймут, что в реальном мире ну не зависит ничего в компании от языка. В стартапах пишут прототипное говно (с точки зрения кода) на простых языках вроде питона. Потом если проект выстрелил пишут на нормальном языке вроде джавы, но старая то часть уже есть. Практически только банки и могут себе позволить сразу хреначить на джаве без проверки гипотезы. Ну не может новая компания без сложившегося проекта платить миллионы просто так, а уже устоявшаяся компания с хорошим доходом, которая может, благодаря своему проекту, очевидно будет для вас "легаси"
    Ответ написан
    3 комментария
  • Правильно ли я понял принцип инверсии зависимостей?

    @Akela_wolf
    Extreme Programmer
    Главная идея принципа инверсии зависимостей "детали зависят от абстракций, но не абстракции от деталей".
    В приведенном вами примере класс Main зависит от всего: от интерфейса INumberOperation и от обоих классов NumberOperation1, NumberOperation2. То есть тут принцип инверсии зависимостей вообще не работает. Никак.

    Проявляется же он в следующем примере. Пусть у меня есть некая абстрактная логика "прочитай число, выполни над ним операцию, запиши результат". Эта абстрактная логика (потому она и абстрактная) ничего не должна знать ни откуда она читает число, ни какую операцию над ним выполняет, ни куда и как записывает результат. Таким образом, у нас есть модуль, состоящий из
    interface NumberInput {
      int read();
    }
    interface NumberProcessor {
      int process(int a);
    }
    interface NumberOutput {
      void write(int a);
    }
    class Processor {
      private final NumberInput input;  
      private final NumberProcessor processor;
      private final NumberOutput output;
    
      public Processor(NumberInput input, NumberProcessor processor, NumberOutput output) {
        this.input = input;
        this.processor = processor;
        this.output = output;
      }
    
      void process() {
        output.write(processor.process(input.read()));
      }
    }

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

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

    Этот принцип очень хорошо объяснен в книге Р.Мартина "Чистая архитектура", по крайней мере у меня все встало на свои места именно после прочтения этой книги.
    Ответ написан
    1 комментарий