Канал для поиска исполнителей для разных задач и организации мини конкурсов
Last updated 2 месяца, 3 недели назад
Новые и перспективные Web3 игры с добычей токенов.
Чат: https://t.me/Crypto_Wolf_Chat
Правила чата смотрите в описании чата.
Все свои вопросы направляйте в чат или главному модератору чата: @Exudna_118
По теме сотрудничества: @Zombini
Last updated 2 месяца, 1 неделя назад
? Какие есть неявные, внутренние объекты JSP EL и их отличия от объектов JSP ?
? Спрашивают в 6% собеседований
JSP Expression Language (EL) предоставляет набор неявных (внутренних) объектов, которые упрощают доступ к данным и их обработку в JSP страницах. Эти неявные объекты JSP EL различаются от неявных объектов JSP и обеспечивают доступ к контексту выполнения веб-приложения.
? Описание неявных объектов
1️⃣ pageScope
Предоставляет доступ к атрибутам области видимости страницы (page scope).
```
<% pageContext.setAttribute("pageAttribute", "Page Scope Value"); %>
Page Attribute: ${pageScope.pageAttribute}
```
2️⃣ requestScope
Предоставляет доступ к атрибутам области видимости запроса (request scope).
```
<% request.setAttribute("requestAttribute", "Request Scope Value"); %>
Request Attribute: ${requestScope.requestAttribute}
```
3️⃣ sessionScope
Предоставляет доступ к атрибутам области видимости сессии (session scope).
```
<% session.setAttribute("sessionAttribute", "Session Scope Value"); %>
Session Attribute: ${sessionScope.sessionAttribute}
```
4️⃣ applicationScope
Предоставляет доступ к атрибутам области видимости приложения (application scope).
```
<% application.setAttribute("applicationAttribute", "Application Scope Value"); %>
Application Attribute: ${applicationScope.applicationAttribute}
```
5️⃣ param
Предоставляет доступ к параметрам запроса (query parameters) в виде строк.
```
Request Parameter: ${param.name}
```
6️⃣ paramValues
Предоставляет доступ к параметрам запроса в виде массивов строк (для параметров с несколькими значениями).
```
Request Parameter Values: ${paramValues.name[0]}, ${paramValues.name[1]}
```
7️⃣ header
Предоставляет доступ к заголовкам HTTP запроса в виде строк.
```
User\-Agent: ${header['User\-Agent']}
```
8️⃣ headerValues
Предоставляет доступ к заголовкам HTTP запроса в виде массивов строк (для заголовков с несколькими значениями).
```
Header Values: ${headerValues['Accept'][0]}, ${headerValues['Accept'][1]}
```
? Отличия между неявными объектами
1️⃣ Синтаксис и доступность:
➕ JSP: Неявные объекты доступны напрямую в скриптлетах и выражениях внутри JSP страниц (например, request
, response
, session
, application
).
➕ JSP EL: Неявные объекты EL доступны через синтаксис ${...}
и обеспечивают более чистый и понятный способ доступа к данным.
2️⃣ Область видимости:
➕ JSP: Неявные объекты предоставляют доступ к данным и контексту выполнения напрямую через Java объекты (например, request.getParameter("name")
).
➕ JSP EL: Неявные объекты EL упрощают доступ к данным через области видимости, такие как pageScope
, requestScope
, sessionScope
, и applicationScope
, что позволяет легко различать источники данных.
3️⃣ Функциональность:
➕ JSP: Обеспечивает полный доступ ко всем методам и свойствам Java объектов.
➕ JSP EL: Обеспечивает ограниченный, но удобный доступ к часто используемым данным и свойствам, улучшая читабельность и поддержку кода.
? Примеры:
➕ JSP
```
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
JSP Example
Request Attribute: <%= request.getAttribute("attribute") %>
```
➕ JSP EL
```
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
JSP EL Example
Request Attribute: ${requestScope.attribute}
```
Неявные объекты JSP EL (pageScope
, requestScope
, sessionScope
, applicationScope
, param
, paramValues
, header
, headerValues
, cookie
, initParam
, pageContext
) предоставляют удобный и чистый способ доступа к данным и контексту выполнения веб-приложения. В отличие от неявных объектов JSP, они обеспечивают более структурированный и читаемый подход к управлению данными и их обработке в JSP страницах.
? База собесов | ? База тестовых
? Что такое SOLID ?
SOLID — это акроним, представляющий пять основных принципов ООП и дизайна, направленных на повышение гибкости, масштабируемости и поддерживаемости ПО. Они помогает избежать проблемы с проектированием, такие как жесткая зависимость между компонентами программы и сложности в внесении изменений или добавлении новых функций.
? Принцип единственной ответственности (SRP)
➕ Подчеркивает важность разделения функциональности, чтобы каждый класс выполнял только одну задачу.
```
class UserSettings {
void changeEmail(User user) {
if(checkAccess(user)) {
// Изменение email пользователя
}
}
boolean checkAccess(User user) {
// Проверка прав доступа
return true;
}
}
```
Здесь класс UserSettings
нарушает SRP, если бы в нем также были методы для управления пользователями. Лучше вынести метод checkAccess
в отдельный класс.
2️⃣ Принцип открытости/закрытости (OCP): Можно добавлять новую функциональность, не изменяя существующий код.
3️⃣ Принцип подстановки Лисков (LSP): Классы-наследники должны дополнять, а не изменять поведение базовых классов.
4️⃣ Принцип разделения интерфейса (ISP): Этот принцип ведет к созданию узкоспециализированных интерфейсов, вместо одного "толстого" интерфейса.
5️⃣ Принцип инверсии зависимостей (DIP): Оба типа модулей должны зависеть от абстракций. Абстракции не должны зависеть от деталей, а детали должны зависеть от абстракций. Этот принцип направлен на уменьшение зависимостей между модулями программы.
? Суть SOLID
SOLID принципы направлены на создание гибкой, масштабируемой архитектуры, которая легко поддается изменениям и развитию. Используя эти принципы, можно создавать системы, которые легче понимать, поддерживать и расширять.
? База собесов | ? База тестовых
? Что такое иерархия коллекций ?
Java Server Pages (JSP) является мощной технологией для создания динамически генерируемых веб-страниц на стороне сервера. Предоставляет множество преимуществ и решает ряд задач, которые делают его необходимым в разработке веб-приложений:
? Основные интерфейсы
➕ Collection Interface: Корневой интерфейс иерархии коллекций. Определяет методы, такие как add()
, remove()
, size()
, isEmpty()
и iterator()
, которые должны быть реализованы всеми коллекциями.
➕ List Interface: Представляет упорядоченную коллекцию. Элементы в списке могут быть доступны по индексам. Допускает дублирование элементов. Реализации включают ArrayList
, LinkedList
и Vector
.
➕ Set Interface: Набор уникальных элементов. Не допускает дублирования элементов. Реализации включают HashSet
, LinkedHashSet
и TreeSet
.
➕ Queue Interface: Для работы с коллекциями, используемыми для хранения элементов перед обработкой. Поддерживает операции вставки, извлечения и инспекции. LinkedList
реализует как List
, так и Queue
. Также есть PriorityQueue
для элементов, которые должны обрабатываться в порядке приоритета.
➕ Map Interface: Не наследуется от Collection
интерфейса. Описывает структуру для хранения пар ключ/значение. Ключи уникальны, а значения могут дублироваться. Реализации включают HashMap
, LinkedHashMap
, TreeMap
и Hashtable
.
? Особенности классов
➕ ArrayList: Динамический массив для хранения элементов, который автоматически расширяется. Предлагает быстрый доступ к элементам по индексу.
➕ LinkedList: Двусвязный список, который обеспечивает эффективное добавление/удаление элементов. Может использоваться как список и очередь.
➕ HashSet: Использует хеш-таблицу для хранения уникальных элементов. Не гарантирует порядок элементов.
➕ LinkedHashSet: Расширяет HashSet
, сохраняя порядок вставки элементов.
➕ TreeSet: Хранит элементы в отсортированном и восходящем порядке. Использует красно-черное дерево.
➕ HashMap: Хеш-таблица для хранения пар ключ/значение. Не поддерживает упорядоченность ключей или значений.
➕ LinkedHashMap: Расширяет HashMap
, сохраняя порядок вставки ключей.
➕ TreeMap: Реализует красно-черное дерево, сохраняет ключи в отсортированном порядке.
➕ PriorityQueue: Элементы добавляются согласно их приоритету, определенному компаратором.
? Суть иерархии коллекций
Иерархия коллекций обеспечивает унифицированный способ работы с различными типами данных. Она предоставляет гибкость для выбора подходящей структуры данных в зависимости от требований к производительности, порядку элементов и уникальности значений. Использование этих коллекций позволяет разработчикам эффективно хранить, извлекать, удалять и обрабатывать данные в Java-приложениях.
? База собесов | ? База тестовых
? Как мы можем обеспечить transport layer security для нашего веб приложения ?
Для обеспечения Transport Layer Security (TLS) в веб-приложении используются протоколы HTTPS (HTTP over TLS/SSL), которые обеспечивают защищенное соединение между клиентом и сервером. Это защищает данные от перехвата и подмены во время передачи. Внедрение его включает несколько шагов:
1️⃣ Получение SSL/TLS сертификата
Для использования HTTPS на вашем веб-сервере, вам потребуется SSL/TLS сертификат, который можно получить у сертификационного центра (CA). Некоторые популярные CA включают:
➕ Let’s Encrypt (бесплатный)
➕ DigiCert
➕ Comodo
➕ GlobalSign
2️⃣ Настройка веб-сервера для использования HTTPS
В зависимости от вашего веб-сервера (Apache, Nginx, Tomcat и т.д.), процесс настройки будет различаться.
Apache HTTP Server
1️⃣ Установка SSL/TLS модуля:
Убедитесь, что модуль mod_ssl
установлен и включен.
```
sudo a2enmod ssl
sudo systemctl restart apache2
```
2️⃣ Настройка виртуального хоста для HTTPS:
Отредактируйте файл конфигурации виртуального хоста (например, /etc/apache2/sites\-available/your\-site.conf
):
```
ServerName example.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /path/to/your\_certificate.crt
SSLCertificateKeyFile /path/to/your\_private.key
SSLCertificateChainFile /path/to/chain\_file.crt
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
```
3️⃣ Перезапуск Apache:
```
sudo systemctl restart apache2
```
Nginx
1️⃣ Настройка конфигурации для HTTPS:
Отредактируйте файл конфигурации вашего сайта (например, /etc/nginx/sites\-available/your\-site
):
```
server {
listen 443 ssl;
server_name example.com;
ssl\_certificate /path/to/your\_certificate.crt;
ssl\_certificate\_key /path/to/your\_private.key;
root /var/www/html;
index index.html index.htm;
location / {
try\_files $uri $uri/ =404;
}
}
server {
listen 80;
server_name example.com;
return 301 https://$host$request\_uri;
}
```
Перезапуск Nginx:
```
sudo systemctl restart nginx
```
Apache Tomcat
1️⃣ Настройка server.xml
для использования HTTPS:
Отредактируйте файл server.xml
(например, conf/server.xml
):
```
maxThreads="150" SSLEnabled="true">
type="RSA" />
```
2️⃣ Создание Keystore и получение сертификата:
Создайте keystore и получите сертификат от CA, затем импортируйте сертификат в keystore:
```
keytool -genkey -alias tomcat -keyalg RSA -keystore your_keystore.jks
keytool -import -alias tomcat -file your_certificate.crt -keystore your_keystore.jks
```
Перезапуск Tomcat:
```
sudo systemctl restart tomcat
```
3️⃣ Принудительное использование HTTPS
Рекомендуется перенаправлять все HTTP-запросы на HTTPS для обеспечения полной безопасности. Примеры для различных серверов:
Apache HTTP Server
Внутри виртуального хоста для порта 80 добавьте перенаправление:
<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>
Для обеспечения Transport Layer Security (TLS) вашего веб-приложения:
1️⃣ Получите SSL/TLS сертификат.
2️⃣ Настройте ваш веб-сервер для использования HTTPS.
3️⃣ Принудительно перенаправляйте HTTP-запросы на HTTPS.
4️⃣ Обновите конфигурацию приложения и все ссылки для использования HTTPS.
5️⃣ Настройте cookies с атрибутом Secure
для защиты данных сессий.
Эти шаги помогут вам защитить данные пользователя и предотвратить перехват и подмену данных во время передачи.
? База собесов | ? База тестовых
Канал для поиска исполнителей для разных задач и организации мини конкурсов
Last updated 2 месяца, 3 недели назад
Новые и перспективные Web3 игры с добычей токенов.
Чат: https://t.me/Crypto_Wolf_Chat
Правила чата смотрите в описании чата.
Все свои вопросы направляйте в чат или главному модератору чата: @Exudna_118
По теме сотрудничества: @Zombini
Last updated 2 месяца, 1 неделя назад