👨🏻💻 Java Developer Middle+
Локация: Удалённо
Компания: ООО Картнода
Заработная плата: от 250 000 до 350 000 руб.
Занятость: Полная
Наша IT-команда ищет Java разработчика с опытом работы от 3 лет в области финтеха и банковских технологий.
ОЖИДАЕМЫЕ РЕЗУЛЬТАТЫ:
▪️ Глубокое понимание полного цикла разработки программного обеспечения (проектирование, разработка, тестирование и развертывание);
▪️ Практический опыт работы с Java;
▪️ Знания и опыт работы с Spring framework, Hibernate, системами обмена сообщениями и PostgreSQL;
▪️ Технологический стек: Java 11, Spring Boot, Spring Data, Redis, PostgreSQL, MS SQL Server, Kubernetes, GitLab, микросервисы, RabbitMQ, Kong gateway.
ПРЕИМУЩЕСТВА:
▪️ Знание Redis, RabbitMQ, GitLab CI, Kubernetes;
▪️ Опыт работы в финтехе или банковской сфере от 3-х лет;
▪️ Понимание принципов работы с платежами в электронной коммерции и технологиями платежных карт;
▪️ Навыки командной работы и подход к решению проблем.
МЫ ПРЕДЛАГАЕМ:
▪️ Гибкие условия трудоустройства (ИП, самозанятость и др.);
▪️ Удалённый формат работы;
▪️ Стабильный и прозрачный доход с возможностью обсуждения зарплаты по результатам собеседования;
▪️ Возможности для личностного роста и карьерного развития в компании/стартапе с инновационными финансовыми технологиями.
📩 Для отклика отправляйте резюме на: charos@cartnoda.ru
Локация: Удалённо
Компания: ООО Картнода
Заработная плата: от 250 000 до 350 000 руб.
Занятость: Полная
Наша IT-команда ищет Java разработчика с опытом работы от 3 лет в области финтеха и банковских технологий.
ОЖИДАЕМЫЕ РЕЗУЛЬТАТЫ:
▪️ Глубокое понимание полного цикла разработки программного обеспечения (проектирование, разработка, тестирование и развертывание);
▪️ Практический опыт работы с Java;
▪️ Знания и опыт работы с Spring framework, Hibernate, системами обмена сообщениями и PostgreSQL;
▪️ Технологический стек: Java 11, Spring Boot, Spring Data, Redis, PostgreSQL, MS SQL Server, Kubernetes, GitLab, микросервисы, RabbitMQ, Kong gateway.
ПРЕИМУЩЕСТВА:
▪️ Знание Redis, RabbitMQ, GitLab CI, Kubernetes;
▪️ Опыт работы в финтехе или банковской сфере от 3-х лет;
▪️ Понимание принципов работы с платежами в электронной коммерции и технологиями платежных карт;
▪️ Навыки командной работы и подход к решению проблем.
МЫ ПРЕДЛАГАЕМ:
▪️ Гибкие условия трудоустройства (ИП, самозанятость и др.);
▪️ Удалённый формат работы;
▪️ Стабильный и прозрачный доход с возможностью обсуждения зарплаты по результатам собеседования;
▪️ Возможности для личностного роста и карьерного развития в компании/стартапе с инновационными финансовыми технологиями.
📩 Для отклика отправляйте резюме на: charos@cartnoda.ru
#ЧеКак
🤔 Паттерн Singleton в Java
Singleton — это паттерн проектирования, который обеспечивает наличие только одного экземпляра класса. Он часто применяется для управления ресурсами, такими как подключения к базе данных. Рассмотрим его реализацию.
🚩 Че как?
🟠 Поле
🟠 Конструктор
🟠 Метод
Развернутый аналог:
👉 Новости 👉 Платформа
Singleton — это паттерн проектирования, который обеспечивает наличие только одного экземпляра класса. Он часто применяется для управления ресурсами, такими как подключения к базе данных. Рассмотрим его реализацию.
instance
хранит единственный экземпляр класса.private
, чтобы предотвратить создание новых экземпляров.getInstance()
создаёт экземпляр только при первом вызове (ленивая инициализация).Развернутый аналог:
// Экземпляр можно также создавать сразу, а не лениво:
private static final Singleton instance = new Singleton();
Please open Telegram to view this post
VIEW IN TELEGRAM
🤓 Какой метод класса
String используется для получения подстроки?
String используется для получения подстроки?
Anonymous Quiz
45%
substring()
30%
subString()
25%
getSubstring()
0%
extract()
#Вакансии
👨🏻💻 Java Developer в Web3
Локация: Удалённо
Компания: Мэттер Лабс (Matter Labs)
ЗП: от 5 400 до 6 700 USD
Занятость: Полная
🚩 Обязанности
▪️Разработка и поддержка блокчейн-платформ и приложений на Java.
▪️Проектирование и реализация высокопроизводительных и безопасных блокчейн-решений.
▪️Взаимодействие с командой разработчиков и другими отделами для обеспечения интеграции блокчейн-решений.
▪️Анализ требований к проекту и разработка технических спецификаций.
🚩 Требования
▪️Глубокие знания Java и опыт разработки на этом языке не менее 3 лет.
▪️Опыт работы с блокчейн-технологиями и понимание основных принципов блокчейна.
▪️Опыт разработки децентрализованных приложений и работы со смарт-контрактами будет являться преимуществом.
▪️Знание фреймворков, таких как Spring, Hibernate и других, связанных с Java.
▪️Навыки работы с базами данных и системами контроля версий.
▪️Способность самостоятельно решать задачи и эффективно работать в команде.
▪️Знание английского языка на уровне, позволяющем читать техническую документацию и общаться в команде.
💬 Резюме отправлять: @limar_sheref
👉 Новости 👉 Платформа
👨🏻💻 Java Developer в Web3
Локация: Удалённо
Компания: Мэттер Лабс (Matter Labs)
ЗП: от 5 400 до 6 700 USD
Занятость: Полная
▪️Разработка и поддержка блокчейн-платформ и приложений на Java.
▪️Проектирование и реализация высокопроизводительных и безопасных блокчейн-решений.
▪️Взаимодействие с командой разработчиков и другими отделами для обеспечения интеграции блокчейн-решений.
▪️Анализ требований к проекту и разработка технических спецификаций.
▪️Глубокие знания Java и опыт разработки на этом языке не менее 3 лет.
▪️Опыт работы с блокчейн-технологиями и понимание основных принципов блокчейна.
▪️Опыт разработки децентрализованных приложений и работы со смарт-контрактами будет являться преимуществом.
▪️Знание фреймворков, таких как Spring, Hibernate и других, связанных с Java.
▪️Навыки работы с базами данных и системами контроля версий.
▪️Способность самостоятельно решать задачи и эффективно работать в команде.
▪️Знание английского языка на уровне, позволяющем читать техническую документацию и общаться в команде.
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЧеКак
🤔 Чем singleton отличается от prototype?
В контексте паттернов проектирования:
🟠 Singleton гарантирует, что класс имеет только один экземпляр в приложении и предоставляет глобальную точку доступа к этому экземпляру.
🟠 Prototype позволяет создавать объекты, клонируя существующий объект, что позволяет избежать затрат на создание объектов стандартным способом (через new), особенно если это сложный процесс создания.?
👉 Новости 👉 Платформа
В контексте паттернов проектирования:
Please open Telegram to view this post
VIEW IN TELEGRAM
🤓 Как объявить класс в коде?
Anonymous Quiz
87%
class MyClass {}
9%
new class MyClass {}
0%
select * from class MyClass {}
4%
MyClass extends class {}
#Вакансии
👨💻 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
▪️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 компанию или ИП/ГПХ;
▪️Работа по московскому времени;
▪️ДМС после прохождения испытательного срока;
▪️Реферальная программа: бонус за рекомендации;
▪️Выдаем технику для работы или можете работать на своей;
▪️Пересмотр заработной платы раз в год.
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЛитКод
Задача: 590. N-ary Tree Postorder Traversal
Дано корневое дерево с n-арной структурой, верните обход дерева в постфиксном порядке для значений его узлов.
Сериализация входных данных n-арного дерева представлена в обходе уровней. Каждая группа детей разделяется значением null (см. примеры).
Пример:
👨💻 Алгоритм:
1⃣ Инициализируйте стек для хранения узлов и список для хранения значений узлов в обратном порядке.
2⃣ Начните с корневого узла и добавьте его в стек. Пока стек не пуст, извлекайте узлы из стека, добавляя их значения в начало списка, и добавляйте всех его детей в стек.
3⃣ В конце верните список значений узлов.
😊 Решение:
👉 Новости 👉 Платформа
Задача: 590. N-ary Tree Postorder Traversal
Дано корневое дерево с n-арной структурой, верните обход дерева в постфиксном порядке для значений его узлов.
Сериализация входных данных n-арного дерева представлена в обходе уровней. Каждая группа детей разделяется значением null (см. примеры).
Пример:
Input: root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
Output: [2,6,14,11,7,3,12,8,4,13,9,10,5,1]
class Solution {
public List<Integer> postorder(Node root) {
LinkedList<Node> stack = new LinkedList<>();
LinkedList<Integer> output = new LinkedList<>();
if (root == null) {
return output;
}
stack.add(root);
while (!stack.isEmpty()) {
Node node = stack.pollLast();
output.addFirst(node.val);
for (Node item : node.children) {
if (item != null) {
stack.add(item);
}
}
}
return output;
}
class Node {
public int val;
public List<Node> children;
public Node() {}
public Node(int _val, List<Node> _children) {
val = _val;
children = _children;
}
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЧеКак
🤔 Какие минусы есть у пула строк с точки зрения безопасности?
Пул строк (String Pool) в Java представляет собой особую область памяти в методной области (Metaspace начиная с Java 8), где хранятся строковые литералы.
🚩 Минусы
➖ Уязвимость к анализу памяти (Memory Analysis)
Поскольку строковые литералы хранятся в пуле строк и не уничтожаются до тех пор, пока JVM работает, злоумышленник, получивший доступ к дампу памяти, может извлечь чувствительные данные, такие как пароли, токены или личные данные, если они были сохранены как строковые литералы.
➖ Уязвимость к атакам по кэшированию (Caching Attacks)
Злоумышленник может попытаться использовать кэширование строк для проведения атак. Например, если однажды созданный строковый литерал остается в пуле строк, его можно найти и использовать повторно, даже если оригинальная строка больше не используется программой.
➖ Ограниченная гибкость в управлении памятью
Разработчики не могут явно контролировать удаление строк из пула строк. Это может привести к тому, что строковые литералы будут оставаться в памяти дольше, чем нужно, что увеличивает риск их обнаружения при анализе памяти.
➖ Потенциальная уязвимость к атакам типа "Deduplication"
Если две строки с одинаковым содержимым помещаются в пул строк, они будут указывать на один и тот же объект. Это может позволить злоумышленнику, знающему об этой особенности, попытаться извлечь чувствительные данные путем поиска дубликатов строк.
🚩 Пример уязвимости к анализу памяти
🚩 Как уменьшить риски
🟠 Избегайте использования строк для хранения чувствительных данных
Вместо строк используйте массивы символов (
🟠 Используйте библиотеки безопасности
Используйте специализированные библиотеки, которые обеспечивают более безопасное управление чувствительными данными, такие как Java Cryptography Architecture (JCA).
🟠 Минимизируйте использование строковых литералов для чувствительных данных
Не храните пароли, ключи и другие конфиденциальные данные как строковые литералы.
🟠 Шифрование данных
Шифруйте данные перед их хранением или передачей. Даже если данные будут извлечены из памяти, без ключа расшифровки они останутся бесполезными.
👉 Новости 👉 Платформа
Пул строк (String Pool) в Java представляет собой особую область памяти в методной области (Metaspace начиная с Java 8), где хранятся строковые литералы.
Поскольку строковые литералы хранятся в пуле строк и не уничтожаются до тех пор, пока JVM работает, злоумышленник, получивший доступ к дампу памяти, может извлечь чувствительные данные, такие как пароли, токены или личные данные, если они были сохранены как строковые литералы.
Злоумышленник может попытаться использовать кэширование строк для проведения атак. Например, если однажды созданный строковый литерал остается в пуле строк, его можно найти и использовать повторно, даже если оригинальная строка больше не используется программой.
Разработчики не могут явно контролировать удаление строк из пула строк. Это может привести к тому, что строковые литералы будут оставаться в памяти дольше, чем нужно, что увеличивает риск их обнаружения при анализе памяти.
Если две строки с одинаковым содержимым помещаются в пул строк, они будут указывать на один и тот же объект. Это может позволить злоумышленнику, знающему об этой особенности, попытаться извлечь чувствительные данные путем поиска дубликатов строк.
public class Example {
public static void main(String[] args) {
String password = "secretPassword123"; // Строка хранится в пуле строк
System.out.println("Password is set.");
}
}
Вместо строк используйте массивы символов (
char[]
), так как их содержимое можно обнулить после использования. char[] password = new char[] {'s', 'e', 'c', 'r', 'e', 't'};
// Очистка массива после использования
java.util.Arrays.fill(password, '\0');
Используйте специализированные библиотеки, которые обеспечивают более безопасное управление чувствительными данными, такие как Java Cryptography Architecture (JCA).
Не храните пароли, ключи и другие конфиденциальные данные как строковые литералы.
Шифруйте данные перед их хранением или передачей. Даже если данные будут извлечены из памяти, без ключа расшифровки они останутся бесполезными.
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЛитКод
Задача: 606. Construct String from Binary Tree
Дано корневой узел бинарного дерева, ваша задача — создать строковое представление дерева, следуя определенным правилам форматирования. Представление должно быть основано на прямом обходе бинарного дерева и должно соответствовать следующим требованиям:
🚩 Представление узлов
Каждый узел в дереве должен быть представлен его целочисленным значением.
🚩 Скобки для дочерних узлов
Если у узла есть хотя бы один дочерний узел (левый или правый), его дочерние узлы должны быть представлены в скобках. Конкретно:
🟠 Если у узла есть левый дочерний узел, значение левого дочернего узла должно быть заключено в скобки сразу после значения узла.
🟠 Если у узла есть правый дочерний узел, значение правого дочернего узла также должно быть заключено в скобки. Скобки для правого дочернего узла должны следовать за скобками для левого дочернего узла.
🚩 Пропуск пустых скобок
Любые пустые пары скобок (т.е. ()) должны быть опущены в окончательном строковом представлении дерева, за одним исключением: когда у узла есть правый дочерний узел, но нет левого дочернего узла. В таких случаях вы должны включить пустую пару скобок, чтобы указать на отсутствие левого дочернего узла. Это гарантирует, что однозначное соответствие между строковым представлением и исходной структурой бинарного дерева сохраняется.
В итоге, пустые пары скобок должны быть опущены, когда у узла есть только левый дочерний узел или нет дочерних узлов. Однако, когда у узла есть правый дочерний узел, но нет левого дочернего узла, пустая пара скобок должна предшествовать представлению правого дочернего узла, чтобы точно отразить структуру дерева.
Пример
👨💻 Алгоритм:
1⃣ Инициализация и рекурсия
Начинаем с корневого узла бинарного дерева и выполняем прямой обход (preorder traversal) с использованием рекурсии. Для каждого узла добавляем его значение к строке результата.
2⃣ Обработка дочерних узлов
Случай 1: Если у узла есть оба дочерних узла (левый и правый), оборачиваем результаты прямого обхода для обоих дочерних узлов в скобки. Случай 2: Если у узла нет дочерних узлов, пропускаем скобки для них. Случай 3: Если у узла есть только левый дочерний узел, обходим его и добавляем результат в скобках, пропуская пустые скобки для правого дочернего узла. Случай 4: Если у узла есть только правый дочерний узел, добавляем пустые скобки для левого дочернего узла и обходим правый дочерний узел, добавляя его результат в скобках.
3⃣ Объединение результатов
Собираем результаты для каждого узла, учитывая все упомянутые случаи, чтобы получить строковое представление дерева.
😊 Решение
👉 Новости 👉 Платформа
Задача: 606. Construct String from Binary Tree
Дано корневой узел бинарного дерева, ваша задача — создать строковое представление дерева, следуя определенным правилам форматирования. Представление должно быть основано на прямом обходе бинарного дерева и должно соответствовать следующим требованиям:
Каждый узел в дереве должен быть представлен его целочисленным значением.
Если у узла есть хотя бы один дочерний узел (левый или правый), его дочерние узлы должны быть представлены в скобках. Конкретно:
Любые пустые пары скобок (т.е. ()) должны быть опущены в окончательном строковом представлении дерева, за одним исключением: когда у узла есть правый дочерний узел, но нет левого дочернего узла. В таких случаях вы должны включить пустую пару скобок, чтобы указать на отсутствие левого дочернего узла. Это гарантирует, что однозначное соответствие между строковым представлением и исходной структурой бинарного дерева сохраняется.
В итоге, пустые пары скобок должны быть опущены, когда у узла есть только левый дочерний узел или нет дочерних узлов. Однако, когда у узла есть правый дочерний узел, но нет левого дочернего узла, пустая пара скобок должна предшествовать представлению правого дочернего узла, чтобы точно отразить структуру дерева.
Пример
Input: root = [1,2,3,4]
Output: "1(2(4))(3)"
Explanation: Originally, it needs to be "1(2(4)())(3()())", but you need to omit all the empty parenthesis pairs. And it will be "1(2(4))(3)".
Начинаем с корневого узла бинарного дерева и выполняем прямой обход (preorder traversal) с использованием рекурсии. Для каждого узла добавляем его значение к строке результата.
Случай 1: Если у узла есть оба дочерних узла (левый и правый), оборачиваем результаты прямого обхода для обоих дочерних узлов в скобки. Случай 2: Если у узла нет дочерних узлов, пропускаем скобки для них. Случай 3: Если у узла есть только левый дочерний узел, обходим его и добавляем результат в скобках, пропуская пустые скобки для правого дочернего узла. Случай 4: Если у узла есть только правый дочерний узел, добавляем пустые скобки для левого дочернего узла и обходим правый дочерний узел, добавляя его результат в скобках.
Собираем результаты для каждого узла, учитывая все упомянутые случаи, чтобы получить строковое представление дерева.
public class Solution {
public String tree2str(TreeNode t) {
StringBuilder res = new StringBuilder();
dfs(t, res);
return res.toString();
}
private void dfs(TreeNode t, StringBuilder res) {
if (t == null)
return;
res.append(t.val);
if (t.left == null && t.right == null)
return;
res.append('(');
dfs(t.left, res);
res.append(')');
if (t.right != null) {
res.append('(');
dfs(t.right, res);
res.append(')');
}
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЧеКак
🤔 Расскажи про иерархию интерфейсов Collection Framework.
🟠 Collection — базовый интерфейс, от которого наследуются все коллекции.
🟠 List (например, ArrayList, LinkedList) — упорядоченные коллекции, поддерживающие дублирующиеся элементы.
🟠 Set (например, HashSet, TreeSet) — коллекции, хранящие только уникальные элементы.
🟠 Queue (например, PriorityQueue, LinkedList) — коллекции с FIFO-поведеним.
🟠 Map — пары ключ-значение (HashMap, TreeMap) — не наследуется от Collection.
👉 Новости 👉 Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
🤓 Для чего используется оператор NEW?
Anonymous Quiz
11%
Для создания новой переменной.
5%
Для объявления нового класса.
79%
Для создания экземпляра класса.
5%
Это антагонист оператора OLD.
#ЧеКак
🤔 Что такое 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
🤓 Что означает ключевое слово extends?
Anonymous Quiz
94%
Что данный класс наследуется от другого.
6%
Что это дополнительный модуль класса, который расширяет его свойства.
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