Forwarded from Библиотека собеса по Java | вопросы с собеседований
Чем полезны неизменяемые объекты?
Неизменяемость (immutability) помогает облегчить написание многопоточного кода. Неизменяемый объект может быть использован без какой-либо синхронизации. К сожалению, в Java нет аннотации @Immutable, которая делает объект неизменяемым, для этого разработчикам нужно самим создавать класс с необходимыми характеристиками. Для этого необходимо следовать некоторым общим принципам: инициализация всех полей только в конструкторе, отсутствие методов setX() вносящих изменения в поля класса, отсутствие утечек ссылки, организация отдельного хранилища копий изменяемых объектов и т.д.
Неизменяемость (immutability) помогает облегчить написание многопоточного кода. Неизменяемый объект может быть использован без какой-либо синхронизации. К сожалению, в Java нет аннотации @Immutable, которая делает объект неизменяемым, для этого разработчикам нужно самим создавать класс с необходимыми характеристиками. Для этого необходимо следовать некоторым общим принципам: инициализация всех полей только в конструкторе, отсутствие методов setX() вносящих изменения в поля класса, отсутствие утечек ссылки, организация отдельного хранилища копий изменяемых объектов и т.д.
🤔🤔 Как сделать пароль менеджер
Для хранения паролей будет использоваться файл формата xml, который будет шифроваться методом AES-256 и храниться в облаке. В качестве облака был выбран сервис «Яндекс диск».
Основной процесс — это загрузка файла с паролями из облака, затем загрузка файла в оперативную память, его расшифровка и вывод паролей в интерфейс пользователю. По завершению работы с паролями, в оперативной памяти формируется XML-структура с паролями, которая шифруется и сохраняется в файл. Затем этот файл загружается в облако.
Продолжение тут
#гайд
Для хранения паролей будет использоваться файл формата xml, который будет шифроваться методом AES-256 и храниться в облаке. В качестве облака был выбран сервис «Яндекс диск».
Основной процесс — это загрузка файла с паролями из облака, затем загрузка файла в оперативную память, его расшифровка и вывод паролей в интерфейс пользователю. По завершению работы с паролями, в оперативной памяти формируется XML-структура с паролями, которая шифруется и сохраняется в файл. Затем этот файл загружается в облако.
Продолжение тут
#гайд
💥💥 Как шаблонный метод может сломать ваш Java код
ООП — это замечательно. За несоблюдение этой парадигмы принято ругать, а знание паттернов зачастую является обязательным. Но даже правильный подход не страхует полностью от ошибок. О том, как сломать программу при помощи обычного шаблонного метода, узнаете в статье.
Читать
#гайд
ООП — это замечательно. За несоблюдение этой парадигмы принято ругать, а знание паттернов зачастую является обязательным. Но даже правильный подход не страхует полностью от ошибок. О том, как сломать программу при помощи обычного шаблонного метода, узнаете в статье.
Читать
#гайд
Очередной #дайджест по Java
1️⃣ Новый пакет scala-repl в MELPA для разработчиков Scala — расширение Emacs для интерактивной работы с sbt/mill/scala-cli-проектами
2️⃣ JEP 482: Flexible Constructor Bodies направлен в JDK 23 в статусе second preview — при переходе в статус second preview его переименовали и теперь поля класса можно инициализировать до того, как будет вызван super()
3️⃣ sbt Android plugin — плагин с функциональностью sbt для разработки приложений под платформу Android
4️⃣ Опыт разработки сервиса отправки сообщений в Apache Kafka с использованием SASL/Kerberos и Avro Schema Registry — опыт создания сервиса для отправки сообщений в Apache Kafka с использованием Spring Boot, аутентификацией SASL/Kerberos и применением Avro Schema Registry для продюсера
5️⃣ SBOM support in Spring Boot 3.3 — SBOM описывает компоненты, которые использует ваша система, это может быть полезным, например, для автоматизированного составления списков уязвимостей вашей программы
1️⃣ Новый пакет scala-repl в MELPA для разработчиков Scala — расширение Emacs для интерактивной работы с sbt/mill/scala-cli-проектами
2️⃣ JEP 482: Flexible Constructor Bodies направлен в JDK 23 в статусе second preview — при переходе в статус second preview его переименовали и теперь поля класса можно инициализировать до того, как будет вызван super()
3️⃣ sbt Android plugin — плагин с функциональностью sbt для разработки приложений под платформу Android
4️⃣ Опыт разработки сервиса отправки сообщений в Apache Kafka с использованием SASL/Kerberos и Avro Schema Registry — опыт создания сервиса для отправки сообщений в Apache Kafka с использованием Spring Boot, аутентификацией SASL/Kerberos и применением Avro Schema Registry для продюсера
5️⃣ SBOM support in Spring Boot 3.3 — SBOM описывает компоненты, которые использует ваша система, это может быть полезным, например, для автоматизированного составления списков уязвимостей вашей программы
Forwarded from Библиотека собеса по Java | вопросы с собеседований
В каких состояниях может пребывать поток?
Поток в Java может находиться в следующих состояниях:
— New (Новый): поток создан, но еще не запущен.
— Runnable (Готов к выполнению): поток запущен, но в данный момент не выполняется, а ожидает выделения процессорного времени.
— Running (Выполняется): поток выполняется в настоящий момент.
— Blocked (Заблокирован): поток заблокирован, ожидая завершения какого-либо события, например завершения операции ввода-вывода.
— Waiting (Ожидание): поток ожидает другого потока, например, ожидая сигнала notify от другого потока.
— Timed Waiting (Ожидание с таймаутом): то же, что Waiting, но с указанием таймаута.
— Terminated (Завершен): выполнение потока завершено, например, после завершения метода run().
Поток в Java может находиться в следующих состояниях:
— New (Новый): поток создан, но еще не запущен.
— Runnable (Готов к выполнению): поток запущен, но в данный момент не выполняется, а ожидает выделения процессорного времени.
— Running (Выполняется): поток выполняется в настоящий момент.
— Blocked (Заблокирован): поток заблокирован, ожидая завершения какого-либо события, например завершения операции ввода-вывода.
— Waiting (Ожидание): поток ожидает другого потока, например, ожидая сигнала notify от другого потока.
— Timed Waiting (Ожидание с таймаутом): то же, что Waiting, но с указанием таймаута.
— Terminated (Завершен): выполнение потока завершено, например, после завершения метода run().
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Что выведет код сверху?
Anonymous Quiz
17%
40000
55%
Compilation error, cannot convert long to short
26%
-25536
2%
Свой вариант
Если вы используете DTO в Spring Data/JPA, вы можете автоматизировать отображение между сущностями и DTO с помощью библиотеки Blaze Persistence. Тогда вы сможете воспользоваться преимуществами, например, паттерна Spring repository.
Forwarded from Библиотека собеса по Java | вопросы с собеседований
В каких состояниях может пребывать поток?
Поток в Java может находиться в следующих состояниях:
— New (Новый): поток создан, но еще не запущен.
— Runnable (Готов к выполнению): поток запущен, но в данный момент не выполняется, а ожидает выделения процессорного времени.
— Running (Выполняется): поток выполняется в настоящий момент.
— Blocked (Заблокирован): поток заблокирован, ожидая завершения какого-либо события, например завершения операции ввода-вывода.
— Waiting (Ожидание): поток ожидает другого потока, например, ожидая сигнала notify от другого потока.
— Timed Waiting (Ожидание с таймаутом): то же, что Waiting, но с указанием таймаута.
— Terminated (Завершен): выполнение потока завершено, например, после завершения метода run().
Поток в Java может находиться в следующих состояниях:
— New (Новый): поток создан, но еще не запущен.
— Runnable (Готов к выполнению): поток запущен, но в данный момент не выполняется, а ожидает выделения процессорного времени.
— Running (Выполняется): поток выполняется в настоящий момент.
— Blocked (Заблокирован): поток заблокирован, ожидая завершения какого-либо события, например завершения операции ввода-вывода.
— Waiting (Ожидание): поток ожидает другого потока, например, ожидая сигнала notify от другого потока.
— Timed Waiting (Ожидание с таймаутом): то же, что Waiting, но с указанием таймаута.
— Terminated (Завершен): выполнение потока завершено, например, после завершения метода run().
#дайджест перед выходными
🔽 Spring AI 1.0.0 M1 release — из значимых нововведений: API для создания промптов, похожий на RestClient и JdbcClient, поддержка новых моделей и векторных хранилищ, TestContainers
🔽 Module Imports in Java 23 — автор рассказывает о книге, в которой описывается предварительный просмотр функции, основанной на модулях, которая может быть использована, даже если код не находится в модулях
🔽 Делаем ZIO-Kafka безопаснее и быстрее — пофиксили дублирование сообщений при ребалансе, добавив механизм отложенного выполнения, который дожидается, пока все сообщения в очереди не будут обработаны
🔽 Hibernate ORM 6.6 — небольшая заметка, которая рассказывает об аннотация, которая указывает на то, что в случае наследования сущностей Hibernate должен создавать прокси не на суперкласс, а на конкретного наследника
🔽 Spec-first and code-first, hand in hand — теперь вам не надо разрываться между подходами spec-first или code-first, а использовать оба одновременно
🔽 Spring AI 1.0.0 M1 release — из значимых нововведений: API для создания промптов, похожий на RestClient и JdbcClient, поддержка новых моделей и векторных хранилищ, TestContainers
🔽 Module Imports in Java 23 — автор рассказывает о книге, в которой описывается предварительный просмотр функции, основанной на модулях, которая может быть использована, даже если код не находится в модулях
🔽 Делаем ZIO-Kafka безопаснее и быстрее — пофиксили дублирование сообщений при ребалансе, добавив механизм отложенного выполнения, который дожидается, пока все сообщения в очереди не будут обработаны
🔽 Hibernate ORM 6.6 — небольшая заметка, которая рассказывает об аннотация, которая указывает на то, что в случае наследования сущностей Hibernate должен создавать прокси не на суперкласс, а на конкретного наследника
🔽 Spec-first and code-first, hand in hand — теперь вам не надо разрываться между подходами spec-first или code-first, а использовать оба одновременно
❤️🙏 Помните историю автора «Библиотеки программиста» Станислав Герасимов? Станислав — инвалид с детства. В статье он рассказывал, как получил диплом и строит карьеру в IT.
❗️ В обновленной статье читайте продолжение его истории. И самое главное: очень скоро он отправляется на операцию и ему нужна ваша помощь.
❗️ В обновленной статье читайте продолжение его истории. И самое главное: очень скоро он отправляется на операцию и ему нужна ваша помощь.
🧔🧔 Строим свой SSO
Серия статей про постройку собственного SSO Server-а.
Единый вход в систему (Single sign-on, SSO) — это решение для аутентификации,
которое дает пользователям возможность входить в несколько приложений и на
несколько веб-сайтов с использованием единовременной аутентификации пользователя.
Продолжение здесь
#туториал
Серия статей про постройку собственного SSO Server-а.
Единый вход в систему (Single sign-on, SSO) — это решение для аутентификации,
которое дает пользователям возможность входить в несколько приложений и на
несколько веб-сайтов с использованием единовременной аутентификации пользователя.
Продолжение здесь
#туториал