Тэги: Java, Collections, файлы, руководство, Stream API.
В предыдущей статье Как сохранить текстовый файл на Java мы научились записывать текстовый файл больших размеров. А в этот раз давайте научимся его читать построчно и каждую строку как-то обрабатывать. Например, будем искать наибольшую длину строки. Поскольку размер файла больше 100 МБ, его чтение происходит с небольшой задержкой.
Как обычно, рассмотрим несколько вариантов решения этой задачи, постепенно улучшая производительность.
Давайте сгенерируем строку из случайных символов на Java и затем сохраним её в текстовый файл. На этом примере рассмотрим несколько вариантов сохранения. Строка должна быть очень большой (более 100 миллионов символов), чтобы мы могли легко заметить разницу во времени, которое требуется на сохранение файла.
Тэги: алгоритмы, Java, головоломки, Kotlin.
На собеседованиях по алгоритмам любят давать такую задачку, как нахождение чисел из последовательности Фибоначчи. Эта числовая последовательность названа в честь Леонардо Пизанского - известного математика Средневековья.
Сама последовательность довольно проста. Она состоит из целых положительных чисел, где каждый следующий элемент равен сумме двух предыдущих. Например, 2 = 1 + 1, 3 = 2 + 1, 5 = 3 + 2.
Последовательность начинается с 0 и 1:
Иногда в этой последовательности принято пропускать 0 и начинать её с двух единиц, однако официально она начинается именно с 0.
Тэги: файлы, руководство, Linux.
Git - это распределённая система контроля версий, которую создал Линус Торвальдс в процессе разработки ядра Linux.
Ключевой особенностью системы является её децентрализованность. Благодаря git вы можете вносить изменения в ветку (branch), которая хранится в репозитории (хранилище) на удалённом сервере и видна другим разработчикам. С другой стороны, вы можете создать свою локальную ветку, которая будет видна только на вашей рабочей станции. Однако в любой момент вы можете сделать её общедоступной, разместив в репозитории на удалённом сервере. А можете произвести слияние (merge) вашей локальной ветки с репозиторием так, что на сервере она будет выглядеть частью «ствола» дерева изменений.
В настоящий момент git как система контроля версий является стандартом среди разработчиков, поэтому давайте рассмотрим эту систему более подробно. Начнём с установки и настройки.
В задачах на применение классических алгоритмов часто используют бинарный (двоичный) поиск. Его можно применять только на предварительно отсортированном массиве. Самый простой алгоритм сортировки см. в статье Пузырьковая сортировка.
Суть бинарного поиска можно описать как «разделяй и властвуй». Исходный отсортированный по порядку массив мы делим пополам и проверяем элемент посередине. Если он равен тому, который мы ищем, то возвращаем его индекс. Если не равен, то проверяем границы и выбираем ту половину, в которой искомый элемент может находиться и выполняем проверку снова. Так мы сужаем область поиска до тех пор, пока левая граница не станет равна правой. Если элемент не удалось найти, возвращаем -1.
Тэги: XML, maven, Java, Collections, руководство, Stream API.
Если вы пишете робота на Java для разбора контента с каких-либо сайтов (т.н. «краулер»), то вы можете встретиться с некоторыми сложностями. Язык HTML хоть и формализован, однако допускает ошибки в разметке без нарушения отображения, в отличие от более строгого XML. Самой частой ошибкой является незакрытый тэг.
Страница в браузере может выглядеть корректно, но при попытке разобрать вёрстку вы потерпите неудачу. Кроме html 5-ой версии, существует ещё несколько стандартов вёрстки.
Чтобы не изобретать велосипед, можно воспользоваться готовой библиотекой Jsoup, которая позволяет легко парсить исходный html и выбирать оттуда отдельные элементы в простом декларативном синтаксисе. Библиотека поддерживает выбор как в формате CSS (более привычный на frontend), так и в XPath.
Тэги: Spring, руководство, Java, gradle, maven, PostgreSQL, SQL, Nginx, Linux.
Если Вам интересно, как настроить сервер для хостинга JVM приложения, то предлагаю вашему вниманию следующую инструкцию. Предположим, вы только что получили доступ к чистому VPS серверу, на котором крутится Ubuntu и вы хотите на нём развернуть полноценное JVM приложение, основанное на Spring. Для полноты картины мы настроим также локальный postgres и доступ извне по http.
Прежде всего обновляем индекс менеджера пакетов apt. У вас должно быть достаточно прав для выполнения sudo, а также ваш сервер должен иметь доступ в Интернет.
Тэги: Spring, Spring Boot, Kotlin, gradle, YouTube.
Рассмотрим как отправлять email в Spring Boot. Вы также можете посмотреть исходники этого примера на github. Данный материал также доступен в формате видео на YouTube.
Для начала создадим новый gradle-проект (проще всего это сделать с помощью Spring Initializr). В проекте должна быть такая зависимость (пример для gradle):
Стартер spring-boot-starter-mail добавляет саму функциональность работы с email, причём можно использовать обёртку над стандартным классом Java.
Создадим новый сервис EmailService и внедрим в него JavaMailSender, а также пару свойств из конфига.
Тэги: руководство, Linux, файлы.
Если вы только начинаете работать в unix-подобной системе, такой как Linux или MacOS, то для вас будет полезна следующая таблица, в которой я постарался собрать часто используемые консольные команды.
Сразу добавляйте эту страницу в «Избранное»! Если у вас есть идеи, как расширить этот список - пишите в комментах.
Команда | Описание |
pwd | вывести полный путь до текущей директории |
ls | список файлов в текущей директории |
ls -la | список файлов в текущей директории, в том числе скрытых |
cd или cd ~ | перейти в домашний каталог |
cd путь | перейти в указанный каталог |
history | история выполненных ранее команд с порядковыми номерами |
!номер_команды | повторить команду с указанным номером |
clear | очистить консоль |
exit | закрыть консоль (при работе в оконном режиме) или разлогиниться (если вы заходили под другим пользователем) |
Тэги: json, yaml, Spring, файлы, Spring Boot, rest, Kotlin, YouTube.
Предположим, перед нами стоит задача сделать в restful-сервисе, написанном на Kotlin и Spring Boot, эндпоинт для загрузки файлов с фронтэнда. Для пользователя такая загрузка выглядит как кнопка выбора файла с надписью «Обзор». Далее выбранный файл отправляется на бэк как поток бинарных данных. Этот поток имеет тип данных multipart/form-data.
Данный материал также доступен в формате видео на YouTube.
Для реализации эндпоинта в минимальном варианте в нашем проекте должна быть всего одна зависимость spring-boot-starter-web. Заготовку проекта на Kotlin можно сгенерить с помощью Spring Initializr.
Сам контроллер будет выглядеть примерно так:
Kotlin, Java, Java 16, Java 11, Java 10, Java 9, 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.