Чем отличается sendRedirect() от forward()?
forward():
• Выполняется на стороне сервера;
• Запрос перенаправляется на другой ресурс в пределах того же сервера;
• Не зависит от протокола клиентского запроса, так как обеспечивается контейнером сервлетов;
• Нельзя применять для внедрения сервлета в другой контекст;
• Клиент не знает о фактически обрабатываемом ресурсе и
• Выполняется быстрее метода
• Определён в интерфейсе
sendRedirect():
• Выполняется на стороне клиента;
• Клиенту возвращается ответ
• Может использоваться только с клиентами
• Разрешается применять для внедрения сервлета в другой контекст;
•
• Медленнее
• Определён в интерфейсе
forward():
• Выполняется на стороне сервера;
• Запрос перенаправляется на другой ресурс в пределах того же сервера;
• Не зависит от протокола клиентского запроса, так как обеспечивается контейнером сервлетов;
• Нельзя применять для внедрения сервлета в другой контекст;
• Клиент не знает о фактически обрабатываемом ресурсе и
URL
в строке остается прежним;• Выполняется быстрее метода
sendRedirect()
;• Определён в интерфейсе
RequestDispatcher
.sendRedirect():
• Выполняется на стороне клиента;
• Клиенту возвращается ответ
302 (redirect)
и запрос перенаправляется на другой сервер;• Может использоваться только с клиентами
HTTP
;• Разрешается применять для внедрения сервлета в другой контекст;
•
URL
адрес изменяется на адрес нового ресурса;• Медленнее
forward()
т.к. требует создания нового запроса;• Определён в интерфейсе
HttpServletResponse
.Для чего в Java используются статические блоки инициализации?
Статические блоки инициализация используются для выполнения кода, который должен выполняться один раз при инициализации класса загрузчиком классов, в момент, предшествующий созданию объектов этого класса при помощи конструктора. Такой блок (в отличие от нестатических, принадлежащих конкретном объекту класса) принадлежит только самому классу (объекту метакласса
Статические блоки инициализация используются для выполнения кода, который должен выполняться один раз при инициализации класса загрузчиком классов, в момент, предшествующий созданию объектов этого класса при помощи конструктора. Такой блок (в отличие от нестатических, принадлежащих конкретном объекту класса) принадлежит только самому классу (объекту метакласса
Class
).#вопросы_с_собеседований
Что произойдёт, если в блоке инициализации возникнет исключительная ситуация?
Для нестатических блоков инициализации, если выбрасывание исключения прописано явным образом требуется, чтобы объявления этих исключений были перечислены в throws всех конструкторов класса. Иначе будет ошибка компиляции. Для статического блока выбрасывание исключения в явном виде, приводит к ошибке компиляции.
В остальных случаях, взаимодействие с исключениями будет проходить так же, как и в любом другом месте. Класс не будет инициализирован, если ошибка происходит в статическом блоке и объект класса не будет создан, если ошибка возникает в нестатическом блоке.
Что произойдёт, если в блоке инициализации возникнет исключительная ситуация?
Для нестатических блоков инициализации, если выбрасывание исключения прописано явным образом требуется, чтобы объявления этих исключений были перечислены в throws всех конструкторов класса. Иначе будет ошибка компиляции. Для статического блока выбрасывание исключения в явном виде, приводит к ошибке компиляции.
В остальных случаях, взаимодействие с исключениями будет проходить так же, как и в любом другом месте. Класс не будет инициализирован, если ошибка происходит в статическом блоке и объект класса не будет создан, если ошибка возникает в нестатическом блоке.
#вопросы_с_собеседований
Что будет, если переопределить equals() не переопределяя hashCode()? Какие могут возникнуть проблемы?
Классы и методы, которые используют правила этого контракта могут работать некорректно. Так для
Что будет, если переопределить equals() не переопределяя hashCode()? Какие могут возникнуть проблемы?
Классы и методы, которые используют правила этого контракта могут работать некорректно. Так для
HashMap
это может привести к тому, что пара «ключ-значение», которая была в неё помещена при использовании нового экземпляра ключа не будет в ней найдена.📊🔟 ТОП-10 самых высокооплачиваемых языков программирования в 2022 году
Известная платформа по поиску работы DevJobsScanner составила список самых высокооплачиваемых языков программирования. Вместе разберемся, кто же входит в первую десятку и посмотрим, какие цифры рисуют работодатели в объявлениях, чтобы привлечь специалистов.
🔗 Основной сайт
🔗 Зеркало
Известная платформа по поиску работы DevJobsScanner составила список самых высокооплачиваемых языков программирования. Вместе разберемся, кто же входит в первую десятку и посмотрим, какие цифры рисуют работодатели в объявлениях, чтобы привлечь специалистов.
🔗 Основной сайт
🔗 Зеркало
🚀 IT и реальный сектор экономики: какие отрасли выстрелят через 5 лет
Каждые пять-десять лет список актуальных и востребованных профессий меняется. Разберемся, какие отрасли могут быть популярны в 2027 году.
🔗 Основной сайт
🔗 Зеркало
Каждые пять-десять лет список актуальных и востребованных профессий меняется. Разберемся, какие отрасли могут быть популярны в 2027 году.
🔗 Основной сайт
🔗 Зеркало
Как одним вызовом из List получить List со всеми элементами, кроме первых и последних 3-х?
List<Integer> subList = list.subList(3, list.size() - 3);
#вопросы_с_собеседований
Какие наиболее распространенные задачи выполняются в контейнере сервлетов?
☕️ Поддержка обмена данными. Контейнер сервлетов предоставляет легкий способ обмена данными между веб клиентом (браузером) и сервлетом. Благодаря контейнеру нет необходимости создавать слушателя сокета на сервере для отслеживания запросов от клиента, а так же разбирать запрос и генерировать ответ. Все эти важные и комплексные задачи решаются с помощью контейнера и разработчик может сосредоточиться на бизнес-логике приложения.
☕️ Управление жизненным циклом сервлетов и ресурсов. Начиная от загрузки сервлета в память, инициализации, внедрения методов и заканчивая уничтожением сервлета. Контейнер так же предоставляет дополнительные утилиты, например JNDI, для управления пулом ресурсов.
☕️ Поддержка многопоточности. Контейнер самостоятельно создает новую нить для каждого запроса и предоставляет ей запрос и ответ для обработки. Таким образом сервлет не инициализируется заново для каждого запроса и тем самым сохраняет память и уменьшает время до обработки запроса.
☕️ Поддержка JSP. JSP классы не похожи на стандартные классы джавы, но контейнер сервлетов преобразует каждую JSP в сервлет и далее управляется контейнером как обычным сервлетом.
☕️ Различные задачи. Контейнер сервлетов управляет пулом ресурсов, памятью приложения, сборщиком мусора. Предоставляются возможности настройки безопасности и многое другое.
Какие наиболее распространенные задачи выполняются в контейнере сервлетов?
☕️ Поддержка обмена данными. Контейнер сервлетов предоставляет легкий способ обмена данными между веб клиентом (браузером) и сервлетом. Благодаря контейнеру нет необходимости создавать слушателя сокета на сервере для отслеживания запросов от клиента, а так же разбирать запрос и генерировать ответ. Все эти важные и комплексные задачи решаются с помощью контейнера и разработчик может сосредоточиться на бизнес-логике приложения.
☕️ Управление жизненным циклом сервлетов и ресурсов. Начиная от загрузки сервлета в память, инициализации, внедрения методов и заканчивая уничтожением сервлета. Контейнер так же предоставляет дополнительные утилиты, например JNDI, для управления пулом ресурсов.
☕️ Поддержка многопоточности. Контейнер самостоятельно создает новую нить для каждого запроса и предоставляет ей запрос и ответ для обработки. Таким образом сервлет не инициализируется заново для каждого запроса и тем самым сохраняет память и уменьшает время до обработки запроса.
☕️ Поддержка JSP. JSP классы не похожи на стандартные классы джавы, но контейнер сервлетов преобразует каждую JSP в сервлет и далее управляется контейнером как обычным сервлетом.
☕️ Различные задачи. Контейнер сервлетов управляет пулом ресурсов, памятью приложения, сборщиком мусора. Предоставляются возможности настройки безопасности и многое другое.
#вопросы_с_собеседований
Какие наиболее распространенные задачи выполняются в контейнере сервлетов?
• Поддержка обмена данными. Контейнер сервлетов предоставляет легкий способ обмена данными между веб клиентом (браузером) и сервлетом. Благодаря контейнеру нет необходимости создавать слушателя сокета на сервере для отслеживания запросов от клиента, а также разбирать запрос и генерировать ответ. Все эти важные и комплексные задачи решаются с помощью контейнера и разработчик может сосредоточиться на бизнес логике приложения.
• Управление жизненным циклом сервлетов и ресурсов. Начиная от загрузки сервлета в память, инициализации, внедрения методов и заканчивая уничтожением сервлета. Контейнер так же предоставляет дополнительные утилиты, например
• Поддержка многопоточности. Контейнер самостоятельно создает новую нить для каждого запроса и предоставляет ей запрос и ответ для обработки. Таким образом сервлет не инициализируется заново для каждого запроса и тем самым сохраняет память и уменьшает время до обработки запроса.
• Поддержка
• Различные задачи. Контейнер сервлетов управляет пулом ресурсов, памятью приложения, сборщиком мусора. Предоставляются возможности настройки безопасности и многое другое.
Какие наиболее распространенные задачи выполняются в контейнере сервлетов?
• Поддержка обмена данными. Контейнер сервлетов предоставляет легкий способ обмена данными между веб клиентом (браузером) и сервлетом. Благодаря контейнеру нет необходимости создавать слушателя сокета на сервере для отслеживания запросов от клиента, а также разбирать запрос и генерировать ответ. Все эти важные и комплексные задачи решаются с помощью контейнера и разработчик может сосредоточиться на бизнес логике приложения.
• Управление жизненным циклом сервлетов и ресурсов. Начиная от загрузки сервлета в память, инициализации, внедрения методов и заканчивая уничтожением сервлета. Контейнер так же предоставляет дополнительные утилиты, например
JNDI
, для управления пулом ресурсов.• Поддержка многопоточности. Контейнер самостоятельно создает новую нить для каждого запроса и предоставляет ей запрос и ответ для обработки. Таким образом сервлет не инициализируется заново для каждого запроса и тем самым сохраняет память и уменьшает время до обработки запроса.
• Поддержка
JSP
. JSP
классы не похожи на стандартные классы джавы, но контейнер сервлетов преобразует каждую JSP
в сервлет и далее управляется контейнером как обычным сервлетом.• Различные задачи. Контейнер сервлетов управляет пулом ресурсов, памятью приложения, сборщиком мусора. Предоставляются возможности настройки безопасности и многое другое.
Сборка мусора в неисправных 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