Java | Вопросы собесов – Telegram
Java | Вопросы собесов
11.4K subscribers
34 photos
2 videos
1.13K links
Download Telegram
📌 Как мы можем обеспечить transport layer security для нашего веб приложения ?

Спросят с вероятностью 6%

Для обеспечения 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):
      <VirtualHost *:443>
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>
</VirtualHost>


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):
      <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/your_keystore.jks"
type="RSA" />
</SSLHostConfig>
</Connector>


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 для защиты данных сессий.

Эти шаги помогут вам защитить данные пользователя и предотвратить перехват и подмену данных во время передачи.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82🤯1
📌 Как организовать подключение к базе данных, обеспечить журналирование в сервлете ?

💬 Спросят с вероятностью 6%

Настройка подключения к базе данных и журналирования в сервлете

Шаг 1: Настройка пула соединений к базе данных

Использование пула соединений (например, Apache DBCP) позволяет эффективно управлять соединениями, улучшая производительность и стабильность приложения.

1️⃣ Добавление зависимостей в `pom.xml`:

      <dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
</dependencies>


2️⃣ Настройка пула соединений:

      import org.apache.commons.dbcp2.BasicDataSource;

public class DatabaseUtil {
private static BasicDataSource dataSource;

static {
dataSource = new BasicDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/your_database");
dataSource.setUsername("your_username");
dataSource.setPassword("your_password");
dataSource.setMinIdle(5);
dataSource.setMaxIdle(10);
dataSource.setMaxOpenPreparedStatements(100);
}

public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
}


Шаг 2: Настройка логирования (SLF4J и Logback)

1️⃣ Добавление зависимостей в dataSource
      <dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.32</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.6</version>
</dependency>
</dependencies>


2️⃣ Конфигурация Logback (`logback.xml`):

      <configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>

<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>


Шаг 3: Подключение к базе данных и логирование в сервлете

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
import org.slf4j.*;

@WebServlet("/databaseServlet")
public class DatabaseServlet extends HttpServlet {
private static final Logger logger = LoggerFactory.getLogger(DatabaseServlet.class);

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/html");
try (PrintWriter out = response.getWriter();
Connection connection = DatabaseUtil.getConnection();
PreparedStatement statement = connection.prepareStatement("SELECT * FROM your_table");
ResultSet resultSet = statement.executeQuery()) {

while (resultSet.next()) {
out.println("<p>" + resultSet.getString("your_column") + "</p>");
}
} catch (SQLException e) {
logger.error("Database connection error", e);
response.getWriter().println("<p>Error connecting to the database</p>");
}
}
}


Для организации подключения к базе данных и обеспечения журналирования в сервлете:

1️⃣ Настройте пул соединений (например, Apache DBCP).

2️⃣ Используйте библиотеку логирования (например, SLF4J с Logback).

3️⃣ Внедрите эти инструменты в сервлет для эффективного управления соединениями и ведения журналов для отслеживания событий и ошибок.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯4👍2
📌 Какие основные особенности появились в спецификации Servlet 3 ?

💬 Спросят с вероятностью 6%

Спецификация Servlet 3.0, выпущенная как часть Java EE 6, внесла множество новых особенностей и улучшений в Java Servlet API. Основные нововведения включают поддержку аннотаций, асинхронную обработку запросов, облегчение настройки сервлетов и фильтров, а также улучшенную безопасность. Рассмотрим эти особенности подробнее:

1️⃣ Поддержка аннотаций

Введены аннотации, которые позволяют конфигурировать сервлеты, фильтры и слушатели без необходимости редактирования файла web.xml. Это значительно упрощает процесс разработки и улучшает читаемость кода.

`@WebServlet`: для регистрации сервлета.

    import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;

@WebServlet("/example")
public class ExampleServlet extends HttpServlet {
// Реализация сервлета
}


@WebFilter: для регистрации фильтра.

    import javax.servlet.annotation.WebFilter;
import javax.servlet.Filter;

@WebFilter("/*")
public class ExampleFilter implements Filter {
// Реализация фильтра
}


@WebListener: для регистрации слушателя.

    import javax.servlet.annotation.WebListener;
import javax.servlet.ServletContextListener;

@WebListener
public class ExampleListener implements ServletContextListener {
// Реализация слушателя
}


2️⃣ Асинхронная обработка запросов

Servlet 3.0 добавляет поддержку асинхронной обработки запросов, что позволяет сервлетам обрабатывать долгосрочные задачи, не блокируя основной поток. Это полезно для улучшения производительности и масштабируемости.
import java.io.IOException;
import javax.servlet.AsyncContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(urlPatterns = "/asyncExample", asyncSupported = true)
public class AsyncExampleServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
final AsyncContext asyncContext = request.startAsync();
asyncContext.start(() -> {
try {
// Долгосрочная задача
Thread.sleep(5000);
response.getWriter().println("Asynchronous processing complete.");
asyncContext.complete();
} catch (Exception e) {
e.printStackTrace();
}
});
}
}


Динамическое добавление компонентов

Servlet 3.0 позволяет динамически добавлять сервлеты, фильтры и слушатели программно в ServletContextListener или в любое другое место, где доступен ServletContext.
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRegistration;

public class DynamicServletRegistrationListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
ServletContext context = sce.getServletContext();
ServletRegistration.Dynamic registration = context.addServlet("dynamicServlet", new ExampleServlet());
registration.addMapping("/dynamic");
}

@Override
public void contextDestroyed(ServletContextEvent sce) {
// Очистка ресурсов (если необходимо)
}
}


Servlet 3.0 ввел множество полезных особенностей, таких как поддержка аннотаций для конфигурации сервлетов, фильтров и слушателей, асинхронная обработка запросов для улучшения производительности, динамическое добавление компонентов, улучшенная безопасность и общая легкость настройки. Эти нововведения значительно упростили разработку и повысили гибкость и масштабируемость веб-приложений.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🤯1
📌 Какие способы аутентификации доступны сервлету ?

💬 Спросят с вероятностью 6%

Доступны несколько способов аутентификации пользователей, чтобы обеспечить безопасность веб-приложений. Вот основные из них:

1️⃣ Базовая аутентификация (Basic Authentication)

Базовая аутентификация использует заголовок HTTP для передачи имени пользователя и пароля в закодированном виде Base64.
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected Area</web-resource-name>
<url-pattern>/protected/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>USER</role-name>
</auth-constraint>
</security-constraint>

<login-config>
<auth-method>BASIC</auth-method>
<realm-name>MyRealm</realm-name>
</login-config>

<security-role>
<role-name>USER</role-name>
</security-role>


2️⃣ Аутентификация на основе форм (Form-Based Authentication)

Этот метод позволяет создать пользовательский интерфейс для аутентификации с помощью HTML-форм.
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected Area</web-resource-name>
<url-pattern>/protected/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>USER</role-name>
</auth-constraint>
</security-constraint>

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

<security-role>
<role-name>USER</role-name>
</security-role>


3️⃣ Аутентификация на основе сертификатов (Client-Certificate Authentication)

Используется сертификат клиента для аутентификации.
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected Area</web-resource-name>
<url-pattern>/protected/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>USER</role-name>
</auth-constraint>
</security-constraint>

<login-config>
<auth-method>CLIENT-CERT</auth-method>
</login-config>

<security-role>
<role-name>USER</role-name>
</security-role>


Важные моменты

1️⃣ Безопасность: Всегда используйте HTTPS для передачи учетных данных, чтобы защитить их от перехвата.

2️⃣ Управление сессиями: Убедитесь, что сессии пользователей защищены от угонов и утечек.

3️⃣ Шифрование данных: Храните пароли в зашифрованном виде и используйте современные алгоритмы хеширования.

Доступные методы аутентификации для сервлетов включают:

1️⃣ Базовая аутентификация (Basic Authentication)

2️⃣ Аутентификация на основе форм (Form-Based Authentication)

3️⃣ Аутентификация на основе сертификатов (Client-Certificate Authentication)

4️⃣ Программная аутентификация (Programmatic Authentication)

5️⃣ Single Sign-On (SSO)

Выбор метода зависит от требований безопасности и удобства пользователей вашего веб-приложения.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯3🔥1🤔1
📌 Что такое Java Server Pages JSP ?

💬 Спросят с вероятностью 6%

Java Server Pages (JSP) — это технология, которая позволяет создавать динамически генерируемые веб-страницы на стороне сервера с использованием Java. Страницы комбинируют HTML, XML или другие виды данных с Java кодом для создания веб-контента, который может взаимодействовать с пользователями, обрабатывать данные и взаимодействовать с серверными ресурсами.

Особенности

1️⃣ Смесь HTML и Java:

Позволяет смешивать HTML и Java код, что упрощает создание динамических веб-страниц. Основной HTML код может быть украшен вставками Java для выполнения динамических действий.

2️⃣ Простота использования:

Страницы похожи на обычные HTML страницы, что делает их легкими для понимания и использования, особенно для веб-дизайнеров, знакомых с HTML.

3️⃣ Доступ к серверным ресурсам:

Страницы могут легко взаимодействовать с серверными ресурсами, такими как базы данных, сервлеты, JavaBeans и т.д.

4️⃣ Перевод в сервлеты:

Страницы компилируются в сервлеты, что позволяет использовать все возможности сервлетов, такие как управление сессиями и использование фильтров.

Основные элементы

1️⃣ Скриптлеты (Scriptlets):

Вставки Java кода, которые выполняются на сервере и могут включать любые валидные Java выражения.

Синтаксис: <% ... %>

Пример:

          <% 
String message = "Hello, World!";
%>
<p><%= message %></p>


2️⃣ Выражения (Expressions):

Вставки Java кода, результаты которых автоматически выводятся на страницу.

Синтаксис: <%= ... %>

Пример:

          <p>Current time: <%= new java.util.Date() %></p>


3️⃣ Директивы (Directives):

Указания для контейнера JSP о том, как обрабатывать страницу.

Синтаксис: <%@ ... %>

Пример:

          <%@ page contentType="text/html;charset=UTF-8" %>


4️⃣ Выражения языка JSP (JSP Expression Language, EL):

Упрощенный синтаксис для доступа к данным и обращения к методам.

Синтаксис: ${ ... }

Пример:

          <p>User: ${user.name}</p>


5️⃣ Теги (Tags):

Использование стандартных JSP тегов или пользовательских тегов для выполнения часто используемых задач.

Пример:

          <jsp:include page="header.jsp" />


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<noscript>JSP Example</noscript>
</head>
<body>
<h1>Welcome to JSP!</h1>
<%
String username = "John Doe";
%>
<p>Hello, <%= username %></p>
<p>Current time: <%= new java.util.Date() %></p>
</body>
</html>


Важные моменты

1️⃣ Поддержка MVC:

Часто используется в архитектуре MVC (Model-View-Controller) для разделения логики и представления, где JSP отвечает за представление (View), а сервлеты или другие компоненты за логику (Controller).

2️⃣ Производительность:

Страницы компилируются в сервлеты, что обеспечивает высокую производительность, так как последующие запросы могут обрабатываться быстрее после начальной компиляции.

3️⃣ Управление сессиями и состоянием:

Страницы могут легко взаимодействовать с объектами сессий и использовать переменные для отслеживания состояния пользователя.

Java Server Pages (JSP) — это технология для создания динамически генерируемых веб-страниц на стороне сервера, которая позволяет смешивать HTML с Java кодом. Страницы компилируются в сервлеты, что обеспечивает высокую производительность и гибкость в разработке веб-приложений. Основные элементы включают скриптлеты, выражения, директивы, выражения языка JSP (EL) и теги. Является важным компонентом архитектуры MVC и широко используется для создания интерактивных и динамичных веб-приложений.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🤔1👀1
📌 Зачем нужен JSP ?

💬 Спросят с вероятностью 6%

Java Server Pages (JSP) является мощной технологией для создания динамически генерируемых веб-страниц на стороне сервера. Предоставляет множество преимуществ и решает ряд задач, которые делают его необходимым в разработке веб-приложений:

1️⃣ Генерация динамического контента

Позволяет создавать веб-страницы, контент которых может изменяться в зависимости от запросов пользователя, данных из базы данных или других серверных ресурсов.
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<noscript>Dynamic Content</noscript>
</head>
<body>
<h1>Welcome, <%= request.getParameter("username") %>!</h1>
</body>
</html>


2️⃣ Разделение логики и представления (MVC)

Используется в архитектуре для разделения бизнес-логики (которая обрабатывается сервлетами или другими компонентами) и представления (отображение данных пользователю).

Сервлет (Controller):

    @WebServlet("/greeting")
public class GreetingServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
request.setAttribute("name", name);
request.getRequestDispatcher("/greeting.jsp").forward(request, response);
}
}


JSP (View):

    <html>
<head><noscript>Greeting</noscript></head>
<body>
<h1>Hello, ${name}!</h1>
</body>
</html>


3️⃣ Интеграция с JavaBeans и другими компонентами

Может легко интегрироваться с JavaBeans, EJB и другими серверными компонентами для управления данными и бизнес-логикой.
<jsp:useBean id="user" class="com.example.User" scope="request"/>
<p>Username: <jsp:getProperty name="user" property="username"/></p>


4️⃣ Поддержка выражений языка JSP (EL)

Упрощает доступ к данным и позволяет использовать упрощенный синтаксис для работы с атрибутами запросов, сессий и других областей.
<p>Current user: ${user.username}</p>


5️⃣ Повторное использование компонентов и модульность

Позволяет использовать теги и фрагменты JSP (JSP include и tag libraries) для создания модульных и повторно используемых компонентов.
<%@ include file="header.jsp" %>
<%@ include file="footer.jsp" %>


6️⃣ Простота и удобство разработки

Страницы по синтаксису похожи на HTML, что делает их доступными для веб-дизайнеров и разработчиков с минимальным опытом программирования на Java.

7️⃣ Высокая производительность

Страницы компилируются в сервлеты, что обеспечивает высокую производительность и возможность кэширования для последующих запросов.

8️⃣ Поддержка международных стандартов и спецификаций.

Является частью спецификации Java EE, что обеспечивает соответствие стандартам и хорошую интеграцию с другими технологиями Java EE.

JSP нужен для создания динамически генерируемых веб-страниц, разделения логики и представления (MVC), интеграции с JavaBeans и другими компонентами, упрощенного доступа к данным с помощью EL, повторного использования компонентов и модульности, а также обеспечения высокой производительности и соответствия международным стандартам. Делает разработку веб-приложений удобной и эффективной, предоставляя мощные инструменты для создания интерактивного и динамичного контента.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍1
📌 Что такое иерархия коллекций ?

💬 Спросят с вероятностью 62%

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-приложениях.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
10🤯5👍3🔥1
🤔 Какой метод используется для завершения работы программы в Java?
Anonymous Quiz
76%
System.exit()
9%
Runtime.exit()
5%
Program.terminate()
10%
Application.shutdown()
1👍1
📌 Что такое SOLID ?

💬 Спросят с вероятностью 62%

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 принципы направлены на создание гибкой, масштабируемой архитектуры, которая легко поддается изменениям и развитию. Используя эти принципы, можно создавать системы, которые легче понимать, поддерживать и расширять.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍10🎉1
📌 Что известно про иерархию исключений ?

💬 Спросят с вероятностью 69%

Иерархия исключений организована в виде дерева наследования, где все классы исключений являются потомками класса Throwable. Он делится на два основных подкласса: Error и Exception.

🤔 Throwable

От него напрямую наследуются классы Error и Exception. Этот класс содержит методы для получения сообщения об ошибке, локализованного сообщения, причины исключения и стека вызовов, а также методы для подавления исключений и работы со стеком вызовов.

🤔 Error

Error описывает серьёзные ошибки, возникающие на уровне виртуальной машины и библиотеки языка, из-за которых приложение обычно не может восстановиться. Примеры включают OutOfMemoryError и StackOverflowError. Ошибки этого типа обычно не предназначены для обработки приложением.

Непроверяемые исключения

Являются непроверяемыми исключениями. Они обозначают ошибки, такие как неверное приведение типов (ClassCastException), обращение по нулевой ссылке (NullPointerException) и выход за пределы массива (ArrayIndexOutOfBoundsException). Эти исключения не требуют обязательной обработки в блоке try-catch.

Проверяемые исключения

Требуют обязательной обработки в блоке try-catch или должны быть объявлены в сигнатуре метода с помощью throws. Они бозначают условия, с которыми приложение может предвидеть и справиться. Примеры включают IOException, FileNotFoundException и ClassNotFoundException.

🤔 Суть иерархии исключений

Иерархия исключений обеспечивает структурированный и гибкий способ обработки ошибок и исключительных ситуаций в приложениях. Позволяет различать серьёзные проблемы системного уровня, с которыми приложение не может справиться.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥8
🤔 Какой модификатор доступа делает поле доступным только внутри пакета?
Anonymous Quiz
2%
public
12%
private
37%
protected
49%
default
😁16👀31👍1
📌 Какие методы в классе Object есть ?

💬 Спросят с вероятностью 69%

Object - суперкласс для всех классов. Все объекты, включая массивы, наследуют методы этого класса. Они предоставляют функции, которые доступны для любого объекта. Вот основные методы:

1️⃣ clone() - создает и возвращает копию объекта. Метод защищенный, поэтому его можно вызвать только внутри класса объекта или в классах потомках.

2️⃣ equals(Object obj) - определяет равенство между двумя объектами. По умолчанию, этот метод сравнивает ссылки на объекты.

3️⃣ finalize() - вызывается перед удалением объекта сборщиком мусора. Метод устарел.

4️⃣ getClass() - возвращает Class, который представляет класс данного объекта. Можно использовать для получения имени во время выполнения.

5️⃣ hashCode() - возвращает хеш-код, который используется для оптимизации хранения в структурах данных.

6️⃣ notify() - пробуждает один поток, который ожидает на объекте (вызвавший wait()). Этот метод должен вызываться в синхронизированном контексте.

7️⃣ notifyAll() - пробуждает все ожидающие потоки. Должен вызываться в синхронизированном контексте.

8️⃣ toString() - возвращает строковое представление. По умолчанию, возвращает класс и хеш-код, но часто переопределяется для предоставления более информативного представления.

9️⃣ wait() - заставляет текущий поток ожидать, пока другой поток не вызовет notify() или notifyAll(). Существуют перегруженные версии wait(long timeout) и wait(long timeout, int nanos), позволяющие указать максимальное время ожидания.

Эти методы предоставляют основу для механизмов, таких как сравнение объектов, их клонирование, уведомление и ожидание в многопоточных средах, а также для работы с хеш-таблицами. Играют важную роль в проектировании и реализации Java-программ.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥103👍3
🤔 Какой интерфейс нужно реализовать для создания потока в Java?
Anonymous Quiz
65%
Runnable
33%
Thread
2%
Callable
1%
Future
🤯5👍32
📌 В чем разница между checked и unchecked исключениями ?

💬 Спросят с вероятностью 75%

Исключения (exceptions) важная часть обработки ошибок. Есть две основные категории: проверяемые (checked) и непроверяемые (unchecked).

🤔 Проверяемые исключения (Checked Exceptions)

Должны быть явно обработаны в коде с помощью блока try-catch или должны быть указаны в сигнатуре метода с помощью ключевого слова throws.

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

Примеры классов проверяемых исключений включают IOException, FileNotFoundException, ClassNotFoundException и другие.

🤔 Пример:
try {
FileInputStream file = new FileInputStream("non_existent_file.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
}


В этом примере FileNotFoundException является проверяемым исключением, и его необходимо обрабатывать в блоке try-catch.

🤔 Непроверяемые исключения (Unchecked Exceptions)

Не требуют обязательной обработки в коде. Они обычно возникают из-за ошибок программирования, таких как деление на ноль или доступ к элементу за пределами массива.

К ним относятся ошибки времени выполнения (RuntimeException) и ошибки (Error).

Примеры включают NullPointerException, IndexOutOfBoundsException, ArithmeticException и другие.

🤔 Пример:
int result = 10 / 0; // Приводит к ArithmeticException


Здесь ArithmeticException является непроверяемым исключением, вызванным делением на ноль.

🤔 Почему разделение на checked и unchecked?

Разделение позволяет управлять потенциальными ошибками, которые могут быть исправлены, и отличать их от ошибок времени выполнения, которые чаще всего являются результатом ошибок в коде. Это способствует написанию более надежного и устойчивого к ошибкам кода.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9😁1
🤔 Какой метод используется для получения текущего времени в миллисекундах в Java?
Anonymous Quiz
61%
System.currentTimeMillis()
20%
System.getCurrentTime()
10%
Date.getTime()
9%
Calendar.getTimeInMillis()
👍81🤔1