Обновить
128K+

Java *

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

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

Работа с java.time в Kotlin: любовь, боль, страдания

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

Микоропост о том, как можно себя обмануть при использовании фичи Котлин: возможность работы с операторами сравнения типа Comparable.

Кто юзает Котлин не могли не оценить перегрузку операторов (ну точнее как она сделана), правда я допустим жил в Java и без нее прекрасно, но да тут не об этой фичи языка, а об основанной на ней: Comparison Operations. Это когда можно применять знаки сравнения для классов, реализующих Comparable, что является сахаром, но очень приятным.

Читать далее

Почему Kotlin лучше Java?

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

Это ответ на переведенную публикацию «Почему Kotlin хуже, чем Java?». Поскольку исходная аргументация опирается всего на два примера, то не теряя времени пройдем по этим «недостаткам» Kotlin.

Читать далее

«Почему Kotlin хуже, чем Java?»

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

Такой провокационный вопрос задал реддитор nenemen в сабреддите Java:

«Я думаю о том, чтобы свой следующий проект сделать на Kotlin + Spring Boot, но мощь всенародной любви к Kotlin и одновременно ненависти к Java заставляют всё это походить на какой-то культ. Поэтому хотел бы услышать аргументы «против».

Мы в FunCorp в своё время сделали именно такой выбор в пользу Kotlin. И сегодня соотношение Java/Kotlin у нас составляет примерно 20 на 80, продолжая уменьшаться при каждом удобном случае. Поэтому ответы на этот вопрос меня заинтересовали, и я стал листать секцию комментариев. Там наткнулся на реплику реддитора rzwitserloot, которая мне показалась настолько взвешенной, многосторонней и рациональной, что я захотел поделиться ей с нашей командой, а заодно и читателями Хабра.

Далее перевод его аргументов.

Читать далее

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

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

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

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

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

Чтобы понять актуальность проблемы можно рассмотреть весьма условный пример – строительная генподрядная компания строит жилой дом. Для этого есть проектная документация, которая определяет, кроме всего прочего, и объем трудозатрат (одна из основных статей затрат в строительстве) по каждому этапу строительства и каждому виду работ. То есть чтобы построить дом за определенный срок и за определенные деньги нужно иметь инструменты для правильной организации труда, анализа и контроля, которые позволят отслеживать прогресс проекта, контролировать затраты человеко-часов на работы и сравнивать реально затраченные (и, как правило, оплачиваемые) человеко-часы с объемом выполненных работ. Если инструментов нет, то неэффективность организации работы приводит к низкой производительности труда, увеличению сроков строительства и, как следствие, росту стоимости. До поры до времени компании могут свою неэффективность закладывать в себестоимость работ (услуг), но этот процесс не вечен.

Читать далее

Как на самом деле работает auto-commit в Kafka и можем ли мы на него рассчитывать?

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

В этой статье я хочу чуть подробнее раскрыть как же устроен механизм auto-commit у слушателей в библиотеке kafka-clients.

Читать далее

9 лучших практик для обработки исключений в Java

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

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

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

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

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

Читать далее

Битва Java-разработчиков Tech Monsters Night от «М.Видео-Эльдорадо»

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


4 июня состоится Tech Monsters Night. Специалисты уровня middle&senior Java Script, Java 15, Reactive Java, Spring Framework 5, Spring Boot 2, Kafka других и фреймворков эта битва для вас!

5 часов эпичного файта: нетривиальные задачки от лидов «М.Видео-Эльдорадо» и скиловые противники. Сразу после боя — лидерборд, вы увидите рейтинг, ники победителей и призы.

Сравнение современных построителей образов контейнеров: Jib, Buildpacks и Docker

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

В этой статье будут рассмотрены и сравнены различные методы контейнеризации ваших Java-приложений. Эти инструменты позволят вам получить контейнерное приложение с минимальными настройками. Возможно, вам даже не потребуется устанавливать Docker или работать с Dockerfile. К концу этой статьи вы сможете решить, какой построитель образов контейнера является самым быстрым, потребляет наименьшее количество ресурсов, проще в настройке и лучше всего подходит для вашего сценария использования.

Читать далее

Алгоритм нахождения 1000 ферзей на шахматной доске

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

Недавно разбирался в старых своих наработках/скриптах и наткнулся на скрипт где решалась задача о ферзях. Собственно это послужило написанию статьи о том как проходили этапы написания его алгоритма. Возможно пригодится начинающим программистам для решения похожих задач (код в примерах написан на java).

Читать далее

Отправка электронных писем с помощью Spring

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

Отправка электронных писем — одна из базовых функций, которая может понадобиться в любом приложении. Из этой статьи вы узнаете, как отправлять электронные письма с помощью Spring. Для отправки электронных писем вам потребуются данные SMTP-сервера. В качестве примера вы можете использовать SMTP для Gmail (имейте в виду, что у Gmail есть определенные ограничения по отправке электронной почты). Интерфейс JavaMailSender в Spring Framework предлагает простую абстракцию для отправки электронной почты, а Spring Boot производит автоматическую настройку этого интерфейса и стартового модуля.

Читать далее

Производительность Android Runtime vs NDK

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

Разрабатывая игровой движок для Android, я был уверен, что нативный код C/C++ будет исполняться быстрее чем аналогичный код на Java. Это утверждение справедливо, но не для последних версий Android. Чтобы проверить почему так происходит, решил провести небольшое исследование.

Для теста использовался Android Studio 4.1.3 - для Java Android SDK (API 30), для C/C++ Android NDK (r21, компилятор CLang). Тест довольно тупой, который выполняет арифметические операции над массивом int в двух вложенных циклах. Ничего осмысленного и специфичного.

Читать далее

Apache Camel и Spring Boot

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

Apache Camel — это фреймворк для интеграции приложений и эффективного взаимодействия между различными системами, с чем приходится часто сталкиваться в любой корпоративной инфраструктуре. Apache Camel позволяет разработчику сосредоточиться на логике процессов, не переводя данные в канонический формат, так как Camel поддерживает более 80 API для реализации различных протоколов и типов данных. Таким образом, разработчику — то есть вам — достаточно просто знать, как Camel соединяет все вместе. В этой статье мы по шагам рассмотрим, как интегрировать Apache Camel и Spring Boot.

Но прежде чем обратиться к примеру со средой Spring Boot, разберемся с основными понятиями и терминами Camel.

Читать далее

Профилирование с точностью до ассемблерных инструкций

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

Работая над темой низкоуровневого профилирования, я обнаружил отсутствие подробного руководства по настройке окружения и сбору материала. Всё пришлось делать самому путём проб и ошибок. Итогом стала эта статья, в которой я по шагам описал профилирование кода, горячее место в котором не в силах обнаружить не только какой-нибудь VisualVM, но и титаны вроде async-profiler-а. В качестве примера использован код из ранее упоминавшейся статьи The volatile read surprise.

Читать далее

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

Keycloak интеграция со Spring Boot и Vue.js для самых маленьких

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

Вы больше не можете создать сервер авторизации с помощью @EnableAuthorizationServer, потому что Spring Security OAuth задеприкейтили, а проект Spring Authorization Server всё ещё экспериментальный? Выход есть! Напишем авторизацию своими руками... Что?.. Нет?.. Не хочется? И вообще получаются какие-то костыли и велосипеды? Ну ладно, тогда давайте возьмём уже что-то готовое. Например, Keycloak.

Читать далее

Как мы создали облачный сервис для управления и контроля за маршрутами обходов на предприятиях

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

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

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

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

Читать далее

Размышления о Java 8 и Java 11 в ожидании Java 17

Время на прочтение5 мин
Охват и читатели13K
Этот материал посвящён некоторым особенностям Java 8 и Java 11. Его можно рассматривать как отправную точку для подготовки к освоению очередного LTS-релиза платформы — Java 17.



В мире Java есть одна приятная особенность, которая связана с жизненным циклом версий платформы. А именно, новый релиз Java выходит каждые 6 месяцев, а каждые 3 года появляется новый LTS-релиз — версия с долгосрочной поддержкой. В настоящий момент LTS-версия платформы представлена Java 11. Поэтому многие компании переходят на неё. Это — заметное движение, так как среди его последствий можно отметить тот факт, что, с выходом в сентябре 2021 года Java 17, новые фреймворки не будут поддерживать Java 8, а в качестве минимальной версии платформы будут рассматривать Java 11.

Цель этой статьи заключается в том, чтобы рассмотреть некоторые общие базовые API Java 8 и Java 11.
Читать дальше →

Документируй это

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

Всем привет! В данной статье хотел бы рассмотреть инструменты документирования в принципиально разных подходах в разработке API, а именно для CodeFirst - инструменты Spring Rest Docs (а также его надстройки Spring Auto Rest Docs) и для ApiFirst - инструменты экосистемы Swagger(Open-Api).

Дисклеймер: В подробности холивара на тему что же лучше CodeFirst или ApiFirst я вдаваться не будут, всего лишь продемонстрирую возможную практику документации в обоих вариантах.

Итак, начнем

Диаграммы по управлению памятью в Java процессе

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

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

Читать далее

JAVA преступно недооценена

Время на прочтение5 мин
Охват и читатели17K
Точка зрения невежественного студента информатики

image


Вероятно, вы прочитали заголовок этого поста и подумали: «Что этот парень курит? Java повсюду!» Вы правы, Java по-прежнему доминирует в отрасли и c ее помощью запускаются одни из крупнейших в мире критически важных приложений. Но распространение Java — это не то, о чем я говорю, я говорю о шумихе вокруг нее. Я провожу много времени с неопытными программистами. А что любят делать неопытные программисты? Быть взволнованным и самоуверенным в отношении таких инструментов, как языки программирования. Ни один из студентов CS, с которыми я встречаюсь, не восхищается Java, и я думаю, что так не должно быть.

Молодые/наивные разработчики (включая меня) часто попадают в ловушку фетишизации новых языков и инструментов в ущерб производительности и здравомыслию. До работы в Halp (теперь принадлежащей $TEAM) у меня были почти романтические отношения с серверным TypeScript. Я думал, что экосистема node.js была самой крутой вещью: мне понравилась идея транспилированного кода, отладки в реальном времени, огромной библиотеки пакетов и даже странных и фрагментированных систем сборки. Когда я действительно использовал его в разработке и поговорил с более опытными инженерами, магия быстро исчезла.
Читать дальше →

Py4J – мост между Python и Java

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


Название Py4J можно встретить разве что в списке библиотек, используемых PySpark, но не стоит недооценивать данный инструмент, который обеспечивает совместную работу Python и Java. В этой статье будет кратко описана работа Py4J, рассмотрен пример использования и перечислены сильные и слабые стороны библиотеки. В конце будут описаны альтернативные способы связи Java и Python.
Читать дальше →