Вышла Java 17
Вышла общедоступная версия Java 17. В этот релиз попало более 2700 закрытых задач и 14 JEP'ов. Изменения API можно посмотреть по этой ссылке.

Объектно-ориентированный язык программирования
Вышла общедоступная версия Java 17. В этот релиз попало более 2700 закрытых задач и 14 JEP'ов. Изменения API можно посмотреть по этой ссылке.
Есть много разных понятий для человека, который занимается программированием: кодер, разработчик, программист и т.д. Мне же больше по душе такое понятие, как инженер-программист или software engineer, т.к. данное понятие охватывает наибольшее количество тем и направлений, необходимых для разработки. Это лично моё виденье.
Так чем же принципиально software engineer отличается от остальных регалий? Ответ достаточно прост и очевиден - набором знаний о технологиях и большим кругозором в сфере, которой он себя посветил. Кроме того, сталкиваясь с какой-либо проблемой или задачей, он уже понимает какой подход нужен для её решения, или знает, что надо "подтянуть", чтобы быть компетентным в данном вопросе.
Т.к. на данный момент мой основной язык программирования Java, то и рассматривать данный вопрос я буду со стороны Java. Однако общая концепция хорошо ложится на другие языки с небольшой корректировкой "под себя".
Цель статьи привести - познакомить читателя с предлагаемым мною набором знаний. Ниже я привожу набор направлений и технологий, которыми должен обладать с теоретической и практической точки зрения software engineer.

Адаптер - это шаблон структурного проектирования, который позволяет объектам с несовместимыми интерфейсами взаимодействовать друг с другом.
Так же известен как “Обертка”.
Проблема
Чтобы продемонстрировать этот шаблон, я буду использовать упрощенный пример игровой механики, в которой есть интерфейс IEnemy, но один из врагов отличается от других и не имеет реализации метода атаки. Вместо этого этот конкретный враг (SpecialEnemy) накладывает заклинания.

От переводчика: на конференции SpringOne были сделаны довольно важные анонсы относительно нового поколения Spring Framework, на Хабре это почему-то это прошло незамеченным. Судя по всему, в ближайшее время мы будем жить не просто в мире “Java 8/Java 11+”, а появится ещё один водораздел: “Spring 5/Spring 6+”. Чем это грозит? Например, если вы используете Hibernate 5.4, то придется принудительно обновиться на Hibernate 5.5+.
1 сентября на SpringOne было объявлено, что минимальные требования для Spring Framework 6 и Spring Boot 3, который будет доступен в 4 квартале 2022 года, сдвигаются в сторону увеличения:

Вслед за анонсом проекта Spring GraphQL и выходом майлстоуна 1.0 мы публикуем этот пост с более подробной информацией.

Большинство наших приложений зависят от внешних сервисов, например серверов баз данных, SMS-шлюзов и систем наподобие PayPal. Эти сервисы могут существовать более чем в одной среде, то есть в средах разработки и эксплуатации. Если мы хотим подключиться к эксплуатационной среде, мы должны сначала пройти через среду разработки. Таким образом, во время создания приложений нам приходится переключаться между средами. Это связано с тем, что у каждой среды своя уникальная конфигурация со своими параметрами подключения и прочими значениями.

В JDK 17 вошли 14 JEP, один из которых — JEP 403 (Strongly Encapsulate JDK Internals), — строго инкапсулирует все внутренние элементы JDK, за исключением некоторых критических API, таких как sun.misc.Unsafe. Как преемник JEP 396 (Strongly Encapsulate JDK Internals by Default) он еще больше ограничивает доступ к внутренним API и к ним больше нельзя получить доступ с помощью параметра --illegal-access.
Основной целью инкапсуляции является улучшение безопасности и сопровождаемости через использование стандартного API вместо внутреннего. Это также позволит разработчикам OpenJDK изменять внутреннюю реализацию, не ломая обратной совместимости. Проверить использование в вашем коде внутренних компонент можно с помощью утилиты JDeps с плагинами Maven и Gradle.
Для открытия определенных пакетов можно использовать параметр командной строки --add-opens или атрибут Add-Opens в манифесте JAR-файла. Например, открыть доступ к модулю java.util из всех безымянных модулей можно следующим образом:

Привет, Хабр! Меня зовут Даниил Пилипенко, я — программный директор факультета backend-разработки направления «Программирование» в Skillbox и директор центра подбора IT-специалистов SymbioWay.
В этой статье я хочу рассказать, какого уровня знаний и навыков Java достаточно, чтобы идти на стажировку или устраиваться на работу, и на какую зарплату можно рассчитывать.
Часто бывает так, что не решаешься осваивать новую профессию или получать дополнительное образование только потому, что не знаешь, какие плоды и когда тебе это принесет. Одни долго учатся, но все равно без практического опыта в разработке никуда, кроме стажировки, устроиться не могут. Другие же умудряются пойти на курс и сразу параллельно устроиться на работу.
Мы подготовили для вас несколько карьерных треков, которые сразу разложат все по полочкам:

На сегодняшний день существует несколько тысяч языков программирования, каждый из которых создавался с определенной целью, пытаясь изменить и улучшить недостатки своих предшественников. Так, например, появился язык Kotlin, который был нацелен на замену Java в мобильной разработке. В 2010 году увидел свет язык Rust, разработчики которого пытались создать быстрый и безопасный язык, который закрывал бы многие недостатки C/C++.
Сейчас практически никто не ставит цели создать универсальный язык для всех задач и всех платформ, так как в каждой области есть свои потребности и нюансы для языка.
Но как объединить несколько разных языков в одном приложение, чтоб это работало?

Меня зовут Аксёнов Вячеслав и я бэкенд разработчик, пишу на Java/Kotlin, расскажу про то, как я сдавал сертификацию на знания Java SE 11 от Oracle. И какие нюансы я понял в процессе подготовки и сдаче.

IT-экспресс TechTrain мчится в онлайн и открывает наш осенний сезон конференций.
Это бесплатное мероприятие, где с 8 докладами на самые разные темы выступят спикеры самого разного профиля. Пишете вы на Kotlin или C++, ближе вам DevOps или дата-инжиниринг — найдется доклад для вас.
Чтобы запрыгнуть на бесплатный осенний поезд, который отправится 18 сентября, достаточно пройти регистрацию на сайте.
А чтобы вспомнить или впервые увидеть доклады прошлого сезона, можете посмотреть их плейлист.
Все это, только в расширенном формате, ждет вас и на наших крупных осенних конференциях. Поэтому по программе TechTrain можно даже погадать: посмотрите на нее под катом, выберите самый интересный вам доклад, а в конце текста мы по вашему выбору нагадаем, на какой из наших конференций вам точно будет интересно.

Быстрый тур по новым, готовым к работе функциям при обновлении с Java 11 до Java 17.
Через три года после Java 11 - на данный момент последней версии с долгосрочной поддержкой (LTS), Java 17 LTS будет выпущена в сентябре 2021 года. Пришло время сделать краткий обзор новых функций, которыми разработчики могут пользоваться после обновления с 11 до 17. Обратите внимание, что было внесено гораздо больше улучшений - в этой статье основное внимание уделяется тем функциям, которые могут напрямую использоваться большинством разработчиков.

Привет! Это вторая часть рассказа о том, как мы поддерживали язык Frege в IntelliJ IDEA. Первую часть читайте здесь. Сейчас мы поделимся, как сделали автодополнение, систему сборки, интерпретатор и систему типов. И как все это тестировали.
Одной из частых рутин на работе является преобразование и извлечение чисел из строк текста. Самый наивный и простой подход в языке Java при преобразовании строки в число, это использовать Double.parseDouble(String num). Проблема этого метода в том, что он имеет баги в различных SDK, например в Android. Кроме того, данному методу не передаётся информация об основании системы счисления. Можно, конечно, использовать классы оболочки, передавая им в конструктор основание системы, но хотелось бы извлекать данную информацию из самой строки автоматически.
В данной статье описан простой метод преобразования строки в число, который способен автоматически определять основание системы счисления числа, его знак и экспоненту из самой строки.
При разработке на Spring Boot иногда нам нужно выполнить метод или фрагмент кода при запуске приложения. Этот код может быть любым, от записи определенной информации до настройки базы данных, заданий cron и т. д. Мы не можем просто поместить этот код в конструктор, потому что требуемые переменные или службы могут быть еще не инициализированы. Это может привести к исключению с нулевым указателем или некоторым другим.
Рассмотрим различные способы выполнения метода после запускаSpring Boot.

Абстрактная фабрика - это шаблон проектирования, который позволяет создавать семейства связанных объектов без указания их конкретных классов.
Проблема
Представьте, что мы создаем игру в которой будут различные игровые события, меняющие внешний вид игры. Ваш код состоит из классов, которые представляют:
Семейство сопутствующих игровых вещей, например: chest + unit + hero.
Несколько игровых событий. Например, продукты Chest + Unit + Hero доступны в следующих ивентах: Pirate, Space, Default.
Нам нужен способ создавать отдельные игровые предметы, чтобы они соответствовали другим предметам из того же ивента. Игрокам очень не нравится, когда они видят скины из разных ивентов.
Кроме того, мы не хотим изменять существующий код при добавлении в программу новых игровых вещей или ивентов. Игровые студии очень часто обновляют свои скины и добавляют новые ивенты, и вам не захочется менять основной код каждый раз, когда это происходит.
Решение
Первое, что предлагает шаблон «Абстрактная фабрика» - это явное объявление интерфейсов для каждого отдельного игрового предмета из ивента (например, сундук, юнит или герой). Затем вы можете заставить все варианты предметов следовать этим интерфейсам. Например, все варианты сундуков могут реализовывать интерфейс Chest; все варианты юнитов могут реализовывать интерфейс Unit и так далее.
Следующим шагом будет объявление абстрактной фабрики - интерфейса со списком методов создания для всех предметов, входящих в ивент (например, createChest, createUnit и createHero). Эти методы должны возвращать абстрактные типы продуктов, представленные интерфейсами, которые мы извлекли ранее: Chest, Unit, Hero и так далее.
Перечисления появились в пятой версии Java и с тех пор крепко обосновались в наших приложениях. Работа с перечислениями почти не отличается от работы с любыми другими классами в Java. Но есть несколько особенностей, которые вызывают удивление. Каждый раз сталкиваясь с ними, хочется спросить: "Почему так?".
Давайте попробуем разобраться.

Quarkus поставляется с набором инструментов, позволяющих разработчикам быстро начать разработку используя расширения для многих популярных IDE. Одной из наиболее известных и простых в использовании функций является возможность выполнять горячую перезагрузку (Live Reload) в реальном времени в режиме разработки (Dev Mode), позволяя разработчику изменять свой код на лету без перезапуска приложения. С выходом новой версии Quarkus 2.0 разработчики полчили ещё больше возможностей. Например, в режиме разработки появилась интерактивная оболочка, предлагающая набор различных опций для более детального контроля над тем, какие из компонентов нужны разработчику в данный момент. Quarkus также предоставляет утилиту командной строки для конфигурации проекта и дальнейшей быстрой разработки.

Совсем недавно вышла новая версия MicroProfile - 4.1. Я бы хотел рассказать, что вообще такое MicroProfile, для чего он применяется, из каких компонентов состоит и чем привлекает к себе разработчиков. В этой статье я покажу несколько примеров того, как он может использоваться на практике на примере работы с Quarkus, фреймворком, который является одной из множества реализаций спецификаций MicroProfile.