Обновить
128K+

Java *

Объектно-ориентированный язык программирования

164,76
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Учебник Thymeleaf: Глава 1. Знакомство

Время на прочтение4 мин
Охват и читатели110K
Оглавление

1 Знакомство с Thymeleaf


1.1 Что такое Thymeleaf?


Thymeleaf — современный серверный механизм Java-шаблонов для веб- и автономных сред, способный обрабатывать HTML, XML, JavaScript, CSS и даже простой текст.

Основной целью Thymeleaf является создание элегантного и удобного способа шаблонизации. Чтобы достичь этого, Thymeleaf основывается на концепции Natural Templates, чтобы внедрить свою логику в файлы шаблонов таким образом, чтобы этот шаблон не влиял на отображение прототипа дизайна. Это улучшает коммуникацию в команде и уменьшает разрыв между дизайнерско-программистскими группами.
Читать дальше →

Двоично-троичная битовая магия

Время на прочтение5 мин
Охват и читатели14K

Существует классическая задача для собеседований, часто формулируемая следующим образом:


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

Полагаю, никто не обидится, если я тут же приведу и решение задачи: уникальный элемент будет совпадать с $xor$-суммой всех элементов массива, вычисляемой за линейное время.


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

Читать дальше →

(Не)оригинальное поздравление на 8 марта

Время на прочтение7 мин
Охват и читатели9.5K

Я думаю, многие в детстве рисовали самодельные открытки для мам, сестер, бабушек. В школе так уж точно. Однако, после определенного возраста увлечение подобными вещами остается уделом очень маленького числа людей. Вряд ли вы хоть раз дарили что-то подобное своей девушке/жене. А ведь им наверняка понравится, психология и всё такое.


Фрейд был бы доволен
Читать дальше →

Задача про forEach(ps::println) от СКБ Контур

Время на прочтение9 мин
Охват и читатели16K

На конференции JBreak я не читал задачки спонсоров специально. Ну, конечно, кроме ада от Excelsior: уж эти ребята всем задали жару. А тут принесли мне листок от СКБ Контур, смотри, мол, посмейся. Я посмеялся: первая задача действительно выглядела настолько наивно сформированной и недоопределённой, что даже не хотелось идти к стенду и убеждать в этом сотрудников компании. Я про это почти забыл, однако тут на Хабре появился авторский разбор этой задачи, не лишённый некоторой глубины. Даже про modCount написали. Выходит, зря я смеялся?

Читать дальше →

Разбор перформансных задач с JBreak (часть 1)

Время на прочтение35 мин
Охват и читатели12K
Первая часть — разбор самой холиварной задачи из четырёх:

    void forEach(List<Integer> values, PrintStream ps) {
        values.forEach(ps::println);
    }

    void forEach(List<Integer> values, PrintStream ps) {
        values.stream().forEach(ps::println);
    }

    void forEach(List<Integer> values, PrintStream ps) {
        values.parallelStream().forEach(ps::println);
    }

Под катом условие задач, история их появления, а также разбор первой задачи и статистика её правильных решений среди участников конференции.

Другие публикации серии: Часть 2, Часть 3, Часть 4.
Читать дальше →

Java 9 — Вы уже перешли? Нет? И не надо ...!?

Время на прочтение2 мин
Охват и читатели43K

Недели две назад InfoQ напомнил, что официальная поддержка Java 9 заканчивается… в Марте 2018г. (т.е. через 20 дней :)


Вот cсылка на официальный EOL от Oracle, в которой в разделе "Java SE Public Updates" черным по английскому говорится, что Java 9 будет поддерживаться до Марта 2018, а Java 8до Января 2019 (или позже) и Декабря 2020 (или позже).

Читать дальше →

Контейнеры внедрения зависимостей и выгоды от их использования

Время на прочтение7 мин
Охват и читатели91K

От переводчика


Всем привет! Я продолжаю серию переводов, в которой мы по косточкам разбираем, что такое Dependency Injection.

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

В сегодняшнем переводе речь пойдет о том, что собой представляет DI-контейнер, его функциях, преимуществах использования и отличии от фабрик.

Читать дальше →

Spring: вопросы к собеседованию

Время на прочтение7 мин
Охват и читатели357K

image
Этот небольшой список вопросов даст вам понимание самых важных концепций Spring, а так же поможет подготовится к собеседованию

Читать дальше →

Платформа CUBA в 2017: новые фичи, новые услуги, новые планы

Время на прочтение5 мин
Охват и читатели4.1K

На заре 2018 хочется подвести итоги, и рассказать об изменениях в платформе CUBA за прошлый год. Если 2016 стал для нас революционным благодаря переходу в опенсорс, то 2017 стал годом планомерного развития: мы сфокусировались на предложении новых фич и услуг нашему сообществу.



Читать дальше →

Анонс встреч Apache Ignite в Москве и Санкт-Петербурге в марте

Время на прочтение2 мин
Охват и читатели1.6K

Москва, 20 марта


Видеозаписи выступлений на “Moscow Apache Ignite #1”

Внимание! Дата перенесена с 13 марта на 20 марта, время, место и программа без изменений

При организации второго митапа мы учли ваши пожелания: места будет БОЛЬШЕ, и Алексей Гончарук выступит с докладом для архитекторов.

Программа:
19:00 — 19:30 — приветственный кофе, сбор гостей

1. «Что нового в Apache Ignite 2.4» — Артем Шитов, инженер GridGain.
2. «Масштабирование Apache Ignite кластера для архитекторов» — Алексей Гончарук, главный архитектор GridGain.
3. «Операционный кэш данных на базе Apache Ignite. Практика построения и использования решения для страховой компании» — Дмитрий Косицын, технический директор Unitarius.

Читать дальше →

Удивительно простой обмен сообщениями с Spring Cloud Stream

Время на прочтение7 мин
Охват и читатели31K
Привет, Хабр! Представляю вашему вниманию перевод статьи "Surprisingly simple messaging with Spring Cloud Stream" автора Richard Seroter.

Существует множество вариантов взаимодействия микросервисов. Вы можете использовать обнаружение сервисов (Service Discovery, например, Spring Cloud Discovery Server/Client в реализации Netflix Eureka) и совершать прямые вызовы. Или можете использовать общую базу данных для обмена результами работы. Но брокеры сообщений продолжают оставаться популярным выбором.

Они варьируются от простых движков вроде Amazon SQS или RabbitMQ до событийных потоковых процессоров вроде Azure Event Hubs или Apache Kafka и вплоть до служебных шин вроде Microsoft BizTalk Server. Когда разработчики выбирают один из движков, они критически нуждаются в знаниях об их эффективности. Как вы можете повысить производительность разработчиков? Для Java разработчиков Spring Cloud Stream предлагает ценную абстракцию.

Spring Cloud Stream предлагает интерфейс для разработчиков, которым не требуются нюансы базового брокера. Этот брокер, Apache Kafka или RabbitMQ, настраивается самим Spring Cloud Stream. Связь с брокером и обратно от брокера осуществляется также через библиотеку Stream.

Что меня волнует, так это то, что все брокеры обрабатываются одинаково. Spring Cloud Stream нормализует поведение, даже если оно не является родным для брокера. Например, хотите создать конкурирующую модель консюмера для своих клиентов или секционировать обработку? Эти концепции ведут себя по-разному в RabbitMQ и Kafka. Нет проблем. Spring Cloud Stream делает работу одинаково прозрачной. Давайте фактически попробуем оба этих сценария.
Читать дальше →

Реализуем промисы на Java

Время на прочтение13 мин
Охват и читатели15K
Всем доброго времени суток. Сегодня я хочу рассказать о том, как писал реализацию механизма промисов для своего JS движка. Как известно, не так давно вышел новый стандарт ECMA Script 6, и концепция промисов выглядит довольно интересно, а также уже очень много где применяется веб-разработчиками. Поэтому для любого современного JS движка это, безусловно, must-have вещь.
Внимание: в статье довольно много кода. Код не претендует на красоту и высокое качество, поскольку весь проект писался одним человеком и всё ещё находится в бете. Цель данного повествования — показать, как же всё работает под капотом. Кроме того, после небольшой адаптации данный код можно использовать для создания проектов чисто на Java, без оглядки на JavaScript.

Первое, с чего стоило начать написание кода — это с изучения того, как всё должно работать в итоге. Архитектура получившегося модуля во многом определялась по ходу процесса.
Читать дальше →

Ближайшие события

Java 8 и паттерн Стратегия

Время на прочтение9 мин
Охват и читатели36K
Потенциально возможное продолжение книги Паттерны проектирования (Элизабет Фримен и другие).

На дворе 2017 год. В компанию, где работает старший разработчик Джо, пришел на стажировку молодой студент Мартин. Он целый год скрупулезно изучал Java по современному учебнику с акцентом на функциональные интерфейсы, лямбда-выражения и прочие новшества.
Читать дальше →

Три способа обновить запрос в Jira из ScriptRunner, используя Jira Java API

Время на прочтение13 мин
Охват и читатели13K
В этой статье будут рассмотрены три способа обновления запроса в Jira, используя Jira Java API.
Я буду использовать следующие методы Jira Java API:

  • Issue.setCustomFieldValue(CustomField customField, Object value)
  • CustomField.updateValue(FieldLayoutItem fieldLayoutItem, Issue issue, ModifiedValue modifiedValue, IssueChangeHolder issueChangeHolder)
  • IssueService.update(ApplicationUser user, IssueService.UpdateValidationResult updateValidationResult)

Будут приведены примеры скриптов для обновления всех типов кастомных полей, доступных в Jira из «коробки», с таблицей, в которой указаны отличия работы рассматриваемых методов друг от друга.

Читать дальше →

Eclipse Scala IDE — от мертвого осла уши…

Время на прочтение3 мин
Охват и читатели16K
Scala — это изумительный язык программирования, которым я наслаждался года 4 назад. Я, наверное, был его фанатом: покупал книги и курсы на Coursera, использовал в pet- и продуктивных проектах et cetera, et cetera, et cetera.

Scala открыл для меня увлекательный мир функционального программирования, вернул во времена студенчества со «сферическими задачами в вакууме» от Martin'a Odersky…

Но вот он уже года два как Scala для меня мертва. Виной этому…
Читать дальше →

Если у вас нет собаки…

Время на прочтение7 мин
Охват и читатели25K
Если вашему бизнесу необходим BDD с живой документацией на русском, нет выделенной позиции тестировщика, либо уровень его знаний недостаточен для самостоятельной автоматизации и важно обеспечение единого стека технологий между scrum-командами, то вам безусловно необходимо хотя бы раз подключить нашу библиотеку Akita и проверить ее в действии.
Перед тем как пуститься в рассказы о том, что такое библиотека Akita, хотелось бы рассказать как мы дошли до мысли о ее реализации, какие проблемы хотели решить и что в итоге у нас получилось.
Читать дальше →

Основы криптографии. Часть 0

Время на прочтение4 мин
Охват и читатели31K
Целью данного цикла статей я хотел бы поставить создание простейшего криптозащищенного мессенджера с упором исключительно на криптографию, исключая из рассмотрения технические тонкости непосредственно коммуникаций, сетевых протоколов, графики и всего остального.

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

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

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

  • Сейф можно вскрыть болгаркой или иным силовым методом
  • Производитель сейфов может оставить обходную лазейку и получить доступ к содержимому

Читать дальше →

Как киту съесть Java-приложение и не подавиться

Время на прочтение8 мин
Охват и читатели67K
Здравствуйте, уважаемые хабравчане! Сегодня я хотел бы рассказать о том, как «скормить» Java-приложение докеру, как при этом лучше действовать, а чего делать не стоит. Я занимаюсь разработкой на Java более 10 лет, и последние года три провёл в самом тесном общении с Docker, так что у меня сложилось определённое представление о том, что он может и чего не может. Но ведь гипотезы надо проверять на практике, не так ли?

Я представил весь процесс как старую добрую компьютерную игру с тёплым ламповым пиксель-артом.

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

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

Сейчас мы попробуем доказать/опровергнуть эти утверждения.
Читать дальше →

СМЭВ 3. Электронная подпись сообщений на Java и КриптоПро

Время на прочтение16 мин
Охват и читатели54K


Система межведомственного электронного взаимодействия (СМЭВ) задумывалась как цифровая среда предоставления услуг и исполнения государственных и муниципальных функций в электронной форме.

В настоящее время СМЭВ продолжает расширять свои возможности и вовлекать все большее количество участников взаимодействия.

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

В этой статье мы поговорим о том, как своими силами подписать запросы и проверить электронные подписи ответов СМЭВ версии 3.0, и о паре интересных нюансов, с которыми пришлось при этом столкнуться.
Читать дальше →