Как стать автором
Обновить
198.21

Java *

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

Сначала показывать
Порог рейтинга

Друзья! Вышел новый видос, своеобразная экранизация рубрики "сам себе экосистема", где я сам разрабатываю клиенты нужных мне приложений. Пожалуйста, оцените :)

Теги:
+7
Комментарии0

Приглашаем на бесплатный вебинар «Java Excellence: фундамент эффективного программирования».
На вебинаре поговорим, какие навыки необходимы, чтобы стать востребованным Java-разработчиком, и обсудим, как можно их получить благодаря программе «Java-разработчик. Уровень Специалист».

Дата: 16.05.2024
Время: 18:00-19:00 (МСК)

Регистрация по ссылке.

Теги:
+3
Комментарии0

Axiom JDK заявила о выпуске Axiom JDK Express. Axiom JDK Expres представляет собой российскую среду исполнения Java c улучшенной производительностью. В новой среде была оптимизирована платформа Java. Это позволило ускорить Java‑приложения до 15% без дополнительных затрат на оборудование. По словам разработчиков, благодаря полной совместимости со стандартом миграция на Axiom JDK Express с Java SE и сборок OpenJDK происходит бесшовно.

Результаты бенчмаркинга
Результаты бенчмаркинга

Новая среда улучшает работу LTS‑версий Java 8 и 11 с долгосрочной поддержкой, утверждают разработчики. Как они рассказали, почти половина всех Java‑приложений использует Java 8 и 11. При переходе этих приложений на Axiom JDK Express они получат значительный прирост скорости и экономию аппаратных средств без переписывания кода.

Axiom JDK Express объединяет виртуальную машину версии JVM 17 и среду исполнения JDK 8 или 11, повышая производительность систем до 15%. При этом не нужно менять версию фреймворка или код приложения. Достаточно изменить только один компонент вместо полноценной миграции на новый релиз JDK. Среда исполнения Axiom JDK Express ускоряет системы до уровня версии JDK 17 без изменений кода, включая сервер приложений Libercat.

Среди улучшений JDK 8:

  • обновление механизмов сборки мусора, включая поддержку суб‑миллисекундных пауз и терабайтной кучи во всех версиях;

  • запуск на 10% быстрее;

  • скорость сжатия на 85%;

  • скорость распаковки на 113%.

Также Axiom JDK рассказала, что её инженеры будут поддерживать JDK 8 до марта 2031 года,

Теги:
Всего голосов 6: ↑6 и ↓0+10
Комментарии0

🖥 Отличный учебник по Java

Здесь раскрыты самые основные темы + много примеров кода. 

Самое то, чтобы освежить какие-то моменты перед собеседованием. 

🟡Оглавление

 ├╼ Типы данных

 ├╼ Литералы

 ├╼ Переменные и константы

 ├╼ Операторы

 ├╼ Управляющие последовательности

 ├╼ Модификаторы

 ├╼ Ввод с клавиатуры

 ├╼ Особенности строк

 ├╼ Коллекции

 ├╼ Дата и время

 ├╼ Исключения

 ╰╼ Интерфейсы

 📚 Учебник


А здесь я собрал топ-10 репозиториев GitHub для изучения Java, для всех, кто любит этот замечательный язык.

Теги:
Всего голосов 3: ↑1 и ↓2-1
Комментарии0

Сегодня в 18:00 в рамках запуска новой программы «Java-разработчик. Уровень Специалист» пройдет онлайн-встреча с автором курса Судакевичем Игорем.

Обсудим:
какие навыки стоит освоить, чтобы стать востребованным Java-разработчиком;
как строится обучение на курсе «Java-разработчик. Уровень Специалист».

Дата: 22.04.2024
Время: 18:00-19:00 (МСК)

Спикер: Судакевич Игорь — преподаватель международного уровня, более 15 лет работает в IT. Уполномоченный инструктор корпорации Oracle. Магистр компьютерно-информационных технологий. Инструктор платформы Udemy.

Регистрация по ссылке.

Теги:
Всего голосов 2: ↑2 и ↓0+3
Комментарии0

Первый предварительный релиз порта Foreign Function & Memory API для Android.

С выпуском стабильной версии JDK 22 в конце марта, вышла окончательная версия FFM API — современного переосмысления доступа к нативной памяти и функциям. Примечательно, что его история начиналась ещё в JDK 14 несколько лет назад, тогда же я и обратил на него своё внимание. Мне стало интересно, возможно ли без поддержки со стороны платформы полноценное портирование этого API, и ответ — ДА!

На скриншоте выше - пример из официальной документации, запущенный на android 8.0. В нём происходит вызов функции qsort из libc, при этом один из параметров — указатель на функцию сравнения. С помощью метода upcallStub можно создать указатель на MethodHandle как на нативную функцию, что и демонстрирует пример. Полная документация исходного апи доступна на официальном сайте oracle

Отдельно отмечу отличия:

  • Полностью воссоздать API не получилось т.к. до android 9.0 отсутствует его важный компонент — класс VarHandle, поэтому был создан другой класс с теми же методами, но без полиморфного поведения (чуть хуже оптимизация)

  • MemoryLayout`ы нулевого размера не разрешены (в исходном варианте их поведение не совпадает с фактическим в компиляторах C и C++)

  • Временно не работают upcall вызовы из потоков, не подключённых к jvm. Скоро исправлю, но ещё не придумал оптимальный путь

  • Вернул методы MemoryLayout.valueLayout и paddedStructLayout. Не знаю почему их убрали в конечной версии

  • Возможно что-то ещё

Весь исходный код доступен на github

Теги:
Всего голосов 7: ↑7 и ↓0+7
Комментарии1
Стань частью команды AXENIX за один день!
Стань частью команды AXENIX за один день!

AXENIX (ex - Accenture) проводит 1day offer для Java разработчиков и Системных аналитиков с опытом работы от 2 лет.

Даты проведения: 13 и 20 апреля соответственно.

Подай заявку до 11 апреля, если ты Java разработчик.

До 18 апреля регистрируйся тут, если интересует мероприятие для Системных аналитиков

Для участия в 1day offer:

  1. Оставь заявку на нашем сайте.

  2. Предварительно пообщайся с рекрутером, чтобы побольше узнать о компании и получи приглашение на one day offer.

  3. Узнай больше о нас и наших проектах от менеджеров практики кастомной разработки.

  4. Прими участие онлайн в собеседовании с экспертами, будет два этапа – техническое и финальное интервью.

  5. Получи оффер в тот же день, если все прошло успешно.

Немного об Axenix

Компания образовалась после локализации российского офиса Accenture.

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

В России мы работаем в офисах в Москве, Твери, Ростове-на-Дону, Краснодаре, Санкт-Петербурге, а также удаленно.

Какие преимущества кроме достойной ЗП?

Современный стек, собственные продукты, годовые бонусы и регулярное повышение по результатам Performance Review, митапы, гибридный режим работы, ДМС для тебя и твоей семьи, дополнительные дни отпуска, корпоративные программы привилегий.

Ждем тебя в команде Axenix!

Теги:
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

Почему в java нельзя отсортировать массив интов по убыванию?

Недавно решал задачку, предполагавшую сортировку int[] arr по убыванию.
Я пытался это сделать минут 5... Иии не отсортировал.

В джава нет вообще ни единого встроенного механизма сортировки массива примитивов по убыванию и вот почему.

Массивы сортируются с помощью метода Arrays.sort(arr), но сортирует он по возрастанию.
Для сортировки по убыванию нужно передать в него компаратор:

int[] arr = {1, 2, 3};
Arrays.sort(arr, (x, y) -> (y - x));

Не буду вдаваться в подробности работы компаратора, потому что такой код даже не скомпилируется! Компаратор не умеет работать с примитивами, ведь он использует дженерик:

public static <T> void sort(T[] a, Comparator<? super T> c);

А так выглядит sort для инта (и такой же метод есть отдельно для каждого примитива):

public static void sort(int[] a);

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

Теги:
Всего голосов 3: ↑3 и ↓0+3
Комментарии13

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

Содержание вебинара:
• ключевые принципы ORM концепции;
• связь между ООП и реляционной моделью в Hibernate;
• плюсы и минусы Hibernate;
• разработка приложения с использованием Hibernate.

Дата: 05.03.2024
Время: 16:00-17:00 по МСК

Спикер вебинара: Тарасевич Александр — ведущий разработчик с опытом коммерческой разработки на Java более 10 лет.

Регистрация доступна по ссылке.

Теги:
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

Некоторые могут помнить, как в комментариях под одной из своих статей на тему Unsafe в Android я писал, что занимаюсь портированием FFM API на эту платформу. Не так давно API окончательно вышло из предварительного доступа и стало полноправной частью JDK 22. Я поймал за хвост вдохновение и с утроенными силами начал писать код и придумывать как перенести непереносимое. Так начались поиски способа рантайм генерации нативного кода под любую из поддерживаемых андроидом архитектур, и он был найден! Выходом стала системная библиотека libLLVM.so, которая умеет делать всё, что мне нужно. Осталось лишь подключить её к java коду без готового линкера. После серии экспериментов и кучи кода родилось это:

На данном скриншоте видно тестовый запуск генерации простенькой функции с выводом полученного машинного кода (он парсится из выходного ELF файла). Я планирую использовать что-то подобное как часть линкера для FFM API.

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

Если вас заинтересовала тема, за процессом можно следить на github`е проекта

Теги:
Всего голосов 8: ↑8 и ↓0+8
Комментарии0

Проклятие дженериков 💀

Дженерики могут показаться очень простой темой.
Например, вот так в Java выглядят классные и простые методы интерфейса List:

interface List<E> extends Collection<E> {
	boolean add(E e);
	E set(int index, E element);
}

Но у обобщений много нюансов: вложенность, вариантность, границы и т.д. Это сильно усложняет их использование.
Вот не менее классный, но совсем непростой flatMap интерфейса Stream🙈:

interface Stream<T> extends BaseStream<T, Stream<T>> {
	<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);
}

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

Из-за таких сложностей, в языке Go (философия которого - простота и минимализм) дженерики появились аж через 12 лет после релиза языка. А первый коммент про то что нужны дженерики появился меньше чем через 24 часа🙃

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

  • С++ вышел в 1979, дженерики - 1986

  • Java - 1996, дженерики - 2004

  • C# - 2001, дженерики - 2005

  • Go - 2009, дженерики - 2021

Теги:
Всего голосов 5: ↑3 и ↓2+1
Комментарии8

Вы Java-программист и ищите возможность оптимизировать разработку? Тогда вебинар "Java-проекты с ChatGPT: от идеи до реализации" будет вам интересен! Узнайте, как создавать, рефакторить и тестировать код с помощью ChatGPT. Вас ждёт практический гайд и знакомство с JAIG – инструментом, упрощающим генерацию кода.

Дата: 21.02.2024
Время: 16:00 по МСК

Спикер вебинара: Игорь Судакевич – сертифицированный Java-разработчик, инструктор Oracle и Udemy, методист c 15-летним опытом, консультант-репетитор.

Теги:
Всего голосов 6: ↑4 и ↓2+2
Комментарии0

Как IT-директору выбрать подрядчика для усиления команды бэкенд-разработки: практический вебинар

Новость для руководителей IT-отделов, техлидов и продукт-оунеров.

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

С чего начать поиск подрядчика? Как подготовиться к выводу на проект внешнего разработчика? Как сформулировать требования к программисту и проверить удаленную команду на благонадежность — на эти и другие вопросы ответят руководители компании Programming Store на бесплатном онлайн-вебинаре.

6 февраля, 16:00 МСК

Зарегистрируйтесь, чтобы получить доступ к вебинару и напоминание накануне.

Зарегистрироваться

Длительность — 1 час.

  • 5 критериев готовности команды к работе с внешними разработчиками

  • Как оценить благонадежность подрядчика

  • Кейсы из практики: ритейл, производство, медицина

Спикер — Роман Огородников, руководитель проектов по backend-разработке в Programming Store.

Также вы сможете задать вопросы и получить ответы напрямую от директора компании и руководителя backend-направления Алексея Петухова.

После мероприятия все зарегистрированные участники получат на почту инструкцию с ключевыми тезисами из вебинара для эффективного выбора подрядчика.

Programming Store — центр удаленной разработки на платформах 1С, Python, Java, MS Dynamics 365. Уже 10 лет мы работаем по всей России и за рубежом с компаниями- внедренцами и крупными клиентами

Теги:
Всего голосов 1: ↑0 и ↓1-1
Комментарии0

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

Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область

25 января 2024 года стартовала онлайн-конференция Java Champions 2024. Мероприятие продлится в виртуальной среде до 30 января. Каждый день будет состоять из 7 сессий. Они начнутся в 9:00 EST и закончатся в 17:00 EST. После каждой презентации участникам будет предоставлено время для общения с докладчиками.

Чемпионы Java — это разработчики со всего мира, получившие признание за вклад в сообщество Java. Чемпионы на конференции J Champions делятся своими знаниями с разработчиками. Аудитория проекта — 14 миллионов Java-разработчиков по всему миру.

Теги:
Рейтинг0
Комментарии0

Только что вышли две библиотеки с одним номером:

  • Spring for Apache Kafka 3.1

  • Spring AMQP (Spring for RabbitMQ) 3.1

Как следует из названия, это нативная поддержка Kafka и Rabbit в Spring.

Подробности — в релиз ноутах на GitHub. Здесь по Кафке, здесь по Рэббиту.

По сути, это минорные обновления и апгрейд до актуального Spring Framework 6.1.

Подробности должны быть в следующем дайджесте.

Теги:
Рейтинг0
Комментарии0

Только что вышел Spring Authorization Server 1.2

Это фреймворк, реализующий  OAuth 2.1 and OpenID Connect 1.0 поверх Spring Security.

Подробности — в релиз ноутах на GitHub.
Как им пользоваться написано в документации, но лучше всего изучить конкретные примеры.

Теги:
Рейтинг0
Комментарии0

Java-разработчики, мы вас ждём на One day offer!

Что такое One day offer?
Мероприятие, на котором можно стать частью нашей команды: без лишних собесов, тестовых заданий и бюрократии

Кто может участвовать?
Мы ищем java-разработчиков middle+ и senior уровня. Неважно, в каком городе ты живешь, главное находиться на территории России

Когда и где?
9 ноября в онлайне

Как попасть?

  1. Оставь заявку на участие

  2. Пройди предварительное онлайн-интервью и получи приглашение на ивент

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

Узнать подробности и подать заявку по ссылке
❗️Последний день подачи заявки на участие — 7 ноября

Теги:
Всего голосов 7: ↑7 и ↓0+7
Комментарии0

Про Youtube-канал для технарей и подкаст про Java в 2023 году 📺

Привет! Пришло время познакомить вас с каналом Cloud.ru Tech. Здесь беседуем с интересными гостями в формате подкастов, делимся новостями из мира IT-технологий и обсуждаем карьеру в IT.

🎧 Сегодня предлагаем посмотреть подкаст про Java — тема будет интересна как заядлым джавистам, так и Junior-разработчикам. 

Вместе с Петром Хаустовым — тимлидом из команды СБОЛ.про мы обсудили, зачем и как изучать Java в 2023 году, что делать с синдромом самозванца, а также как джавистам проходить собеседования и находить для себя лучшие условия. 

Подписывайтесь на Youtube-канал Cloud.ru Tech, чтобы быть в курсе IT-трендов!

Теги:
Рейтинг0
Комментарии0

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

В большинстве языков является естественным распространение области видимости переменных из внешнего блока во все внутренние блоки кода. Приведу пример, чтобы не было сомнений (псевдо-код намеренно нарушает синтаксис известных мне языков, чтобы не быть отнесенным явно к одному из них):

Function(type par)
{//outer block(see“inner block”father)
  Int X = 123;
  If(par == someConst)       
  {//inner block
	We can use X here!
  }
}

Определение для Лямбда-функции тоже создает внутренний блок кода:

Action Function(type par)
{//outer block (see “inner block” father)
  Int X = 123;
  If(par == someConst)       
  goto Label; //we need goto just to escape definition of extra inner block
  Return lambda=>
  {// inner block
  some code that uses X in the block
  };
Label:
  We can still use X here!
}

Интересно! Это только мне кажется, что передача переменных из окружающего кода в код Лямбда-функции, ВОЗМОЖНО, изначально была ошибкой при разработке компилятора, когда стандартный способ распространения области видимости переменных по недосмотру применили к вновь появившимся инлайн реализациям функций? Но потом кто-то нашел применение такой возможности и, как это часто бывает, «Бага»(bug) превратилась в «Фичю» (feature)?

Теги:
Рейтинг0
Комментарии2

Сезон Java — всё! Сегодня последний день приёма заявок для участия в сезоне Java one love, и совсем скоро мы узнаем победителя.

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

🌌 Делаем свою простейшую систему сборки для Java

👾 Перестаём бояться генерировать байт-код

👽 FizzBuzz и искусство фильтрации

🛸 FizzBuzz и искусство фильтрации: Stream API и предикаты

🔭 Ad-hoc мониторинг: сбор, хранение и визуализация данных

🔫 Компилирование «железного» бинарника Java-программы Google Closure Stylesheets с GraalVM

Если вы как раз дописываете свою статью — поторопитесь: с завтрашнего дня статьи в сезон не принимаются. Ваши голоса могут повлиять на итоговый рейтинг — голосуем и выбираем победителя сезона по ссылке 💪 → https://u.habr.com/java1love

Сезон длится до 15 сентября. Спонсор Сезона Java one love — Мир Plat.Form.

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии2
1

Вклад авторов

Работа

Java разработчик
325 вакансий