Java | Вопросы собесов
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads
Ko'proq ko'rsatish📈 Telegram kanali Java | Вопросы собесов analitikasi
Java | Вопросы собесов (@easy_java_ru) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 11 288 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 10 935-o'rinni va Rossiya mintaqasida 56 548-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 11 288 obunachiga ega bo‘ldi.
03 Noyabr, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -46 ga, so‘nggi 24 soatda esa 2 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya o‘rtacha 9.55% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 5.73% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 1 078 marta ko‘riladi; birinchi sutkada odatda 647 ta ko‘rish yig‘iladi.
- Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 6 ta reaksiya keladi.
- Tematik yo‘nalishlar: Kontent ставь, void, string, строка, static kabi asosiy mavzularga jamlangan.
📝 Tavsif va kontent siyosati
Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
“Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy
Контакт для рекламы: @sendme_ads”
Yuqori yangilanish chastotasi (oxirgi ma’lumot 04 Noyabr, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.
import org.w3c.dom.*;
import javax.xml.parsers.*;
public class DomExample {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("example.xml");
NodeList nodeList = doc.getElementsByTagName("element");
for (int i = 0; i < nodeList.getLength(); i++) {
Element element = (Element) nodeList.item(i);
System.out.println(element.getTextContent());
}
}
}
🚩С использованием SAX (Simple API for XML)
XML обрабатывается построчно (по событиям). При чтении вызываются методы обработчика событий (например, начало элемента, конец элемента).
import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
public class SaxExample {
public static void main(String[] args) throws Exception {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
parser.parse("example.xml", new DefaultHandler() {
public void startElement(String uri, String localName, String qName, Attributes attributes) {
System.out.println("Start Element: " + qName);
}
public void characters(char[] ch, int start, int length) {
System.out.println("Text: " + new String(ch, start, length));
}
public void endElement(String uri, String localName, String qName) {
System.out.println("End Element: " + qName);
}
});
}
}
🚩С использованием StAX (Streaming API for XML)
XML обрабатывается как поток, но предоставляет больше контроля, чем SAX. Поддерживает чтение и запись.
import javax.xml.stream.*;
import java.io.FileReader;
public class StaxExample {
public static void main(String[] args) throws Exception {
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader reader = factory.createXMLStreamReader(new FileReader("example.xml"));
while (reader.hasNext()) {
int event = reader.next();
if (event == XMLStreamReader.START_ELEMENT) {
System.out.println("Start Element: " + reader.getLocalName());
} else if (event == XMLStreamReader.CHARACTERS) {
System.out.println("Text: " + reader.getText().trim());
} else if (event == XMLStreamReader.END_ELEMENT) {
System.out.println("End Element: " + reader.getLocalName());
}
}
}
}
Ставь 👍 и забирай 📚 Базу знаний <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");
}
}
Ставь 👍 и забирай 📚 Базу знаний @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)
Проверяет, как система работает в условиях сверхвысокой нагрузки.
Ставь 👍 и забирай 📚 Базу знаний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Ставь 👍 и забирай 📚 Базу знаний
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⃣Рефакторинг и исправление
Исправьте ошибку, убедившись, что исправление не приводит к новым ошибкам. Проверьте весь код на предмет аналогичных ошибок.
Ставь 👍 и забирай 📚 Базу знаний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
}
}
Ставь 👍 и забирай 📚 Базу знаний${...}, что упрощает код 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 обеспечивает защиту от ошибок, связанных с отсутствующими или нулевыми значениями.
Ставь 👍 и забирай 📚 Базу знаний<%! ... %>). Декларации позволяют определять поля, методы и классы, которые будут скомпилированы в сервлет, генерируемый из страницы.
<%@ 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>
Ставь 👍 и забирай 📚 Базу знаний