Java Portal | Программирование
11.6K subscribers
1.57K photos
118 videos
45 files
1.63K links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
Download Telegram
Многие разработчики используют Java каждый день. Но мало кто знает, почему он стал одним из самых успешных языков в мире.

Вот его основные особенности:

Независимость от платформы
Скомпилируйте код в байт-код один раз и запускайте его на любой машине с JVM.

Объектно-ориентированный подход
Всё строится вокруг классов и объектов, что упрощает организацию и сопровождение крупных приложений.

Надёжность
Автоматическая сборка мусора, строгая проверка типов и обработка исключений помогают избежать многих распространённых проблем во время выполнения.

Высокая производительность
JIT-компилятор (Just-In-Time) оптимизирует часто выполняемый код, обеспечивая скорость, близкую к нативной.

Многопоточность
Встроенные API для работы с конкурентностью упрощают параллельное выполнение нескольких задач.

Проверен на практике
Банковские системы, платформы электронной коммерции, Android-приложения и корпоративные бэкенды: Java лежит в основе критически важного ПО в самых разных отраслях.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍2
Бесплатные ресурсы для изучения Java

Конспект Effective Java — HugoMatilla/Effective-JAVA-Summary 

Паттерны проектирования на Java — iluwatar/java-design-patterns 

Подготовка к техническим собеседованиям — kdn251/interviews 

Сохраняйте в закладки!

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Каждый Java-разработчик использует HashMap. Но задумывались ли вы…

Почему его ёмкость всегда равна степени двойки?
Почему не 10? Почему не 100? Почему Java увеличивает её именно так?

16 → 32 → 64 → 128 → 256

Что сломается или станет работать медленнее, если ёмкость будет равна 15, 30 или 100?

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Java: используйте Deque вместо Stack для работы по принципу LIFO («последним пришёл — первым вышел»).

Stack — устаревший класс, который наследуется от Vector и синхронизирует каждый вызов.

Deque предоставляет те же методы push, pop и peek.
Используйте ArrayDeque: он быстрее и рекомендуется начиная с Java 6.

#Java #Collections

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1
Во многих приложениях есть такой эндпоинт.

Фронтенд удаляет JWT после того, как пользователь нажимает «Выйти». Но вот вопрос… Действительно ли пользователь вышел из системы?

Что, если:
• JWT скопировали до выхода?
• Срок действия токена ещё не истёк?
• Другое устройство всё ещё использует тот же токен?

Будет ли ваш бэкенд по-прежнему принимать этот JWT? Как вы реализуете выход из системы в архитектуре со stateless JWT?

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Java-разработчики, ConcurrentHashMap потокобезопасен.

Но он не блокирует всю коллекцию при каждом обновлении. Что же происходит, когда несколько потоков изменяют её одновременно?

До Java 8 → блокировки на уровне сегментов.
Java 8+ → CAS + синхронизация на уровне корзин.

Как это улучшает работу с конкурентным доступом? И когда ConcurrentHashMap всё ещё нужны блокировки?

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Java-разработчики, CopyOnWriteArrayList создаёт копию всего внутреннего массива при каждом изменении.

Звучит затратно, правда? И всё же в некоторых продакшен-системах он может работать быстрее синхронизированных коллекций.

Почему?

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Проблема в продакшене. Приложение зависло.

Вы запускаете:
jstack <pid>


Через несколько секунд получаете:
Found one Java-level deadlock


Но главный вопрос… Как JVM обнаружила взаимную блокировку? Что происходит внутри?

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
💡 Java: не создавайте ресурсоёмкие объекты, пока они действительно не понадобятся.

✅ Инициализация полей заранее тратит время и память впустую, если код, который их использует, так и не выполнится.
✅ Используйте ленивую инициализацию при первом обращении, Supplier или паттерн Holder.
✅ Подходит для кэшей, клиентов и тяжёлых конфигураций.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1🤔1
Большинство Java-разработчиков используют эти термины каждый день. Удивительно, но многие до сих пор их путают. Вот простой способ запомнить разницу.

JDK (Java Development Kit)
• Всё необходимое для разработки Java-приложений:
• Компилятор javac
• Инструменты отладки
• Инструменты упаковки
• Среда выполнения JRE

JRE (Java Runtime Environment)
• Всё необходимое для запуска Java-приложений:
• Основные библиотеки
• Вспомогательные файлы
• Виртуальная машина JVM

JVM (Java Virtual Machine)
• Движок, который выполняет Java-байткод:
• Загружает классы
• Проверяет байткод
• JIT-компилирует часто выполняемый код
• Управляет памятью и сборкой мусора

Как запомнить:
JDK = JRE + инструменты разработки
JRE = JVM + библиотеки
JVM = выполнение байткода

Представьте приготовление кофе
• JDK — кофемашина, зёрна, кофемолка и всё необходимое для приготовления кофе.
• JRE — готовый к употреблению кофе.
• JVM — нагреватель, благодаря которому кофе заваривается.

Если вы пишете код, устанавливайте JDK. Если только запускаете Java-приложение, достаточно JRE, хотя современные дистрибутивы JDK обычно уже включают необходимую среду выполнения.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Эволюция языков программирования

1940-е → Машинный код
⬇️
1950-е → Ассемблер
⬇️
1960-е → FORTRAN • COBOL • BASIC
⬇️
1970-е → C • Pascal
⬇️
1980-е → C++ • Objective-C
⬇️
1990-е → Java • JavaScript • PHP
⬇️
2000-е → C# • Ruby • Scala
⬇️
2010-е → Go • Rust • Kotlin • Swift
⬇️
2020-е → Программирование с помощью ИИ

Каждое поколение решало свои задачи:
• Машинный код → прямое управление оборудованием.
• Ассемблер → инструкции, понятные человеку.
• C и Pascal → переносимость программ и структурное программирование.
• Java и JavaScript → корпоративное ПО и современный веб.
• C#, Ruby и Scala → продуктивность разработчиков и масштабируемые приложения.
• Go, Rust, Kotlin и Swift → облачные системы, безопасность памяти и современные платформы.
• Программирование с помощью ИИ → ускорение разработки, при котором архитектурные решения по-прежнему принимают люди.

Что самое интересное?

Языки развивались не потому, что старые становились бесполезными. Каждое новое поколение ПО приносило новые задачи. И вот подтверждение:

• На C по-прежнему пишут операционные системы.
• На Java работают миллионы корпоративных приложений.
• JavaScript по-прежнему доминирует в вебе.
• Python остаётся ведущим языком в ИИ и анализе данных.

Новое не заменяет старое. Оно расширяет возможности. На каком языке вы написали свой первый Hello, World!?

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🏆2😁1