Java | Вопросы собесов – Telegram
Java | Вопросы собесов
11.4K subscribers
32 photos
2 videos
1.13K links
Download Telegram
🤔 В чём разница CHAR и VARCHAR?

1. Размер хранения: CHAR — фиксированный размер, добавляет пробелы до нужной длины; VARCHAR — переменный, хранит только фактические символы.
2. Производительность: CHAR быстрее для фиксированных данных, VARCHAR экономит память для переменных данных.
3. Применение: CHAR для одинаковой длины строк (например, коды), VARCHAR для строк переменной длины (например, имена).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥6🤔1
🤔 Что известно о 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>
<noscript>PageContext Example</noscript>
</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>
<noscript>PageContext Example</noscript>
</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>


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 В чём различие между Left Join, Right Join и Inner Join?

1. Left Join: возвращает все записи из левой таблицы и совпадающие из правой, незаполненные поля заполняются NULL.
2. Right Join: возвращает все записи из правой таблицы и совпадающие из левой, с аналогичным заполнением NULL для отсутствующих значений.
3. Inner Join: возвращает только те записи, которые совпадают в обеих таблицах.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥2🤔1
🤔 Как сконфигурировать параметры инициализации для 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>
<noscript>Initialization Parameters Example</noscript>
</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>
<noscript>Global Initialization Parameters Example</noscript>
</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>


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Что такое Parallel Stream?

Это способ обработки потоков данных в Java параллельно с использованием нескольких ядер процессора.
1. Он автоматически разбивает поток данных на подзадачи, выполняемые одновременно.
2. Используется для увеличения производительности в задачах, где данные можно обрабатывать независимо.
3. Но его применение может усложнять отладку и требует учёта потокобезопасности.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥1
🤔 Почему не рекомендуется использовать скриплеты, скриптовые элементы в 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);
}
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Что значит реляционная база данных?

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🔥1
🤔 Как определить класс внутри JSP страницы ?

Определение классов внутри JSP страниц считается плохой практикой и не рекомендуется, так как это нарушает принципы разделения логики и представления, усложняет поддержку и тестирование кода.

🚩Определение класса внутри страницы

Класс можно определить внутри страницы с помощью деклараций (<%! ... %>). Декларации позволяют определять поля, методы и классы, которые будут скомпилированы в сервлет, генерируемый из страницы.
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<noscript>Define Class in JSP</noscript>
</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>
<noscript>Greeting Example</noscript>
</head>
<body>
<h1>Greeting Example</h1>
<p>Greeting Message: ${greeting.message}</p>
</body>
</html>


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍1🤔1
🤔 Что такое Spring Boot и в чём его основное преимущество?

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24🔥5
🤔 Что известно о языке выражений 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 обеспечивает защиту от ошибок, связанных с отсутствующими или нулевыми значениями.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51😁1
🤔 Что такое принципы SOLID?

Это набор из пяти принципов объектно-ориентированного программирования для написания гибкого и поддерживаемого кода:
1. S: Single Responsibility Principle (единственная ответственность).
2. O: Open-Closed Principle (открытость для расширения, закрытость для изменений).
3. L: Liskov Substitution Principle (принцип подстановки Барбары Лисков).
4. I: Interface Segregation Principle (разделение интерфейсов).
5. D: Dependency Inversion Principle (инверсия зависимостей).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24🤔3🔥1
🤔 Что такое cookies?

Cookies — это небольшие фрагменты данных, которые сервер сохраняет на устройстве пользователя и отправляет обратно серверу при последующих запросах. Они используются для хранения информации о состоянии сеанса, персонализации и отслеживания пользователей.

🚩Пример создания и получения cookies в Java:

Установка cookie:
Cookie cookie = new Cookie("username", "JohnDoe");
cookie.setMaxAge(60 * 60 * 24); // 1 день
response.addCookie(cookie);


Получение cookie:
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if ("username".equals(cookie.getName())) {
String username = cookie.getValue();
// Использование cookie
}
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍231🤔1
🤔 Как ты можешь описать абстракцию?

Это процесс выделения значимых характеристик объекта, скрывая его внутренние детали.
1. Она помогает сосредоточиться на функциональности, игнорируя реализацию.
2. В программировании реализуется через абстрактные классы, интерфейсы и методы.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🤔5
🤔 Как найти ошибку в программе?

Это процесс отладки (debugging), который позволяет выявить и исправить дефекты в коде. Ошибки в программе могут быть синтаксическими, логическими или связанными с выполнением программы.

1⃣Понимание ошибки
Симптомы ошибки: Программа выдает ошибочное поведение, например, неожиданный результат, исключение или сбой.
Типы ошибок:
Синтаксические: Ошибки в написании кода (например, пропущенная точка с запятой).
Логические: Код выполняется без ошибок, но результат не соответствует ожиданиям.
Ошибки выполнения: Программа завершает работу из-за исключения (например, деление на ноль).

2⃣Использование сообщений об ошибках
Компилятор/интерпретатор: Сообщает о синтаксических ошибках и указывает строку, где возникла проблема.
Стек вызовов (stack trace): Для ошибок выполнения предоставляет информацию о том, где произошла ошибка.
Пример:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Main.main(Main.java:5)


3⃣Ручное исследование кода
Прочитайте проблемный участок кода и проверьте его на соответствие логике задачи.
Ищите типичные ошибки, такие как:
Неправильное использование переменных.
Ошибки в условных операторах (if, switch).
Пропущенные или лишние элементы кода.

4⃣Использование инструментов отладки
Отладчик (Debugger):
Отладчики встроены в IDE, такие как IntelliJ IDEA, Eclipse или NetBeans.
Позволяют ставить точки останова (breakpoints), чтобы программа останавливалась в конкретных местах.
Позволяют пошагово выполнять код и проверять значения переменных.
Логирование (Logging):
Используйте System.out.println для вывода промежуточных данных:

       System.out.println("Value of x: " + x);


Пример

     import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {
private static final Logger logger = LoggerFactory.getLogger(Main.class);

public static void main(String[] args) {
int x = 10;
int y = 0;
try {
int result = x / y;
} catch (ArithmeticException e) {
logger.error("Division by zero!", e);
}
}
}


5⃣Тестирование
Покрытие тестами: Напишите автоматические тесты для выявления ошибки.
Используйте фреймворки, такие как JUnit или TestNG.

       import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class CalculatorTest {
@Test
void testAddition() {
assertEquals(5, Calculator.add(2, 3));
}
}


6⃣Анализ чужого кода
Если ошибка в сторонней библиотеке, проверьте документацию и известные проблемы. Убедитесь, что вы правильно используете методы и классы.

7⃣Рефакторинг и исправление
Исправьте ошибку, убедившись, что исправление не приводит к новым ошибкам. Проверьте весь код на предмет аналогичных ошибок.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍151
🤔 Что такое столп "наследование"?

Это один из столпов ООП, позволяющий создавать новый класс на основе существующего.
1. Оно позволяет переиспользовать код базового класса.
2. Поддерживает полиморфизм, что упрощает работу с типами


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥1
🤔 Как бы выразил полиморфизм в коде?

Это способность объектов разных классов реагировать на одинаковые методы по-разному. В Java полиморфизм достигается через наследование, переопределение методов и использование абстрактных классов или интерфейсов.

🚩Пример полиморфизма в коде

Наследование и переопределение методов
class Animal {
public void sound() {
System.out.println("Animal makes a sound");
}
}

class Dog extends Animal {
@Override
public void sound() {
System.out.println("Dog barks");
}
}

class Cat extends Animal {
@Override
public void sound() {
System.out.println("Cat meows");
}
}

public class Main {
public static void main(String[] args) {
Animal myDog = new Dog(); // Полиморфизм
Animal myCat = new Cat(); // Полиморфизм

myDog.sound(); // Вывод: Dog barks
myCat.sound(); // Вывод: Cat meows
}
}


Использование интерфейсов
interface Shape {
void draw();
}

class Circle implements Shape {
@Override
public void draw() {
System.out.println("Drawing a Circle");
}
}

class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Drawing a Rectangle");
}
}

public class Main {
public static void main(String[] args) {
Shape shape1 = new Circle(); // Полиморфизм
Shape shape2 = new Rectangle(); // Полиморфизм

shape1.draw(); // Вывод: Drawing a Circle
shape2.draw(); // Вывод: Drawing a Rectangle
}
}


Реальный пример использования полиморфизма
class Animal {
public void sound() {
System.out.println("Some generic animal sound");
}
}

class Dog extends Animal {
@Override
public void sound() {
System.out.println("Woof Woof");
}
}

class Cat extends Animal {
@Override
public void sound() {
System.out.println("Meow");
}
}

public class Main {
public static void main(String[] args) {
Animal[] animals = {new Dog(), new Cat(), new Animal()};

for (Animal animal : animals) {
animal.sound(); // Полиморфный вызов
}
}
}


Результат
Woof Woof
Meow
Some generic animal sound


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19
🤔 Какие виды тестирования есть?

1. Функциональное тестирование: проверка соответствия требованиям.
2. Нефункциональное: проверка производительности, надёжности, безопасности.
3. Модульное: тестирование отдельных частей кода.
4. Интеграционное: проверка взаимодействия модулей.
5. Системное и пользовательское тестирование: проверка полной системы.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥171👍1
🤔 Какие виды тестов знаешь?

В программировании существует множество видов тестирования, которые можно разделить на категории по уровню тестирования, методам выполнения и целям. Вот основные виды:

🚩По уровню тестирования

🟠Модульное тестирование (Unit Testing)
Тестирование отдельных методов или классов.
Цель: Проверить работу минимальных компонентов программы.
Инструменты: JUnit, TestNG.
  @Test
public void testAddition() {
assertEquals(5, Calculator.add(2, 3));
}


🟠Интеграционное тестирование (Integration Testing)
Тестирование взаимодействия между модулями.
Цель: Убедиться, что модули правильно работают вместе.
Пример: Проверка взаимодействия сервиса и базы данных.
Инструменты: Spring Test, Apache Camel Test.

🟠Системное тестирование (System Testing)
Проверка всей системы как единого целого.
Цель: Убедиться, что все компоненты работают вместе и система соответствует требованиям.

🟠Приемочное тестирование (Acceptance Testing)
Проводится с участием клиента или конечных пользователей.
Цель: Убедиться, что система удовлетворяет бизнес-требованиям.

🚩По методам выполнения

🟠Ручное тестирование (Manual Testing)
Тесты выполняются вручную.
Цель: Найти ошибки, которые может не уловить автоматизация.
Пример: Тестировщик вручную проверяет пользовательский интерфейс.

🟠Автоматизированное тестирование (Automated Testing)
Тесты выполняются автоматически с использованием скриптов и инструментов.
Цель: Снизить время и затраты на повторяющиеся тесты.
Инструменты: Selenium, JUnit, Appium.

🚩По целям тестирования

🟠Функциональное тестирование
Проверяет, что функции системы работают как ожидалось.
Цель: Убедиться в соответствии требованиям.
Инструменты: Selenium, Postman.

🟠Нефункциональное тестирование
Тестирование производительности (Performance Testing): Проверяет скорость, отклик и стабильность.
Инструменты: JMeter, Gatling.
Тестирование безопасности (Security Testing): Проверяет защиту системы.
Инструменты: OWASP ZAP, Burp Suite.
Тестирование удобства использования (Usability Testing): Проверяет интерфейс на удобство для пользователя.

🚩По типам тестирования

🟠Smoke Testing
Быстрая проверка работоспособности ключевых функций.
Цель: Убедиться, что основные функции работают, прежде чем углубляться в тесты.

🟠Регрессионное тестирование
Проверяет, что новые изменения не сломали старую функциональность.
Цель: Убедиться, что баги, исправленные ранее, не повторились.

🟠Тестирование черного ящика (Black Box Testing)
Проверяет систему без знаний о внутреннем устройстве.
Цель: Оценить функциональность с точки зрения пользователя.

🟠Тестирование белого ящика (White Box Testing)
Проверяет систему с учетом внутренней структуры кода.
Цель: Оценить корректность логики программы.

🚩Специальные виды тестирования

🟠A/B тестирование
Проверяет, какая версия системы лучше (например, два варианта интерфейса).
Цель: Повысить пользовательский опыт.

🟠Тестирование нагрузки (Load Testing)
Проверяет, как система работает под большой нагрузкой.
Инструменты: Apache JMeter.

🟠Тестирование на отказоустойчивость (Stress Testing)
Проверяет, как система работает в условиях сверхвысокой нагрузки.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18
🤔 Что такое CI/CD?

Это методология автоматизации разработки.
1. CI: автоматизация сборки и тестирования кода при каждом коммите.
2. CD: автоматическая доставка обновлений на сервер или в продакшен.
3. Это ускоряет релизы и улучшает качество продукта.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24🔥4
🤔 Что такое Appender в log4j?

Это компонент, который отвечает за отправку логов в различные места назначения, такие как файлы, консоль, базы данных, сетевые сокеты или даже удаленные серверы. Каждый Appender реализует конкретный способ обработки и хранения логов.

🚩Зачем нужен Appender?

Appender позволяет гибко управлять тем, куда и как сохраняются логи. В зависимости от требований приложения, вы можете:
Писать логи в файл.
Выводить их в консоль.
Отправлять их в удалённые хранилища или базы данных.

🚩Основные виды Appender в Log4j

🟠ConsoleAppender
Логи выводятся в консоль.
Полезно для разработки и отладки.
     <Appender type="Console" name="ConsoleAppender">
<Target>System.out</Target>
</Appender>


🟠FileAppender
Логи записываются в файл.
Используется для длительного хранения логов.
     <Appender type="File" name="FileAppender">
<FileName>logs/app.log</FileName>
<Append>true</Append>
</Appender>


🟠RollingFileAppender
Расширение FileAppender с возможностью ротации логов (ограничение размера файла, создание новых файлов при переполнении).
     <Appender type="RollingFile" name="RollingFileAppender">
<FileName>logs/app.log</FileName>
<FilePattern>logs/app-%d{yyyy-MM-dd}.log</FilePattern>
<Policies>
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
</Appender>


🟠DailyRollingFileAppender
Логи записываются в файл, который ротационно создаётся каждый день.
     <Appender type="DailyRollingFile" name="DailyRollingAppender">
<FileName>logs/app.log</FileName>
<DatePattern>.yyyy-MM-dd</DatePattern>
</Appender>


🟠SocketAppender
Отправляет логи через сеть (TCP или UDP).
Используется для централизованного логирования.

🟠JDBCAppender
Записывает логи в базу данных.
     <Appender type="JDBC" name="JDBCAppender">
<ConnectionSource>
<DriverManagerConnectionSource>
<DriverClass>org.h2.Driver</DriverClass>
<Url>jdbc:h2:mem:logdb</Url>
<User>sa</User>
</DriverManagerConnectionSource>
</ConnectionSource>
<TableName>log_table</TableName>
</Appender>


🚩Конфигурация Appender в log4j2

Вот пример конфигурации с использованием нескольких Appender
XML-конфигурация
<Configuration>
<Appenders>
<Console name="ConsoleAppender" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level: %msg%n"/>
</Console>
<File name="FileAppender" fileName="logs/app.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level: %msg%n"/>
</File>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="ConsoleAppender"/>
<AppenderRef ref="FileAppender"/>
</Root>
</Loggers>
</Configuration>


Java-конфигурация
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class Main {
private static final Logger logger = LogManager.getLogger(Main.class);

public static void main(String[] args) {
logger.info("This is an info log");
logger.error("This is an error log");
}
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍121