Ответы пользователя по тегу Java
  • Создание и правильный перенос Spring?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    1) Как вы знаете, можно проект запаковать в jar или war. Притом, если запаковать в jar, то в Spring есть встроенный Tomcat (внутри Spring Web), который позволяет быстро деплоить проект на сервере. Если собираете WAR, то исключите из проекта встроенный Tomcat. Соответственно, сам проект нужно будет запускать в уже установленном Tomcat на сервере. Можно пойти чуть дальше и создать образ для Docker, где прописать все необходимые для деплоя конфигурации (например, скачать Tomcat, Maven и т.д.). Все зависит от того, как именно вы хотите развернуть приложение. Конечно же наличие Maven || Gradle Wrapper Будет плюсом. Не забудьте также завести отдельные профили конфигураций (yml или properties) для режима разработки и продакшна.
    2) Принципиальная разница есть. Версии java 8, 11, 17 являются LTS.
    Я слышал, что в версиях Java выше 11 иногда могут быть проблемы со Spring, но сам лично не сталкивался. Обычно рекомендуют использовать java 8 & 11. Но конечно же в более новых версиях Spring тоже должен работать.
    https://www.infoq.com/news/2018/09/spring-51-java-11/
    3)
    Может вы что посоветуете, а то я только начинаю работать с JAVA.

    Сложно что-либо советовать не зная уровня ваших познаний в Java. Если вкратце, то у вас должны быть знания на уровне Java Junior, чтобы вы могли начать разработку на Spring. Укрепите знания в Java SE (jcf, jdbc) & EE (orm, hibernate, jpa, servlet, jsp, jstl). Изучите Spring Framework, а затем Spring Boot и т.д.
    Ответ на ваш вопрос на Хабре давался не один раз. Просто поищите и увидите, что необходимо изучить.
    Ответ написан
  • Автоматизация в webview?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Знаю что код написанный на этом языке можно выполнить в webview и что с помощью него автоматизируют действия

    Собственно говоря, вы сами и ответили на ваш вопрос. Да, при помощи JavaScript вы можете взаимодействовать со страницей.
    Если вкратце, то вам нужно дождаться полной загрузки страницы, затем кликнуть на кнопке открытия фильтра (найти эту кнопку по ее id или xpath), выбрать соответствующий фильтр и значение фильтра. Затем найти инпут, куда нужно ввести цену и добавить туда стоимость. Ну и потом найти кнопку поиска и нажать на нее.
    Для поиска элементов DOM вы можете использовать классы, идентификаторы и xpath. Вам необходимо изучить основы JS. Вот, например - https://www.w3schools.com/js/default.asp

    С другой стороны я бы рекомендовал поискать API того или иного сервиса (как например, booking.com hotelbeds.com и т.д.) или если проект поиска жилья является вашим проектом, то стоит задуматься о релизации REST. Так вы сможете без JS обращаться к другому приложению и получать необходимые для вас данные.
    Ответ написан
  • Как правильно сделать взаимодействия между модулями в Java Spring?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Предположу, что у вас все-таки реализован не микросервисный монолит, а монолитная архитектура. Вы лишь разделили монолитное приложение на модули и подключили их в gradle. С другой стороны - а нужен ли вам микросервисный монолит или микросервис вообще, если приложение довольно маленькое и им пользуются всего 40 человек.
    Если речь идет просто о взаимодействии модулей монолитного приложения, то в соответствующем gradle файле модуля подключаете нужный модуль и импортируете нужные сервисы, классы и т.д.
    Главное обратите внимание, чтобы не было циклической зависимости, которая у вас указана тут:
    Circular dependency between the following tasks:
    :amocrm:compileJava
    \--- :datadeal:compileJava
         \--- :amocrm:compileJava (*)

    Информация по теме -
    https://reflectoring.io/spring-boot-gradle-multi-m...
    https://spring.io/guides/gs/multi-module/
    Циклическая зависимость возникает, когда модуль А ссылается на модуль В, а модул В ссылается на модуль А. Ни gradle, ни maven не могут решить эту проблему, так как для сборки одного модуля нужен другой модуль, а для другого первый. Также это говорит о том, что возможно проект был несовсем корректно разделен на модули. Можно попробовать создать модуль C, и вынести общие для модулей A & B классы в него. А затем добавить зависимость модуля A от C, а модуля B тоже от C. Таким образом циклической зависимости не будет. Также обратите внимание на рекомендации по организации структуры Spring приложения, которая указана в оф. документации на их сайте.

    Если речь идет о взаимодействии модулей микросервисного монолита, как его выделяют в некоторых источниках, то модули должны сообщаться через различные асинхронные и синхронные интеграции.

    Если уж вам понадобилось делить проект на микросервисы, то как по мне лучше реализовать полноценную микросервисную архитектуру через API Gateway. Соответственно, связать модули через REST. Тут уже понадобится Spring Cloud API Gateway, Spring Cloud Netflix Eureka Client & Server и т.д.

    Возможно, что есть подводные камни, о которых я не знаю. Надеюсь, что коллеги поопытнее более подробно ответят на данный вопрос.
    А так вот, небольшая статья по данной тематике: https://habr.com/ru/post/496934/
    Вдруг, вам будет интересно - небольшой вводный курс по Spring Cloud, Eureka, Zulu и т.д. - https://www.udemy.com/course/spring-boot-microserv...
    Ответ написан
    1 комментарий
  • Persistable или AbstractPersistable?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Interface Persistable<ID>
    Persistable - это интерфейс.

    Class AbstractPersistable<PK extends Serializable>
    AbstractPersistable - это абстрактный класс, который имплементирует интерфейс Persistable. В силу того, что это класс, то методы equals() & hashcode() уже реализованы в нем.

    По поводу того, что нужно использовать, вот, выдержка из документации Spring:

    AbstractPersistable is a one-stop shop for very basic use cases. The only thing it actually does is setting up default id generation. If you want to customize that, there's nothing you gain from extending the class. So we generally recommend to neither extend the class nor implement Persistable unless you really need to customize when Spring Data shall consider the entity new.


    https://docs.spring.io/spring-data/data-jpa/docs/c...
    https://docs.spring.io/spring-data/commons/docs/cu...
    Ответ написан
  • Какие технологии создания android приложений, нынче в моде?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Ну чтобы ответить на ваш вопрос более корректно, то нужно уточнить, что приложения могут быть нативными и ненативными. Нативные приложение пишутся на Kotlin или Java (IDE можно выбирать любую, будь то Android Studio или Intellij IDEA и т.д.). Нативные приложения в отличие от иных могут использовать все возможности Anroid API, в то время, как ненативные в принципе ограничены. С другой стороны, разработка ненативных приложений относительно дешевле, нежели нативных. + можно обеспечить кроссплатформенность (Android, iOS) на том же React Native.

    Жив ли еще andr.studio+java(или лучше kotlin), что лучше если сравнивать с xamarin, react native итд.

    Да, java & kotlin живы и здоровы) К вопросу о том, что лучше тут каждый выбирает под свою задачу. Хочется дешевле и быстрее и в принципе не сильно требовательные приложения, то React Native. Хочется нативные приложения, то Kotlin | Java.

    Слыхал что ща для разработки под мобилу, популярен шарп+юнити, правда ли?

    Нет, но на C# тоже можно написать приложение используя Xamarin.

    В общем решил влиться в эту область, какие технологии мне рекомендуете изучать(порог вхождения, востр.на рынке)?

    Ну если хотите пойти именно в мобильную разработку, то изучите Kotlin. + знание Java рекомендуется.
    Как по мне, изучать React Native только для моб. разработки не имеет смысла. Имхо, если выбирать реакт, то надо пойти во фронт-энд и как дополнение изучить react native.

    В планах разрабатывать простые приложения вроде - аппов для тренировки(100отж итд), какие-то новостные ленты, читалки эпуб, пдф итд итп

    Перечисленные вами приложения не столь требовательные и могут быть разработаны на чем угодно.
    Можно и на flutter писать. Вроде бы на Dart пишут.

    Мне кажется, что java / kotlin проще, чем js для новичка и соответственно, лучше начать с них...
    Ответ написан
    3 комментария
  • Как исправить ошибку при запуске mindustry?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Для ответа на ваш вопрос недостаточно информации.
    Вот, некоторые мысли:
    java.net.ConnectException: В соединении отказано (Connection refused)

    Допустим, что порт, по которому происходит соединение закрыт и соответственно, нужно его открыть.
    Вот, как открыть нужный порт на линукс - https://www.journaldev.com/34113/opening-a-port-on...
    Также обратите внимание, что на устройстве может быть установлен iptables и соответственно, нужно прописывать правила для доступа к порту.
    google
    Ответ написан
    Комментировать
  • Как выбрать option из выпадаюшего меню?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Вот, например, id элемента
    select2-postform-expiration-result-cqx3-10M
    Тут cqx3 изменяется динамически.
    Вот, гляньте, как можно выбрать элемент, который динамически изменяется - https://sqa.stackexchange.com/questions/18342/how-...
    Обратите внимание на contains() или starts-with()

    Вот, тут полезная информация по выбору элементов из select
    https://www.guru99.com/select-option-dropdown-sele...
    Ответ написан
    2 комментария
  • Программа для расчета ингредиентов. Какие можно использовать ресурсы для изучения предметной области?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    В принципе, вы уже сами ответили на ваш вопрос. Используйте javafx, sqlite и любую либу для работы с pdf (например, iText - ссылка)
    Ну можете например, для удобства подключить ORM для работы с БД. Например, ormlite
    Для красоты интерфейса можете использовать JFoenix
    Ответ написан
    1 комментарий
  • Как сделать, чтобы при вводе в консоли слова "Мужчина" выполнялся код именно в этом if?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Приветствую!
    Вот, простой пример:
    public class Main {
    	
    	public static void main(String ... args) {
    		Scanner scanner = new Scanner(System.in);
    		System.out.println("Введите ваш пол:");
    		String gender = sc.nextLine();
    		if(gender.equals("Мужчина")) {
    			double d = (x - y) * z;
    			System.out.println("Вес=" + d);
    		}
    	}
    
    }
    Ответ написан
  • Ошибка java в Android приложении?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    OutOfMemoryError: Failed to allocate a 83886328 byte allocation with 25165824 free bytes and 46MB until OOM, target footprint 245232608, growth limit 268435456

    Не хватает памяти. Запускаете ли вы приложение на эмуляторе? Возможно, что нужно больше памяти для запуска приложения. Ну и глянуть на то, что именно расходует память устройства
    Ответ написан
    2 комментария
  • Как получать и отправлять сообщение?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Во-первых, код лучше обрамлять тегом code, а не скидывать в виде скрина.
    admins не выполняется, так как эта ветка не выполняется, а вместо нее выполняется default.
    Посмотрите, что приходит в message.getText()
    Обратите внимание, что у вас в первой ветке /start, а во второй admins (без слеша). Может быть вы вводите admins со слешем из-за чего нет совпадения?
    Ответ написан
    3 комментария
  • Что такое код общего назначения и код специального назначения?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    foonfyrick,
    таймкод 8:51
    https://www.youtube.com/watch?v=SZLdme0zvV4

    я понял.
    Начнем с того, что в видео затрагиваются аспекты Clean Code. Можете прочитать книгу Роберта Мартина - Clean Code или например, пройти небольшой курс по рефакторингу - https://refactoring.guru/refactoring/course
    Что касается вашего вопроса, то тут речь идет во-первых, о SOLID принципах.
    S - single responsibility principle (принцип единственной ответственности). Т.е. один класс должен иметь одно назначение. Например, создание класса Сотрудник, который и готовит еду и подает и моет посуду и т.д. не совсем корректно. Но можно создать класс Сотрудник и расширить его такими классами, как Повар, Официант и Уборщик, каждый из которых будет готовить, подавать еду и мыть посуду соответственно.
    Также сказанное им в видео можно соотнести к ISP (interface segregation principle). Принцип разделения интерфейсов. Например, предположим, что у вас есть интерфейс МФУ, в котором имеются методы print(), scan() и fax(). Если у вас есть класс для МФУ, который имплементирует этот интерфейс, то все ок, так как в этом устройстве есть все функции. Другое дело, что если некий класс Принтер имплементирует интерфейс МФУ, но при этом он может реализовать метод print(), получается что 2 остальных метода он не может реализовать, но должен. Соответственно, принцип ISP рекомендует разделить общий интерфейс на несколько частей.
    Также например, pojo класс не должен являться также "утильным" классом или сервисным классом.
    Ответ написан
    Комментировать
  • Как решить ошибку при mvn compile?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Во-первых, если вы уж решили собирать проект на сервере, то можно вместо maven использовать maven wrapper. А еще лучше запускать приложение в контейнере docker.

    теперь проект собирается, запускается, но работает некорректно. Человек посылает сообщение боту, в консоли видно что бот обращается к бд, но сообщений никаких не отсылает

    Можно попробовать проект подебажить. Для этого запустите jar при помощи mvnDebug, а затем средствами IDE подключитесь к серверу и добавив точки остановки, продебажьте проект.
    Ответ написан
    1 комментарий
  • Как в Java правильно сравнить строку полученную из БД с другой строкой?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Строки в Java сравниваются через equals(). Другое дело, что при сравнении возвращается false.
    Исключите следующие моменты:
    - запись в БД может быть в uppercase или lowercase или camelCase и т.д. Потому возвращается false
    - в исходной строке или в строке из БД могут содержатся кириллические символы
    - кодировка хранимой информации в БД отличается от utf8
    если не получится решить вопрос, то скиньте ссылку на гит
    Ответ написан
    Комментировать
  • Как и за какой период стать Junior Java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    При упорном труде можно за 1 год изучить основы java. С другой стороны, все индивидуально. Можно и за 5 лет ничему не научиться. Все зависит от вас.

    Обучаюсь кстати в JavaRush

    Знаю нескольких разработчиков, которые пошли на курсы, так как знаний полученных на JavaRush не хватило вовсе.

    К вопросу о том, что нужно изучить по Java, тут зависит от направления, которое вас интересует. Т.е. enterprise или android разработка.

    Базовая программа применимая и к enterprise и к android:
    - java core (JCF, Mutlithreading, Stream API, reflection, annotation, jdbc)
    - структуры данных и алгоритмы, паттерны проектирования
    - Build tools: Maven, Gradle
    - VCS - git
    - основы TCP / IP
    - основы OOP, SQL (ACID, уровни изоляции)

    Для enterprise:
    - java enterprise (jsp, jstl, servlet), tomcat, jetty
    - Spring Framework (Spring MVC, Spring Data, Thymeleaf, Spring Boot, Spring Security) основы REST
    - Hibernate (ORM), HQL
    - aws / heroku
    - возможно разные CICD (circleci, travis)
    - jira, confluence, trello

    Для android:
    - kotlin
    - Android API
    - ORM фреймворки (ormlite, room и возможно другие)
    - Firebase

    Вот, отсюда можете глянуть на программу занятий по Java Core - https://www.dist.it-academy.by/course/java-develop...
    А отсюда взять программу Java Enterprise - https://www.dist.it-academy.by/course/java-develop...
    Ответ написан
    Комментировать
  • На java ничего не создают?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Скажу честно, сам довольно долго не хотел изучать Java, так как начитался всяких статей от разработчиков. Там было и про то, какая Java медленная, сложная и что вообще умирает или даже умерла. И знаете, когда вы только начинаете изучать тот или иной язык, то вы обычно, стараетесь прислушаться к мнению "экспертов" и сразу же отметаете тот или иной язык. Например, одним из "минусов" языка java было то, что на ней не пишут драйвера, не пишут серьезные игры, не пишут операционные системы и десктопный софт. Но с таким же успехом можно это соотнести и к JS. На нем тоже не пишут OS или драйвера. Хоть десктопный софт пишут на JS (ElectronJS), но назвать его серьезным довольно сложно.

    Соответственно, выбирайте не язык, а направление (backend, frontend, mobile, desktop, gamedev). А затем согласно выбранному направлению выберите наиболее подходящий для этого язык.
    Java - enterprise, web, mobile (android)
    JS, PHP - web, erp, mobile (react native),
    Python - data science, machine learning, erp, web
    C# - enterprise, web, gamedev
    C++ / C - gamedev, desktop, drivers

    Понятное дело, что если потребуется написать игру на Java, то для нее есть огромное количество движков и библиотек (libgdx, jmonkey), но лучше конечно же это сделать на C# (Unity) или C++ (Unreal Engine).
    Если интересует android разработка, то лучше начать изучать Java / Kotlin (лучше Kotlin). Если хотите быстро штамповать сайты, то PHP, Python и т.д.

    Java стабильный язык, фреймворки на нем появляется не так часто, как это происходит на JS..
    Также я рекомендовал бы вам попробовать разные сферы разработки, чтобы разобраться в том, куда лежит душа. Я попробовал и фронт-энд и бэкенд и мобайл и т.д. И остановился на бэкенд. Возможно, что вам понравится automation QA или еще что-нибудь. В общем, можете смело начинать изучение любого языка (Java, JS, Python) и развивайтесь дальше

    К тому же, знание одного языка недостаточно на мой взгляд. Писать бэкенд не зная как функционирует фронт или наоборот сложно, но можно. А значит, вам нужно изучить языки и для фронта и бэка для лучшего понимания.
    Ответ написан
    Комментировать
  • Насколько важно знать алгоритмов в яп Java и какие алгоритмы нужны?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Рекомендую прочитать книгу Роберт Лафоре - Структуры данных и алгоритмы Java.
    К вопросу о том, сколько алгоритмов нужно знать скажу, что достаточно знать базовые алгоритмы и пожалуй, владеть английским, чтобы при необходимости уметь разобраться в нужном.
    Базовые:
    - линейный поиск
    - двоичный поиск
    - пузырьковая сортировка
    - быстрая сортировка

    А так можно покопаться в других алгоритмах тоже (алгоритм Беллмана-Форда, алгоритм Дейкстры, алгоритм А*, кодирование Хаффмана, алгоритм ruin & recreate для решения VRP &TRP, ханойская башня и т.д.). Сам сейчас разбираюсь с некоторыми из них, так как приходится применять их в проекте.

    Кстати, есть простое приложение для андроид, которое описывает суть разных алгоритмов при помощи инфографики.
    https://play.google.com/store/apps/details?id=wiki...

    А вот, тут репозиторий с алгоритмами на Java
    https://github.com/TheAlgorithms/Java
    Ответ написан
    Комментировать
  • Проблема с кодировкой с postgresql в IDEA, как решить?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Проверьте кодировку используюмую в БД.
    Также попробуйте к урл для подключения к Бд добавить ?useUnicode=yes&characterEncoding=UTF-8
    Например,
    jdbc:postgresql://localhost:5432/example_db?useUnicode=yes&characterEncoding=UTF-8
    Ответ написан
  • Выбивает ошибку в классах Java, что изменить или почитать на будущее?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Прочитайте любую книгу по Java.
    Можете начать с Г. Шилдт - Руководство по Java для начинающих.
    А насчет ошибки:
    у вас в одном java файле (Main.java) содержится 2 public класса
    public class Main{} 
    public class BANKACCOUT{}

    Также обратите внимание на Java naming convention. Вместо названия класса BANKACCOUT должно быть BankAccount
    Ответ написан
    Комментировать
  • Какой курс java выбрать?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    It-Academy (https://www.it-academy.by/)
    2-3 месяца Java Fundamentals
    3-4 месяца Java Enterprise
    + помогают с трудоустройством.
    Но скажу заранее, знаний полученных на любых курсах недостаточно, чтобы стать крепким джуном. В любом случае вам нужно прочитать определенный минимум книг, иметь багаж теоретических знаний и притом не только Java, но и sql, xml, regex, json. Владеть английским (на уровне чтения тех. документации). Изучить алгоритмы и структуры данных и т.д.
    А вообще поищите аналогичные вопросы на этом сайте. Уже не первый раз всплывают подобные вопросы и было дано много развернутых ответов
    Ответ написан
    7 комментариев