Тэги: Java, Collections.
Под коллекциями в программировании подразумевают объекты, которые хранят внутри себя какой-либо набор значений и предоставляют набор методов для обращения к этим значениям. В Java можно выделить 3 наиболее часто используемых типа коллекций: списки (list), наборы (set) и словари (map). При объявлении коллекции типизируются каким-либо типом, т.е. одна коллекция хранит данные одного типа.
Списки в Java реализуют интерфейс List, который, в свою очередь, расширяет интерфейс Collection. Список позволяет хранить любые значения, в том числе повторяющиеся. Итерация (обход) списка происходит в порядке добавления элементов. Т.е. элемент, добавленный первым, при итерации также будет первым.
Две наиболее частые реализации интерфейса List – это ArrayList и LinkedList.
Тэги: Java.
Метод System.getProperties() возвращает список системных свойств (параметров окружения), доступных для данной виртуальной машины. Свойство представляет из себя пару «ключ-значение». Среди полученных свойств всегда можно обнаружить следующие:
Тэги: Spring Boot, maven, Spring, Java.
Часто в приложениях возникает необходимость выполнять некоторые действия по расписанию, а не по запросу извне. Первое, что приходит на ум – это планировщик cron. Но если вы пишете приложение, используя Spring Boot, то можете реализовать похожий функционал, добавив всего пару аннотаций.
В качестве примера давайте создадим простой maven-проект. Затем пропишем в pom-файле Spring Boot как родителя для данного проекта:
Также у вас должна быть секция build со стандартным содержимым:
Теперь добавим стандартный main-класс:
Понятие runnable jar или uber jar возникает тогда, когда вы задумываетесь о разворачивании вашего проекта на удалённом сервере. У вас должна быть уверенность в том, что в произвольном окружении, где окажется ваше приложение, в classpath будут все необходимые классы из используемых вами библиотек.
Конечно, никакой проблемы нет, если вы вообще не используете сторонние библиотеки. Но я уверен, что всё-таки используете, если только ваш проект не «Hello World».
Чтобы гарантировать наличие нужных версий всех библиотек, нам проще поставлять их вместе с нашим приложением. Для удобства развёртывания все библиотеки можно поместить в один jar-файл. Подробнее о том, что такое jar-архив и как его получить, мы рассматривали в статье Как скомпилировать исходники java вручную.
Рассмотрим конкретный пример. Пусть имеется приложение, которое использует класс StringUtils из популярного проекта Apache Commons Lang:
В pom-файле нашего maven-проекта должно быть прописано следующее:
Тэги: головоломки, Java, алгоритмы.
Если перед вами встанет задача обменять значения двух числовых переменных a и b между собой, скорее всего, вы сделаете это так:
То есть поменять значения одновременно нельзя, ибо одно из них затрётся. Чтобы этого не произошло, мы создаём новую буферную переменную, куда и помещаем на время одно из значений.
А что, если нам нужно обменять значения числовых переменных между собой, не создавая новых переменных?
В современной разработке многие рутинные процессы автоматизированы достаточно хорошо, поэтому вам не приходится каждый раз компилировать ваши исходники вручную. Я не сомневаюсь, что вы прекрасно знаете, как это делается. А для тех, кто забыл или решил освежить свои знания, рассмотрим небольшой пример.
Наш проект будет состоять всего из двух классов, причём один будет вызывать метод другого.
Класс Other, единственный метод которого выводит строку текста на экран:
Сохраним этот текст как есть в файл, имя которого обязательно должно совпадать с именем класса, т.е. Other.java.
Предположим, что у вас имеется метод, который вместо логов просто выводит какой-то текст через стандартный поток вывода:
И перед вами встаёт задача написать юнит-тест на то, что данный метод действительно выводит данную строку. Для тестирования будем использовать библиотеку JUnit.
Если бы он просто возвращал её как результат своей работы, мы бы проверяли его через Assert.equals(). Но если мы хотим тестировать вывод, то перед началом теста нам надо создать свой собственный поток, подсунуть его как стандартный вывод, выполнить необходимые проверки, а затем вернуть всё обратно.
В качестве реализации потока будем использовать ByteArrayOutputStream, поскольку его можно легко преобразовать в строку. Тестовый класс будет выглядеть так:
Тэги: Java, maven, Spring, ООП, Java 8, Stream API.
Рассмотрим базовые возможности dependency injection (внедрения зависимостей), которые открывает нам Spring.
Создадим обычный maven-проект, где в pom.xml добавим сам Spring (артефакт spring-context) и секцию build со стандартным плагином maven-compiler-plugin, в котором указываем версию java в source и target.
Теперь создадим главный класс TestApp, который будет точкой запуска приложения.
Рассмотрим случай, когда у вас есть некое число, количество цифр в котором заранее неизвестно и вам необходимо, чтобы число всегда составляло 5 знаков, то есть нужно добавить необходимое количество нулей слева. Есть целых два способа сделать это.
Если у вас небольшой проект и не хочется тянуть лишнюю зависимость, то используйте String.format():
В результате мы увидим строку «00042». К недостаткам данного способа можно отнести то, что нужно помнить правила форматирования в методе String.format().
Тэги: ООП, Java, головоломки.
Такой вопрос на знание Java часто любят задавать на собеседованиях. Предположим, у вас имеется интерфейс, его реализация и наследник этой реализации.
Kotlin, Java, Java 11, Java 8, Spring, Spring Boot, Spring Data, SQL, PostgreSQL, Oracle, Linux, Hibernate, Collections, Stream API, многопоточность, файлы, Nginx, Apache, maven, gradle, JUnit, YouTube, новости, руководство, ООП, алгоритмы, головоломки, rest, GraphQL, Excel, XML, json, yaml.