Java | Фишки и трюки
前往频道在 Telegram
Java: примеры кода, интересные фишки и полезные трюки Купить рекламу: https://telega.in/c/java_tips_and_tricks ✍️По всем вопросам: @Pascal4eg Менеджер по рекламе: @shmyzna
显示更多6 954
订阅者
-124 小时
-117 天
+1330 天
帖子存档
6 954
🌱 Spring Cloud Config — это проект в экосистеме Spring, который предоставляет сервер и клиент для централизованного управления конфигурацией в распределённых системах. Основная идея Spring Cloud Config — это вынесение конфигурационных файлов из приложений в единое место (например, репозиторий Git), чтобы облегчить управление конфигурацией для различных сервисов в микросервисной архитектуре.
Основные компоненты
✔️ Config Server — сервер, который хранит конфигурации (обычно в Git) и раздает их микросервисам.
✔️ Config Client — клиент в микросервисах, который получает конфигурации от Config Server.
Возможности
✔️ Централизация конфигураций всех сервисов.
✔️ Поддержка версионирования конфигураций (например, через Git).
✔️ Динамическое обновление конфигураций без перезапуска приложений с помощью Spring Cloud Bus.
✔️ Поддержка различных сред и профилей (dev, prod и т.д.).
Пример настройки Config Server:
spring:
cloud:
config:
server:
git:
uri: https://github.com/your-repo/config-repo
Пример настройки Config Client:
spring:
cloud:
config:
uri: http://localhost:8888
profile: dev
Преимущества: упрощает управление конфигурациями, поддерживает разные среды, позволяет динамически обновлять настройки.
Недостатки: важен контроль за доступом и стабильностью Config Server.
#java #Spring #Cloud #Config6 954
Стать Data-инженером за 120 часов
14 октября в Слёрме стартует поток курса «Data-инженер»: 88 часов практики и 32 часа теории.
Будем работать с большими данными:
✔️ Сбор, хранение и обработка
✔️ Визуализация и отчетность
✔️ Интеграция
⚙️ Освоим инструменты и технологии для аналитики и обработки данных и научимся эффективно их подбирать под задачу: PythonSQL, PostgreSQL, Сlickhouse, MongoDB, HDFSHadoop, Spark, Apache Kafka, Redis, Airflow, NiFi, dbt, Metabase.
⚡️Смотреть программу подробнее и оставить заявку по ссылке – на сайте⚡️
6 954
public class Test {
public static int VAL;
{
VAL = 5;
}
public Test() {
VAL = 10;
}
public static void print() {
System.out.println(VAL);
}
}
public class Quest {
public static void main(String[] args) {
Test.print();
}
}
#java #quest6 954
public class Quest {
public static void main(String[] args) {
int a = 5;
int b = 10;
int result = multiply(a, b);
System.out.println(result);
}
public static int multiply(int x, int y) {
if (y == 0) {
return 0;
} else {
return x + multiply(x, y - 1);
}
}
}
#java #quest6 954
⌨️ В чём разница между TreeSet и HashSet?
TreeSet и HashSet — это два класса, реализующих интерфейс Set, но они имеют разные внутренние механизмы и свойства.
Структура данных
✔️ HashSet использует хеш-таблицу для хранения элементов. Это позволяет быстро добавлять, удалять и искать элементы, не обеспечивая никакого порядка их хранения.
✔️ TreeSet использует красно-черное дерево (Red-Black Tree), что позволяет хранить элементы в отсортированном порядке (естественном порядке элементов или порядке, определённом компаратором).
Порядок элементов
✔️ HashSet не гарантирует какого-либо порядка элементов. Порядок может быть случайным, и он не сохраняется при добавлении/удалении элементов.
✔️ TreeSet хранит элементы в отсортированном порядке. Если элементы реализуют интерфейс Comparable, то сортировка будет основана на их естественном порядке (например, для чисел — по возрастанию). Также можно задать пользовательский порядок с помощью объекта Comparator.
Скорость операций
✔️ HashSet обеспечивает O(1) для операций добавления, удаления и поиска (в среднем, если хеш-функция работает эффективно и коллизий мало).
✔️ TreeSet обеспечивает O(log n) для операций добавления, удаления и поиска из-за использования сбалансированного дерева.
Поддержка дополнительных операций
✔️ HashSet не поддерживает дополнительные методы для работы с диапазонами или порядком элементов.
✔️ TreeSet предоставляет такие методы, как subSet(), headSet(), tailSet(), которые позволяют работать с диапазонами элементов в отсортированном множестве.
Null-значения
✔️ HashSet может хранить одно null значение.
✔️ TreeSet не позволяет хранить null значения, так как при добавлении null неясно, как его сравнивать с другими элементами.
Когда использовать
✔️ Используйте HashSet, если вам не важен порядок элементов и вам нужна максимальная производительность.
✔️ Используйте TreeSet, если нужно поддерживать элементы в отсортированном порядке.
#java #HashSet #TreeSet6 954
Бесплатный интенсив: Java-разработчик: старт в профессии с нуля.
📆 Когда: 15-16 октября в 19:00 по мск.
За два дня интенсива в прямом эфире, под руководством опытного Java-разработчика, вы сможете:
✔️ Познакомиться с синтаксисом и основными конструкциями языка Java.
✔️ Написать свой первый проект и определить, подходит ли вам профессия разработчика.
✔️ Создать Telegram-бота с нуля.
✔️ Узнать ответы интересующие вас вопросы.
✔️ Получить доступ к закрытому профессиональному сообществу.
🎁 Подарки для участниковинтенсива: гайд «Как заговорить на сленге IT-специалистов», карта компетенций начинающего Java-разработчика и доступ в закрытое сообщество «Старт в Java» от Хекслета!
6 954
🔄 Бесконечные потоки
Интерфейс Stream имеет два статических метода для генерации бесконечных потоков:
iterate() и generate().
iterate(final T seed, final UnaryOperator<T> f) возвращает бесконечный последовательный упорядоченный поток, созданный путем итеративного применения функции f к исходному элементу начального значения, создавая поток, состоящий из начального числа, f(начальное число), f(f(начальное число)) и т. д.
generate(Supplier<? extends T> s) возвращает бесконечный последовательный неупорядоченный поток, в котором каждый элемент создается предоставленным поставщиком (Supplier). Это подходит для генерации константных потоков, потоков случайных элементов и т. д.
📌 При работе с бесконечными потоками, крайне важно вызвать метод limit() перед вызовом терминальной операции, иначе наша программа будет работать бесконечно.6 954
🔒 7539 ГБ платного контента для программистов выложили в Telegram
Выбирай направление и обучайся:
👩💻 Java — 644 ГБ
🖥 Python — 724 ГБ
🖥 Frontend — 981 ГБ
🖥 Backend — 817 ГБ
👩💻 Все языки — 4373 ГБ
Пост удалится через 48 часов 🕔
6 954
⌨️ Внутренняя реализация ArrayList
ArrayList — это реализация динамического массива из стандартной библиотеки коллекций java.util. Он представляет собой список, который может изменять свой размер в зависимости от количества добавляемых элементов.
ArrayList основан на массиве объектов. Это означает, что под капотом у него есть массив фиксированного размера. Когда этот массив заполняется, создается новый массив большего размера, в который копируются элементы старого массива, а затем старый массив удаляется.
Размер и емкость
✔️ Размер (size) — это количество элементов, которые фактически содержатся в ArrayList.
✔️ Емкость (capacity) — это текущий размер внутреннего массива. Когда количество элементов превышает емкость, массив расширяется.
Когда ArrayList инициализируется, его емкость по умолчанию равна 10. Если количество элементов в массиве превышает емкость, массив автоматически увеличивается. Обычно емкость увеличивается по формуле: новая емкость = старая емкость * 1.5.
Для удаления элементов используется метод remove(int index). После удаления элемента все элементы, находящиеся справа от удаленного, смещаются на одну позицию влево, что требует временных затрат O(n).
После удаления элементов ArrayList не автоматически уменьшает емкость внутреннего массива, то есть массив может занимать больше памяти, чем требуется для хранения фактических элементов. Однако для оптимизации можно вручную уменьшить емкость до текущего размера с помощью метода trimToSize().
Одним из преимуществ ArrayList является возможность доступа к элементам по индексу за время O(1). Это возможно благодаря тому, что элементы хранятся в массиве, и доступ к ним осуществляется через индекс.
#java #ArrayList6 954
+5
Разработчик Java, ты тут? 😎
Хочешь построить карьеру в IT? Для Java-разработчиков запускаем бесплатный онлайн-интенсив в Открытых школах Т1. Прокачай скилы и, если повезет, попади в штат Холдинга Т1 — крупнейшей ИТ-компании по выручке в России по версии RAEX и CNews Analytics 2023.
Зачем участвовать?
🔹 Уникальный рыночный опыт. Наши проекты ежегодно получают награды на ИТ-конкурсах: Global CIO, Национальной банковской премии и др.
🔹 Быстрый рост в ИТ при экспертной поддержке. Карьерные треки для выпускников Открытых школ позволяют быстро вырасти в мидла.
🔹 Работа в бигтехе, где есть ДМС, удалёнка и крутые офисы, спорт и обучение, митапы, программы развития и др.
Регистрация до 11 октября!
#реклама
О рекламодателе
6 954
🌱 Service Discovery это механизм, который позволяет распределенным приложениям (микросервисам) динамически находить друг друга для взаимодействия, независимо от того, где они развернуты (например, в облаке или локально). Это особенно важно для микросервисной архитектуры, где сервисы могут масштабироваться горизонтально, изменять свои IP-адреса и запускаться на различных узлах сети.
Spring Framework предлагает решения для реализации Service Discovery, такие как Spring Cloud, который интегрируется с популярными механизмами регистрации сервисов, такими как: Netflix Eureka, HashiCorp Consul, Apache Zookeeper.
Как работает процесс Service Discovery:
✔️ Регистрация сервиса — каждый микросервис при запуске автоматически регистрируется в реестре (например, Eureka или Consul), передавая своё местоположение (IP и порт).
✔️ Обнаружение сервиса — при необходимости взаимодействовать с другим микросервисом, сервис может запрашивать реестр для получения списка доступных сервисов и их адресов.
✔️ Health Checks — в большинстве систем Service Discovery интегрированы проверки состояния сервисов. Если сервис становится недоступен, он удаляется из реестра.
Зачем это нужно?
✔️ Масштабируемость: При динамическом добавлении и удалении экземпляров сервисов, они автоматически обнаруживаются и учитываются другими сервисами.
✔️ Гибкость развертывания: Сервисы могут развертываться на разных машинах и сетях, не требуя жесткой привязки к IP-адресам.
✔️ Устойчивость: В случае отказа одного из экземпляров сервиса другие сервисы могут быть обнаружены и использованы.
#java #ServiceDiscovery
6 954
+4
Senior-разработчик создал крутейший канал про SQL
Благодаря простым картинкам даже новичок научится разрабатывать приложения с использованием баз данных.
Присоединяйтесь: @SQL
6 954
🌱 Spring Boot - это инструмент, который значительно упрощает разработку приложений на основе Spring, предоставляя возможность создавать автономные, готовые к использованию приложения с минимальной конфигурацией.
Автоконфигурация
Spring Boot автоматически настраивает компоненты приложения на основе зависимостей, которые вы добавляете в проект. Это избавляет от необходимости писать обширные XML-конфигурации или классы конфигурации.
Встроенные серверы
Spring Boot предоставляет возможность запускать приложение с встроенными серверами, такими как Tomcat или Jetty. Это означает, что вам не нужно отдельно настраивать сервер — приложение можно запустить как обычный JAR-файл.
Spring Initializr
Веб-инструмент, который позволяет быстро генерировать новый проект Spring Boot с нужными зависимостями, что делает старт разработки ещё проще.
Actuator
Модуль для мониторинга и управления приложением на продакшене. Он предоставляет различные эндпоинты для проверки состояния, статистики и метрик приложения.
Миграции баз данных
Spring Boot поддерживает интеграцию с инструментами миграции баз данных, такими как Flyway и Liquibase, что упрощает управление схемами базы данных.
#java #SpringBoot
6 954
Тестовое собеседование на Middle Java-разработчика в среду
Заходи завтра, 9 октября в 19:00 по мск на открытое онлайн-собеседование от ШОРТКАТ, чтобы узнать:
Чего ждут от кандидатов на Middle позиции в Java-разработке
Какие вопросы задают на интервью и зачем
Как подготовиться к собесу,
чтобы получить оффер
Интервью проведёт Роман Половинцев, ex. TeamLead в Сбере.
Чтобы записаться на эфир, переходи в бот → @shortcut_sh_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzquxArC2
6 954
public class Quest {
public static void main(String[] args) {
int[][] tests = {
{6, 5, 4, 3, 2, 1},
{1, 2},
{1, 2, 3},
{1, 2, 3, 4},
{1}
};
int n = 0;
try {
int i = 0;
while (true) {
if (thirdElementIsThree(tests[i++])) n++;
}
} catch (ArrayIndexOutOfBoundsException e) {
}
System.out.println(n);
}
private static boolean thirdElementIsThree(int[] a) {
return (a.length >= 3) & (a[2] == 3);
}
}
#java #quest6 954
⌨️ HQL (Hibernate Query Language) — это язык запросов, используемый в Hibernate для работы с объектами, а не с таблицами базы данных. HQL основан на синтаксисе SQL, но оперирует сущностями и их атрибутами, вместо строк и столбцов базы данных.
Особенности HQL:
✔️ Запросы формулируются относительно классов и их полей, а не таблиц.
✔️ Поддерживает агрегатные функции (например, COUNT, SUM).
✔️ Поддерживает JOIN для работы с ассоциациями между объектами.
✔️ HQL автоматически преобразуется в SQL, что облегчает работу с реляционной базой данных, абстрагируя детали.
Пример HQL-запроса:
SELECT u FROM User u WHERE u.name = :name
Здесь User — это класс сущности, а запрос вернет объекты этого класса.
#java #HQL #Hibernate6 954
Ваша мечта о карьере в сфере IT ближе, чем вы думаете!
Многие мечтают о карьере в IT, но не знают, с чего начать, поскольку сейчас довольно трудно найти обучение, которое действительно подготовит к этой профессии.
Академия IT-профессий StepByStep на своём канале сейчас предлагает бесплатный мини-курс из 3 уроков, который поможет вам погрузиться в мир системного анализа и понять, как стать настоящим профессионалом.
За подписку на канал ребята дарят бонус — гарантированное трудоустройство после обучения.
Не упустите такую классную возможность: https://t.me/+eI3OEsOOY6dkZTIy
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
