Java Digest #1 / Хабр

Всем привет! 👋 👋 👋

Мы — Java-разработчики Тинькофф: Константин, Андрей и Арсений. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и решили делиться этим не только с коллегами, но и со всем сообществом. 

Льюис Кэрролл писал: «Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!» Надеемся, что поможем немного сберечь силы в этом марафоне всем читателям. Stay tuned! 😉 

Главные новости

С днем рождения, Java! 🎉🎉🎉

Мы очень рады в первом выпуске поздравить любимый язык! 23 мая Java исполнилось 28 лет. Язык представили в 1995 году на конференции SunWorld 1995. Желаем ему новых фич, роста комьюнити и долгих лет жизни 🙂 

Spring Boot 3.1 — вышла первая минорная версия третьего Spring Boot, а вместе с ней обновились несколько проектов экосистемы Spring. Статья описывает изменения относительно версии 3. 0 и объясняет, как мигрировать.

JEP 451: Prepare to Disallow the Dynamic Loading of Agents новый JEP, в котором предлагается выдавать предупреждения, когда агенты динамически загружаются в работающую JVM. Такие предупреждения нужны, чтобы подготовить пользователей к будущему выпуску, который по умолчанию запретит динамическую загрузку агентов. Инструменты удобства обслуживания, которые загружают агенты при запуске, не будут вызывать предупреждение ни в одном релизе.

Интересные видео

Save 10—20% Memory With Compact Headers — Inside Java Newscast 48. Выпуск посвящен JEP 450: Compact Object Headers, он же проект «Лилипут». Цель проекта — уменьшить размер заголовков объекта на HotSpot в два раза — с 128 до 64 бит. Сначала идет рассказ о том, из чего состоит заголовок, а потом — целевая картина. Из приятного: в описании к видео есть короткая шпаргалка по теме.

Script Java Easily in 21 and Beyond — Inside Java Newscast #49. В этом выпуске речь пойдет про JEP 445, который призван помочь начинающим Java-программистам в обучении. 

JEP 445 предлагает писать stand-alone основные методы, которые не являются общедоступными, нестатическими и не имеют массива аргументов, поэтому самая короткая возможная программа Java просто void main().

KotlinConf 2023: Watch the Recordings пост про записи докладов с KotlinConf 2023. Есть ссылки на плейлисты на канале Kotlin by JetBrains.

Полезные статьи

Spring Transaction and Connection Management заметка Vlad Mihalcea о том, как работают транзакции в hibernate в контексте спринга и как использовать параметр readOnly.

Java Developer vs. ChatGPT Part I: Writing a Spring Boot Microservice — статья про относительно новый проект Spring for GraphQL, когда, используя всего один Spring Boot Starter, можно получить все необходимое для создания GraphQL API в своем приложении.

Analyzing Dependencies in IntelliJ IDEA емкий и полезный туториал о возможностях IntelliJ IDEA в плане анализа зависимостей. Рассказывается как о Dependency Analyzer, так и о Dependency Diagram с обзором самых основных полезных фич этих инструментов, как, например, поиск конкретной зависимости, фильтрация по скоупу, группировка и подсвечивание конфликтующих зависимостей.

EvilGPT против джуна: обманываем разработчика и сбегаем из дырявого приложения. Хотите представить себя злой версией ChatGPT и напичкать проект эксплоитами? Статья из серии вредных советов в этом поможет, а заодно покажет интересные уязвимости при написании Java-кода. Посмотрим, сможете ли вы сбежать от разработчика, посоветовав наибольшее количество уязвимого кода.

Пишем простой docker-compose.yml для контейнеризации приложения (React, Spring Boot, PostgreSQL, pgA…) руководство по написанию docker-compose.yml для контейнеризации простого приложения, которое включает фронтенд на React, бэкенд на Spring Boot, базу данных PostgreSQL и pgAdmin для просмотра данных в базе. Статья для начинающих разработчиков, которые хотят разобраться в назначении файла docker-compose.yml и начать использовать его в своих проектах.

Reduce Java Application Startup and Warmup Times with CRaC — статья о том, как сделать запуск Java-приложений быстрее c использованием CRaC — Coordinated Restore at Checkpoint. Сама фича уже интегрирована в новые версии Azul JDK 17, а суть ее в том, что операции контрольных точек и восстановления сохраняют состояние JVM и Java-приложения в образе. Приложение Java можно возобновить из образа в любом момент в будущем. Что интересно, с использованием CRaC, Spring Boot приложения стартуют даже быстрее, чем Micronaut и Quarkus с использованием CraC.

Quality Outreach Heads-up — JDK 21: Sequenced Collections Incompatibilities  в новый билд JDK21 интегрирован JEP 431: Sequenced Collections, в котором в иерархию Collection Framework добавляются новые интерфейсы. Небольшая статья рассказывает о таких трудностях совместимости, как проблемы с неймингом методов, конфликты переопределения ковариантов и сложности с type inference. Будет полезно тем, кто использует кастомные или самописные коллекции.

A Dissection of Java JDBC to PostgreSQL Connections — интересная статья о взаимодействии JDBC-драйвера с postgresql и затрагивающая такие темы, как:

  • разница между простым и расширенным протоколом postgresql и почему расширенный более эффективен и используется по дефолту;

  • разница между PreparedStatement в JDBC и базе данных и почему выполнение PreparedStatement в приложении не создает аналогичные сущности на стороне базы данных при первых исполнениях;

  • почему важно закрывать PreparedStatement.

Breaking down Barriers: Introducing JDK 21’s Approach to Beginner-Friendly Java Programming рассказывает о JEP-445, который призван упростить написание простых программ на Java тем, кто только начинает изучать программирование, без необходимости понимать фишки языка, нужные для больших приложений. А еще эти нововведения упрощают скриптинг на Java, позволяя писать небольшие скрипты намного быстрее.

Любопытные подкасты

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

Занимательные квизы

Quiz yourself: When is a Java object still reachable? Сборщик мусора может собрать объект, только когда тот больше недоступен ни из одного живого треда. Вооружившись этим правилом, попробуйте решить квиз, но помните: все не так очевидно, как может показаться.

Quiz yourself: Crossing Java’s CyclicBarrier in a multithreaded environment. CyclicBarrier используется, чтобы установить определенную точку для фиксированного количества тредов, на которой они будут останавливаться до тех пор, пока все не дойдут до этой точки. В квизе реализовано как раз такое приведение, но, как обычно, есть нюанс.

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

Пять навыков Java, которые точно проверят на собеседовании в 2022 году / Хабр

По данным Хабр.Карьеры за июнь, чаще всего среди всех IT-специалистов российские компании искали backend-разработчиков. При этом самым популярным языков программирования, на которых реализуют backend, является Java. Так, доля вакансий Java-разработчиков среди всех вакансий на backend составляет более 35%.

Программный директор факультета backend-разработки направления «Программирование» Skillbox, директор центра подбора IT-специалистов SymbioWay Даниил Пилипенко рассказал, какие умения должен показать джуниор Java-разработчик, чтобы успешно пройти собеседование.

Умение писать код, который легко поддерживать

Ключевой навык любого разработчика, в том числе, на языке Java –– умение писать чистый код. Чем чище код, тем легче другим разработчикам в нём разбираться и вносить изменения. Вот наиболее типичные признаки чистого кода:

  • Понятные названия переменных
    Называть переменные нужно так, чтобы было понятно, что в них содержится. Например, переменную, отражающую количество денег, можно назвать moneyAmount. Названия вроде a, b или c использовать не стоит.

  • Избегание длинных методов
    Краткость облегчает чтение кода, поэтому создавайте методы длиной не более 20-ти строк. Ещё не стоит создавать методы с более чем тремя параметрами. Компактные методы будет легко использовать, тестировать и изменять.

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

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

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

  • Низкий уровень вложенности
    Фрагменты с высоким уровнем вложенности операторов друг в друга делают код слабо поддерживаемым. Каждый дополнительный уровень вложенности приводит к излишним нагрузкам на разработчиков при чтении. Если в вашем коде внутри метода есть оператор if, в нём цикл, в нём ещё один оператор if, а внутри него — switch…case, такой код необходимо переписывать и делать менее вложенным.

Чтобы проверить навык написания поддерживаемого кода, на собеседовании могут дать небольшую задачу на так называемый live coding — написание кода в реальном времени под наблюдением. Тот, кто будет собеседовать кандидата, будет оценивать два фактора: работоспособность и поддерживаемость написанного кода. Также обычно смотрят на скорость работы –– время, которое кандидату потребовалось на решение задачи.

Знание фреймворка Spring

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

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

Умение работать с массивами и коллекциями Java

Начинающий разработчик должен понимать разницу между массивом и коллекцией, уметь создавать и изменять массивы и работать с классом Arrays. Важно также знать основные виды коллекций –– ArrayList, HashSet и HashMap. Стоит понимать механизмы работы List, Set и Map: это позволит выбирать оптимальную для решения той или иной задачи коллекцию.

Преимуществом на собеседовании станет и знание других коллекций, которые позволяют удобно оперировать наборами элементов –– их в Java много. Например, знать класс Collections, в котором есть большой набор инструментов для работы с коллекциями.

Разберитесь с принципами работы коллекций. На собеседовании могут спросить, например, что произойдет, если в HashSet добавить два разных объекта с одинаковым хэш-кодом. Это важный навык, так как от выбора класса коллекции может сильно зависеть скорость работы реализуемого приложения.

Знание языка запросов SQL

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

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

Разработчик должен уметь оптимизировать базы данных, таблицы и отдельные SQL-запросы, чтобы делать работу с БД более быстрой и эффективной. На собеседовании вас могут попросить написать какой-нибудь SQL-запрос или рассказать, например, о том, как работают разные типы оператора JOIN.

Знание принципов клиент-серверного взаимодействия

Формат взаимодействия браузера и просматриваемой веб-страницы с сервером обычно четко регламентирован. Для него используется протокол HTTP или его защищенная версия HTTPS. Они описывают форматы запросов к серверу и его ответов.

Разработчик должен знать протокол HTTP хотя бы верхнеуровнево. В частности, он должен понимать структуру запросов и ответов. Они состоят из строки запроса/ответа, заголовков и тела. Строка запроса содержит адрес ресурса и метод запроса, строка ответа содержит код ответа в числовом формате.

Важно знать популярные коды ответов. Например, 2xx –– коды успешных ответов, 3xx –– коды перенаправлений, 4xx –– коды ошибок на клиенте, 5xx –– коды ошибок на сервере. Вспомните популярную ошибку «Страница не найдена», которую может выдавать браузер –– это код ответа 404.

На собеседовании могут также проверить знания стандарта REST. REST –– это надстройка над протоколом HTTP. REST описывает правила клиент-серверного взаимодействия веб-приложений, по которым операции с сущностями соответствуют определённым методам HTTP. Так, метод GET отвечает за получение ресурса, метод POST –– за создание, PUT –– за полное изменение, a PATCH –– за частичное изменение.

Еще REST регламентирует пути запросов: например, при работе с новостями их список можно получить запросом GET /news. Если разработчик хочет создать новость, то он должен применить запрос POST /news. Чтобы получить конкретную новость, нужно ввести запрос GET /news/id, где id — это идентификационный номер этой новости.

Заключение

Конечно, темы вопросов на собеседованиях могут отличаться от компании к компании. Например, у вас могут проверить знания принципов объектно-ориентированного программирования, задавать более сложные вопросы по SQL и HTTP. Начинающему Java-разработчику также стоит хотя бы в общих чертах понимать, как работает вёрстка — технологии HTML и CSS.

Еще соискателю стоит понимать, как работать с системой контроля версий Git, таск-трекерами, командной строкой bash. Эти навыки являются основными, они позволяют начинать работу в новой команде и компании “гладко”. Те, кто владеет перечисленными навыками, очень быстро после выхода на новое место работы начинают приносить пользу своему работодателю.

Java — Язык компьютерного программирования общего назначения, который является параллельным, основанным на классах, объектно-ориентированным и специально разработан таким образом, чтобы иметь как можно меньше зависимостей реализации / Habr

Язык компьютерного программирования общего назначения, который является параллельным, основанный, объектно-ориентированный и специально разработанный, чтобы иметь как можно меньше зависимостей от реализации

Статьи Сообщения Авторы

Показать первые

Предел рейтинга

Уровень сложности

  • 90 009
Урусофф

Время чтения 2 мин.

Просмотры 371

Программирование *Java *Проектирование и рефакторинг *

В Java есть такие типы — называются « Generics «.
И дело здесь в том, что существует соглашение по именованию параметров универсального типа

С ОДНОЙ ЗАГЛАВНОЙ БУКВОЙ .

Но мы нашли гораздо более читаемый подход!

Техника заедания заглавных букв?

Всего голосов 1: ↑0 и ↓1 -1

Комментарии 2

Урусофф

Время чтения 5 мин

Просмотров 1.6K

Программирование *Java *Идеальный код *Дизайн и рефакторинг *Управление разработкой *

Проблема

К сожалению, при выполнении своих плановых бизнес-целей подразделения организации редко учитывают такую ​​метрику, как решение качество кода

. И обычно у разработчиков нет времени на нормальный процесс код-ревью.

Опыт процесса проверки кода?

Рейтинг 0

Комментарии 2

Остроухов

Уровень сложности Easy

Время чтения 3 мин

просмотров 488

Java *

Песочница

Здравствуйте!

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

Подробнее

Рейтинг 0

Комментарии 1

Урусофф

Время чтения 4 мин

Просмотры 470

Программирование *Java *Проектирование и рефакторинг *Параллельные вычисления *

Песочница

В одном из заданий на проекте мне пришлось оборачивать коллекцию

ForkJoinTask в CompletableFuture для асинхронного выполнения и построения цепочек пайплайнов обработки данных.

Асинхронная задача ForkJoinTask?

Рейтинг 0

Комментарии 0

vda19999

Уровень сложности Среда

Время считывания 11 мин.

просмотров 1.3K

Python *Java *C++ *Assembler *

Цель этой статьи — изучить лямбда-функции, их отличия от обычных функций и способы их реализации на основе языков программирования C++, Python и Java. .

В этой статье я буду использовать godbolt.org для компиляции кода и просмотра машинного или байтового кода.

Подробнее

Всего голосов 2: ↑2 и ↓0 +2

Комментарии 2

игор_сухоруков

Уровень сложности Среда

Время считывания 28 мин

Просмотры 1,1 КБ

Открытый исходный код *PostgreSQL *Java *OpenStreetMap *

Перевод

Продолжаю рассказ «Как весь мир поместить в обычный ноутбук: PostgreSQL и OpenStreetMap» секретами о геоданных OpenStreetMap, на которых многие компании построили свой бизнес, но не все делятся подробностями.

.. Ну а сегодня мы откроет важные детали.

База данных OSM в PosgreSQL после загрузки из дампа занимает более 587 ГБ. Это уже большая база данных по меркам СУБД, и по одной огромной таблице на каждый тип объектов не получится. Для управляемости такие данные должны быть секционированы, хорошо, что PostgreSQL поддерживает декларативное секционирование данных. Осталось только разобраться, как разделить географические данные. После поиска и сравнения на помощь пришла иерархическая шестиугольная система геопространственного индексирования h4. Все это было реализовано в моем проекте openstreetmap_h4 для быстрой обработки и загрузки дампа мира в базу данных PostGIS.

Рассматривал следующие варианты из систем георазметки…

Подробнее

Рейтинг 0

Комментарии 0

игор_сухоруков

Уровень сложности Easy

Время чтения 12 мин

Просмотров 1. 3K

Открытый код *PostgreSQL *Java *OpenStreetMap *

Перевод

Когда человек говорил, что он контролирует весь мир, его обычно помещали в соседнюю комнату с Наполеоном Бонапартом. Надеюсь, что эти времена уже в прошлом и каждый сможет проанализировать геоданные всей Земли и получить ответы на свои глобальные вопросы за считанные минуты и секунды. Я опубликовал Openstreetmap_h4 — мой проект, который позволяет выполнять геоаналитику по данным из OpenStreetMap в PostGIS или в любом движке запросов, который может работать с Apache Arrow/Parquet.

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

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

Подробнее

Всего голосов 8: ↑8 и ↓0 +8

Комментарии 0

коцев96

Уровень сложности Среда

Время считывания 8 мин

Просмотров 9.2K

Java *Go *

Дорожная карта

Это перевод моей статьи на русский язык

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

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

Подробнее

Всего голосов 3: ↑3 и ↓0 +3

Комментарии 0

коцев96

Уровень сложности Среда

Время считывания 6 мин

Просмотров 3.3K

Java *Go *Big Data *

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

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

Подробнее

Всего голосов 6: ↑5 и ↓1 +4

Комментарии 0

коцев96

Время чтения 7 мин

Просмотров 1.9K

Java *

Туториал

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

Подробнее

Всего голосов 3: ↑3 и ↓0 +3

Комментарии 0

коцев96

Время чтения 9 мин

Просмотров 2.8K

PostgreSQL *Java *SQL *NoSQL *Go *

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

Эта тема показалась мне актуальной, потому что такие задачи могут встречаться и на работе, и на собеседовании на System Design Interview и вам придется выбирать между этими двумя типами СУБД. Я погрузился в этот вопрос и расскажу что и как. Что лучше в каждом конкретном случае, каковы преимущества и недостатки этих систем и какую выбрать, я покажу на нескольких примерах в конце статьи.

SQL или NoSQL?

Подробнее

Всего голосов 1: ↑1 и ↓0 +1

Комментарии 0

граф4444

Время чтения 8 мин

Просмотров 3.4K

Иннотех Корпоративный блог Высокая производительность *Программирование *Java *Apache *

Перевод

На первый взгляд кажется, что добиться совместимости REST и Apache Kafka довольно сложно. Однако команда Innotech справилась с задачей. Кирилл Воронкин, ведущий разработчик Innotech, поделился подробностями преобразования несинхронизированных запросов в синхронизированные.

Подробнее

Всего голосов 1: ↑1 и ↓0 +1

Комментарии 0

Орион1979

Время чтения 3 мин

Просмотров 1.7K

Java *Бизнес-модели *Kubernetes *

Учебник

В предыдущем посте я описал пример микросервиса на основе kogito на quarkus в нативном режиме, содержащего одну встроенную модель pmml с деревом решений. Хотя его можно успешно использовать для целей прототипирования, в реальной жизни микросервис может содержать несколько моделей прогнозирования. На первый взгляд у меня сложилось впечатление, что включение нескольких моделей должно быть тривиальным расширением прототипа одной моделью. Мы полностью ошиблись в своем предположении, поэтому я решил написать этот пост. Другая причина – отсутствие руководств, в которых 2 (или более) модели помещаются внутрь диаграмм DMN в фреймворке kogito.

Подробнее

Всего голосов 1: ↑1 и ↓0 +1

Комментарии 0

Орион1979

Время чтения 5 мин

Просмотров 2. 6K

Java *Бизнес-модели *Kubernetes *

Учебное пособие

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

Подробнее

Всего голосов 1: ↑1 и ↓0 +1

Комментарии 0

MasterR_GeliOS

Время чтения 3 мин

Просмотров 3.9K

Разработка веб-сайта *Java *Apache *

В этой статье я описал проблемы, с которыми я столкнулся при интеграции Apache Camel с Spring Boot Actuator Prometheus для сбора метрик и свое решение для решения этой проблемы (которое я в инете не нашел).

Подробнее

Рейтинг 0

Комментарии 0

Mixxxxa

Время чтения 7 мин

Просмотров 848

Корпоративный блог PVS-Studio Информационная безопасность *Java *C++ *C# *

Впервые в PVS-Studio реализована поддержка классификации CWE в версии 6. 21. Он состоялся 15 января 2018 года. С тех пор прошли годы, и мы хотели бы рассказать вам об улучшениях, связанных с поддержкой этой классификации в последней версии анализатора.



Подробнее →

Рейтинг 0

Комментарии 0

tagir_valeev

Время чтения 4 мин

Просмотров 32K

Программирование *Java *Математика *

Перевод

Кажется, что задача вычисления абсолютного значения числа совершенно тривиальна. Если число отрицательное, измените знак. В противном случае просто оставьте все как есть. В Java это может выглядеть примерно так:

 общедоступный статический двойной пресс (двойное значение) {
  если (значение < 0) {
    возвращаемое значение;
  }
  возвращаемое значение;
} 

Кажется, это слишком просто даже для вопроса на собеседовании. Есть ли здесь подводные камни?

Подробнее →

Всего голосов 11: ↑10 и ↓1 +9

Комментарии 5

tagir_valeev

Время чтения 5 мин

Просмотров 3,9K

Программирование *Java *

Translation

В Java 8 представлены два типа функциональных выражений: лямбда-выражения, такие как s -> System.out.println(s) , и ссылки на методы, такие как System.out::println . Поначалу разработчики относились к ссылкам на методы с большим энтузиазмом: зачастую они более компактны, не нужно придумывать имя параметра, и, как гласят городские легенды, ссылки на методы несколько оптимальнее лямбда-выражений. Однако со временем энтузиазм угас. Одной из проблем со ссылками на методы является сложность отладки.

Подробнее →

Рейтинг 0

Комментарии 1

Алекспатель

Время чтения 7 мин

Просмотров 8K

Java *Разработка мобильных приложений *Разработка игр *Дизайн игр *Программное обеспечение

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

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

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

Подробнее

Рейтинг 0

Комментарии 3

абондар24

Время чтения 2 мин

просмотров 4K

Java *

Песочница

В мире микросервисов проблема высокой нагрузки чрезвычайно велика, особенно когда у нас есть REST API, доступ к которому осуществляется довольно широко. Зачем нам нужен дроссель? Основной ответ — снизить нагрузку на сервис в данный момент.

Разные фреймворки имеют разные решения, в основном какие-то дополнительные библиотеки. Также есть Guava RateLimiter и Bucket4J. Что интересно, Spring MVC, являющийся одним из самых популярных решений для создания REST API (спасибо, Spring Boot), не имеет встроенного ограничителя скорости. Что касается внешних решений, то их не так много.

Сегодня я хотел бы представить небольшую экспериментальную библиотеку для Spring MVC. Он называется SpringRateLimitter. Библиотека очень маленькая, работает во время выполнения. Идея состоит в том, чтобы аннотировать весь оставшийся контроллер или конкретный метод, затем подсчитать количество входящих запросов для аннотированного URI и на основе значений проверить, не превышаем ли мы допустимое количество вызовов. В случае превышения HTTP выдается код ошибки 429, и после окончания периода регулирования конечная точка снова становится доступной.

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

Подробнее

Всего голосов 3: ↑3 и ↓0 +3

Комментарии 0

Как Java работает со шрифтами / Хабр

Привет!

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

Прежде всего, давайте договоримся об определениях:

  • TrueType - шрифтовая технология, способ описания шрифтов в векторном формате ( .ttf файлы).

  • FreeType — библиотека для преобразования векторных шрифтов в растровые.

  • Логический шрифт — внешнее представление шрифтов в Java; Класс Font и его экземпляры.

  • Физический шрифт — файл шрифта в системе (например, файл .ttf ).

Как рисуются буквы?

Логический шрифт задается в программе Java (вручную или автоматически при создании экземпляров некоторых классов AWT/Swing). Пять логических шрифтов Java Dialog, DialogInput, Monospaced, SansSerif и Serif должны поддерживаться любой JRE [2].

Следующий шаг происходит во время выполнения скомпилированного байт-кода Java. JVM сопоставляет логический шрифт с наиболее подходящим физическим шрифтом, доступным на машине (JRE поддерживает шрифты TrueType и PostScript Type 1). Отображение выполняется через специальный файл отображения ( файл конфигурации шрифта ). В старой документации сказано, что файлы конфигурации шрифтов находятся в $JAVA_HOME/lib . Один файл выбирается в зависимости от ОС и версии ОС. Если подходящего файла нет, то выбирается по умолчанию fontconfig.properties . [3]

Я обнаружил, что эти файлы существуют только в Oracle JDK (в $JAVA_HOME/jre/lib/) и имеют такие имена, как fontconfig. properties.src . В других сборках OpenJDK, которые я исследовал, таких файлов не было...

Трассировка выполнения простой Java-программы, работающей со шрифтами, показала следующее (это верно для всех JDK, включая Oracle):

 $ javac FontView.java
$ strace -f java FontView &> out.txt
$ grep открыть файл out.txt | grep свойства
...
[pid 24909] openat(AT_FDCWD, "/home/user/.java/fonts/1.8.0_222/fcinfo-1-pc-Ubuntu-16.04-en.properties", O_RDONLY) = 5 

Вот оно! Фактическое расположение файла конфигурации шрифтов Java (mapfile) — $HOME/.java/fonts/[version] 9.0435 . Если такого файла нет, JVM создает его автоматически и заполняет шрифтами, подобранными с помощью libfontconfig . Это заставляет меня поверить, что $JAVA_HOME/lib/fontconfig.properties (он же $JAVA_HOME/jre/lib/fontconfig.properties.src ) является своего рода наследием...

Чтобы рисовать физические шрифты так же точно, как возможно, используется библиотека fontconfig ( libfontconfig ). Короче говоря, векторные шрифты настраиваются с несколькими значениями конфигурации, например. сглаживание, усиление, dpi или размер. libfontconfig используется для работы со всеми этими зависимостями.

Наконец, libfontconfig вызывает библиотеку FreeType. Теперь текст готов к отображению из памяти на наш экран 🙂

Как изменить шрифт?

Описан самый простой способ. Вся система будет использовать каталог только с нужными вам шрифтами. За это отвечает fonts.conf (рассказывает, какие физические шрифты доступны для ОС и программ). Если вы хотите более продвинутую настройку fonts.conf тогда читайте дополнительные источники.

  1. Установите нужный физический шрифт в системе (например, поместите файлы .ttf в /etc/fonts/my-custom-fonts ).

  2. Убедитесь, что /etc/fonts/font.conf содержит строку

    /etc/fonts/my-custom-fonts внутри тега и нет другие теги.