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 мин
просмотров 488Java *
Песочница
Здравствуйте!
В этой статье я попытаюсь кратко описать, как виртуальная машина Java работает со шрифтами. Однажды мне понадобилось изменить шрифт, используемый JVM, и, что удивительно, я нашел только обрывки устаревшей информации об этом. Я потратил немного времени на изучение проблемы и теперь хочу поделиться этой информацией со всеми, кому она может оказаться полезной. Не стесняйтесь оставлять комментарии 🙂
Рейтинг 0
Комментарии 1
УрусоффВремя чтения 4 мин
Просмотры 470Программирование *Java *Проектирование и рефакторинг *Параллельные вычисления *
Песочница
В одном из заданий на проекте мне пришлось оборачивать коллекцию
Рейтинг 0
Комментарии 0
vda19999Уровень сложности Среда
Время считывания 11 мин.
просмотров 1.3KPython *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.2KJava *Go *
Дорожная карта
Это перевод моей статьи на русский язык
В этой статье я хочу написать о своем опыте взаимодействия с платформой LeetCode, и описать свои подготовка к собеседованию в аналогичных компаниях FAANG с разбивкой на уровни.
Вся статья написана исходя из моего опыта, цифры очень приблизительные, на объективность не претендую, возможно есть наработки по решению проблем с LeetCode, было бы круто, если бы вы поделились своим опытом в комментариях .
ПодробнееВсего голосов 3: ↑3 и ↓0 +3
Комментарии 0
коцев96Уровень сложности Среда
Время считывания 6 мин
Просмотров 3.3KJava *Go *Big Data *
Это цикл статей, посвященных оптимальному выбору между различными системами на реальном проекте или архитектурном интервью.
На работе или на собеседовании по системному дизайну вам часто приходится выбирать лучшего брокера сообщений. Я погрузился в этот вопрос и расскажу что и почему. Что лучше в каждом конкретном случае, каковы преимущества и недостатки этих систем и какую выбрать, я покажу на нескольких примерах.
ПодробнееВсего голосов 6: ↑5 и ↓1 +4
Комментарии 0
коцев96Время чтения 7 мин
Просмотров 1.9KJava *
Туториал
В этой статье я хочу описать свой опыт погашения технического долга на нашем проекте в виде гайда. В этом руководстве я расскажу о некоторых наиболее распространенных случаях технического долга и предложу методы их решения. Так как это довольно обширная тема, я порекомендую несколько книг для изучения, так как не вижу возможности рассказать обо всем в рамках данной статьи. Все описанное относится к BackEnd части, но может подойти и другим разработчикам. Буду рад, если вы поделитесь своим опытом по этой теме в комментариях.
Всего голосов 3: ↑3 и ↓0 +3
Комментарии 0
коцев96Время чтения 9 мин
Просмотров 2.8KPostgreSQL *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 000Z» title=»2022-04-19, 15:29″> 19 апр 2022 в 15:29Время чтения 3 мин
Просмотров 1.7KJava *Бизнес-модели *Kubernetes *
Учебник
В предыдущем посте я описал пример микросервиса на основе kogito на quarkus в нативном режиме, содержащего одну встроенную модель pmml с деревом решений. Хотя его можно успешно использовать для целей прототипирования, в реальной жизни микросервис может содержать несколько моделей прогнозирования. На первый взгляд у меня сложилось впечатление, что включение нескольких моделей должно быть тривиальным расширением прототипа одной моделью. Мы полностью ошиблись в своем предположении, поэтому я решил написать этот пост. Другая причина – отсутствие руководств, в которых 2 (или более) модели помещаются внутрь диаграмм DMN в фреймворке kogito.
ПодробнееВсего голосов 1: ↑1 и ↓0 +1
Комментарии 0
Орион1979Время чтения 5 мин
Просмотров 2. 6KJava *Бизнес-модели *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 000Z" title="2021-07-24, 13:27"> 24 июл 2021 в 13:27Время чтения 5 мин
Просмотров 3,9KПрограммирование *Java *
Translation
В Java 8 представлены два типа функциональных выражений: лямбда-выражения, такие как s -> System.out.println(s)
, и ссылки на методы, такие как System.out::println
. Поначалу разработчики относились к ссылкам на методы с большим энтузиазмом: зачастую они более компактны, не нужно придумывать имя параметра, и, как гласят городские легенды, ссылки на методы несколько оптимальнее лямбда-выражений. Однако со временем энтузиазм угас. Одной из проблем со ссылками на методы является сложность отладки.
Рейтинг 0
Комментарии 1
АлекспательВремя чтения 7 мин
Просмотров 8KJava *Разработка мобильных приложений *Разработка игр *Дизайн игр *Программное обеспечение
Прошедший год был очень непростым для бизнеса и сотрудников. Тем не менее, разработка программного обеспечения не так сильно пострадала и все еще процветает. В то время как техническая экспансия продолжается, разработка Java также претерпевает значительные изменения.
Появление новых концепций и технологий поставило под вопрос потенциал Java-разработчиков. От носимых приложений до решений на основе ИИ — использование Java вызывает беспокойство у коллег.
Кроме того, настало время, чтобы разработчики повысили свои навыки в соответствии с меняющимися требованиями отрасли. Если вы являетесь разработчиком Java, вам, конечно, тоже будет интересно, что я говорю о том, что вам следует изучить.
ПодробнееРейтинг 0
Комментарии 3
абондар24Время чтения 2 мин
просмотров 4KJava *
Песочница
В мире микросервисов проблема высокой нагрузки чрезвычайно велика, особенно когда у нас есть 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
тогда читайте дополнительные источники.
Установите нужный физический шрифт в системе (например, поместите файлы
.ttf
в/etc/fonts/my-custom-fonts
).Убедитесь, что
/etc/fonts/font.conf
содержит строку
внутри тега/etc/fonts/my-custom-fonts
теги.