#ЧеКак
🤔 Как создать поток?
🟠 Наследование класса Thread: создайте подкласс Thread и переопределите метод run().
🟠 Реализация интерфейса Runnable: создайте класс, реализующий Runnable, и передайте его экземпляр в конструктор Thread.
🟠 Использование пула потоков: через ExecutorService для управления потоками.
👉 Новости 👉 Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
🤓 Что означает переопределение метода в Java (override).
Anonymous Quiz
68%
Изменение поведения метода класса относительно родительского.
16%
Изменение поведения метода класса относительно дочернего.
11%
Несколько методов с одинаковым названием, но разным набором параметров.
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
🤓 Чем отличаются static-метод класса от обычного метода класса.
Anonymous Quiz
10%
Поведение обычного метода класса можно изменить в классе-наследнике, а поведение staticметода нельзя
10%
Обычный метод класса можно переопределить, а static-метод нельзя.
70%
Обычный метод класса работает от объекта класса, а static-метод от всего класса.
10%
Static-метод класса можно вызывать только внутри класса, а обычный - в любой части кода.
#ЛитКод
Задача: 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
40%
InputStream
45%
RandomAccessFile
5%
FileOutputStream
10%
Scanner
🤓 Как вызвать static-метод внутри обычного?
Anonymous Quiz
38%
Никак, static-метод можно вызвать только от объекта класса.
3%
Можно, надо перед этим перегрузить обычный метод класса.
7%
Можно, надо перед этим переопределить обычный метод класса.
52%
Можно, ничего дополнительно делать не надо.
#Собес
🤔 В чем разница передачи параметров по ссылке и значению?
B Java параметры всегда передаются по значению, но для обьектов это значение - ссылка. Если метод изменяет объект, это изменение видно и за пределами метода. Однако переназначение ссылки внутри метода не влияет на исходную ссылку.
👉 Новости 👉 Платформа
B Java параметры всегда передаются по значению, но для обьектов это значение - ссылка. Если метод изменяет объект, это изменение видно и за пределами метода. Однако переназначение ссылки внутри метода не влияет на исходную ссылку.
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Когда стоит использовать примитивы, а когда объекты в Java?
Примитивы используются, когда важны скорость и память, а объекты - когда требуется больше возможностей, таких как методы или поддержка коллекций. Примитивы подходят для простых данных, а объекты полезны для более сложных операций.
👉 Новости 👉 Платформа
Примитивы используются, когда важны скорость и память, а объекты - когда требуется больше возможностей, таких как методы или поддержка коллекций. Примитивы подходят для простых данных, а объекты полезны для более сложных операций.
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЛитКод
Задача: 609. Find Duplicate File in System
Получив список paths информации о каталоге, включающий путь к каталогу и все файлы с содержимым в этом каталоге, верните все дубликаты файлов в файловой системе по их путям. Вы можете вернуть ответ в любом порядке. Группа дубликатов состоит как минимум из двух файлов с одинаковым содержимым. Одна строка информации о каталоге во входном списке имеет следующий формат: "root/d1/d2/.../dm f1.txt(f1_content) f2.txt(f2_content) ... fn.txt(fn_content)" Это означает, что в каталоге "root/d1/d2/.../dm" имеется n файлов (f1.txt, f2.txt ... fn.txt) с содержимым (f1_content, f2_content ... fn_content) соответственно. Обратите внимание, что n >= 1 и m >= 0. Если m = 0, это означает, что каталог является только корневым. На выходе получается список групп дублирующихся путей к файлам. Для каждой группы он содержит все пути к файлам, которые имеют одинаковое содержимое. Путь к файлу - это строка, имеющая следующий формат: "каталог_путь/имя_файла.txt".
Пример:
👨💻 Алгоритм:
1⃣ Пройдите по списку путей, разберите каждый путь и соберите информацию о содержимом файлов и соответствующих им путях.
2⃣ Используйте словарь для хранения списков путей файлов, сгруппированных по их содержимому.
3⃣ Пройдите по словарю и соберите группы дубликатов, содержащие как минимум два пути.
😎 Решение:
👉 Новости 👉 Платформа
Задача: 609. Find Duplicate File in System
Получив список paths информации о каталоге, включающий путь к каталогу и все файлы с содержимым в этом каталоге, верните все дубликаты файлов в файловой системе по их путям. Вы можете вернуть ответ в любом порядке. Группа дубликатов состоит как минимум из двух файлов с одинаковым содержимым. Одна строка информации о каталоге во входном списке имеет следующий формат: "root/d1/d2/.../dm f1.txt(f1_content) f2.txt(f2_content) ... fn.txt(fn_content)" Это означает, что в каталоге "root/d1/d2/.../dm" имеется n файлов (f1.txt, f2.txt ... fn.txt) с содержимым (f1_content, f2_content ... fn_content) соответственно. Обратите внимание, что n >= 1 и m >= 0. Если m = 0, это означает, что каталог является только корневым. На выходе получается список групп дублирующихся путей к файлам. Для каждой группы он содержит все пути к файлам, которые имеют одинаковое содержимое. Путь к файлу - это строка, имеющая следующий формат: "каталог_путь/имя_файла.txt".
Пример:
Input: paths = ["root/a 1.txt(abcd) 2.txt(efgh)","root/c 3.txt(abcd)","root/c/d 4.txt(efgh)","root 4.txt(efgh)"]
Output: [["root/a/2.txt","root/c/d/4.txt","root/4.txt"],["root/a/1.txt","root/c/3.txt"]]
import java.util.*;
public class Solution {
public List<List<String>> findDuplicate(String[] paths) {
Map<String, List<String>> contentToFilePaths = new HashMap<>();
for (String path : paths) {
String[] parts = path.split(" ");
String root = parts[0];
for (int i = 1; i < parts.length; i++) {
String[] fileParts = parts[i].split("\\(");
String fileName = fileParts[0];
String content = fileParts[1].substring(0, fileParts[1].length() - 1);
String filePath = root + "/" + fileName;
contentToFilePaths.computeIfAbsent(content, k -> new ArrayList<>()).add(filePath);
}
}
List<List<String>> result = new ArrayList<>();
for (List<String> filePaths : contentToFilePaths.values()) {
if (filePaths.size() > 1) {
result.add(filePaths);
}
}
return result;
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
🤓 Как вызвать обычный метод класса внутри static-метода?
Anonymous Quiz
55%
Никак, static-метод не работает с объектом класса.
5%
Можно, надо перед этим перегрузить обычный метод класса
13%
Можно, надо перед этим переопределить обычный метод класса.
26%
Можно, ничего дополнительно делать не надо.
This media is not supported in your browser
VIEW IN TELEGRAM
#полезное
😊 GitIngest
Этот инструмент превращает любые репозитории GitHub в текст, удобный для использования в LLM-промптах. Просто вставляешь ссылку на репо — и получаешь готовую аналитику: структура файлов, размеры, форматирование под GPT
Либо вы также можете заменить "hub" на "ingest" в любом URL GitHub, чтобы получить соответствующее краткое содержание
Читать статью
👉 Новости 👉 Платформа
Этот инструмент превращает любые репозитории GitHub в текст, удобный для использования в LLM-промптах. Просто вставляешь ссылку на репо — и получаешь готовую аналитику: структура файлов, размеры, форматирование под GPT
Либо вы также можете заменить "hub" на "ingest" в любом URL GitHub, чтобы получить соответствующее краткое содержание
Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Что такое JVM, JDK, JRE?
JVM (Java Virtual Machine) выполняет байткод, обеспечивая платформонезависимость Java. JDK (Java Development Kit) - это набор инструментов для разработки, включая компилятор и JRE. JRE (Java Runtime Environment) включает JVM и стандартные библиотеки, позволяя запускать Java-программы.
👉 Новости 👉 Платформа
JVM (Java Virtual Machine) выполняет байткод, обеспечивая платформонезависимость Java. JDK (Java Development Kit) - это набор инструментов для разработки, включая компилятор и JRE. JRE (Java Runtime Environment) включает JVM и стандартные библиотеки, позволяя запускать Java-программы.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой интерфейс в Java используется для выполнения функции обратного вызова?
Anonymous Quiz
14%
ActionListener
18%
EventHandler
22%
Runnable
45%
Callable
🤓 Для чего необходимо ключевое слово this
Anonymous Quiz
13%
Это указатель на переопределенный метод класса. Нельзя опускать, иначе переопределение не сработает
78%
Это указатель на текущий объект класса внутри самого класса. Его можно опускать при вызове метода
6%
Это не ключевое слово.
3%
Это ключевое слово для вызова метода внутри static-метода. Его нельзя опускать, иначе будет ошибка
#ЛитКод
Задача: 518. Coin Change II
Вам дан целочисленный массив coins, представляющий монеты разных номиналов, и целое число amount, представляющее общую сумму денег.
Верните количество комбинаций, которые составляют эту сумму. Если эту сумму нельзя составить никакой комбинацией монет, верните 0.
Предположим, что у вас есть бесконечное количество каждой монеты.
Ответ гарантированно вписывается в знаковое 32-битное целое число.
Пример:
👨💻 Алгоритм:
1⃣ Создайте двумерный массив memo с n строками и amount + 1 столбцами. Инициализируйте значения -1, чтобы указать, что подзадача еще не решена. Реализуйте рекурсивный метод numberOfWays, который принимает два параметра: индекс i текущей рассматриваемой монеты и оставшуюся сумму, которую нужно составить. Он возвращает количество способов составить сумму, используя монеты, начиная с индекса i до последней монеты.
2⃣ Если amount == 0, верните 1. Мы можем выбрать один способ, не выбирая ни одной монеты, чтобы составить сумму 0. Если i == n, у нас не осталось монет для составления суммы, верните 0. Если эта подзадача уже решена, т.е. memo[i][amount] != -1, верните memo[i][amount]. Если значение текущей монеты превышает сумму, мы не можем её использовать. Рекурсивно вызовите numberOfWays(i + 1, amount), присвойте результат memo[i][amount] и верните его.
3⃣ В противном случае, добавьте общее количество способов составить сумму, как выбирая текущую монету, так и игнорируя её. Сложите значения numberOfWays(i, amount - coins[i]) и numberOfWays(i + 1, amount), сохраните результат в memo[i][amount] и верните его. Верните numberOfWays(0, amount), ответ на исходную задачу.
😎 Решение:
👉 Новости 👉 Платформа
Задача: 518. Coin Change II
Вам дан целочисленный массив coins, представляющий монеты разных номиналов, и целое число amount, представляющее общую сумму денег.
Верните количество комбинаций, которые составляют эту сумму. Если эту сумму нельзя составить никакой комбинацией монет, верните 0.
Предположим, что у вас есть бесконечное количество каждой монеты.
Ответ гарантированно вписывается в знаковое 32-битное целое число.
Пример:
Input: amount = 5, coins = [1,2,5]
Output: 4
Explanation: there are four ways to make up the amount:
5=5
5=2+2+1
5=2+1+1+1
5=1+1+1+1+1
class Solution {
public int change(int amount, int[] coins) {
int[][] memo = new int[coins.length][amount + 1];
for (int i = 0; i < coins.length; i++) {
Arrays.fill(memo[i], -1);
}
return numberOfWays(0, amount, coins, memo);
}
private int numberOfWays(int i, int amount, int[] coins, int[][] memo) {
if (amount == 0) {
return 1;
}
if (i == coins.length) {
return 0;
}
if (memo[i][amount] != -1) {
return memo[i][amount];
}
if (coins[i] > amount) {
memo[i][amount] = numberOfWays(i + 1, amount, coins, memo);
} else {
memo[i][amount] = numberOfWays(i, amount - coins[i], coins, memo) + numberOfWays(i + 1, amount, coins, memo);
}
return memo[i][amount];
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Что такое bytecode?
Байткод - это промежуточный код, который создается после компиляции Java- программы. Он независим от конкретной платформы и выполняется JVM, которая интерпретирует его в машинный код.
👉 Новости 👉 Платформа
Байткод - это промежуточный код, который создается после компиляции Java- программы. Он независим от конкретной платформы и выполняется JVM, которая интерпретирует его в машинный код.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
#полезное
😊 GitIngest
Этот инструмент превращает любые репозитории GitHub в текст, удобный для использования в LLM-промптах. Просто вставляешь ссылку на репо — и получаешь готовую аналитику: структура файлов, размеры, форматирование под GPT
Либо вы также можете заменить "hub" на "ingest" в любом URL GitHub, чтобы получить соответствующее краткое содержание
Читать статью
👉 Новости 👉 Платформа
Этот инструмент превращает любые репозитории GitHub в текст, удобный для использования в LLM-промптах. Просто вставляешь ссылку на репо — и получаешь готовую аналитику: структура файлов, размеры, форматирование под GPT
Либо вы также можете заменить "hub" на "ingest" в любом URL GitHub, чтобы получить соответствующее краткое содержание
Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM