en
Feedback
Java | Вопросы собесов

Java | Вопросы собесов

Open in Telegram

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv

Show more

📈 Analytical overview of Telegram channel Java | Вопросы собесов

Channel Java | Вопросы собесов (@easy_java_ru) in the Russian language segment is an active participant. Currently, the community unites 11 368 subscribers, ranking 10 619 in the Technologies & Applications category and 56 558 in the Russia region.

📊 Audience metrics and dynamics

Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 11 368 subscribers.

According to the latest data from 02 September, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -29 over the last 30 days and by -12 over the last 24 hours, overall reach remains high.

  • Verification status: Not verified
  • Engagement rate (ER): The average audience engagement rate is 8.57%. Within the first 24 hours after publication, content typically collects 5.66% reactions from the total number of subscribers.
  • Post reach: On average, each post receives 974 views. Within the first day, a publication typically gains 643 views.
  • Reactions and interaction: The audience actively supports content: the average number of reactions per post is 4.
  • Thematic interests: Content is focused on key topics such as ставь, void, string, строка, static.

📝 Description and content policy

The author describes the resource as a platform for expressing subjective opinions:
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv

Thanks to the high frequency of updates (latest data received on 03 September, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.

11 368
Subscribers
-1224 hours
-367 days
-2930 days
Posts Archive
🤔 Что известно о языке выражений JSP ,JSP Expression Language – EL ? Это язык выражений, встроенный, который упрощает доступ к данным и взаимодействие с ними в JSP страницах. JSP EL позволяет обращаться к объектам и свойствам в различных областях видимости (например, request, session, application) с помощью простого синтаксиса, аналогичного JavaScript. 🚩Основные особенности 🟠Простота использования EL позволяет обращаться к данным и свойствам объектов с помощью простого синтаксиса ${...}, что упрощает код JSP страниц. 🟠Области видимости (scopes) EL автоматически ищет объекты и их свойства в различных областях видимости: page, request, session, application. 🟠Доступ к свойствам JavaBeans EL поддерживает доступ к свойствам JavaBeans и методам геттеров. 🟠Поддержка операторов и функций EL поддерживает различные операторы (арифметические, логические, сравнения) и может использоваться для выполнения простых логических операций и выражений. 🟠Безопасность и защита от ошибок EL защищает от ошибок NullPointerException, возвращая пустую строку или значение по умолчанию, если объект или свойство не найдено. 🚩Основные элементы 🟠Обращение к свойствам объектов Использование точечной нотации для доступа к свойствам объектов. Пример: ${user.name} 🟠Обращение к элементам коллекций и массивов Использование квадратных скобок для доступа к элементам коллекций и массивов. Пример: ${users[0].name} или ${map['key']} 🟠Операторы Арифметические операторы: +, -, *, /, % Логические операторы: &&, ||, ! Операторы сравнения: ==, !=, <, >, <=, >= Условный оператор: ?: 🟠Функции EL поддерживает вызов функций, определенных в JSTL (JavaServer Pages Standard Tag Library) и пользовательских тегах. 🚩Примеры использования Доступ к свойствам объекта
<%
    User user = new User();
    user.setName("John Doe");
    request.setAttribute("user", user);
%>
<p>Username: ${user.name}</p>
Доступ к элементам коллекции
<%
    List<User> users = new ArrayList<>();
    users.add(new User("John Doe"));
    users.add(new User("Jane Smith"));
    request.setAttribute("users", users);
%>
<c:forEach var="user" items="${users}">
    <p>User: ${user.name}</p>
</c:forEach>
Использование операторов
<%
    int num1 = 5;
    int num2 = 10;
    request.setAttribute("num1", num1);
    request.setAttribute("num2", num2);
%>
<p>Sum: ${num1 + num2}</p>
<p>Is num1 less than num2? ${num1 < num2}</p>
🚩Интеграция с JSTL (JavaServer Pages Standard Tag Library) JSP EL тесно интегрирован с JSTL, что позволяет использовать различные теги JSTL для выполнения общих задач.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
    User user = new User();
    user.setName("John Doe");
    request.setAttribute("user", user);
%>
<c:if test="${user.name != null}">
    <p>User is logged in as ${user.name}</p>
</c:if>
🚩ПлюсыЧистый и понятный код EL позволяет писать более чистый и читаемый код по сравнению с использованием скриплетов. ➕Разделение логики и представления EL способствует лучшему разделению логики и представления, оставляя JSP страницы сфокусированными на отображении данных. ➕Легкость поддержки и тестирования Код, использующий EL, легче поддерживать и тестировать, поскольку он не смешивает бизнес-логику с представлением. ➕Безопасность EL обеспечивает защиту от ошибок, связанных с отсутствующими или нулевыми значениями. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое Spring Boot и в чём его основное преимущество? Это фреймворк для создания приложений на основе Spring, упрощающий их настройку и запуск. 1. Он предоставляет преднастроенные зависимости и автоматическую конфигурацию. 2. Устраняет необходимость вручную создавать XML-конфигурации. 3. Основное преимущество — быстрое создание прототипов и упрощённое управление инфраструктурой приложения. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как определить класс внутри JSP страницы ? Определение классов внутри JSP страниц считается плохой практикой и не рекомендуется, так как это нарушает принципы разделения логики и представления, усложняет поддержку и тестирование кода. 🚩Определение класса внутри страницы Класс можно определить внутри страницы с помощью деклараций (<%! ... %>). Декларации позволяют определять поля, методы и классы, которые будут скомпилированы в сервлет, генерируемый из страницы.
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Define Class in JSP</title>
</head>
<body>
    <h1>Class Definition Example</h1>
    
    <%! 
        // Определение внутреннего класса внутри JSP страницы
        public class Greeting {
            private String message;
            
            public Greeting(String message) {
                this.message = message;
            }
            
            public String getMessage() {
                return message;
            }
        }
    %>
    
    <%
        // Создание экземпляра класса и использование его методов
        Greeting greeting = new Greeting("Hello, World!");
        out.println("<p>Greeting Message: " + greeting.getMessage() + "</p>");
    %>
</body>
</html>
🚩Почему не рекомендуется использовать классы 🟠Нарушение принципа разделения логики и представления Предназначена для представления данных, а не для обработки бизнес-логики или определения классов. Логика должна быть размещена в сервлетах, контроллерах или других бизнес-слоях. 🟠Проблемы с поддержкой Смешивание кода Java и HTML делает код трудночитаемым и сложным для поддержки. Трудно отлаживать и тестировать такой код. 🟠Модульность и повторное использование Классы, определенные внутри JSP страниц, не могут быть легко использованы в других частях приложения. 🟠Совместимость и переносимость Код, написанный в JSP, ограничен по сравнению с использованием полноценных Java классов в отдельных файлах, что затрудняет переносимость и совместимость кода. 🚩Рекомендуемые альтернативы 🟠Servlets и контроллеры Используйте сервлеты и контроллеры для обработки бизнес-логики и данных, а затем передавайте результаты JSP для отображения.
      @WebServlet("/greeting")
   public class GreetingServlet extends HttpServlet {
       protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
           Greeting greeting = new Greeting("Hello, World!");
           request.setAttribute("greeting", greeting);
           request.getRequestDispatcher("/greeting.jsp").forward(request, response);
       }
   }
   
   public class Greeting {
       private String message;
       
       public Greeting(String message) {
           this.message = message;
       }
       
       public String getMessage() {
           return message;
       }
   }
🟠JSP Expression Language (EL) и JSTL Для доступа к данным и выполнения логических операций без написания Java кода внутри JSP.
      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
   <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
   <html>
   <head>
       <title>Greeting Example</title>
   </head>
   <body>
       <h1>Greeting Example</h1>
       <p>Greeting Message: ${greeting.message}</p>
   </body>
   </html>
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что значит реляционная база данных? Реляционная база данных организует данные в виде таблиц, где строки представляют записи, а столбцы — атрибуты. 1. Взаимосвязь между таблицами осуществляется через первичные и внешние ключи. 2. Она поддерживает запросы на основе языка SQL, что упрощает выборку и модификацию данных. 3. Пример: PostgreSQL, MySQL. Ставь 👍 и забирай 📚 Базу знаний

🤔 Почему не рекомендуется использовать скриплеты, скриптовые элементы в JSP ? Использование скриплетов и скриптовых элементов (Java код внутри JSP страниц) не рекомендуется по ряду причин, связанных с лучшими практиками разработки, поддержкой, безопасностью и архитектурными принципами. 🚩Причины 🟠Поддерживаемость и читабельность кода Смешивание Java кода с HTML делает страницы трудночитаемыми и сложно поддерживаемыми. Когда бизнес-логика внедряется прямо в JSP страницы, это усложняет понимание и поддержку кода, особенно для больших проектов. 🟠Разделение логики и представления Использование нарушает принцип разделения логики и представления (Separation of Concerns). Логика должна быть размещена в сервлетах, контроллерах или других бизнес-слоях, тогда как JSP страницы должны быть ответственны только за представление данных. 🟠Трудности с тестированием Тестирование кода, включенного в скриплеты, сложнее, так как он тесно переплетается с HTML разметкой. Отладка логики, встроенной в JSP, затруднена, так как она находится в представлении, а не в логическом слое. 🟠Безопасность Смешивание логики и представления может привести к уязвимостям, таким как XSS (Cross-Site Scripting), если входные данные не обрабатываются должным образом. Центральная логика, размещенная в одном месте (например, в сервлетах), позволяет легче управлять безопасностью и обработкой исключений. 🟠Переход на современные технологии Современные технологии и фреймворки, такие как JavaServer Faces (JSF), Spring MVC, и другие, предоставляют более структурированные подходы к разработке веб-приложений. Эти фреймворки способствуют лучшему разделению логики и представления и предлагают более мощные инструменты для разработки и поддержки приложений. 🚩Альтернативные подходы 🟠JSP Expression Language (EL) Позволяет доступ к данным и выполнение простых операций без использования скриплетов. Более читаема и поддерживаемая, так как она не смешивает Java код с HTML.
<p>Username: ${user.name}</p>   
🟠JSTL (JavaServer Pages Standard Tag Library) Предоставляет набор стандартных тегов для выполнения общих задач, таких как итерация, условные конструкции, работа с форматированием и интернационализацией. Улучшает читабельность кода и способствует разделению логики и представления.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:if test="${user.loggedIn}">
  <p>Welcome, ${user.name}</p>
</c:if>   
🟠MVC (Model-View-Controller) архитектура Использование данной позволяет разделить бизнес-логику, управление данными и представление. Сервлеты и контроллеры (например, Spring MVC) обрабатывают бизнес-логику и данные, а JSP используется только для отображения данных.
   @WebServlet("/user")
public class UserController extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        User user = new User("John Doe", true);
        request.setAttribute("user", user);
        request.getRequestDispatcher("/user.jsp").forward(request, response);
    }
}   
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое Parallel Stream? Это способ обработки потоков данных в Java параллельно с использованием нескольких ядер процессора. 1. Он автоматически разбивает поток данных на подзадачи, выполняемые одновременно. 2. Используется для увеличения производительности в задачах, где данные можно обрабатывать независимо. 3. Но его применение может усложнять отладку и требует учёта потокобезопасности. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как сконфигурировать параметры инициализации для JSP ? Параметры инициализации могут быть настроены через файл конфигурации web.xml или с помощью аннотаций в сервлетах. Могут быть настроены для всего веб-приложения или для конкретных сервлетов и страниц. 🚩Конфигурация параметров инициализации через web.xml 🟠Параметры инициализации для сервлетов и JSP страниц Можно настроить в разделе <servlet> элемента конфигурационного файла web.xml.
<web-app>
    <servlet>
        <servlet-name>ExampleServlet</servlet-name>
        <jsp-file>/example.jsp</jsp-file>
        <init-param>
            <param-name>param1</param-name>
            <param-value>value1</param-value>
        </init-param>
        <init-param>
            <param-name>param2</param-name>
            <param-value>value2</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>ExampleServlet</servlet-name>
        <url-pattern>/example</url-pattern>
    </servlet-mapping>
</web-app>
Доступ к параметрам инициализации в JSP можно получить через объект config в JSP.
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Initialization Parameters Example</title>
</head>
<body>
    <h1>Initialization Parameters Example</h1>
    
    <%
        // Получение параметров инициализации
        String param1 = config.getInitParameter("param1");
        String param2 = config.getInitParameter("param2");
    %>
    
    <p>Param1: <%= param1 %></p>
    <p>Param2: <%= param2 %></p>
</body>
</html>
🟠Параметры инициализации для всего приложения Можно настроить в разделе <context-param> элемента конфигурационного файла web.xml.
<web-app>
    <context-param>
        <param-name>globalParam1</param-name>
        <param-value>globalValue1</param-value>
    </context-param>
    <context-param>
        <param-name>globalParam2</param-name>
        <param-value>globalValue2</param-value>
    </context-param>
</web-app>
Доступ к параметрам инициализации для всего приложения можно получить через объект ServletContext.
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Global Initialization Parameters Example</title>
</head>
<body>
    <h1>Global Initialization Parameters Example</h1>
    
    <%
        // Получение глобальных параметров инициализации
        String globalParam1 = application.getInitParameter("globalParam1");
        String globalParam2 = application.getInitParameter("globalParam2");
    %>
    
    <p>Global Param1: <%= globalParam1 %></p>
    <p>Global Param2: <%= globalParam2 %></p>
</body>
</html>
Ставь 👍 и забирай 📚 Базу знаний

🧠 Machine Learning — авторский канал, где собрана вся база по ИИ и машинному обучению. Senior разработчик AI-алгоритмов и ав
+5
🧠 Machine Learning — авторский канал, где собрана вся база по ИИ и машинному обучению. Senior разработчик AI-алгоритмов и автономных агентов, разбирает гайды, редкую литературу и код топовых моделей машинного обучения и искусственного интеллекта. В 2025 году ИИ выйдет на совершенно новый уровень тот, кто не успеет за прогрессом - отстанет, а кто разберется - сорвет куш. Стоит подписаться: t.me/ai_machinelearning_big_data

🤔 В чём различие между Left Join, Right Join и Inner Join? 1. Left Join: возвращает все записи из левой таблицы и совпадающие из правой, незаполненные поля заполняются NULL. 2. Right Join: возвращает все записи из правой таблицы и совпадающие из левой, с аналогичным заполнением NULL для отсутствующих значений. 3. Inner Join: возвращает только те записи, которые совпадают в обеих таблицах. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что известно о PageContext и какие преимущества его использования? Это один из неявных объектов, который предоставляет доступ ко всем другим неявным объектам и различным областям видимости (scope) в странице. Он служит как контейнер для информации, связанной с обработкой страницы и предоставляет методы для взаимодействия с атрибутами, управления выходными потоками и получения информации о среде выполнения. 🚩Основные функции 🟠Доступ ко всем областям видимости (scope): Предоставляет методы для работы с атрибутами во всех областях видимости (page, request, session, application). Методы: setAttribute(), getAttribute(), removeAttribute(), findAttribute(). 🟠Управление выходными потоками Предоставляет доступ к JspWriter через метод getOut(), который используется для вывода данных на страницу. 🟠Работа с неявными объектами Предоставляет методы для получения ссылок на другие неявные объекты, такие как request, response, session, application, config, и page. 🟠Обработка исключений PageContext может использоваться для обработки исключений, которые происходят в JSP странице. 🚩Примеры Доступ к атрибутам в различных областях видимости
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
    <title>PageContext Example</title>
</head>
<body>
    <h1>PageContext Example</h1>
    
    <%-- Установка атрибутов в различные области видимости --%>
    <%
        pageContext.setAttribute("pageAttr", "Page Scope Attribute", PageContext.PAGE_SCOPE);
        pageContext.setAttribute("requestAttr", "Request Scope Attribute", PageContext.REQUEST_SCOPE);
        pageContext.setAttribute("sessionAttr", "Session Scope Attribute", PageContext.SESSION_SCOPE);
        pageContext.setAttribute("applicationAttr", "Application Scope Attribute", PageContext.APPLICATION_SCOPE);
    %>
    
    <%-- Получение и вывод атрибутов --%>
    <p>Page Attribute: <%= pageContext.getAttribute("pageAttr", PageContext.PAGE_SCOPE) %></p>
    <p>Request Attribute: <%= pageContext.getAttribute("requestAttr", PageContext.REQUEST_SCOPE) %></p>
    <p>Session Attribute: <%= pageContext.getAttribute("sessionAttr", PageContext.SESSION_SCOPE) %></p>
    <p>Application Attribute: <%= pageContext.getAttribute("applicationAttr", PageContext.APPLICATION_SCOPE) %></p>
    
</body>
</html>
Получение неявных объектов
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
    <title>PageContext Example</title>
</head>
<body>
    <h1>PageContext Example</h1>
    
    <%-- Получение неявных объектов через PageContext --%>
    <p>Request URI: <%= pageContext.getRequest().getRequestURI() %></p>
    <p>Session ID: <%= pageContext.getSession().getId() %></p>
    <p>Servlet Context Name: <%= pageContext.getServletContext().getServletContextName() %></p>
    
</body>
</html>
Ставь 👍 и забирай 📚 Базу знаний

🤔 В чём разница CHAR и VARCHAR? 1. Размер хранения: CHAR — фиксированный размер, добавляет пробелы до нужной длины; VARCHAR — переменный, хранит только фактические символы. 2. Производительность: CHAR быстрее для фиксированных данных, VARCHAR экономит память для переменных данных. 3. Применение: CHAR для одинаковой длины строк (например, коды), VARCHAR для строк переменной длины (например, имена). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какие неявные объекты не доступны в обычной JSP странице? В обычной JSP странице доступны большинство неявных объектов, предоставляющих различные аспекты управления веб-приложением. Однако один из неявных объектов, а именно exception, не доступен в обычной JSP странице. Рассмотрим это далее. 🚩Неявные объекты 🟠`request` Объект HttpServletRequest, представляющий запрос клиента. 🟠response Объект HttpServletResponse, представляющий ответ сервера. 🟠session Объект HttpSession, представляющий сессию пользователя. 🟠`application` Объект ServletContext, представляющий контекст приложения. 🟠out Объект JspWriter, используемый для записи данных в ответ. 🟠config Объект ServletConfig, содержащий параметры конфигурации сервлета. 🟠pageContext Объект PageContext, предоставляющий доступ ко всем областям видимости и другим неявным объектам. 🟠page Объект page, представляющий текущую JSP страницу. 🟠xception Объект `hrowable` представляющий исключение, вызвавшее ошибку (недоступен в обычной странице). `exception`: Объект Throwable, представляющий исключение, вызвавшее ошибку (недоступен в обычной странице). 🚩Недоступный неявный объект в обычной странице exception Объект exception представляет собой экземпляр Throwable, который содержит исключение, вызвавшее ошибку. Этот объект доступен только на страницах, объявленных как страницы обработки ошибок. Доступность: Недоступен в обычной JSP странице. Доступен только на страницах, объявленных с атрибутом isErrorPage="true". Пример страницы обработки ошибок
<%@ page isErrorPage="true" %>
<html>
<head>
    <title>Error Page</title>
</head>
<body>
    <h1>An error occurred</h1>
    <p>Exception: <%= exception.getMessage() %></p>
</body>
</html>
Примеры
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
    <title>Implicit Objects Example</title>
</head>
<body>
    <h1>Implicit Objects in JSP</h1>

    <!-- Использование объекта request -->
    <p>Request URI: <%= request.getRequestURI() %></p>

    <!-- Использование объекта session -->
    <%
        session.setAttribute("user", "John Doe");
        String user = (String) session.getAttribute("user");
    %>
    <p>User from session: <%= user %></p>

    <!-- Использование объекта application -->
    <%
        application.setAttribute("appName", "MyApp");
        String appName = (String) application.getAttribute("appName");
    %>
    <p>Application Name: <%= appName %></p>

    <!-- Использование объекта config -->
    <p>Servlet Name: <%= config.getServletName() %></p>

    <!-- Использование объекта pageContext -->
    <%
        pageContext.setAttribute("pageMessage", "Page context message", PageContext.PAGE_SCOPE);
        String pageMessage = (String) pageContext.getAttribute("pageMessage");
    %>
    <p>Page Message: <%= pageMessage %></p>
</body>
</html>
Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие виды внедрения зависимости есть? 1. Через конструктор (Constructor Injection): зависимости передаются при создании объекта. 2. Через сеттеры или методы (Setter/Method Injection): зависимости устанавливаются после создания объекта. 3. Через поле (Field Injection): зависимости внедряются напрямую в поля класса с использованием аннотаций, таких как @Autowired. 4. Интерфейсное внедрение (Interface Injection): зависимости передаются через методы интерфейса, который реализует класс. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какая разница между динамическим и статическим содержимым JSP? В JSP (Java Server Pages) существует несколько типов тегов, которые помогают разработчикам создавать динамически генерируемые веб-страницы. Основные типы тегов включают директивы, скриптлеты, выражения, декларации, действия и теги библиотек. 🟠Директивы (Directives) Используются для настройки JSP страницы и управления её поведением. Они предоставляют инструкции контейнеру JSP. page: Настраивает атрибуты страницы, такие как кодировка, импорт классов, обработка исключений и т.д.
  <%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="java.util.Date" %>  
include: Включает содержимое другого файла в JSP страницу во время компиляции.
<%@ include file="header.jsp" %>  
taglib: Декларирует использование библиотеки тегов.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>  
🟠Скриптлеты (Scriptlets) Позволяют включать произвольный Java код внутри JSP страницы. Код внутри скриптлета выполняется на сервере при генерации страницы.
<%
    String message = "Hello, World!";
    out.println(message);
%>
🟠Выражения (Expressions) Позволяют выводить значения Java переменных и методов в HTML код. Результат выражения автоматически включается в вывод страницы.
<p>Current time: <%= new java.util.Date() %></p>
🟠Декларации (Declarations) Позволяют объявлять методы и поля класса, в который компилируется JSP страница. Они используются для объявления переменных и методов, доступных в других частях страницы.
<%! 
    private int counter = 0;

    public int getCounter() {
        return counter++;
    }
%>
<p>Counter: <%= getCounter() %></p>
🟠Действия (Actions) Позволяют выполнять встроенные функции, такие как включение содержимого другого ресурса или использование JavaBeans. Эти теги начинаются с <jsp: и предоставляют различные функциональные возможности. jsp:include Включает другой ресурс (JSP, HTML, Servlet) в текущую страницу во время выполнения.
<jsp:include page="header.jsp" />  
jsp:forward Перенаправляет запрос на другой ресурс.
<jsp:forward page="anotherPage.jsp" />  
jsp:useBean Создает или извлекает JavaBean и делает его доступным на странице.
<jsp:useBean id="user" class="com.example.User" scope="session" />  
jsp:setProperty Устанавливает значение свойства JavaBean.
<jsp:setProperty name="user" property="name" value="John Doe" />  
jsp:getProperty Извлекает значение свойства JavaBean и выводит его.
  <jsp:getProperty name="user" property="name" />
  
🟠Теги библиотек (Tag Libraries) Предоставляют дополнительные функции и упрощают разработку JSP страниц. Они используются для выполнения часто встречающихся задач, таких как итерация, условная логика, обработка XML, и работа с форматированием.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<c:choose>
    <c:when test="${param.user == 'admin'}">
        <p>Welcome, admin!</p>
    </c:when>
    <c:otherwise>
        <p>Welcome, guest!</p>
    </c:otherwise>
</c:choose>

<c:forEach var="item" items="${items}">
    <p>${item.name}</p>
</c:forEach>
Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие имплементации ExecutorService есть? 1. FixedThreadPool: пул с фиксированным количеством потоков. 2. CachedThreadPool: пул с динамическим количеством потоков, которые переиспользуются. 3. SingleThreadExecutor: пул с одним потоком. 4. ScheduledThreadPool: для выполнения задач с задержкой или периодически. 5. ForkJoinPool: для работы с задачами, которые можно разбить на подзадачи. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какая разница между динамическим и статическим содержимым JSP ? Java Server Pages (JSP) позволяет создавать как статическое, так и динамическое содержимое. Различие между ними заключается в способе генерации и отображения содержимого на веб-странице. 🚩Статическое содержимое Это часть веб-страницы, которая остается неизменной при каждом запросе. Оно включает в себя ресурсы, которые не изменяются динамически сервером.
<html>
<head>
    <title>Static Content Example</title>
</head>
<body>
    <h1>Welcome to My Website</h1>
    <p>This is a static content example.</p>
</body>
</html>
🚩Динамическое содержимое Это часть веб-страницы, которая генерируется или изменяется сервером на основе входящих запросов, данных из базы данных или других условий. Динамическое содержимое изменяется при каждом запросе в зависимости от параметров, данных пользователя и других факторов.
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="java.util.Date" %>
<html>
<head>
    <title>Dynamic Content Example</title>
</head>
<body>
    <h1>Welcome to My Website</h1>
    <p>This is a dynamic content example.</p>
    <p>Current time: <%= new Date() %></p>
</body>
</html>
🚩Основные различия 🟠Генерация содержимого Статическое содержимое: Не меняется при каждом запросе. Оно включено в JSP страницу как есть и отображается в неизменном виде. Динамическое содержимое: Генерируется сервером на основе данных, параметров запроса или других условий, что приводит к изменению отображаемого содержимого при каждом запросе. 🟠Выполнение на сервере Статическое содержимое: Не требует выполнения на сервере. Веб-сервер просто передает его клиенту (например, браузеру). Динамическое содержимое: Требует выполнения на сервере. JSP страница компилируется в сервлет, который затем генерирует HTML на основе логики и данных. Примеры использования: Статическое содержимое: Используется для отображения постоянных данных, таких как статические страницы, стиль, оформление, изображения и т.д. Динамическое содержимое: Используется для отображения изменяющихся данных, таких как пользовательская информация, результаты поиска, данные из базы данных и т.д.
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="java.util.Date" %>
<html>
<head>
    <title>Static and Dynamic Content Example</title>
</head>
<body>
    <h1>Welcome to My Website</h1>
    <p>This is a static content example.</p>
    
    <%
        // Динамическое содержимое: текущее время
        Date currentDate = new Date();
    %>
    <p>Current time: <%= currentDate %></p>
    
    <%
        // Динамическое содержимое: пользовательская информация
        String username = request.getParameter("username");
        if (username != null) {
            out.println("<p>Hello, " + username + "!</p>");
        } else {
            out.println("<p>Hello, Guest!</p>");
        }
    %>
</body>
</html>
Ставь 👍 и забирай 📚 Базу знаний

🤔 Как создать поток? 1. Наследование класса Thread: создайте подкласс Thread и переопределите метод run(). 2. Реализация интерфейса Runnable: создайте класс, реализующий Runnable, и передайте его экземпляр в конструктор Thread. 3. Использование пула потоков: через ExecutorService для управления потоками. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как можно предотвратить прямой доступ к JSP странице из браузера ? Для предотвращения прямого доступа к JSP странице из браузера можно использовать несколько методов. Основная идея заключается в том, чтобы ограничить доступ к страницам, оставив доступ только через контроллеры, такие как сервлеты, или посредством определенных условий доступа. 🟠Размещение файлов внутри WEB-INF Размещение файлов внутри папки WEB-INF предотвращает прямой доступ к ним из браузера. Любой файл в WEB-INF не может быть напрямую запрошен клиентом, но может быть доступен сервером, что позволяет контролировать доступ к через сервлеты.
/WEB-INF/
    /jsp/
        protectedPage.jsp
    web.xml
Теперь доступ к protectedPage.jsp можно получить только через сервлет.
@WebServlet("/protectedPage")
public class ProtectedPageServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getRequestDispatcher("/WEB-INF/jsp/protectedPage.jsp").forward(request, response);
    }
}
🟠Использование фильтров (Servlet Filters) Фильтры могут быть использованы для проверки доступа к JSP страницам и перенаправления запросов при необходимости. Фильтр можно настроить так, чтобы он проверял доступ только для авторизованных пользователей.
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.FilterServletRequest;
import javax.servlet.FilterServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebFilter("/jsp/*") // Применение фильтра ко всем запросам к JSP
public class AuthenticationFilter implements Filter {
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpServletResponse httpResponse = (HttpServletResponse) response;
        
        // Проверка сессии или авторизации
        if (httpRequest.getSession().getAttribute("user") == null) {
            httpResponse.sendRedirect(httpRequest.getContextPath() + "/login");
        } else {
            chain.doFilter(request, response);
        }
    }

    public void init(FilterConfig fConfig) throws ServletException {
        // Инициализация фильтра (если необходимо)
    }

    public void destroy() {
        // Очистка ресурсов (если необходимо)
    }
}
🟠Конфигурация в web.xml Можно использовать декларативную конфигурацию в файле web.xml, чтобы ограничить доступ к JSP страницам.
<web-app ...>
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Protected JSP</web-resource-name>
            <url-pattern>/protected/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>AUTHORIZED_USER</role-name>
        </auth-constraint>
    </security-constraint>

    <login-config>
        <auth-method>FORM</auth-method>
        <form-login-config>
            <form-login-page>/login.jsp</form-login-page>
            <form-error-page>/login-error.jsp</form-error-page>
        </form-login-config>
    </login-config>

    <security-role>
        <role-name>AUTHORIZED_USER</role-name>
    </security-role>
</web-app>
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое CompletableFuture? Это расширенный класс, реализующий интерфейсы Future и CompletionStage. Он предоставляет удобные методы для построения асинхронных цепочек задач, обработки исключений и комбинирования нескольких асинхронных операций. Это упрощает написание асинхронного кода и избегает блокировки. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний