Сборка мусора в неисправных JVM, проактивный подход.
https://habr.com/ru/company/timeweb/blog/700224/
https://habr.com/ru/company/timeweb/blog/700224/
Хабр
Сборка мусора в неисправных JVM, проактивный подход
Команда Netflix Cloud Data Engineering работает с различными приложениями для JVM, включая такие популярные хранилища данных, как Cassandra и Elasticsearch. Хотя большинство наших кластеров стабильно...
🙌 12 алгоритмов, которые должен знать каждый разработчик: объясняем на гифках
Алгоритмы давно заняли особую нишу как в Computer Science, так и в разработке ПО. Однако какую роль они играют в жизни разработчика и что конкретно из них следует изучить и знать? Об этом вы узнаете из нашей статьи.
https://proglib.io/sh/R98fxX2aUq
Алгоритмы давно заняли особую нишу как в Computer Science, так и в разработке ПО. Однако какую роль они играют в жизни разработчика и что конкретно из них следует изучить и знать? Об этом вы узнаете из нашей статьи.
https://proglib.io/sh/R98fxX2aUq
#вопросы_с_собеседований
Какие классы поддерживают чтение и запись потоков в компрессированном формате?
☕️ DeflaterOutputStream - компрессия данных в формате deflate.
☕️ Deflater - компрессия данных в формат ZLIB.
☕️ ZipOutputStream - потомок DeflaterOutputStream для компрессии данных в формат Zip.
☕️ GZIPOutputStream - потомок DeflaterOutputStream для компрессии данных в формат GZIP.
☕️ InflaterInputStream - декомпрессия данных в формате deflate.
☕️ Inflater - декомпрессия данных в формате ZLIB.
☕️ ZipInputStream - потомок InflaterInputStream для декомпрессии данных в формате Zip.
☕️ GZIPInputStream - потомок InflaterInputStream для декомпрессии данных в формате GZIP.
Какие классы поддерживают чтение и запись потоков в компрессированном формате?
☕️ DeflaterOutputStream - компрессия данных в формате deflate.
☕️ Deflater - компрессия данных в формат ZLIB.
☕️ ZipOutputStream - потомок DeflaterOutputStream для компрессии данных в формат Zip.
☕️ GZIPOutputStream - потомок DeflaterOutputStream для компрессии данных в формат GZIP.
☕️ InflaterInputStream - декомпрессия данных в формате deflate.
☕️ Inflater - декомпрессия данных в формате ZLIB.
☕️ ZipInputStream - потомок InflaterInputStream для декомпрессии данных в формате Zip.
☕️ GZIPInputStream - потомок InflaterInputStream для декомпрессии данных в формате GZIP.
#вопросы_с_собеседований
Какой класс позволяет читать данные из входного байтового потока в формате примитивных типов данных?
Класс
•
•
•
Какой класс позволяет читать данные из входного байтового потока в формате примитивных типов данных?
Класс
DataInputStream
представляет поток ввода и предназначен для записи данных примитивных типов, таких, как int
, double
и т.д. Для каждого примитивного типа определен свой метод для считывания:•
boolean readBoolean()
: считывает из потока булевое однобайтовое значение•
byte readByte()
: считывает из потока 1 байт•
char readChar()
: считывает из потока значение char
• double readDouble()
: считывает из потока 8-байтовое значение double
• float readFloat()
: считывает из потока 4-байтовое значение float
• int readInt()
: считывает из потока целочисленное значение int
• long readLong()
: считывает из потока значение long
• short readShort()
: считывает значение short
• String readUTF()
: считывает из потока строку в кодировке UTF-8
Расскажите про вложенные классы. В каких случаях они применяются?
Класс называется вложенным (Nested class), если он определен внутри другого класса. Вложенный класс должен создаваться только для того, чтобы обслуживать обрамляющий его класс. Если вложенный класс оказывается полезен в каком-либо ином контексте, он должен стать классом верхнего уровня. Вложенные классы имеют доступ ко всем (в том числе приватным) полям и методам внешнего класса, но не наоборот. Из-за этого разрешения использование вложенных классов приводит к некоторому нарушению инкапсуляции.
Существуют четыре категории вложенных классов:
• Static nested class (Статический вложенный класс);
• Member inner class (Простой внутренний класс);
• Local inner class (Локальный класс);
• Anonymous inner class (Анонимный класс).
Такие категории классов, за исключением первого, также называют внутренними (Inner class). Внутренние классы ассоциируются не с внешним классом, а с экземпляром внешнего.
Каждая из категорий имеет рекомендации по своему применению. Если вложенный класс должен быть виден за пределами одного метода или он слишком длинный для того, чтобы его можно было удобно разместить в границах одного метода и если каждому экземпляру такого класса необходима ссылка на включающий его экземпляр, то используется нестатический внутренний класс. В случае, если ссылка на обрамляющий класс не требуется - лучше сделать такой класс статическим. Если класс необходим только внутри какого-то метода и требуется создавать экземпляры этого класса только в этом методе, то используется локальный класс. А, если к тому же применение класса сводится к использованию лишь в одном месте и уже существует тип, характеризующий этот класс, то рекомендуется делать его анонимным классом.
Класс называется вложенным (Nested class), если он определен внутри другого класса. Вложенный класс должен создаваться только для того, чтобы обслуживать обрамляющий его класс. Если вложенный класс оказывается полезен в каком-либо ином контексте, он должен стать классом верхнего уровня. Вложенные классы имеют доступ ко всем (в том числе приватным) полям и методам внешнего класса, но не наоборот. Из-за этого разрешения использование вложенных классов приводит к некоторому нарушению инкапсуляции.
Существуют четыре категории вложенных классов:
• Static nested class (Статический вложенный класс);
• Member inner class (Простой внутренний класс);
• Local inner class (Локальный класс);
• Anonymous inner class (Анонимный класс).
Такие категории классов, за исключением первого, также называют внутренними (Inner class). Внутренние классы ассоциируются не с внешним классом, а с экземпляром внешнего.
Каждая из категорий имеет рекомендации по своему применению. Если вложенный класс должен быть виден за пределами одного метода или он слишком длинный для того, чтобы его можно было удобно разместить в границах одного метода и если каждому экземпляру такого класса необходима ссылка на включающий его экземпляр, то используется нестатический внутренний класс. В случае, если ссылка на обрамляющий класс не требуется - лучше сделать такой класс статическим. Если класс необходим только внутри какого-то метода и требуется создавать экземпляры этого класса только в этом методе, то используется локальный класс. А, если к тому же применение класса сводится к использованию лишь в одном месте и уже существует тип, характеризующий этот класс, то рекомендуется делать его анонимным классом.
Друзья, в этом месяце состоялся релиз новой версии Spring Framework 6 и должен состояться релиз новой версии Spring Boot 3! 😃
В предложенном сегодня видео Josh Long продемонстрирует современный, опережающий свое время движок для компиляции в Spring Framework 6 и Spring Boot 3, повышающий скорость работы приложения и эффективность используемой памяти.
Приятного просмотра!
В предложенном сегодня видео Josh Long продемонстрирует современный, опережающий свое время движок для компиляции в Spring Framework 6 и Spring Boot 3, повышающий скорость работы приложения и эффективность используемой памяти.
Приятного просмотра!
YouTube
Spring Tips: the road to Spring Boot 3: ahead-of-time compilation and GraalVM
Hi, Spring fans! In this installment of Spring Tips, we look at everything you ever wanted (and didn't) to know about the fantastic new ahead-of-time (AOT) compilation engine in Spring Framework 6 and Spring Boot 3 (due out November 24th, 2022!) that supports…
Сколько строк сможет заполнить пропуск без ошибки компиляции?
Anonymous Quiz
14%
0
11%
1
5%
2
8%
3
5%
4
4%
5
52%
Узнать ответ
Мы переезжаем с текущего офиса в центре Москвы с идеальной локацией — рядом метро и все необходимое.
Если у кого-то есть знакомые, которым нужно хорошее пространство на 5 человек, например, взамен коворкингу, то это идеальный вариант.
А еще там осталась мебель в хорошем состоянии, которую можно выкупить дешевле, чем заказывать из магазина.
Адрес: https://yandex.ru/maps/-/CCUfFIa2-D
Записаться на просмотр: https://proglib.tech/w/c9e8bf63
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Если посмотреть код внутри созданной JSP страницы, то он будет выглядеть как HTML и не будет похож на java класс. Конвертацией JSP страниц в HTML код занимается контейнер, который так же создает и сервлет для использования в веб приложении.
#вопросы_с_собеседований
Расскажите об этапах (фазах) жизненного цикла JSP.
Жизненный цикл JSP состоит из нескольких фаз, которыми руководит JSP контейнер:
• Translation – проверка и парсинг кода JSP страницы для создания кода сервлета.
• Compilation – компиляция исходного кода сервлета.
• Class Loading – загрузка скомпилированного класса в память.
• Instantiation – внедрение конструктора без параметра загруженного класса для инициализации в памяти.
• Initialization – вызов init() метода объекта JSP класса и инициализация конфигурации сервлета с первоначальными параметрами, которые указаны в дескрипторе развертывания (web.xml). После этой фазы JSP способен обрабатывать запросы клиентов. Обычно эти фазы происходят после первого запроса клиента (т.е. ленивая загрузка), но можно настроить загрузку и инициализацию JSP на старте приложения по аналогии с сервлетами.
• Request Processing – длительный жизненный цикл обработки запросов клиента JSP страницей. Обработка является многопоточной и аналогична сервлетам — для каждого запроса создается новый поток, объекты ServletRequest и ServletResponse, происходит выполнение сервис методов.
• Destroy – последняя фаза жизненного цикла JSP, на которой её класс удаляется из памяти. Обычно это происходит при выключении сервера или выгрузке приложения.
#вопросы_с_собеседований
Расскажите об этапах (фазах) жизненного цикла JSP.
Жизненный цикл JSP состоит из нескольких фаз, которыми руководит JSP контейнер:
• Translation – проверка и парсинг кода JSP страницы для создания кода сервлета.
• Compilation – компиляция исходного кода сервлета.
• Class Loading – загрузка скомпилированного класса в память.
• Instantiation – внедрение конструктора без параметра загруженного класса для инициализации в памяти.
• Initialization – вызов init() метода объекта JSP класса и инициализация конфигурации сервлета с первоначальными параметрами, которые указаны в дескрипторе развертывания (web.xml). После этой фазы JSP способен обрабатывать запросы клиентов. Обычно эти фазы происходят после первого запроса клиента (т.е. ленивая загрузка), но можно настроить загрузку и инициализацию JSP на старте приложения по аналогии с сервлетами.
• Request Processing – длительный жизненный цикл обработки запросов клиента JSP страницей. Обработка является многопоточной и аналогична сервлетам — для каждого запроса создается новый поток, объекты ServletRequest и ServletResponse, происходит выполнение сервис методов.
• Destroy – последняя фаза жизненного цикла JSP, на которой её класс удаляется из памяти. Обычно это происходит при выключении сервера или выгрузке приложения.
Друзья, Spring Boot 3.0 стал доступен в репозитории Maven! 😃
Spring Boot 3.0 это:
✔️ 12 месяцев работы 151 разработчика
✔️ 5700 коммитов
✔️ Работа в Java 17+
✔️ Работа в пространстве имен Jakarta EE9+ и Jakarta EE 10 API
и многое другое.
Подробности в предложенном релизе.
Читать статью
Spring Boot 3.0 это:
✔️ 12 месяцев работы 151 разработчика
✔️ 5700 коммитов
✔️ Работа в Java 17+
✔️ Работа в пространстве имен Jakarta EE9+ и Jakarta EE 10 API
и многое другое.
Подробности в предложенном релизе.
Читать статью
Spring Boot 3.0 Goes GA
Level up your Java code and explore what Spring can do for you.
Рекомендации по миграции на Spring 6
Буквально на днях вышла новая версия Spring Framework, особенностью которой является поддержка Java 17, Hibernate 6.1/Jakarta Persistence 3.1 и др. 😃
Статья от Vlad Mihalcea представляет собой рекомендации по миграции с более ранних версий фреймворка к новой версии.
Хорошей практики!
Читать статью
Буквально на днях вышла новая версия Spring Framework, особенностью которой является поддержка Java 17, Hibernate 6.1/Jakarta Persistence 3.1 и др. 😃
Статья от Vlad Mihalcea представляет собой рекомендации по миграции с более ранних версий фреймворка к новой версии.
Хорошей практики!
Читать статью
Vlad Mihalcea
The best way to do the Spring 6 migration - Vlad Mihalcea
The Spring 6 Migration Guide will show you how to migrate an existing application to and how to get the most out of this upgrade.
Какие области видимости переменных существуют в JSP?
Область видимости объектов определяется тем контекстом, в который помещается данный объект. В зависимости от той или иной области действия так же определяется время существования объекта.
В
•
•
•
•
Таким образом, чтобы объект был доступен всем
Для указания требуемой области действия при определении объекта на
Область видимости объектов определяется тем контекстом, в который помещается данный объект. В зависимости от той или иной области действия так же определяется время существования объекта.
В
JSP
предусмотрены следующие области действия переменных (объектов):•
request
область действия запроса - объект будет доступен на текущей JSP
странице, странице пересылки (при использовании jsp:forward
) или на включаемой странице (при использовании jsp:include
);•
session
область действия сессии - объект будет помещен в сеанс пользователя, будет доступен на всех JSP
страницах и будет существовать пока существует сессия пользователя, или он не будет из нее принудительно удален.•
application
область действия приложения - объект будет доступен для всех пользователей на всех JSP
страницах и будет существовать на протяжении всей работы приложения или пока не будет удален принудительно и контекста приложения.•
page
область действия страницы - объект будет доступен только на той странице, где он определен. На включаемых (jsp:include
) и переадресуемых (jsp:forward
) страницах данный объект уже не будет доступен.Таким образом, чтобы объект был доступен всем
JSP
страницам, необходимо указать область видимости application
или session
, в зависимости от того требуется ли доступ к объекту всем пользователям или только текущему.Для указания требуемой области действия при определении объекта на
JSP
странице используется атрибут scope
тега jsp:useBean
:<id="myBean" class="ru.javacore.MyBean" scope="session"/>
Если не указывать атрибут scope
, то по умолчанию задается область видимости страницы page
.DDD, HEXAGON, HIBERNATE, не считая JOOQ. Часть 2: гексагональная архитектура
https://habr.com/ru/company/rshb/blog/700790/
https://habr.com/ru/company/rshb/blog/700790/
Хабр
DDD, HEXAGON, HIBERNATE, не считая JOOQ. Часть 2: гексагональная архитектура
Продолжаем серию публикаций для java разработчиков, создающих системы со сложной предметной областью, первую часть можно почитать здесь. В новой статье поговорим о гексагональной архитектуре. Источник...
📜 15 лучших практик SQL после 20 лет программирования
Даже если ваш SQL-код работает правильно, его все равно можно улучшить, в частности в том, что касается производительности и читаемости. В статье перечислены лучшие практики составления SQL-запросов, которым вы должны следовать, чтобы сделать ваш код более легким для чтения и понимания.
🔗 Основной сайт
🔗 Зеркало
Даже если ваш SQL-код работает правильно, его все равно можно улучшить, в частности в том, что касается производительности и читаемости. В статье перечислены лучшие практики составления SQL-запросов, которым вы должны следовать, чтобы сделать ваш код более легким для чтения и понимания.
🔗 Основной сайт
🔗 Зеркало
Создаем умные типы данных при помощи records и enums
Друзья, предложенную сегодня статью написал Брюс Эккель, автор книги "Философия Java".
Основываясь на функциональном подходе конструирования типов Java, используя "записи" (records) и перечисляемые типы (enums), Брюс научит вас получать объекты с корректными значениями. 🤔
Приятного чтения!
Читать статью
Друзья, предложенную сегодня статью написал Брюс Эккель, автор книги "Философия Java".
Основываясь на функциональном подходе конструирования типов Java, используя "записи" (records) и перечисляемые типы (enums), Брюс научит вас получать объекты с корректными значениями. 🤔
Приятного чтения!
Читать статью
Oracle
Build smarter Java types with records and enums
Taking a functional approach to Java type design using Java’s new record keyword to guarantee that each constructed object is a legal value.