JetBrains меняет дистрибуцию IntelliJ IDEA
Теперь не будет отдельных установщиков для Community и Ultimate будет единый инсталлятор с полным набором функций.
Подписка по-прежнему нужна для доступа к функциям Ultimate Edition, но без подписки IDE останется полностью рабочей и бесплатной, включая больше возможностей, чем сейчас в Community Edition.
Что ещё важно:
🔸 Открытые сборки будут публиковаться на GitHub.
🔸 Если подписка истечёт, IDE не заблокируется — вы продолжите работать в режиме Community Edition.
🔸 Улучшенный опыт с управлением лицензиями.
Поддержка open-source и бесплатного использования остаётся приоритетом JetBrains.🐒
Подробнее по ссылке - jetbrains.com/blog
👉 Java Portal
Теперь не будет отдельных установщиков для Community и Ultimate будет единый инсталлятор с полным набором функций.
Подписка по-прежнему нужна для доступа к функциям Ultimate Edition, но без подписки IDE останется полностью рабочей и бесплатной, включая больше возможностей, чем сейчас в Community Edition.
Что ещё важно:
Поддержка open-source и бесплатного использования остаётся приоритетом JetBrains.
Подробнее по ссылке - jetbrains.com/blog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20❤11🔥6🌚1
Совет по Java: используйте
✅
Но, он не потокобезопасен (используйте
👉 Java Portal
HashMap
как реализацию Map
, когда нужна максимальная производительность общего назначения.HashMap
внутри реализован как хеш-таблица, и в среднем операции put(), get()
и remove()
работают за O(1).Но, он не потокобезопасен (используйте
ConcurrentHashMap
, если нужна потокобезопасность).Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍10
Телеграфируем кодом Морзе через Java Stream API
Как с помощью Java Stream API реализовать кодирование и декодирование текста в азбуке Морзе. Объясняется история азбуки Морзе, принципы её работы и показано практическое применение функционального программирования в Java для преобразования текста в Морзе и обратно. Приятного изучения💊
Читать гайд
👉 Java Portal
Как с помощью Java Stream API реализовать кодирование и декодирование текста в азбуке Морзе. Объясняется история азбуки Морзе, принципы её работы и показано практическое применение функционального программирования в Java для преобразования текста в Морзе и обратно. Приятного изучения
Читать гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥5❤3
JVM Thread dump
Сегодня поговорим о тред дампах.
Что такое тред дамп?🌟
Это распечатка всех стектрейсов(всех выполняющихся методов) всех существующих тредов внутри JVM.
Зачем снимать треддамп?
Бывают ситуации, что мы запустили операцию, а она долго висит и мы не понимаем где и почему.
Бывают ситуации, когда ряд методов ждут блокировки и нужно понять какой тред блокировку держит и почему не отпускает.
То есть тред дамп позволят заглянуть внутрь JVM и понять чем занимаются все треды.
Так же тред дамп показывает статус всех тредов (
Как снимать треддамп?
Существует несколько команд:
1)
2)
👉 Java Portal
Сегодня поговорим о тред дампах.
Что такое тред дамп?
Это распечатка всех стектрейсов(всех выполняющихся методов) всех существующих тредов внутри JVM.
Зачем снимать треддамп?
Бывают ситуации, что мы запустили операцию, а она долго висит и мы не понимаем где и почему.
Бывают ситуации, когда ряд методов ждут блокировки и нужно понять какой тред блокировку держит и почему не отпускает.
То есть тред дамп позволят заглянуть внутрь JVM и понять чем занимаются все треды.
Так же тред дамп показывает статус всех тредов (
RUNNABLE, WAITING, TIMED WAITING
)Как снимать треддамп?
Существует несколько команд:
1)
jstack
jstack <pid>
2)
jcmd
jcmd <pid> Thread.print
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤4
Регулярные выражения в реальной жизни
🔸 SMS Spam Filter
Ловит спам-ключевые слова.
Примеры: "FREE $500!", "prize winner"
🔸 Password Validator
Проверяет сложность пароля (минимум одна заглавная буква, одна цифра, длина ≥ 8).
Примеры: "MyPass123" ✓, "weak" ✗
🔸 Email Field Check
Валидирует email-адрес.
Пример: "[email protected]" ✓
🔸 Smart Date Detection
Находит даты в тексте.
Пример: "Meeting on 15/8/2025"
🔸 Photo Search
Фильтрует фото по дате.
Пример: "IMG_2025-08-15.jpg"
🔸 Subtitle Timing
Матчит формат таймкодов (субтитры).
Пример: "00:01:23,456"
🔸 Parental Controls
Блокирует URL соцсетей.
Пример: "m.facebook.com"
🔸 Expense Tracking
Извлекает суммы в валюте.
Примеры: "$1,500", "$50,000"
🔸 TV Episode Filter
Матчит конкретные сезоны и эпизоды.
Примеры: "S01E05", "S03E12"
🔸 E-book Chapters
Делит текст книги на главы.
Примеры: "CHAPTER 1", "CHAPTER 15"
🔸 Phone Number (US)
Проверяет формат мобильного номера (США).
Пример: "+1 9876543210"
🔸 Credit Card Mask
Находит номера карт для маскировки.
Пример: "1234 5678 9012 3456"
🔸 Log File Parsing
Парсит таймстемпы логов (формат Apache/Nginx).
Пример: "[01/Aug/2025:10:30:45"
🔸 URL Slug Creator
Удаляет не-URL символы (для генерации slug).
Пример: "My Post!" → "my-post"
🔸 ZIP Code (US)
Матчит почтовые индексы США.
Примеры: "12345", "12345-6789"
Паттерны из реальной жизни
🔸 WhatsApp backup names
🔸 YouTube video IDs
Например: "dQw4w9WgXcQ"
🔸 Hashtag extraction
Извлекает хэштеги из текста.
🔸 IPv4 addresses
🔸 HTML tag removal
Удаляет HTML-теги из текста.
🔸 Bitcoin addresses
👉 Java Portal
FREE \b(prize|winner|URGENT)\b
Ловит спам-ключевые слова.
Примеры: "FREE $500!", "prize winner"
(?=.*[A-Z])(?=.*\d).{8,}
Проверяет сложность пароля (минимум одна заглавная буква, одна цифра, длина ≥ 8).
Примеры: "MyPass123" ✓, "weak" ✗
^[\w.+]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
Валидирует email-адрес.
Пример: "[email protected]" ✓
\b\d{1,2}/\d{1,2}/\d{4}\b
Находит даты в тексте.
Пример: "Meeting on 15/8/2025"
IMG_2025-08-.*\.jpg
Фильтрует фото по дате.
Пример: "IMG_2025-08-15.jpg"
\d+:\d+:\d+,\d+
Матчит формат таймкодов (субтитры).
Пример: "00:01:23,456"
.*(facebook|instagram)\.com.*
Блокирует URL соцсетей.
Пример: "m.facebook.com"
\$\d{1,3}(,\d{3})*
Извлекает суммы в валюте.
Примеры: "$1,500", "$50,000"
S[0-9]{1,2}E\d{1,2}
Матчит конкретные сезоны и эпизоды.
Примеры: "S01E05", "S03E12"
^CHAPTER\s+\d+\b
Делит текст книги на главы.
Примеры: "CHAPTER 1", "CHAPTER 15"
^\+1\d{10}$
Проверяет формат мобильного номера (США).
Пример: "+1 9876543210"
\d{4}\s?\d{4}\s?\d{4}\s?\d{4}
Находит номера карт для маскировки.
Пример: "1234 5678 9012 3456"
\[\d{2}/\w{3}/\d{4}:\d{2}:\d{2}:\d{2}
Парсит таймстемпы логов (формат Apache/Nginx).
Пример: "[01/Aug/2025:10:30:45"
[^a-z0-9-]
Удаляет не-URL символы (для генерации slug).
Пример: "My Post!" → "my-post"
^\d{5}(-\d{4})?$
Матчит почтовые индексы США.
Примеры: "12345", "12345-6789"
Паттерны из реальной жизни
WhatsApp.*\d{4}-\d{2}-\d{2}.*\.crypt\d+
[a-zA-Z0-9_-]{11}
Например: "dQw4w9WgXcQ"
#\w+
Извлекает хэштеги из текста.
\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b
<[^>]+>
Удаляет HTML-теги из текста.
[13][a-km-zA-HJ-NP-Z1-9]{25,34}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤6🔥4🤔1
This media is not supported in your browser
VIEW IN TELEGRAM
Ваш новый секретный арсенал для проектов — более 1500 крутых API в одном месте
Нужны данные о погоде, карты, генерация изображений или мощные NLP-сервисы? Всё это и даже больше в огромной коллекции, которую проверили и отобрали вручную💊
Забираем с сайта или с GitHub🍯
👉 Java Portal
Нужны данные о погоде, карты, генерация изображений или мощные NLP-сервисы? Всё это и даже больше в огромной коллекции, которую проверили и отобрали вручную
Забираем с сайта или с GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3🔥3
Фича в Java 21 - Pattern Matching в "switch" блоке
До Java 21 блок
- использовать
- проверять типы прямо в case
- деструктуризировать
До этой фичи, проверить тип
С новой фичей проверку на тип и работа с объектом конкретного типа можно через switch:
Чище, безопаснее и не нужно вручную кастовать типы.
👉 Java Portal
До Java 21 блок
switch
работал только с int, enum, String и еще несколькими примитивами. С JEP 441 теперь можно:- использовать
switch
с любыми объектами- проверять типы прямо в case
- деструктуризировать
record
-объектыДо этой фичи, проверить тип
Object
можно было с помощью instanceof
и код был набором if
-ов с приведением типа Object
к нужному:if (obj instanceof String) {
String s = (String) obj;
System.out.println("String length: " + s.length());
} else if (obj instanceof Integer) {
Integer i = (Integer) obj;
System.out.println("Square: " + (i * i));
}
С новой фичей проверку на тип и работа с объектом конкретного типа можно через switch:
Object obj = "abc";
switch (obj) {
case String s -> System.out.println("String length: " + s.length());
case Integer i -> System.out.println("Square: " + (i * i));
default -> System.out.println("Unknown type");
}
Чище, безопаснее и не нужно вручную кастовать типы.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍2
image_2025-08-10_08-06-12.png
3.4 MB
Дорожная карта освоения Java
👉 Java Portal
🔸 Основы Java
Ключевые концепции языка
- Переменные и типы данных
- Операторы и выражения
- Управляющие конструкции
- Массивы и коллекции
- Методы и параметры
- Ввод/вывод и обработка данных
Объектно-ориентированное программирование
- Классы и объекты
- Конструкторы и методы
- Полиморфизм
- Абстракция
- Абстрактные классы
- Интерфейсы
Обработка исключений
- Try-Catch
- Checked и Unchecked исключения
- Throw и Throws
- Best practices по исключениям🔸 Продвинутая Java
Коллекции
- List, Map (HashMap, TreeMap)
- Set (HashSet, TreeSet)
- Очереди и Deque
- Итераторы и листераторы
- Компараторы и Comparable
- Кастомные коллекции
Дженерики и аннотации
- Обобщённые классы и методы
- Wildcards (?, extends, super)
- Встроенные аннотации
- Кастомные аннотации
- Рефлексия и обработка аннотаций
Ввод/вывод и сериализация
- Работа с файлами и потоками
- BufferedReader/Writer
- Scanner
- Сериализация🔸 Многопоточность
Основы потоков
- Thread Class, Runnable Interface
- Жизненный цикл потока
- Методы потока
- Демон-потоки
- Thread Local
Синхронизация
- synchronized методы и блоки
- Wait и Notify
- Lock API
- Producer-Consumer
- Read-Write Lock
Утилиты для многопоточности
- Executor Framework
- Callable и Future
- Concurrent Collections
- Atomic Variables
- Semaphore и Barrier🔸 Современная Java
Lambda и Streams
- Лямбды
- Function, Predicate, Consumer
- Stream API и терминальные операции
- filter, map, reduce
- Optional
Время и дата
- LocalDate/Time, ZonedDateTime
- Duration, Period
- DateTimeFormatter
Новые фичи
- var и ключевое слово yield
- Текстовые блоки
- Pattern Matching
- Sealed Classes
- Virtual Threads🔸 Базы данных и JDBC
JDBC Fundamentals
- Подключение и Connection Management
- Statement, PreparedStatement, ResultSet
- Batch Updates
Операции с БД
- SQL, хранимые процедуры, функции
- Индексы и оптимизация запросов
Основы ORM
- JPA и Hibernate
- Entity Mapping и связи
- HQL, JPQL
- Lazy/Eager Loading🔸 Веб-разработка
Java Web
- Servlets и JSP (жизненный цикл, сервисы, cookies, сессии)
- Spring Framework (Core, MVC, Boot, Security, AOP)
- REST API, Spring Data JPA
Сборка и тестирование
- Maven, Gradle
- JUnit, Mockito
- Интеграционное тестирование
- Логирование (Log4j, SLF4J)🔸 Enterprise Java
- Java EE / Jakarta EE (JPA, JAX-RS, JAX-WS, JMS, JNDI, Bean Validation)
- Микросервисы (Spring Cloud, API Gateway, Service Discovery, Circuit Breaker)
- Message Queues (ActiveMQ, RabbitMQ, Kafka, Apache Pulsar)🔸 Производительность и инструменты
JVM и производительность
- JVM архитектура
- Управление памятью
- Garbage Collector
- Профилирование (JProfiler, VisualVM)
DevTools
- CI/CD (Jenkins, Docker, Kubernetes)
- IntelliJ IDEA, Eclipse, VS Code
Мониторинг и безопасность
- Health Checks
- Метрики
- Аутентификация (OAuth2, JWT)
- OWASP рекомендации🔸 Фреймворки и библиотеки
Web Frameworks
- Spring Boot
- Spring WebFlux
- Struts 2
- JSF
- Play
- Micronaut
- Quarkus
Utility Libraries
- Apache Commons
- Jackson, Gson
- MapStruct
- Lombok
Data & Caching
- Redis
- Elasticsearch
- Ehcache
- Hazelcast
- Apache Ignite
Specialized
- Apache Camel
- Netty
- Akka
- Vert.x
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14👍2
Часто про блок
Пример из разряда «классика жанра»
Да, при делении на ноль выпадет исключение, но перед завершением работы всё, что внутри
Но есть ситуации, когда
Вызов
Теперь к более интересному
Представим, что у нас есть цепочка методов, где в конце мы хотим сделать какие-то действия в любом случае — например, зафиксировать результат в логах или отправить уведомление
Пусть методы вызывают друг друга вот так:
Пример
В этой схеме исключение может вылететь и в
Нам всё равно, где именно упало — код внутри
Это удобно, когда логика сложная и методы вызывают друг друга
👉 Java Portal
finally
пишут, что он всегда выполнится, даже если в коде случилась ошибка Пример из разряда «классика жанра»
public class FinallyExample {
public static void main(String[] args) {
try {
System.out.println("Старт");
int result = 10 / 0; // тут бахнет деление на ноль
} catch (ArithmeticException e) {
System.out.println("Ошибка: " + e.getMessage());
} finally {
System.out.println("Этот блок всё равно выполнится");
}
}
}
Да, при делении на ноль выпадет исключение, но перед завершением работы всё, что внутри
finally
, всё равно выполнитсяНо есть ситуации, когда
finally
не доживёт до выполнения. Напримерpublic class FinallyExample {
public static void main(String[] args) {
try {
System.out.println("Старт");
System.exit(0); // мгновенный выход из программы
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("Ошибка: " + e.getMessage());
} finally {
System.out.println("Этот блок уже не увидим");
}
}
}
Вызов
System.exit()
или убийство процесса извне (например, kill PID
) не даст finally
сработатьТеперь к более интересному
Представим, что у нас есть цепочка методов, где в конце мы хотим сделать какие-то действия в любом случае — например, зафиксировать результат в логах или отправить уведомление
Пусть методы вызывают друг друга вот так:
main
→ firstLogic
→ secondLogic
→ thirdLogic
→ fourthLogic
Пример
public static void main(String[] args) {
try {
firstLogic();
} finally {
System.out.println("FINALLY MAIN"); // логируем результат
}
}
public static void firstLogic() {
secondLogic();
}
public static void secondLogic() {
try {
thirdLogic();
} finally {
System.out.println("FINALLY SECOND"); // отправляем уведомление
}
}
public static void thirdLogic() {
fourthLogic();
}
public static void fourthLogic() {
System.out.println("D");
throw new RuntimeException();
}
В этой схеме исключение может вылететь и в
thirdLogic
, и в fourthLogic
Нам всё равно, где именно упало — код внутри
finally
, в main
и secondLogic
всё равно выполнитсяЭто удобно, когда логика сложная и методы вызывают друг друга
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Паттерн проектирования Memento
🔸 Сценарий: создание текстового редактора
Вы пишете текстовый редактор и вам нужна функциональность undo/redo.
Пользователь вводит, удаляет, форматирует текст и ожидает возможность откатить изменения к предыдущему состоянию.
Без Memento пришлось бы вручную отслеживать каждое изменение и разрабатывать логику обратного отката для каждого действия.
🔸 Проблемы без Memento
- Доступ к внутренним полям - нужно лезть в приватные данные объекта для сохранения/восстановления состояния
- Сложная логика отката - откат каждого типа операций приходится писать вручную
- Сильная связка - логика undo перемешана с бизнес-логикой
- Прожорливость памяти - хранение целых объектов вместо снапшотов
🔸 Как помогает Memento
Паттерн Memento говорит
Flow
1. Создать снимок состояния
2. Сохранить в Caretaker
3. Продолжить работу
4. Запросить откат
5. Восстановить состояние
🔸 Три ключевых компонента
- Originator - объект, чьё состояние нужно сохранить (например, документ)
- Memento - снимок состояния в определённый момент времени
- Caretaker - управляет снапшотами, но не может их изменять
🔸 Когда использовать Memento
- Undo/Redo в редакторах, играх, формах
- Транзакционный откат в базах данных или операциях
- Чекпоинты в долгих процессах
- История состояния для отладки или аудита
🔸 Преимущества
- Сохранение инкапсуляции - внутреннее состояние остаётся приватным
- Чистое разделение - логика отката отделена от бизнес-логики
- Гибкие снапшоты - сохраняется только то, что нужно
- Простота внедрения - стандартный и понятный паттерн
🔸 Примеры
- Текстовые редакторы - Ctrl+Z с сохранением состояния документа
- Фоторедакторы - панель истории шагов редактирования
- Игры - сохранения и чекпоинты
- Транзакции в БД - откат при сбое
🔸 Недостатки
- Память - хранение множества снапшотов
- Производительность - создание снапшотов требует времени
- Сложность для больших объектов - глубокое копирование может быть дорогим
👉 Java Portal
Вы пишете текстовый редактор и вам нужна функциональность undo/redo.
Пользователь вводит, удаляет, форматирует текст и ожидает возможность откатить изменения к предыдущему состоянию.
// Пользователь ввёл: "Hello"
// Пользователь ввёл: " World"
// Пользователь удалил: "World"
// Пользователь хочет откатить → восстановить "World"
// Пользователь хочет откатить снова → восстановить "Hello"
Без Memento пришлось бы вручную отслеживать каждое изменение и разрабатывать логику обратного отката для каждого действия.
- Доступ к внутренним полям - нужно лезть в приватные данные объекта для сохранения/восстановления состояния
- Сложная логика отката - откат каждого типа операций приходится писать вручную
- Сильная связка - логика undo перемешана с бизнес-логикой
- Прожорливость памяти - хранение целых объектов вместо снапшотов
Паттерн Memento говорит
> «Позволь объектам сохранять и восстанавливать своё состояние через снапшоты, не раскрывая внутренние детали».
Flow
1. Создать снимок состояния
2. Сохранить в Caretaker
3. Продолжить работу
4. Запросить откат
5. Восстановить состояние
- Originator - объект, чьё состояние нужно сохранить (например, документ)
- Memento - снимок состояния в определённый момент времени
- Caretaker - управляет снапшотами, но не может их изменять
- Undo/Redo в редакторах, играх, формах
- Транзакционный откат в базах данных или операциях
- Чекпоинты в долгих процессах
- История состояния для отладки или аудита
- Сохранение инкапсуляции - внутреннее состояние остаётся приватным
- Чистое разделение - логика отката отделена от бизнес-логики
- Гибкие снапшоты - сохраняется только то, что нужно
- Простота внедрения - стандартный и понятный паттерн
- Текстовые редакторы - Ctrl+Z с сохранением состояния документа
- Фоторедакторы - панель истории шагов редактирования
- Игры - сохранения и чекпоинты
- Транзакции в БД - откат при сбое
- Память - хранение множества снапшотов
- Производительность - создание снапшотов требует времени
- Сложность для больших объектов - глубокое копирование может быть дорогим
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7❤6👍2
Бесплатный API для получения полной информации об IP-адресе.
Без регистрации и каких-либо ограничений.
Работает с Python, JavaScript, Java, PHP, Go и другими языками.
Пример использования: https://api.ipquery.io/1.1.1.1
👉 Java Portal
Без регистрации и каких-либо ограничений.
Работает с Python, JavaScript, Java, PHP, Go и другими языками.
Пример использования: https://api.ipquery.io/1.1.1.1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🌚3🤔2
Держи сотни гигабайт свежих уроков, и каждую неделю мы подкидываем ещё!
1402 ГБ — Python
1815 ГБ — Frontend
1515 ГБ — Backend
1300 ГБ — C / C++
694 ГБ — Java
546 ГБ — SQL & БД
411 ГБ — DevOps
898 ГБ — ИБ & Хакинг
212 ГБ — JavaScript
996 ГБ — Kotlin / Swift
173 ГБ — PHP
215 ГБ — GoLang
185 ГБ — Rust
517 ГБ — Linux
115 ГБ — QA / Тестирование
419 ГБ — GameDev
319 ГБ — 1C + Лицензии
617 ГБ — Машинное обучение
687 ГБ — Аналитика Данных
998 ГБ — Дизайн
Подписывайся и не плати за то, что можно получить бесплатно
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1🌚1
Проект многопоточный загрузчик файлов на Java отлично подходит для изучения
Учит разбираться в многопоточности и конкурентности
Прокачивает навыки в:
> работе с данными
> файловом вводе-выводе
> многопоточности
> конкурентности
> работе с диапазонами Content-Length в HTTP-запросах
и не только💪
Вот один из проектов к примеру: https://github.com/winnerx0/java-project-box
👉 Java Portal
Учит разбираться в многопоточности и конкурентности
Прокачивает навыки в:
> работе с данными
> файловом вводе-выводе
> многопоточности
> конкурентности
> работе с диапазонами Content-Length в HTTP-запросах
и не только
Вот один из проектов к примеру: https://github.com/winnerx0/java-project-box
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍2
Media is too big
VIEW IN TELEGRAM
Научись создавать проекты с нуля на любом языке программирования
Репо: https://github.com/practical-tutorials/project-based-learning
👉 Java Portal
Репо: https://github.com/practical-tutorials/project-based-learning
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3