Java | Вопросы собесов
11.4K subscribers
31 photos
2 videos
1.12K links
Download Telegram
🤔 Зачем нужен String Pool?

String Pool позволяет экономить память, храня строки в едином пуле и переиспользуя их, если строки имеют одинаковое значение.

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

Существуют четыре основные области видимости (scopes) переменных, которые определяют, сколько времени переменная будет доступна и где она может быть использована. Это page, request, session и application.

🚩Области видимости переменных в JSP

🟠Page Scope
Переменная с областью видимости страницы доступна только на текущей странице JSP. Существует только во время обработки текущей страницы. Локальные переменные, необходимые только в пределах одной страницы.

🟠Request Scope
Переменная с областью видимости запроса доступна во всех JSP, сервлетах и других ресурсах, которые обрабатывают текущий HTTP-запрос. Существует до тех пор, пока запрос не будет завершен. Данные, которые нужно передать между несколькими сервлетами и JSP в пределах одного запроса.

🟠Session Scope
Переменная с областью видимости сессии доступна во всех JSP, сервлетах и других ресурсах, которые обрабатывают запросы от конкретного пользователя в рамках одной сессии. Существует до завершения сессии (например, закрытие браузера или истечение времени сессии). Данные, которые должны сохраняться между запросами одного пользователя, например, информация о вошедшем пользователе.

🟠Application Scope
Переменная с областью видимости приложения доступна во всех JSP, сервлетах и других ресурсах в пределах всего веб-приложения. Существует до тех пор, пока приложение работает на сервере. Данные, которые должны быть доступны всем пользователям и запросам, например, конфигурационные параметры приложения.

🚩Пример использования всех областей видимости

Локальная переменная, которая используется только на одной странице (page scope). Временные данные для текущего запроса (request scope). Данные пользователя для текущей сессии (session scope). Глобальные данные для всего приложения (application scope).
@WebServlet("/example")
public class ExampleServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Request scope
request.setAttribute("requestVar", "Request Scoped Variable");

// Session scope
HttpSession session = request.getSession();
session.setAttribute("sessionVar", "Session Scoped Variable");

// Application scope
ServletContext context = getServletContext();
context.setAttribute("appVar", "Application Scoped Variable");

// Forward to JSP
RequestDispatcher dispatcher = request.getRequestDispatcher("example.jsp");
dispatcher.forward(request, response);
}
}


JSP (example.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Scope Example</title>
</head>
<body>
<h1>Scope Example</h1>
<p>Request Scope: <%= request.getAttribute("requestVar") %></p>
<p>Session Scope: <%= session.getAttribute("sessionVar") %></p>
<p>Application Scope: <%= application.getAttribute("appVar") %></p>

<%! String pageVar = "Page Scoped Variable"; %>
<p>Page Scope: <%= pageVar %></p>
</body>
</html>


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🤔 StringBuilder и StringBuffer, в чём различия?

StringBuilder быстрее, но не потокобезопасен, тогда как StringBuffer потокобезопасен за счёт синхронизации, но работает медленнее.

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

Они упрощают работу с различными аспектами веб-приложения.

🚩Неявные объекты в JSP

🟠`request`
Тип: HttpServletRequest
Используется для получения информации о запросе клиента, таких как параметры запроса, заголовки, атрибуты и сессия. request.getParameter("username")

🟠`response`
Тип: HttpServletResponse. Используется для отправки ответа клиенту, например, установки заголовков и написания данных в поток ответа. Пример: response.setContentType("text/html")

🟠`session`
Тип: HttpSession. Представляет сессию между клиентом и сервером, позволяя сохранять данные между запросами одного пользователя. Пример: session.setAttribute("user", userObject)

🟠`application`
Тип: ServletContext. Представляет контекст веб-приложения, позволяя сохранять данные, доступные всем сервлетам и JSP в приложении. Пример: application.getAttribute("appConfig")

🟠`config`
Тип: ServletConfig. Используется для доступа к конфигурационным параметрам сервлета. Пример: config.getInitParameter("initParamName")

🟠`out`
Тип: JspWriter. Используется для вывода данных в поток ответа клиента. Пример: out.println("Hello, World!")

🟠`pageContext`
Тип: PageContext. Предоставляет доступ к различным областям видимости (page, request, session, application) и служебным методам. Пример: pageContext.getAttribute("attrName", PageContext.SESSION_SCOPE)

🟠`page`
Тип: Object. Ссылается на саму JSP-страницу как объект. Пример: Обычно используется редко.

🟠`exception`
Тип: Throwable. Доступен только на страницах ошибки и содержит исключение, которое привело к ошибке. Пример: <%= exception.getMessage() %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Пример неявных объектов</title>
</head>
<body>
<h1>Привет, <%= request.getParameter("username") %>!</h1>
<%
session.setAttribute("greeting", "Добро пожаловать!");
out.println((String) session.getAttribute("greeting"));
%>
</body>
</html>


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Может ли примитивный тип данных попасть в Heap?

Примитивный тип может попасть в Heap, если он упакован в объект, например, через Integer или Double.

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

На обычной JSP-странице не все неявные объекты доступны. К таким объектам относятся:

🚩Неявные объекты

🟠`exception`
Throwable. Этот объект доступен только на страницах, предназначенных для обработки ошибок, то есть на страницах, у которых атрибут isErrorPage установлен в true. Он используется для получения информации об исключении, которое вызвало ошибку.
<%@ page isErrorPage="true" %>
<html>
<body>
<h1>Ошибка произошла</h1>
<p>Сообщение об ошибке: <%= exception.getMessage() %></p>
</body>
</html>


🚩Пример обычной JSP-страницы

На обычной JSP-странице доступны такие неявные объекты, как request, response, session, application, config, out, pageContext, и page. Пример использования этих объектов:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Пример неявных объектов</title>
</head>
<body>
<h1>Привет, <%= request.getParameter("username") %>!</h1>
<%
// Установка атрибута в сессии
session.setAttribute("greeting", "Добро пожаловать!");
// Вывод значения атрибута из сессии
out.println((String) session.getAttribute("greeting"));
%>
<p>Контекст приложения: <%= application.getServletContextName() %></p>
<p>Параметр конфигурации: <%= config.getInitParameter("configParam") %></p>
</body>
</html>


🟠`request`
Используется для получения параметров запроса и атрибутов.
🟠`response`
Используется для отправки данных обратно клиенту.
🟠`session`
Используется для хранения данных между запросами одного пользователя.
🟠`application`
Используется для хранения данных, доступных всему приложению.
🟠`config`
Используется для получения параметров конфигурации сервлета.
🟠`out`
Используется для вывода данных в поток ответа.
🟠`pageContext`
Предоставляет доступ к различным областям видимости и служебным методам.
🟠`page`
Ссылается на саму JSP-страницу как объект.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3👾1
🤔 Как работает оператор try with resources?

Оператор try with resources автоматически закрывает ресурсы (например, файлы, потоки), реализующие интерфейс AutoCloseable, после завершения блока try.

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

Это неявный объект в JSP, который предоставляет доступ к различным областям видимости и служебным методам. Он инкапсулирует всю информацию о странице и предоставляет удобные методы для работы с атрибутами и объектами.

🚩Основные свойства и методы

🟠Атрибуты областей видимости
pageScope: Атрибуты, доступные только на текущей странице.
requestScope: Атрибуты, доступные во всех компонентах, обрабатывающих текущий запрос.
sessionScope: Атрибуты, доступные в течение всей сессии пользователя.
applicationScope: Атрибуты, доступные во всем приложении.

🟠Методы для работы с атрибутами
setAttribute(String name, Object value): Устанавливает атрибут в текущей области видимости.
getAttribute(String name): Получает атрибут из текущей области видимости.
removeAttribute(String name): Удаляет атрибут из текущей области видимости.
findAttribute(String name): Ищет атрибут в последовательности областей видимости (page, request, session, application).

🟠Другие полезные методы
forward(String path): Перенаправляет запрос на другой ресурс (JSP, сервлет и т.д.).
include(String path): Включает содержимое другого ресурса в текущую страницу.
getServletConfig(): Возвращает объект ServletConfig для текущего сервлета.
getServletContext(): Возвращает объект ServletContext для текущего веб-приложения.
getOut(): Возвращает объект JspWriter для вывода данных на страницу.

🚩Плюсы

Унификация доступа
PageContext предоставляет единый интерфейс для доступа к атрибутам всех областей видимости (страница, запрос, сессия, приложение), что упрощает работу с данными.
Упрощение кода
Использование методов PageContext делает код JSP более компактным и читабельным, так как все операции с атрибутами и служебными методами сосредоточены в одном объекте.
Удобные методы перенаправления и включения
Методы forward и include облегчают перенаправление и включение ресурсов, что способствует созданию модульного и легко управляемого кода.
Повышение гибкости
Метод findAttribute позволяет гибко искать атрибуты во всех областях видимости, что упрощает доступ к данным.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="javax.servlet.jsp.PageContext" %>
<html>
<head>
<title>PageContext Example</title>
</head>
<body>
<h1>PageContext Example</h1>

<%-- Установка атрибута в request scope --%>
<%
pageContext.setAttribute("message", "Hello from PageContext!", PageContext.REQUEST_SCOPE);
%>

<%-- Получение атрибута из request scope --%>
<p>Message: <%= pageContext.getAttribute("message", PageContext.REQUEST_SCOPE) %></p>

<%-- Перенаправление на другой ресурс --%>
<%-- pageContext.forward("/anotherPage.jsp"); --%>

<%-- Включение другого ресурса --%>
<%-- pageContext.include("/header.jsp"); --%>
</body>
</html>


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

В интерфейсе могут быть абстрактные методы, которые по умолчанию являются public и abstract. Java 8 добавила методы с реализацией по умолчанию (default) и статические методы (static). Также можно использовать приватные методы (private) для внутренних нужд интерфейса. Это делает интерфейсы более функциональными и гибкими для расширения.

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

Чтобы сконфигурировать параметры инициализации для JSP (JavaServer Pages), можно использовать файлы конфигурации, такие как web.xml или аннотации в сервлетах. Эти параметры инициализации часто нужны для передачи специфических данных или настроек, которые требуются JSP-страницам при их выполнении.

🚩Способы конфигурации

🟠Конфигурация в `web.xml`
Файл web.xml является частью спецификации Java EE и используется для конфигурации веб-приложений. Для установки параметров инициализации для JSP можно использовать тег <init-param> внутри тега <servlet>. Например:
<web-app>
<servlet>
<servlet-name>exampleJSP</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>exampleJSP</servlet-name>
<url-pattern>/example</url-pattern>
</servlet-mapping>
</web-app>


🟠Аннотаций в сервлетах
В Java EE 6 и более поздних версиях можно использовать аннотации для конфигурации сервлетов и их параметров. Хотя сами JSP-страницы не могут быть аннотированы напрямую, можно создать сервлет, который обрабатывает параметры и перенаправляет запросы на JSP.
@WebServlet("/example")
public class ExampleServlet extends HttpServlet {
@Override
public void init() throws ServletException {
ServletConfig config = getServletConfig();
String param1 = config.getInitParameter("param1");
String param2 = config.getInitParameter("param2");
// Теперь параметры можно использовать в логике сервлета или передать в JSP
getServletContext().setAttribute("param1", param1);
getServletContext().setAttribute("param2", param2);
}

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.getRequestDispatcher("/example.jsp").forward(req, resp);
}
}


🟠Параметров в JSP
Чтобы получить параметры инициализации в JSP, можно использовать выражения JSP или скриптлеты. Например:
<%
String param1 = (String) application.getAttribute("param1");
String param2 = (String) application.getAttribute("param2");
%>
<html>
<head>
<title>Example JSP</title>
</head>
<body>
<p>Param 1: <%= param1 %></p>
<p>Param 2: <%= param2 %></p>
</body>
</html>


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2👾2
🤔 Что знаешь про функциональный интерфейс Java 8+?

Функциональный интерфейс — это интерфейс с одним абстрактным методом, который можно реализовать через лямбда-выражение. Такие интерфейсы аннотируются @FunctionalInterface для проверки на этапе компиляции. Они являются основой для функционального программирования в Java 8 и поддерживаются в Stream API. Примеры: Runnable, Supplier, Predicate, Consumer.

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

Конфигурация параметров инициализации для JSP (JavaServer Pages) осуществляется в файле web.xml, который находится в директории WEB-INF вашего веб-приложения. Этот файл используется для настройки различных аспектов веб-приложения, включая параметры инициализации для JSP.

🚩Пример конфигурации параметров инициализации для JSP в `web.xml`

🟠Общие параметры инициализации для всех JSP страниц
Можно задать общие параметры инициализации, которые будут доступны на всех страницах JSP через объект ServletContext.
<web-app xmlns="https://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://xmlns.jcp.org/xml/ns/javaee https://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">

<context-param>
<param-name>paramName</param-name>
<param-value>paramValue</param-value>
</context-param>

<!-- Другие конфигурации -->

</web-app>


Для доступа к этим параметрам в JSP, можно использовать следующий код
<%= application.getInitParameter("paramName") %>


🟠Параметры инициализации для конкретного сервлета (включая JSP)
Можно также задать параметры инициализации для конкретного сервлета или JSP страницы.
<web-app xmlns="https://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://xmlns.jcp.org/xml/ns/javaee https://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">

<servlet>
<servlet-name>exampleServlet</servlet-name>
<jsp-file>/example.jsp</jsp-file>
<init-param>
<param-name>paramName</param-name>
<param-value>paramValue</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>exampleServlet</servlet-name>
<url-pattern>/example</url-pattern>
</servlet-mapping>

<!-- Другие конфигурации -->

</web-app>


Для доступа к этим параметрам в JSP, можно использовать следующий код
<%= config.getInitParameter("paramName") %>


🚩Пример полного `web.xml`

<web-app xmlns="https://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://xmlns.jcp.org/xml/ns/javaee https://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">

<!-- Общие параметры инициализации -->
<context-param>
<param-name>globalParam</param-name>
<param-value>globalValue</param-value>
</context-param>

<!-- Параметры инициализации для конкретного JSP -->
<servlet>
<servlet-name>exampleServlet</servlet-name>
<jsp-file>/example.jsp</jsp-file>
<init-param>
<param-name>specificParam</param-name>
<param-value>specificValue</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>exampleServlet</servlet-name>
<url-pattern>/example</url-pattern>
</servlet-mapping>

</web-app>


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
4👾2👍1
🤔 Char — символьный или числовой тип данных?

char в Java — это символьный тип данных, который используется для представления одиночных символов Unicode. При этом он хранится как 16-битное числовое значение, соответствующее коду символа в таблице Unicode. Это позволяет выполнять над символами арифметические операции, такие как инкремент или сравнение. Но основной его смысл — хранение символов.

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

Манифест файл в JAR (Java ARchive) файле содержит метаинформацию о JAR-файле и его содержимом. Этот файл имеет имя MANIFEST.MF и находится в директории META-INF JAR-файла. Манифест файл может включать различные атрибуты, которые описывают сам архив, его содержимое, и дополнительные параметры, такие как основной класс для запуска и зависимости.

🚩Создание JAR с манифестом вручную

1⃣Создайте файл MANIFEST.MF с необходимыми атрибутами.
2⃣Используйте команду jar для создания JAR файла и включения манифеста.
jar cmf MANIFEST.MF myapp.jar -C classes/ .


🚩Пример использования Maven

Добавьте информацию о манифесте в pom.xml.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.example.MyMainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>


Манифест можно прочитать программно, используя классы из java.util.jar пакета.
import java.io.InputStream;
import java.util.jar.Manifest;
import java.util.jar.Attributes;

public class ReadManifest {
public static void main(String[] args) {
try (InputStream input = ReadManifest.class.getResourceAsStream("/META-INF/MANIFEST.MF")) {
if (input != null) {
Manifest manifest = new Manifest(input);
Attributes attrs = manifest.getMainAttributes();
String version = attrs.getValue("Manifest-Version");
String mainClass = attrs.getValue("Main-Class");
System.out.println("Manifest-Version: " + version);
System.out.println("Main-Class: " + mainClass);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍141
🤔 В чём разница между переопределением и перегрузкой?

Переопределение (overriding) изменяет реализацию метода родительского класса в подклассе для добавления специфического поведения. Перегрузка (overloading) позволяет создавать методы с одним именем, но разными параметрами (аргументами) в одном классе. Переопределение связано с наследованием, тогда как перегрузка — это метод перегруппировки логики внутри одного класса. Эти механизмы помогают повысить гибкость и читаемость кода.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍221
🤔 Расскажи про области памяти и Garbage Collector?

🟠Heap (Куча)
Используется для динамического распределения памяти всех объектов и массивов. Разделена на молодое поколение (Young Generation) и старое поколение (Old Generation).
🟠Young Generation
Eden Space: Новые объекты сначала создаются здесь. Survivor Spaces (S0 и S1): Объекты, которые пережили сборку мусора в Eden Space, перемещаются сюда.
🟠Old Generation
Содержит долгоживущие объекты, которые пережили несколько сборок мусора в Young Generation.
🟠PermGen (Permanent Generation)
Используется для хранения метаданных классов и методов. В Java 8 заменена на Metaspace, которая выделяется из внеheap-памяти и автоматически увеличивается по мере необходимости.

🟠Stack (Стек)
Содержит фреймы для каждого метода, который выполняется в потоке. Каждый фрейм включает локальные переменные, параметры метода и другие данные.

🚩Garbage Collector (GC)

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

🟠Minor GC (Малый сбор мусора)
Очищает Young Generation. Быстрая и частая сборка мусора.
🟠Major GC (Большой сбор мусора) или Full GC
Очищает Old Generation и, возможно, всю кучу. Медленнее, так как затрагивает больше объектов.

🚩Алгоритмы Garbage Collector

🟠Serial GC
Использует один поток для сборки мусора. Подходит для небольших приложений или одноядерных систем.
🟠Parallel GC (или Throughput GC)
Использует несколько потоков для ускорения сборки мусора. Хорошо подходит для многопроцессорных систем.
🟠CMS (Concurrent Mark-Sweep) GC
Выполняет сборку мусора одновременно с выполнением приложения. Минимизирует паузы, но требует больше ресурсов.
🟠G1 (Garbage First) GC
Делит кучу на регионы и выполняет сборку мусора по регионам. Минимизирует паузы и обеспечивает предсказуемую производительность.

🚩Пример настройки GC

Вы можете настроить JVM для использования конкретного сборщика мусора и управлять его параметрами с помощью аргументов командной строки.
java -XX:+UseG1GC -Xms512m -Xmx2g MyApplication


Хотя сборка мусора в Java автоматизирована, можно явным образом вызывать сборку мусора, используя System.gc(). Однако это лишь рекомендация для JVM, и она не обязана немедленно выполнять сборку мусора.
public class GarbageCollectorExample {
public static void main(String[] args) {
// Создание объекта
String str = new String("Hello, World!");

// Обнуление ссылки, объект становится доступным для сборки мусора
str = null;

// Явный вызов сборки мусора (не рекомендуется использовать в продакшн-коде)
System.gc();

System.out.println("Garbage Collector called");
}
}


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

GROUP BY в SQL группирует строки по значениям в указанных столбцах. После группировки можно применять агрегатные функции, такие как SUM, AVG, COUNT, для выполнения вычислений над каждой группой. Эта операция часто используется для анализа данных и создания сводок. Например, можно подсчитать общее количество заказов для каждого клиента.

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

В контексте JVM (Java Virtual Machine) типы данных делятся на два основных класса: примитивные типы данных и ссылочные типы данных.

🚩Примитивные типы данных

Примитивные типы данных представляют собой базовые типы, которые не являются объектами и хранят непосредственно значения. Они делятся на числовые типы, логический тип и символьный тип.

🟠Числовые типы
Целочисленные типы
byte: 8-битный знаковый целочисленный тип данных (диапазон от -128 до 127).
short: 16-битный знаковый целочисленный тип данных (диапазон от -32,768 до 32,767).
int: 32-битный знаковый целочисленный тип данных (диапазон от -2^31 до 2^31-1).
long: 64-битный знаковый целочисленный тип данных (диапазон от -2^63 до 2^63-1).
Типы с плавающей точкой
float: 32-битный IEEE 754 тип данных с плавающей точкой одинарной точности.
double: 64-битный IEEE 754 тип данных с плавающей точкой двойной точности.

🟠Логический тип
boolean: Представляет логическое значение (true или false).

🟠Символьный тип
char: 16-битный тип данных, представляющий символ Unicode (диапазон от '\u0000' до '\uffff').

🚩Ссылочные типы данных

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

🟠Классы (Classes)
Любой объектный тип данных является экземпляром класса. Классы могут быть как стандартными (например, String, Integer), так и пользовательскими.
🟠Интерфейсы (Interfaces)
Интерфейсы определяют набор методов, которые должны быть реализованы классами, которые их реализуют.
🟠Массивы (Arrays)
Массивы могут быть одномерными или многомерными и могут хранить как примитивные, так и ссылочные типы данных.

🚩Пример примитивных и ссылочных типов данных

public class DataTypesExample {
public static void main(String[] args) {
// Примитивные типы данных
byte aByte = 10;
short aShort = 100;
int anInt = 1000;
long aLong = 10000L;
float aFloat = 10.5f;
double aDouble = 10.55;
boolean aBoolean = true;
char aChar = 'A';

// Ссылочные типы данных
String aString = "Hello, World!";
Integer anInteger = 1000;
int[] anArray = {1, 2, 3, 4, 5};

// Вывод примитивных типов данных
System.out.println("byte: " + aByte);
System.out.println("short: " + aShort);
System.out.println("int: " + anInt);
System.out.println("long: " + aLong);
System.out.println("float: " + aFloat);
System.out.println("double: " + aDouble);
System.out.println("boolean: " + aBoolean);
System.out.println("char: " + aChar);

// Вывод ссылочных типов данных
System.out.println("String: " + aString);
System.out.println("Integer: " + anInteger);
System.out.println("Array: " + java.util.Arrays.toString(anArray));
}
}


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

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

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

В Java управление памятью и сборка мусора осуществляются автоматически JVM. В случае циклических ссылок, где два или более объектов ссылаются друг на друга, стандартный механизм подсчета ссылок (reference counting) неэффективен, поскольку циклические ссылки не позволят уменьшить счетчик ссылок до нуля. Однако, Java использует более сложные алгоритмы сборки мусора, такие как маркировка-сжатие (mark-and-sweep) и алгоритмы поколения, которые способны обнаруживать и собирать циклически связанные, но неиспользуемые объекты.

🚩Как работает алгоритм маркировка-сжатие

🟠Маркировка (Mark Phase)
Сначала алгоритм начинается с корневых объектов (root objects), таких как статические переменные, локальные переменные в стеке текущего потока, и помечает все доступные объекты, начиная с этих корней.

🟠Сжатие (Sweep Phase)
Все объекты, которые не были помечены в фазе маркировки, считаются недоступными и могут быть собраны мусорщиком.

🚩Пример циклических ссылок

public class A {
B b;
}

public class B {
A a;
}

public class Main {
public static void main(String[] args) {
A a = new A();
B b = new B();

a.b = b;
b.a = a;

// Теперь a и b ссылаются друг на друга

a = null;
b = null;

// Оба объекта теперь недоступны
// Сборщик мусора сможет их собрать
}
}


🚩Как сборщик мусора обрабатывает циклические ссылки

🟠Маркировка (Mark Phase)
Когда сборщик мусора выполняет фазу маркировки, он начнет с корневых объектов и будет следовать по всем доступным ссылкам. В этом примере, после того как a и b установлены в null, объекты класса A и B больше не будут доступны из корневых объектов.

🟠Сжатие (Sweep Phase)
Объекты A и B не помечены как доступные, поэтому они будут собраны сборщиком мусора.

🚩Демонстрация работы сборщика мусора

Чтобы демонстрировать работу сборщика мусора и показать, что объекты с циклическими ссылками могут быть собраны, можно использовать отладочные инструменты или включить журналирование сборки мусора с помощью аргументов JVM.
java -XX:+PrintGCDetails -XX:+PrintGCTimeStamps Main


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