Java for Beginner
706 subscribers
614 photos
166 videos
12 files
958 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Что такое flatMap в Stream API? 🤓

Ответ:

flatMap преобразует элементы потока в другие потоки и "расплющивает" их в один поток. Используется для работы с вложенными коллекциями.

Пример:
List<List<Integer>> lists = Arrays.asList(Arrays.asList(1, 2), Arrays.asList(3, 4));
List<Integer> flat =
lists.stream()
.flatMap(List::stream)
.collect(Collectors.toList()); // [1, 2, 3, 4]

Отличается от map, который не распаковывает вложенные структуры.


#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
После проведенного голосования, с выбрана тема - OkHttp

Ну читаем'с ниже статейку

Если нужно рассмотреть эту тему более подробно с каждым классом - пишите в комментах, буду готовить 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
OkHttp для Java

OkHttp — это высокопроизводительный HTTP-клиент для Java и Android, разработанный компанией Square. С момента своего появления он стал стандартом де-факто для сетевых операций в Java-приложениях благодаря своей эффективности, поддержке современных протоколов и гибкости. OkHttp используется в популярных библиотеках, таких как Retrofit, Picasso и других, что подчеркивает его надежность и универсальность.

Почему стоит выбрать OkHttp?
Производительность: Встроенная поддержка HTTP/2, пулинг соединений и GZIP-компрессия обеспечивают оптимальную производительность.
Современные стандарты: Поддержка TLS 1.3, ALPN и привязки сертификатов гарантирует безопасность и совместимость.
Простота и гибкость: Флюентный API и неизменяемые объекты упрощают написание чистого кода, а интерсепторы позволяют настраивать поведение.
Надежность: Автоматическое восстановление после сбоев и поддержка альтернативных IP-адресов повышают устойчивость к сетевым проблемам.



Основные функции

OkHttp предлагает набор функций, которые делают его мощным инструментом для сетевых операций:
Поддержка HTTP/2: Позволяет нескольким запросам к одному хосту использовать одно соединение, снижая задержки.
Пулинг соединений: Повторно использует существующие соединения, минимизируя накладные расходы.
Прозрачная GZIP-компрессия: Автоматически сжимает ответы, уменьшая объем данных.
Кэширование ответов: Хранит ответы для повторного использования без сетевых запросов.
Восстановление сети: Автоматически повторяет попытки подключения и использует альтернативные IP-адреса.
TLS-функции: Поддерживает TLS 1.3, ALPN, привязку сертификатов и откат к старым версиям TLS.



Поддержка HTTP/2

HTTP/2 позволяет мультиплексировать несколько запросов через одно соединение, что особенно полезно для приложений с высокой нагрузкой. OkHttp автоматически использует HTTP/2, если сервер его поддерживает, обеспечивая оптимальную производительность.

Пулинг соединений
Когда HTTP/2 недоступен, OkHttp использует пулинг соединений для повторного использования сокетов. Это снижает затраты на установление новых соединений, что критично для приложений с частыми запросами.
Прозрачная GZIP-компрессия

OkHttp автоматически обрабатывает GZIP-компрессию ответов, что уменьшает объем передаваемых данных. Разработчику не нужно вручную декомпрессировать данные, так как OkHttp делает это прозрачно.

Кэширование ответов
Кэширование позволяет сохранять ответы сервера на локальном устройстве, что особенно полезно в условиях ограниченной связности. OkHttp поддерживает настройку кэша, например, с помощью директив Cache-Control.

Восстановление сети
OkHttp устойчив к сетевым сбоям. Он автоматически повторяет попытки подключения и пробует альтернативные IP-адреса, если сервер доступен по нескольким адресам. Это особенно важно для поддержки IPv4+IPv6 и серверов в распределенных дата-центрах.

TLS-функции
OkHttp поддерживает современные TLS-протоколы (TLS 1.3, ALPN) и функции, такие как привязка сертификатов для повышения безопасности. При необходимости он может откатываться к TLS 1.0 для совместимости с устаревшими серверами.

Для улучшения TLS можно использовать Conscrypt:
Security.insertProviderAt(Conscrypt.newProvider(), 1);



Обзор API

OkHttp предоставляет интуитивно понятный API, основанный на шаблоне строителя (builder pattern), что упрощает создание и выполнение запросов.

Создание запросов

Запросы создаются с помощью Request.Builder, который позволяет задавать URL, метод, заголовки и тело запроса.
Request request = new Request.Builder()
.url("https://api.example.com/data")
.get()
.build();


Для запросов с параметрами можно использовать HttpUrl.Builder:
HttpUrl url = new HttpUrl.Builder()
.scheme("https")
.host("api.example.com")
.addPathSegment("data")
.addQueryParameter("id", "1")
.build();

Request request = new Request.Builder()
.url(url)
.build();



#Java #middle #on_request #OkHttp
👍3
Выполнение запросов

OkHttp поддерживает синхронные и асинхронные вызовы.

Синхронный вызов:
OkHttpClient client = new OkHttpClient();
Call call = client.newCall(request);
Response response = call.execute();


Асинхронный вызов:

Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
System.err.println("Request failed: " + e.getMessage());
}

@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
String body = response.body().string();
System.out.println("Response: " + body);
}
}
});


Обработка ответов

Ответы в OkHttp неизменяемы и предоставляют доступ к заголовкам, телу и статусу ответа.
if (response.isSuccessful()) {
String body = response.body().string(); // Важно: вызывать .string() только один раз
System.out.println("Response body: " + body);
} else {
System.err.println("Request failed with code: " + response.code());
}
response.close(); // Закрытие ответа для освобождения ресурсов


Важно: Метод response.body().string() загружает тело ответа в память, поэтому для больших ответов рекомендуется использовать потоковую передачу:
try (ResponseBody body = response.body()) {
InputStream inputStream = body.byteStream();
// Чтение потока
}



Расширенные функции

Интерсепторы

Интерсепторы — это мощный механизм для наблюдения, модификации и управления запросами и ответами.

OkHttp поддерживает два типа интерсепторов:
Прикладные интерсепторы (addInterceptor): Вызываются для каждого запроса и ответа, включая кэшированные. Подходят для логирования, добавления заголовков или модификации запросов.
Сетевые интерсепторы (addNetworkInterceptor): Вызываются только для сетевых запросов, игнорируя кэшированные ответы. Полезны для обработки перенаправлений и повторных попыток.


Пример интерсептора для логирования:
public class LoggingInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
long t1 = System.nanoTime();
System.out.println(String.format("Sending request %s on %s%n%s",
request.url(), chain.connection(), request.headers()));

Response response = chain.proceed(request);
long t2 = System.nanoTime();
System.out.println(String.format("Received response for %s in %.1fms%n%s",
response.request().url(), (t2 - t1) / 1e6d, response.headers()));

return response;
}
}


Добавление интерсептора:
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new LoggingInterceptor())
.build();


Пример сетевого интерсептора для добавления заголовка Cache-Control:
public class CacheControlInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Response response = chain.proceed(request);
return response.newBuilder()
.header("Cache-Control", "max-age=60")
.build();
}
}


Практическое применение интерсепторов:
Логирование запросов и ответов с помощью HttpLoggingInterceptor.
Добавление заголовков аутентификации.
Повторные попытки при сбоях (например, при 503 ошибках).
Модификация тела запроса или ответа (например, шифрование/дешифрование).



#Java #middle #on_request #OkHttp
👍3
Настройка клиента

OkHttpClient.Builder позволяет настраивать параметры клиента, такие как таймауты, пул соединений и интерсепторы.

OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS)
.build();


Для отключения перенаправлений:
OkHttpClient client = new OkHttpClient.Builder()
.followRedirects(false)
.build();


Загрузка файлов

OkHttp поддерживает загрузку файлов с помощью MultipartBody:

File file = new File("src/test/resources/test.txt");
RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", file.getName(), fileBody)
.build();

Request request = new Request.Builder()
.url("https://api.example.com/upload")
.post(requestBody)
.build();


Для отслеживания прогресса загрузки можно создать кастомный RequestBody:
public class ProgressRequestWrapper extends RequestBody {
private final RequestBody requestBody;
private final ProgressListener listener;

public ProgressRequestWrapper(RequestBody requestBody, ProgressListener listener) {
this.requestBody = requestBody;
this.listener = listener;
}

@Override
public MediaType contentType() {
return requestBody.contentType();
}

@Override
public void writeTo(BufferedSink sink) throws IOException {
CountingSink countingSink = new CountingSink(sink, this, contentLength());
BufferedSink bufferedSink = Okio.buffer(countingSink);
requestBody.writeTo(bufferedSink);
bufferedSink.flush();
}

public interface ProgressListener {
void update(long bytesWritten, long contentLength, boolean done);
}
}


Отмена запросов


Запросы можно отменить с помощью метода Call.cancel():
Call call = client.newCall(request);
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.schedule(() -> {
call.cancel();
System.out.println("Request cancelled");
}, 1, TimeUnit.SECONDS);


Кэширование

Для настройки кэша:
File cacheDirectory = new File("src/test/resources/cache");
int cacheSize = 10 * 1024 * 1024; // 10 MiB
Cache cache = new Cache(cacheDirectory, cacheSize);

OkHttpClient client = new OkHttpClient.Builder()
.cache(cache)
.build();



#Java #middle #on_request #OkHttp
👍3
Лучшие практики

Управление соединениями:
Используйте пулинг соединений для оптимизации производительности, но следите за количеством открытых соединений, чтобы избежать перегрузки ресурсов.
Настройте максимальное количество соединений с помощью ConnectionPool.


Обработка больших ответов:
Избегайте использования response.body().string() для больших ответов. Вместо этого используйте byteStream() для потоковой обработки.

Обработка ошибок:
Реализуйте повторные попытки для преходящих ошибок (например, 503) с помощью интерсепторов.
Всегда закрывайте Response с помощью response.close() или try-with-resources.


Безопасность:
Регулярно обновляйте OkHttp для получения последних исправлений безопасности.
Используйте привязку сертификатов для защиты от атак типа "человек посередине".


Асинхронные вызовы:
Предпочитайте асинхронные вызовы для Android-приложений, чтобы избежать блокировки UI-потока.


Интеграция с другими библиотеками

OkHttp часто используется в связке с другими библиотеками:

Retrofit: Упрощает создание RESTful API, используя OkHttp как базовый HTTP-клиент.
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new LoggingInterceptor())
.build();

Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.example.com/")
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build();


Moshi/Gson: Для сериализации и десериализации JSON.
HttpLoggingInterceptor: Для логирования HTTP-запросов и ответов.


Тестирование

OkHttp предоставляет MockWebServer для имитации серверных ответов в тестах:
MockWebServer server = new MockWebServer();
server.enqueue(new MockResponse().setBody("Hello, world!"));
server.start();

HttpUrl baseUrl = server.url("/test");
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(baseUrl).build();
Response response = client.newCall(request).execute();

assertEquals("Hello, world!", response.body().string());
server.shutdown();


Для добавления MockWebServer в проект:

<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>mockwebserver</artifactId>
<version>5.1.0</version>
<scope>test</scope>
</dependency>


Требования и зависимости


Версии: OkHttp 5.x поддерживает Android 5.0+ (API 21+) и Java 8+. Для более старых платформ используйте ветку 3.12.x (Android 2.3+, Java 7+).
Зависимости: Okio и стандартная библиотека Kotlin. Опционально: Conscrypt для улучшенной TLS-поддержки.

Maven:
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>5.1.0</version>
</dependency>


Для управления версиями рекомендуется использовать BOM:
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp-bom</artifactId>
<version>5.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>


Поддержка GraalVM

OkHttp совместим с GraalVM Native Image, начиная с версии 5.0.0-alpha.2.

Пример сборки:
./gradlew okcurl:nativeImage
./okcurl/build/graal/okcurl https://httpbin.org/get


Безопасность
Для обеспечения безопасности регулярно обновляйте OkHttp, чтобы использовать последние исправления. Следите за историей конфигурации TLS на странице OkHttp.


#Java #middle #on_request #OkHttp
👍4
Как не разрушаться от критики и при чём тут эмоциональный интеллект

или "Мне сказали, что я сделал х*рню" — и вот я уже думаю уйти из IT ☺️


😨 Представь, что ты набрался храбрости и выложил свой первый код на всеобщий ревью (не знаю где, да это и не важно).

И когда ты получаешь фидбэк по коду:
"Вот это неочевидное решение"
"Лучше переделать всю архитектуру"
"Так никто не делает
"

..внутри происходит не "так'c щас поправим", а "буря в стакане" 😔.
Сердце сжимается, руки опускаются, а в голове начинает звучать хор: "Я тупой", "Я не подхожу", "Я зря вообще сюда полез"…

Знакомо? Это не просто обида.
Это — непонимание работы своего эмоционального интеллекта.


Что такое эмоциональный интеллект?

EQ (Emotional Quotient) — это способность человека:
🟡осознавать и понимать свои эмоции
🟡управлять ими
🟡разбираться в эмоциях других
🟡реагировать осознанно, а не автоматически

🔴Это не про "перестать воспринимать и чувствовать". Это чувствовать, правильно реагировать и не разрушаться.
Mayer & Salovey, 1997: Emotional Intelligence Theory


Ты воспринимаешь критику как диагноз

Нас с детства не учили отделять свою работу от себя как от личности.

Поэтому, когда тебе говорят:

"Есть проблемы в коде"

ты слышишь:
"Ты плохой".
"Ты — не настоящий программист".
"Ты всех подвёл".

Но это когнитивное искажение, а не реальность.
Научный термин: "эмоциональное отождествление" — когда человек приравнивает внешнюю оценку к внутренней ценности.
(Lazarus, 1991 — Emotion and Adaptation)

И что в итоге происходит?
Ты боишься делать PR, потому что "вдруг там херня".
Ты злишься на ревьюера, а потом — на себя.
Ты либо начинаешь оправдываться, либо молчишь и варишься внутри.

Всё это съедает мотивацию, уверенность, интерес.


Что делать? Как включить свой Emotional Quotient?

Учись слушать не обижаясь, а расшифровывая.

Комментарий "Плохое решение" расшифровывай как "Это не подходит к текущим требованиям/стандартам. Попробуй по-другому."
Люди в IT часто пишут прямолинейно, потому что пишут, как код — без эмоционального оформления.

Это не атака, это просто способ общения.


Переводи эмоции в факты

Ты читаешь коммент: "Это костыль"
Ты чувствуешь: "Я — тупой"

Остановись и спроси себя: Где тут факт? Что конкретно не так? Что я могу изменить?

Это активная эмоциональная регуляция.
(Gross, 1998 — The Emerging Field of Emotion Regulation)


Проси конструктив, не похвалу

Твой Мозг любит, чтобы тебя гладили.

Но гораздо полезнее — просить:
"А как бы ты сделал?"
"Можно пример?"
"Где можно почитать про это?"


Так ты переключаешься с ревьюера-обидчика — на ревьюера-союзника.
И мозг начинает учиться, стремясь исправить недостаток.


Критика ≠ личная оценка
Ты — не твой pull request.
Тебя нужно и можно уважать, даже если ты влепил 40 строчек ради сортировки по длине строки.


Emotional Quotient — это не про мягкость. Это про силу.
Сильный не тот, кто не чувствует.
А тот, кто умеет видеть эмоции, разбирать их на части и не дает им разрушать себя.



❗️ВАЖНО ❗️
Необходимо и понимать разницу между конструктивным и токсичным фидбеком.

Отличить их на самом деле они очень просто - в токсичном комментарии оценивать начинают не код, а личностные качества человека который его написал.

Крайне советую избегать этого самому, при проведении ревью чьего либо кода и избегать взаимодействия (указав на недопустимость подобного) с таким ревьюером.

В конечном итоге - IT это про интеллект, а не эмоции, избегайте личностного негатива (но прислушивайтесь и безэмоционально
оценивайте услышанное, иногда там есть зерно истины).

Кроме того, редко, но встречаются агрессивные разработчики, которые не умея контролировать свои эмоции, крайне негативно реагируют на критическую оценку их кода.

Совет тот же - избегайте таких.

Это не про интеллект.👎



Пиши в комментах:
Какой фидбэк был самым негативным для тебя больше всего — и как ты с этим справился. Или не справился.


Понравилась статья - поделись с другом, позови его на канал и будет тебе моя благодарность 🤝

😎

#motivation
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥21
Предлагаем темы для разбора и публикации! 📖

В комментариях к данному посту предлагайте вопросы, которые вы хотели бы увидеть максимально подробно разобранными в постах, а если будет интересно то и на видео.

Голосование будет проводиться всю неделю, а статья или видео - выходить по выходным.

Примерные правила:
🟢 темы, не выше уровня middle, чтоб был интерес общим.
🟢Один человек - одна тема.
🟢Тема должна быть отдельным теоретически-практическим вопросом. Готовый проект - это не тема!

Жду Ваших предложений! 👏
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Выбираем темы для рассмотрения в следующие выходные! 🤨
Anonymous Poll
23%
Mockito
5%
Retrofit
28%
JWT
13%
Nginx
10%
NoSQL BD
21%
GraphQL
👍4
📌 Факт дня:

А вы знали, что первый компьютерный "алгоритм сжатия видео" H.120 был создан в 1984 году?

Был разработан COST 211 и опубликован CCITT (сейчас ITU-T) в 1984, обновлен в 1988, включив дополнения сторонних организаций. Он заложил основу для современных форматов, таких как H.264 и H.265.

proof

#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
📌 Биография дня: Виктор Иванников

Виктор Иванников (1940–2007) — советский и российский ученый, основатель Института системного программирования РАН (ИСП РАН). Внес значительный вклад в развитие компиляторов, операционных систем и анализа программного обеспечения. Его работы по формальным методам верификации программ повлияли на современные подходы к разработке надежного ПО.


Биография

#Biography
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Обзор платформ для разработки на Java

Для написания и запуска Java-программ вам нужна платформа, где вы будете писать код, компилировать его и запускать. Выбор инструмента зависит от вашего уровня подготовки, целей и предпочтений. Ниже представлен обзор доступных вариантов — от простых текстовых редакторов до профессиональных IDE, включая новые российские разработки OpenIDE и GigaIDE, а также Cursor с поддержкой ИИ.


1. Текстовые редакторы (Блокнот, Notepad++, VS Code)

Простые текстовые редакторы — это базовый инструмент для написания кода. Они не требуют сложной настройки, но и не предоставляют продвинутых функций, таких как автодополнение или отладка.

Блокнот (Notepad):
Плюсы: Бесплатный, предустановлен на Windows, минималистичный.
Минусы: Нет подсветки синтаксиса, автодополнения, отладки. Подходит только для простейших программ.
Когда использовать: Для первых шагов, чтобы понять, как работает компиляция (javac) и запуск (java) вручную.


Пример:
Напишите код в HelloWorld.java в Блокноте, сохраните, затем скомпилируйте и запустите через командную строку:
javac HelloWorld.java
java HelloWorld


Notepad++:
Плюсы: Бесплатный, легкий, поддерживает подсветку синтаксиса для Java, плагины для автодополнения.
Минусы: Нет встроенной отладки или интеграции с JDK. Требуется ручная компиляция.
Когда использовать: Для небольших программ или если вы хотите минималистичную среду.



Visual Studio Code (VS Code):

Плюсы: Бесплатный, легкий, поддерживает плагины (например, «Java Extension Pack»), автодополнение, отладку и интеграцию с JDK. Популярен среди Java-разработчиков как легкая альтернатива IDE.
Минусы: Требует настройки плагинов для полноценной работы с Java.
Когда использовать: Если вы хотите современный редактор с поддержкой Java, но без громоздкости полноценной IDE.

Настройка:
Установите VS Code с code.visualstudio.com.
Установите расширение «Java Extension Pack» через Marketplace.
Укажите путь к JDK (установленному ранее, например, Java 17).


Совет для новичков: Текстовые редакторы подходят для изучения основ, но для реальной разработки лучше использовать IDE, так как они экономят время и упрощают работу.


2. Интегрированные среды разработки (IDE)

IDE — это мощные инструменты, которые объединяют редактор кода, компилятор, отладчик и другие функции. Они идеальны для разработки сложных проектов и обучения, так как автоматизируют многие процессы. Рассмотрим популярные IDE, включая IntelliJ IDEA, OpenIDE, GigaIDE и Cursor.


IntelliJ IDEA:
Плюсы: Лидер среди IDE для Java. Умное автодополнение, мощная отладка, интеграция с фреймворками (Spring, Maven, Gradle), поддержка версий Java (включая 17, 21, 24 LTS). Community Edition бесплатна и подходит для большинства задач.
Минусы: Community Edition ограничена по сравнению с Ultimate (платной). Может быть тяжеловесной для слабых ПК. Не смотря на то, что корни проекта идут из России, доступ ограничен из-за санкций 😡.
Когда использовать: Для любых Java-проектов, от учебных до профессиональных.


Eclipse:
Плюсы: Бесплатный, open-source, поддерживает Java и множество плагинов, подходит для больших проектов.
Минусы: Менее интуитивный интерфейс, чем у IntelliJ IDEA. Требует больше ручной настройки.
Когда использовать: Если вы хотите бесплатную IDE с долгой историей и широкой поддержкой.


NetBeans:
Плюсы: Бесплатный, простой в использовании, хорошая поддержка Java EE и Maven.
Минусы: Менее популярен, чем IntelliJ IDEA или Eclipse, медленнее обновляется.
Когда использовать: Для учебных проектов или если вам нужна простая IDE.


BlueJ:
Плюсы: Создан специально для обучения Java. Простой интерфейс, визуализация объектов.
Минусы: Ограниченные возможности для реальных проектов.
Когда использовать: Для абсолютных новичков, изучающих основы ООП.


#Java #для_новичков #beginner #IDEA's
👍3
OpenIDE:
Плюсы: Российская IDE с открытым исходным кодом, основана на IntelliJ IDEA Community Edition. Поддерживает Java 24, Spring, Docker, Maven, Gradle и интеграцию с российским GitFlic. Не зависит от зарубежных серверов, что исключает риски блокировки. Имеет собственный маркетплейс с более чем 300 плагинами. Работает быстрее оригинальной IntelliJ IDEA за счет удаления телеметрии и проприетарных компонентов. Встроенная поддержка Spring и Docker. Удалена вся телеметрия IntelliJ IDEA.
Минусы: Находится на стадии бета-тестирования. Поддерживает только Java и Kotlin, хотя в планах добавление Go, TypeScript, Rust. Некоторые функции, например работа с базами данных, пока ограничены.
Когда использовать: Для российских разработчиков, которым важна независимость от зарубежных сервисов и открытый код. Подходит для проектов, требующих поддержки Java 24 и Spring.


GigaIDE:
Плюсы: Российская IDE от Сбера, также основана на IntelliJ IDEA Community Edition. Поддерживает Java, Kotlin, Groovy, Scala, Python, JavaScript, TypeScript, SQL. Включает AI-ассистент GigaCode для автодополнения и генерации кода. Интеграция с GitVerse, GitHub, Bitbucket. Доступна в версиях Desktop и Cloud. Поддержка Spring Framework ожидается в профессиональной версии.
Минусы: Код закрыт, процесс разработки менее прозрачен, чем у OpenIDE. Зависимость от одной компании (Сбер) может быть риском. Работа с базами данных ограничена, требуется плагин Database Navigator.
Когда использовать: Для разработчиков, которым нужен привычный интерфейс IntelliJ IDEA с AI-ассистентом и поддержкой множества языков. Подходит для корпоративных проектов в России.


Cursor:
Плюсы: Современная IDE на базе VS Code с мощным AI-ассистентом, который понимает контекст проекта, предлагает сложные конструкции кода и помогает с рефакторингом. Поддерживает более 30 языков, включая Java. Упрощает написание кода для новичков благодаря ИИ.
Минусы: Платная подписка (от $20/месяц с квотами на AI-запросы). Требует настройки для полноценной работы с Java (установка Java Extension Pack). UI может быть менее удобным для профессиональных разработчиков по сравнению с IntelliJ IDEA.
Когда использовать: Для новичков или разработчиков, которые хотят использовать ИИ для ускорения кодирования. Подходит для небольших проектов или экспериментов.


Рекомендация: Для новичков я советую IntelliJ IDEA Community Edition как основной выбор благодаря интуитивному интерфейсу и мощным функциям. OpenIDE и GigaIDE — отличные альтернативы для российских разработчиков, особенно если важна независимость от зарубежных сервисов. Cursor подойдет, если вы хотите попробовать ИИ-поддержку, но требует дополнительных затрат и настройки для Java.



Установка и настройка IntelliJ IDEA

Теперь давайте разберем, как установить и настроить IntelliJ IDEA Community Edition для разработки на Java. Мы будем использовать Java 17 (LTS), но шаги подойдут и для Java 21 или 24.

Шаг 1: Скачивание IntelliJ IDEA
Перейдите на официальный сайт: www.jetbrains.com/idea/download.
Выберите Community Edition (бесплатная версия) для вашей операционной системы:
Windows: .exe.
macOS: .dmg.
Linux: .tar.gz или пакет для дистрибутива.
Нажмите «Download» и сохраните установочный файл.


Шаг 2: Установка IntelliJ IDEA
Для Windows
Запустите скачанный .exe файл.
Следуйте инструкциям мастера установки:
Выберите папку установки (например, C:\Program Files\JetBrains\IntelliJ IDEA Community Edition).
Установите флажки для создания ярлыка на рабочем столе и добавления в PATH (опционально).
Выберите ассоциацию файлов .java с IntelliJ IDEA.
Нажмите «Install» и дождитесь завершения установки.
Запустите IntelliJ IDEA, выбрав «Run IntelliJ IDEA» в конце установки.


Для macOS
Откройте .dmg файл и перетащите IntelliJ IDEA в папку «Программы» (Applications).
Запустите IntelliJ IDEA из папки «Программы» или через Spotlight.


Для Linux (на примере Ubuntu)
Распакуйте .tar.gz:tar -xzf ideaIC-*.tar.gz -C ~/idea
Перейдите в папку bin и запустите IDE:cd ~/idea/idea-IC-*/bin
./
idea.sh
Следуйте инструкциям установщика (обычно это GUI-мастер).


#Java #для_новичков #beginner #IDEA's
👍4🔥1
Краткая установка и настройка OpenIDE, GigaIDE и Cursor

OpenIDE
Скачивание:
Перейдите на openide.ru или GitFlic для загрузки.
Выберите версию для Windows, macOS или Linux.


Установка:
Windows: Запустите .exe и следуйте мастеру установки.
macOS: Откройте .dmg и перетащите OpenIDE в «Программы». После установки выполните в терминале:xattr -c /Applications/
OpenIDE.app
Linux: Распакуйте .tar.gz и запустите скрипт openide.sh из папки bin.

GigaIDE
Скачивание:
Перейдите на
gitverse.ru/features/gigaide. Требуется авторизация через Сбер ID или cloud.ru.
Выберите GigaIDE Desktop для Windows, macOS или Linux.


Установка:
Windows: Запустите .exe и следуйте инструкциям.
macOS: Откройте .dmg и перетащите GigaIDE в «Программы». Выполните:xattr -c /Applications/GIGA\ IDE\ CE\
2024.1.1.app
Linux: Распакуйте .tar.gz и запустите gigaide.sh из папки bin.

Cursor
Скачивание:
Перейдите на
cursor.com и скачайте версию для Windows, macOS или Linux. Требуется регистрация для доступа к AI-функциям.

Установка:
Windows: Запустите .exe и следуйте инструкциям.
macOS: Перетащите .dmg в «Программы».
Linux: Распакуйте .tar.gz и запустите
cursor.sh.


Полезные советы для новичков


Выбор IDE: Начните с IntelliJ IDEA Community для универсальности. Используйте OpenIDE или GigaIDE для работы в российской инфраструктуре. Cursor подойдет для экспериментов с ИИ, но требует затрат.
Изучите горячие клавиши: Например, в IntelliJ IDEA и OpenIDE/GigaIDE: Ctrl+Alt+L (форматирование кода), Alt+Enter (исправление ошибок).
Практикуйтесь: Создайте простые программы, такие как калькулятор, в каждой IDE, чтобы сравнить их.
Ресурсы:
IntelliJ IDEA:
www.jetbrains.com/idea/documentation.
OpenIDE:
openide.ru.
GigaIDE:
gitverse.ru/features/gigaide.
Cursor:
cursor.com/docs.
Stack Overflow для решения проблем.


#Java #для_новичков #beginner #IDEA's
👍5
Что выведет код?

import java.util.concurrent.*;

public class Task280725 {
public static void main(String[] args) throws Exception {
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(() -> {
Thread.sleep(1000);
return "Done";
});

System.out.println(future.get(500, TimeUnit.MILLISECONDS));
executor.shutdown();
}
}


#Tasks
🔥2
👍1
Apache Kafka

Видео посвященное изучению Apache Kafka

Что мы рассмотрели:
Что такое Apache Kafka и зачем она нужна.
Максимально подробно рассмотрели настройку docker-compose файла для запуска кластера брокеров.
Рассмотрели настройку приложения для работы с кластером.
Продемонстрировали настройки различных видов продюсеров и консьюмеров в java-приложении, попробовали их в работе.

Ссылка на Youtube
Ссылка на Рутьюб

Ссылка на GitHub

Смотрите, ставьте лайки, подписывайтесь на каналы!✌️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7
Что такое OutOfMemoryError? 🤓

Ответ:

OutOfMemoryError выбрасывается, когда JVM не может выделить память (например, в куче).
Причины: большие объекты, утечки памяти.

Пример:
List<Object> list = new ArrayList<>();
while (true) list.add(new Object()); // OutOfMemoryError

Для диагностики используют профилировщики (VisualVM) и настройку параметров JVM (-Xmx).


#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5