#ЧеКак
🤔 Что такое Dispatcher Servlet?
Центральный компонент в Spring MVC, который обрабатывает входящие HTTP-запросы. Он распределяет запросы к соответствующим контроллерам, управляет данными и формирует ответы. Этот компонент действует как координатор между различными частями приложения, такими как контроллеры, сервисы и представления.
👉 Новости 👉 Платформа
Центральный компонент в Spring MVC, который обрабатывает входящие HTTP-запросы. Он распределяет запросы к соответствующим контроллерам, управляет данными и формирует ответы. Этот компонент действует как координатор между различными частями приложения, такими как контроллеры, сервисы и представления.
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЛитКод
Задача: 525. Contiguous Array
Дан бинарный массив nums. Верните максимальную длину непрерывного подмассива с равным количеством 0 и 1.
Пример:
👨💻 Алгоритм:
1⃣ Инициализируйте переменную count для отслеживания разности между количеством 1 и 0, и переменную max_length для хранения максимальной длины подмассива. Создайте хеш-таблицу map для хранения первых встреч каждого значения count. Добавьте начальное значение (0, -1) в хеш-таблицу.
2⃣ Итеративно пройдите по массиву nums. На каждой итерации обновляйте значение count (увеличивайте на 1 для 1 и уменьшайте на 1 для 0). Если текущее значение count уже существует в хеш-таблице, вычислите длину подмассива между текущим индексом и индексом из хеш-таблицы. Обновите max_length, если текущий подмассив длиннее.
3⃣ Если текущее значение count не существует в хеш-таблице, добавьте его с текущим индексом. После завершения итерации верните max_length.
😊 Решение:
👉 Новости 👉 Платформа
Задача: 525. Contiguous Array
Дан бинарный массив nums. Верните максимальную длину непрерывного подмассива с равным количеством 0 и 1.
Пример:
Input: nums = [0,1]
Output: 2
Explanation: [0, 1] is the longest contiguous subarray with an equal number of 0 and 1.
import java.util.HashMap;
import java.util.Map;
public class Solution {
public int findMaxLength(int[] nums) {
Map<Integer, Integer> countMap = new HashMap<>();
countMap.put(0, -1);
int maxLength = 0;
int count = 0;
for (int i = 0; i < nums.length; i++) {
count += (nums[i] == 1 ? 1 : -1);
if (countMap.containsKey(count)) {
maxLength = Math.max(maxLength, i - countMap.get(count));
} else {
countMap.put(count, i);
}
}
return maxLength;
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЧеКак
🤔 Что такое Dispatcher Servlet?
Центральный компонент в Spring MVC, который обрабатывает входящие HTTP-запросы. Он распределяет запросы к соответствующим контроллерам, управляет данными и формирует ответы. Этот компонент действует как координатор между различными частями приложения, такими как контроллеры, сервисы и представления.
👉 Новости 👉 Платформа
Центральный компонент в Spring MVC, который обрабатывает входящие HTTP-запросы. Он распределяет запросы к соответствующим контроллерам, управляет данными и формирует ответы. Этот компонент действует как координатор между различными частями приложения, такими как контроллеры, сервисы и представления.
Please open Telegram to view this post
VIEW IN TELEGRAM
Anonymous Quiz
86%
Что данный класс наследуется от другого.
14%
Что это дополнительный модуль класса, который расширяет его свойства.
0%
Что два класса делают одно и то же.
0%
Что это самый большой класс в программе.
#ЧеКак
🤔 Что такое синхронизация и зачем она нужна?
Это механизм управления доступом к общим ресурсам в многопоточной среде, чтобы избежать конфликтов и некорректного поведения. Она обеспечивает выполнение критических секций кода одним потоком в любой момент времени. Синхронизация предотвращает состояния гонки и гарантирует согласованность данных.
👉 Новости 👉 Платформа
Это механизм управления доступом к общим ресурсам в многопоточной среде, чтобы избежать конфликтов и некорректного поведения. Она обеспечивает выполнение критических секций кода одним потоком в любой момент времени. Синхронизация предотвращает состояния гонки и гарантирует согласованность данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
#Вакансии
👨💻 Java разработчик
Локация: Удаленно в РФ
Компания: Фамтех
ЗП: от 250 000 до 370 000 р. на руки
Занятость: Полная
Грейд: Middle/ Middle+/ Senior
🚩 Обязательные требования
🔵 Java 11 (SpringBoot 2.3) (Backend);
🔵 PostgreSQL, Liquibase, RabbitMQ, Kafka, REST, k8s, Jenkins, Gitlab, Kibana, Grafana, Prometheus, Zabbix, SonarCube, Jmeter, Selenium, Junit, Cucumber;
🔵 Опыт коммерческой разработки на Java от 3 лет (Spring, Boot);
🔵 Способность решать задачи самостоятельно и работать в команде;
🔵 Участие в управлении командами разработки совместно с СРО.
🚩 Дополнительные требования
🔵 Опыт работы в крупных проектах;
🔵 Использование методологии agile.
🚩 Задачи на проекте
🔵 Занятие технологически сложными задачами проекта и проектировать архитектуру сервисов в сотрудничестве с командой;
🔵 Передача опыта и внедрение лучших практик как в код, так и в процессы;
🔵 Принятие решений по найму и развитию сотрудников, участие в технических интервью;
🔵 Поиск оптимальных решений, балансирующих потребности бизнеса, сроки релиза и техническое совершенство вместе с командой.
🚩 Мы предлагаем
🔵 Удаленка;
🔵 Официальное оформление в аккредитованную IT компанию или ИП/ГПХ;
🔵 Работа по московскому времени;
🔵 ДМС после прохождения испытательного срока;
🔵 Реферальная программа: бонус за рекомендации;
🔵 Выдаем технику для работы или можете работать на своей;
🔵 Пересмотр заработной платы раз в год.
💬 Резюме отправлять: @romanchuk_ye
👉 Новости 👉 Платформа
Локация: Удаленно в РФ
Компания: Фамтех
ЗП: от 250 000 до 370 000 р. на руки
Занятость: Полная
Грейд: Middle/ Middle+/ Senior
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЧеКак
🤔 Какие методы жизненного цикла JSP могут быть переопределены ?
Жизненный цикл JSP (JavaServer Pages) включает несколько ключевых методов, которые можно переопределить для управления поведением страницы. Эти методы определены в интерфейсе
🟠 `jspInit()`
Этот метод запускается один раз при инициализации JSP. Он используется для выполнения начальных настроек, таких как создание объектов, которые будут использоваться на странице. Это аналог метода
🟠 jspDestroy()
Этот метод вызывается перед удалением JSP со страницы сервера. Он используется для освобождения ресурсов или выполнения других задач очистки. Это аналог метода
👉 Новости 👉 Платформа
Жизненный цикл JSP (JavaServer Pages) включает несколько ключевых методов, которые можно переопределить для управления поведением страницы. Эти методы определены в интерфейсе
javax.servlet.jsp.HttpJspPage, который расширяет интерфейс javax.servlet.jsp.JspPage. Этот метод запускается один раз при инициализации JSP. Он используется для выполнения начальных настроек, таких как создание объектов, которые будут использоваться на странице. Это аналог метода
init() в сервлетах.Этот метод вызывается перед удалением JSP со страницы сервера. Он используется для освобождения ресурсов или выполнения других задач очистки. Это аналог метода
destroy() в сервлетах.<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.io.*, java.util.*" %>
<%!
// Поля класса
private Resource resource;
// Переопределение метода jspInit()
public void jspInit() {
// Инициализация ресурсов
resource = new Resource();
System.out.println("JSP инициализирована.");
}
// Переопределение метода jspDestroy()
public void jspDestroy() {
// Освобождение ресурсов
resource.close();
System.out.println("JSP уничтожена.");
}
%>
<html>
<body>
<h2>Пример переопределения методов жизненного цикла JSP</h2>
</body>
</html>
Please open Telegram to view this post
VIEW IN TELEGRAM
Anonymous Quiz
5%
Изменение поведения метода класса относительно родительского.
10%
Изменение поведения метода класса относительно дочернего.
85%
Несколько методов с одинаковым названием, но разным набором параметров.
0%
Несколько разных классов с одинаковым методом.
#ЧеКак
🤔 Что такое CompletableFuture?
Это расширенный класс, реализующий интерфейсы Future и CompletionStage. Он предоставляет удобные методы для построения асинхронных цепочек задач, обработки исключений и комбинирования нескольких асинхронных операций. Это упрощает написание асинхронного кода и избегает блокировки.
👉 Новости 👉 Платформа
Это расширенный класс, реализующий интерфейсы Future и CompletionStage. Он предоставляет удобные методы для построения асинхронных цепочек задач, обработки исключений и комбинирования нескольких асинхронных операций. Это упрощает написание асинхронного кода и избегает блокировки.
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЛитКод
Задача: 611. Valid Triangle Number
Если задан целочисленный массив nums, верните количество выбранных из массива троек, которые могут образовывать треугольники, если принять их за длины сторон треугольника.
Пример:
👨💻 Алгоритм:
1⃣ Отсортируйте массив nums.
2⃣ Используйте три вложенных цикла: для каждого фиксированного третьего элемента, используйте два указателя для поиска подходящих первых двух элементов, которые удовлетворяют неравенству треугольника.
3⃣ Увеличивайте счетчик на количество подходящих пар для каждого третьего элемента.
😎 Решение:
👉 Новости 👉 Платформа
Задача: 611. Valid Triangle Number
Если задан целочисленный массив nums, верните количество выбранных из массива троек, которые могут образовывать треугольники, если принять их за длины сторон треугольника.
Пример:
Input: nums = [2,2,3,4]
Output: 3
import java.util.Arrays;
public class Solution {
public int triangleNumber(int[] nums) {
Arrays.sort(nums);
int n = nums.length;
int count = 0;
for (int k = n - 1; k >= 2; k--) {
int i = 0;
int j = k - 1;
while (i < j) {
if (nums[i] + nums[j] > nums[k]) {
count += j - i;
j--;
} else {
i++;
}
}
}
return count;
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЧеКак
🤔 Как создать поток?
🟠 Наследование класса Thread: создайте подкласс Thread и переопределите метод run().
🟠 Реализация интерфейса Runnable: создайте класс, реализующий Runnable, и передайте его экземпляр в конструктор Thread.
🟠 Использование пула потоков: через ExecutorService для управления потоками.
👉 Новости 👉 Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
Anonymous Quiz
73%
Изменение поведения метода класса относительно родительского.
14%
Изменение поведения метода класса относительно дочернего.
9%
Несколько методов с одинаковым названием, но разным набором параметров.
5%
Несколько разных классов с одинаковым методом.
#ЛитКод
Задача: 630. Course Schedule III
Имеется n различных онлайн-курсов, пронумерованных от 1 до n. Вам дан массив courses, где courses[i] = [durationi, lastDayi] указывает, что i-й курс должен быть пройден непрерывно в течениеi дней и должен быть закончен до или в lastDayi. Вы начинаете в 1-й день и не можете проходить два или более курсов одновременно. Верните максимальное количество курсов, которые вы можете пройти.
Пример:
👨💻 Алгоритм:
1⃣ Сортировка курсов
Отсортируйте курсы по их конечным датам (lastDay). Это позволяет проходить курсы как можно ближе к их крайним срокам.
2⃣ Проход по курсам
Используйте приоритетную очередь (max-heap) для отслеживания продолжительности пройденных курсов.
3⃣ Добавление и удаление курсов
Для каждого курса: Добавьте его продолжительность в приоритетную очередь и обновите общее время прохождения курсов. Если общее время превышает крайний срок текущего курса, удалите самый длительный курс из очереди и скорректируйте общее время.
😎 Решение:
👉 Новости 👉 Платформа
Задача: 630. Course Schedule III
Имеется n различных онлайн-курсов, пронумерованных от 1 до n. Вам дан массив courses, где courses[i] = [durationi, lastDayi] указывает, что i-й курс должен быть пройден непрерывно в течениеi дней и должен быть закончен до или в lastDayi. Вы начинаете в 1-й день и не можете проходить два или более курсов одновременно. Верните максимальное количество курсов, которые вы можете пройти.
Пример:
Input: courses = [[100,200],[200,1300],[1000,1250],[2000,3200]]
Output: 3
Отсортируйте курсы по их конечным датам (lastDay). Это позволяет проходить курсы как можно ближе к их крайним срокам.
Используйте приоритетную очередь (max-heap) для отслеживания продолжительности пройденных курсов.
Для каждого курса: Добавьте его продолжительность в приоритетную очередь и обновите общее время прохождения курсов. Если общее время превышает крайний срок текущего курса, удалите самый длительный курс из очереди и скорректируйте общее время.
import java.util.*;
public class Solution {
public int scheduleCourse(int[][] courses) {
Arrays.sort(courses, (a, b) -> a[1] - b[1]);
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());
int time = 0;
for (int[] course : courses) {
time += course[0];
maxHeap.offer(course[0]);
if (time > course[1]) {
time -= maxHeap.poll();
}
}
return maxHeap.size();
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЧеКак
🤔 Какая разница между динамическим и статическим содержимым JSP?
В JSP (Java Server Pages) существует несколько типов тегов, которые помогают разработчикам создавать динамически генерируемые веб-страницы. Основные типы тегов включают директивы, скриптлеты, выражения, декларации, действия и теги библиотек.
🟠 Директивы (Directives)
Используются для настройки JSP страницы и управления её поведением. Они предоставляют инструкции контейнеру JSP.
page: Настраивает атрибуты страницы, такие как кодировка, импорт классов, обработка исключений и т.д.
include: Включает содержимое другого файла в JSP страницу во время компиляции.
taglib: Декларирует использование библиотеки тегов.
🟠 Скриптлеты (Scriptlets)
Позволяют включать произвольный Java код внутри JSP страницы. Код внутри скриптлета выполняется на сервере при генерации страницы.
🟠 Выражения (Expressions)
Позволяют выводить значения Java переменных и методов в HTML код. Результат выражения автоматически включается в вывод страницы.
🟠 Декларации (Declarations)
Позволяют объявлять методы и поля класса, в который компилируется JSP страница. Они используются для объявления переменных и методов, доступных в других частях страницы.
🟠 Действия (Actions)
Позволяют выполнять встроенные функции, такие как включение содержимого другого ресурса или использование JavaBeans. Эти теги начинаются с
jsp:include
Включает другой ресурс (JSP, HTML, Servlet) в текущую страницу во время выполнения.
jsp:forward
Перенаправляет запрос на другой ресурс.
jsp:useBean
Создает или извлекает JavaBean и делает его доступным на странице.
jsp:setProperty
Устанавливает значение свойства JavaBean.
jsp:getProperty
Извлекает значение свойства JavaBean и выводит его.
🟠 Теги библиотек (Tag Libraries)
Предоставляют дополнительные функции и упрощают разработку JSP страниц. Они используются для выполнения часто встречающихся задач, таких как итерация, условная логика, обработка XML, и работа с форматированием.
👉 Новости 👉 Платформа
В JSP (Java Server Pages) существует несколько типов тегов, которые помогают разработчикам создавать динамически генерируемые веб-страницы. Основные типы тегов включают директивы, скриптлеты, выражения, декларации, действия и теги библиотек.
Используются для настройки JSP страницы и управления её поведением. Они предоставляют инструкции контейнеру JSP.
page: Настраивает атрибуты страницы, такие как кодировка, импорт классов, обработка исключений и т.д.
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="java.util.Date" %>
include: Включает содержимое другого файла в JSP страницу во время компиляции.
<%@ include file="header.jsp" %>
taglib: Декларирует использование библиотеки тегов.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
Позволяют включать произвольный Java код внутри JSP страницы. Код внутри скриптлета выполняется на сервере при генерации страницы.
<%
String message = "Hello, World!";
out.println(message);
%>
Позволяют выводить значения Java переменных и методов в HTML код. Результат выражения автоматически включается в вывод страницы.
<p>Current time: <%= new java.util.Date() %></p>
Позволяют объявлять методы и поля класса, в который компилируется JSP страница. Они используются для объявления переменных и методов, доступных в других частях страницы.
<%!
private int counter = 0;
public int getCounter() {
return counter++;
}
%>
<p>Counter: <%= getCounter() %></p>
Позволяют выполнять встроенные функции, такие как включение содержимого другого ресурса или использование JavaBeans. Эти теги начинаются с
<jsp: и предоставляют различные функциональные возможности.jsp:include
Включает другой ресурс (JSP, HTML, Servlet) в текущую страницу во время выполнения.
<jsp:include page="header.jsp" />
jsp:forward
Перенаправляет запрос на другой ресурс.
<jsp:forward page="anotherPage.jsp" />
jsp:useBean
Создает или извлекает JavaBean и делает его доступным на странице.
<jsp:useBean id="user" class="com.example.User" scope="session" />
jsp:setProperty
Устанавливает значение свойства JavaBean.
<jsp:setProperty name="user" property="name" value="John Doe" />
jsp:getProperty
Извлекает значение свойства JavaBean и выводит его.
<jsp:getProperty name="user" property="name" />
Предоставляют дополнительные функции и упрощают разработку JSP страниц. Они используются для выполнения часто встречающихся задач, таких как итерация, условная логика, обработка XML, и работа с форматированием.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:choose>
<c:when test="${param.user == 'admin'}">
<p>Welcome, admin!</p>
</c:when>
<c:otherwise>
<p>Welcome, guest!</p>
</c:otherwise>
</c:choose>
<c:forEach var="item" items="${items}">
<p>${item.name}</p>
</c:forEach>
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЧеКак
🤔 Что такое стектрейс? Как его получить?
Стектрейс - это список методов, которые были вызваны до момента возникновения
ошибки. Он помогает понять, где произошла ошибка, и выявить проблемные участки
кода. Получить его можно из исключений через printStackTrace() или
getStackTrace() .
👉 Новости 👉 Платформа
Стектрейс - это список методов, которые были вызваны до момента возникновения
ошибки. Он помогает понять, где произошла ошибка, и выявить проблемные участки
кода. Получить его можно из исключений через printStackTrace() или
getStackTrace() .
Please open Telegram to view this post
VIEW IN TELEGRAM
Anonymous Quiz
9%
Поведение обычного метода класса можно изменить в классе-наследнике, а поведение staticметода нельзя
9%
Обычный метод класса можно переопределить, а static-метод нельзя.
74%
Обычный метод класса работает от объекта класса, а static-метод от всего класса.
9%
Static-метод класса можно вызывать только внутри класса, а обычный - в любой части кода.
👍1
#ЛитКод
Задача: 616. Add Bold Tag in String
Вам дана строка s и массив строк words. Вы должны добавить закрытую пару полужирных тегов <b> и </b>, чтобы обернуть подстроки в s, которые существуют в words. Если две такие подстроки пересекаются, вы должны обернуть их вместе только одной парой закрытых полужирных тегов. Если две подстроки, обернутые полужирными тегами, идут подряд, вы должны объединить их. Верните s после добавления полужирных тегов.
Пример:
👨💻 Алгоритм:
1⃣ Найдите все позиции вхождений подстрок из words в строку s и пометьте эти позиции для выделения тегами <b> и </b>.
2⃣ Пройдитесь по помеченным позициям, чтобы определить области, которые нужно обернуть в полужирные теги, слияя пересекающиеся и смежные области.
3⃣ Постройте новую строку s, добавляя теги <b> и </b> в определенные позиции.
😎 Решение:
👉 Новости 👉 Платформа
Задача: 616. Add Bold Tag in String
Вам дана строка s и массив строк words. Вы должны добавить закрытую пару полужирных тегов <b> и </b>, чтобы обернуть подстроки в s, которые существуют в words. Если две такие подстроки пересекаются, вы должны обернуть их вместе только одной парой закрытых полужирных тегов. Если две подстроки, обернутые полужирными тегами, идут подряд, вы должны объединить их. Верните s после добавления полужирных тегов.
Пример:
Input: s = "abcxyz123", words = ["abc","123"]
Output: "<b>abc</b>xyz<b>123</b>"
public class Solution {
public String addBoldTag(String s, String[] words) {
int n = s.length();
boolean[] bold = new boolean[n];
for (String word : words) {
int start = s.indexOf(word);
while (start != -1) {
for (int i = start; i < start + word.length(); i++) {
bold[i] = true;
}
start = s.indexOf(word, start + 1);
}
}
StringBuilder result = new StringBuilder();
int i = 0;
while (i < n) {
if (bold[i]) {
result.append("<b>");
while (i < n && bold[i]) {
result.append(s.charAt(i));
i++;
}
result.append("</b>");
} else {
result.append(s.charAt(i));
i++;
}
}
return result.toString();
}
}Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Anonymous Quiz
41%
InputStream
41%
RandomAccessFile
9%
FileOutputStream
9%
Scanner
Anonymous Quiz
37%
Никак, static-метод можно вызвать только от объекта класса.
3%
Можно, надо перед этим перегрузить обычный метод класса.
7%
Можно, надо перед этим переопределить обычный метод класса.
53%
Можно, ничего дополнительно делать не надо.
❤1
#Собес
🤔 В чем разница передачи параметров по ссылке и значению?
B Java параметры всегда передаются по значению, но для обьектов это значение - ссылка. Если метод изменяет объект, это изменение видно и за пределами метода. Однако переназначение ссылки внутри метода не влияет на исходную ссылку.
👉 Новости 👉 Платформа
B Java параметры всегда передаются по значению, но для обьектов это значение - ссылка. Если метод изменяет объект, это изменение видно и за пределами метода. Однако переназначение ссылки внутри метода не влияет на исходную ссылку.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1