TGViewer
Channel Public Channel
Библиотека джависта | Java, Spring, Maven, Hibernate

Библиотека джависта | Java, Spring, Maven, Hibernate

@javaproglib

Все самое полезное для Java-разработчика в одном канале.

Учиться у нас: clc.to/AATM8w

Для обратной связи: @proglibrary_feeedback_bot

По рекламе: @tproger_sales_bot

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
Subscribers
22K
Photos
2.5K
Videos
57
Links
3.7K

Showing posts older than #7688 · Back to latest

Older Posts 20 shown
Post #7687 2.53K
🐳 Магия Docker Compose

Поменяли конфиг одного сервиса и не хотите перезапускать весь стек из 10 контейнеров? docker compose up -d --no-deps service-name пересоздаст только указанный сервис.

🔹 Зачем это нужно

— Перезапуск одного сервиса вместо всего стека экономит минуты на тяжёлых проектах.
— --no-deps не трогает зависимости, так что БД и Redis останутся на месте.
— -d запускает в фоне, терминал свободен для другой работы.

🔹 Как использовать

— Пересоздать один сервис: docker compose up -d --no-deps api
— Пересобрать и запустить: docker compose up -d --no-deps --build api
— Посмотреть логи только одного: docker compose logs -f api
— Рестарт без пересоздания: docker compose restart api
— Масштабировать: docker compose up -d --scale worker=3

💡 restart не подхватывает изменения в docker-compose.yml или Dockerfile, для этого нужен up -d. Если обновили env-переменные или порты — только up -d применит изменения.

══════ Навигация ══════
Вакансии • Задачи • Собесы

🐸 Библиотека джависта

#Enterprise
  • 👍 9
  • ❤ 2
  • 🔥 2
  • 👏 2
Post #7685 2.53K
⚡️ Последний шанс забрать курсы со СКИДКОЙ 40%! Прокачайте свой мозг правильно

До конца акции вы можете воспользоваться специальными ценами на самые востребованные IT-направления. Круто и выгодно прокачать свои скиллы, чтобы получить оффер, уехать на Бали и больше не быть онлайн 😎

➡️ Разработка AI-агентов — от 49 000 ₽ (вместо 69 000 ₽)
Курс про контролируемую разработку ИИ-агентов: качество, стоимость, наблюдаемость и тестирование. С первого занятия — только практическая работа.

➡️ Курс AgentOps — 129 000 ₽ (вместо 149 000 ₽)
Профессиональный трек для разработчиков и LLM инженеров о том, как правильно внедрять AI-логику в бэкенд и сохранять железную стабильность сервиса.

➡️ Математика для Data Science — от 29 990 ₽ (вместо 39 990 ₽)
Вы научитесь решать сложные математические задачи, которые дают на собеседованиях на позицию дата-сайентиста в бигтехе. Отличная база для мощного старта в DS.

➡️ Курс Специалист по ИИ — 89 000 ₽ (вместо 113 900 ₽)
Комплексная программа для получения профессии в сфере ИИ с нуля. За 8 месяцев вы соберете сильное портфолио из 5 реальных проектов и дипломной работы.

➡️ Архитектуры и шаблоны проектирования — 27 990 ₽ (вместо 37 900 ₽)
Интенсив для разработчиков, который поможет освоить основные паттерны проектирования и прокачать навыки архитектора программного обеспечения.

🌸 Выбирайте направление, оставляйте заявку на сайте распродажи, и наш менеджер подробно вас проконсультирует
  • 😁 1
Post #7684 2.3K
🚀 jbang — 1.8k ⭐️

Надо накидать утилиту на 30 строк, дёрнуть API, распарсить JSON, прогнать миграцию?

И вот ты уже создаёшь Maven-проект, пишешь pom.xml, городишь src/main/java/com/example/..., добавляешь зависимость, билдишь jar. Полчаса церемоний ради скрипта, который запускается один раз.

jbang убирает всё это. Один .java файл и он запускается как скрипт. Зависимости объявляются прямо в коде комментарием //DEPS, jbang сам тянет их с Maven Central, компилирует и запускает:
///usr/bin/env jbang "$0" "$@" ; exit $?
//DEPS com.squareup.okhttp3:okhttp:4.12.0
//JAVA 21+

import okhttp3.*;

public class fetch {
public static void main(String[] args) throws Exception {
var client = new OkHttpClient();
var req = new Request.Builder()
.url("https://api.github.com/repos/jbangdev/jbang")
.build();
try (var resp = client.newCall(req).execute()) {
System.out.println(resp.body().string());
}
}
}


jbang fetch.java — и всё работает. Никакого pom.xml, никакого build-шага, никакой структуры папок.

Что ещё умеет:

— запускать скрипты прямо по URL или из GitHub Gist (jbang https://.../script.java);
— генерить нативные бинарники через GraalVM;
— ставить скрипт как системную команду (jbang app install);
— экспортить в полноценный Maven/Gradle-проект, когда прототип дорос до проекта.

Поддерживает .java, .jsh, .kt, .groovy и даже .md. А если на машине нет JDK, скачает сам.

Идеален для CLI-тулзов, автоматизации, обучения и тех моментов, когда писать Python только потому что «на Java долго» — обидно.

📱 Репозиторий

══════ Навигация ══════
Вакансии • Задачи • Собесы

🐸 Библиотека джависта

#Enterprise
  • 👍 5
  • ❤ 4
  • 🔥 4
Post #7683 2.07K
🦾🧠🏋️ Качаем мозги к лету!

Все готовятся к пляжному сезону, а мы предлагаем прокачать хард-скилы, чтобы забрать крутой оффер, строить продукты будущего и работать из любой точки мира 😎

⚡️ Распродажа @proglib_academy: забирайте самые актуальные образовательные треки по сниженным ценам!

➡️ Разработка AI-агентов — от 49 000 ₽ (вместо 69 000 ₽).

➡️ Курс AgentOps — 129 000 ₽ (вместо 149 000 ₽).

➡️ Математика для разработки AI-моделей — 23 990 ₽ (вместо 31 990 ₽).

➡️ ML для старта в Data Science — 28 990 ₽ (вместо 38 990 ₽).

Почему мы?

⭐️Учим для продакшена. Наши программы заточены под реальные задачи бизнеса: как не слить бюджет на токены, как заставить LLM работать стабильно в бэкенде и как выстроить отказоустойчивую архитектуру.
⭐️Спикеры — суровые практики. Вы будете перенимать опыт у действующих AI-архитекторов, тимлидов и ML-инженеров из топовых IT-компаний.
⭐️Комплексный подход. Мы даем как мощный математический фундамент для понимания моделей «под капотом», так и передовые инструменты оркестрации агентов.
⭐️Много практики и фидбека. Вебинары, десятки практических заданий и живое общение с экспертами в чате Telegram на протяжении всего обучения.

⏳ Оставляйте заявку и бронируйте место со СКИДКОЙ 40%
  • ❤ 2
Post #7682 2.08K
💥 vibe coding — это не продуктивность, а технический долг с красивым названием

Я сам использую несколько ИИ-агентов, расчехлять каменный топор не предлагаю.

Но смотрю, во что превращается «просто опиши интент, а код появится». PR на 600 строк, который разраб не может объяснить на ревью. Тесты, которые проверяют, что мок вернул то, что в него замокали. «Починили» баг, а прилетело ещё два, потому что никто не читал, что там нагенерилось.

Сгенерить за минуту и разгребать месяц — это не 10x к производительности. AI это джун с бесконечной скоростью и нулевым контекстом бизнеса. Джуну ревьюишь каждую строку, а с ИИ часто выключают голову, потому что «модель же умная».

Vibe coding — это новый уровень абстракции или мы растим поколение, которое не умеет даже дебажить?
💬 Го в комменты

🐸 Библиотека джависта

#DevLife
  • 💯 9
  • 🔥 3
  • 👍 2
Post #7681 1.8K

Forwarded from Библиотека собеса по Java | вопросы с собеседований

❓ Расскажите о паттерне Visitor

Visitor — это поведенческий паттерн, который позволяет добавлять новые операции к объектам, не изменяя их классы.

Простыми словами: налоговый инспектор (visitor) приходит в разные компании и выполняет проверку — компании не меняются, а новые виды проверок добавляются легко.

▪️ Пример:

Система документооборота: есть разные типы документов, и нужно добавлять операции (экспорт, валидация, подсчёт статистики) без изменения классов документов.

// Visitor
interface DocumentVisitor {
void visit(Invoice invoice);
void visit(Contract contract);
void visit(Report report);
}

// Элементы
interface Document {
void accept(DocumentVisitor visitor);
}

class Invoice implements Document {
private final BigDecimal amount;
public Invoice(BigDecimal amount) { this.amount = amount; }
public BigDecimal getAmount() { return amount; }

public void accept(DocumentVisitor visitor) {
visitor.visit(this); // double dispatch
}
}

class Contract implements Document {
private final LocalDate expiryDate;
public Contract(LocalDate expiryDate) { this.expiryDate = expiryDate; }
public LocalDate getExpiryDate() { return expiryDate; }

public void accept(DocumentVisitor visitor) {
visitor.visit(this);
}
}

class Report implements Document {
private final int pageCount;
public Report(int pageCount) { this.pageCount = pageCount; }
public int getPageCount() { return pageCount; }

public void accept(DocumentVisitor visitor) {
visitor.visit(this);
}
}

// Конкретный visitor — новая операция без изменения документов
class ExportVisitor implements DocumentVisitor {
public void visit(Invoice invoice) {
System.out.println("Экспорт счёта: " + invoice.getAmount() + " ₽");
}
public void visit(Contract contract) {
System.out.println("Экспорт договора до " + contract.getExpiryDate());
}
public void visit(Report report) {
System.out.println("Экспорт отчёта: " + report.getPageCount() + " стр.");
}
}

// Использование
List<Document> docs = List.of(
new Invoice(new BigDecimal("150000")),
new Contract(LocalDate.of(2027, 1, 1)),
new Report(42)
);

DocumentVisitor exporter = new ExportVisitor();
docs.forEach(doc -> doc.accept(exporter));


▪️ Когда использовать

— Нужно выполнить операцию над группой разнородных объектов
— Новые операции добавляются часто, а новые типы элементов — редко
— Пример из JDK: java.nio.file.FileVisitor

▪️ Минус

Visitor нужно обновлять при добавлении нового типа элемента — нарушается Open/Closed Principle для элементов.

🐸 Библиотека собеса по Java

#patterns
  • 👍 4
  • ❤ 3
  • 🔥 2
Post #7679 2.16K
👀 Практический курс «Разработка AI-агентов для автоматизации задач, работы и собственных проектов» со скидкой 40% до конца мая!

Мы поговорили с десятками разработчиков, учли главные боли индустрии и запускаем полностью обновленный курс «ИИ-агенты 5.0». 🎉

Что вы узнаете?

- Как радикально оптимизировать траты на токены.
- Как на практике оценивать качество и точность работы агента.
- Как «докручивать» RAG-системы без потери качества.
- Как обеспечить устойчивость агента к сбоям внешних сервисов без падения всей системы, и про многое-многое другое.

Спикеры — практики с опытом в AI и Data Science в крупных IT-компаниях, таких как Яндекс, Сбер, Raft и Газпромбанк др.

Длительность: 6–12 недель в зависимости от тарифа.

👉 Занимайте место на главном агентском интенсиве по лучшей цене
  • 🔥 1
Post #7678 1.92K
🔒 Как подключить Keycloak к Spring Boot проекту

Keycloak — это современный open-source Identity Provider от Red Hat, который часто используется в enterprise-проектах для SSO (Single Sign-On), OAuth2 и OpenID Connect. Ниже пошаговая настройка интеграции Keycloak с Spring Boot 3 и Spring Security 6.

1️⃣ Зависимости

Проверь, что в проекте есть или добавь следующие зависимости:

— Spring Web
— Spring Security
— OAuth2 Resource Server
— OAuth2 Client

2️⃣ Разворачиваем Keycloak

Запусти Keycloak через Docker:
docker run -d \
-p 8080:8080 \
-e KEYCLOAK_ADMIN=admin \
-e KEYCLOAK_ADMIN_PASSWORD=admin \
quay.io/keycloak/keycloak:25.0.2 start-dev


После запуска открой http://localhost:8080, войди под admin/admin и создай realm, например demo-realm.

3️⃣ Настройка клиента в Keycloak

В разделе Clients → Create client укажи:

— Client ID: spring-client
— Client Protocol: openid-connect
— Root URL: http://localhost:8081

В разделе Settings:

— Установи Access Type → confidential
— Включи Standard Flow Enabled
— Укажи Redirect URI: http://localhost:8081/login/oauth2/code/keycloak

Сохрани и перейди на вкладку Credentials, скопируй Client Secret.

4️⃣ Настройка application.yml

server:
port: 8081

spring:
security:
oauth2:
client:
registration:
keycloak:
client-id: spring-client
client-secret: YOUR_CLIENT_SECRET
scope: openid, profile, email
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
provider:
keycloak:
issuer-uri: http://localhost:8080/realms/demo-realm


5️⃣ Конфигурация безопасности

Настрой SecurityConfig.java:

@Configuration
public class SecurityConfig {

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/", "/public").permitAll()
.anyRequest().authenticated()
)
.oauth2Login(Customizer.withDefaults())
.logout(logout -> logout
.logoutSuccessUrl("/")
.invalidateHttpSession(true)
);
return http.build();
}
}


🧠 Зачем это нужно

Keycloak снимает головную боль по хранению паролей, управлению ролями и сессиями. Он интегрируется с LDAP, AD, SAML и десятками внешних OAuth-провайдеров.

══════ Навигация ══════
Вакансии • Задачи • Собесы

🐸 Библиотека джависта

#Enterprise
  • 👍 6
  • ❤ 2
  • 🔥 1
  • 👏 1
Post #7677 2.18K
⚡️ Знакомьтесь с экспертом Proglib Academy: AI-архитектор Антон Будняк

Антон — мастер превращения сырых AI-идей в отказоустойчивые системы. Он знает, как запустить MVP за неделю и масштабировать его так, чтобы архитектура не рассыпалась под нагрузкой в сотни тысяч юзеров.

За что его ценит IT-комьюнити:

🟣 Опыт в финтехе и крупном бизнесе
Руководил разработкой ML-моделей в финтехе с экономическим эффектом более 100 млн ₽


🟣 Запуск продуктов на 6.000+ пользователей
Антон строит сервисы, которыми пользуются тысячи людей в реальном проде.


🟣 Ускоряет разработку
Оптимизировал ML-пайплайны и кратно сократил время от начала разработки до релиза


📚 Где Антон черпает знания (рекомендации эксперта):

- X* — главный источник новостей. Рекомендую блог Бориса Черни (создателя Claude Code) — там база про использование ИИ в разработке.
- Нетворкинг в ТГ: чаты LLM под капотом и AI-чат — здесь можно найти ответ почти на любой технический вопрос.
- Новости AI: каналы Сиолошная и Denis Sexy IT.

На курсе Agentops Антон учит строить «неубиваемый» бэкенд: работать с очередями, таймаутами и балансировкой нагрузки, чтобы ваши агенты работали стабильно 24/7.

🎁 Майские СКИДКИ в Proglib Academy!

До конца мая на все курсы академии (включая AgentOps и разработку ИИ-агентов) действует скидка -40%. Это лучший момент, чтобы войти в AI-разработку под присмотром практиков.

Узнать больше о программе и обучении у Антона:
👉 Курс о том, как внедрять AI-логику в бэкенд и сохранять стабильность сервиса

Продолжаем знакомить вас с командой?
👍 — Да, ждем новых лиц
🔥 — Пойду подпишусь на каналы из списка Антона

🏃‍♀️ Proglib Academy

* - запрещен в рф
  • 🔥 3
  • 🎉 2
  • ❤ 1
  • 👍 1
  • 👏 1
Post #7675 2.39K
🔬 Stream API: что происходит внутри пайплайна

Вы вызываете .stream().filter().map().collect() и получаете результат. Но между вызовом и результатом лежит архитектура, которую стоит понимать, если вы хотите писать эффективный код, а не просто «работающий».

🔹 Pipeline — это не цепочка вызовов

Каждая промежуточная операция не выполняет вычислений. Она возвращает новый объект Stream, который хранит ссылку на предыдущий стейдж. Фактически вы строите связный список из объектов AbstractPipeline.

Иерархия выглядит так:

BaseStream
└─ AbstractPipeline
├─ ReferencePipeline.Head // источник
├─ ReferencePipeline.StatelessOp // filter, map, flatMap...
└─ ReferencePipeline.StatefulOp // sorted, distinct, limit...

Head — точка входа, обёртка над Spliterator. Каждый StatelessOp / StatefulOp — узел, который знает только своего предшественника (previousStage) и свою операцию.

Ничего не вычисляется до вызова терминальной операции — это ленивость на уровне структуры данных, а не какая-то магия отложенных функций.

🔹 Spliterator — настоящий движок

Это не просто итератор, а абстракция, отвечающая за обход (tryAdvance, forEachRemaining), расщепление для параллелизма (trySplit), характеристики источника и оценку размера.

Характеристики — критически важны. От них зависит, какие оптимизации применит пайплайн.

Например:

→ SIZED + SUBSIZED → toArray() аллоцирует массив точного размера без ресайза.
→ DISTINCT на источнике превращает .distinct() в no-op.
→ SORTED позволяет пропустить sorted().

Флаги пробрасываются и модифицируются на каждом стейдже: filter() сбрасывает SIZED, map() — SORTED и DISTINCT.

🔹 Sink chain: push-модель

При терминальной операции пайплайн собирается с конца к началу в цепочку Sink-ов. Каждый Sink реализует begin(size), accept(element), end() и cancellationRequested(). Стейдж оборачивает downstream через opWrapSink().

Данные идут поэлементно: элемент входит в первый sink и проталкивается до конца цепочки. Не «сначала весь filter, потом весь map». Исключение — stateful-операции: sorted() копит всё в буфер — это барьер в пайплайне.

🔹 Short-circuiting: нюанс

limit, findFirst, anyMatch останавливают обход через cancellationRequested(). Но forEachRemaining() этот флаг не проверяет — AbstractPipeline переключается на поэлементный tryAdvance при наличии short-circuiting в цепочке. limit(10) на бесконечном источнике сработает, но ценой потери batch-оптимизации.

🔹 Параллельные стримы

parallelStream() использует ForkJoinPool.commonPool(), trySplit() рекурсивно делит данные, задачи раскидываются через CountedCompleter.

Что важно:

— sorted() в parallel дорого, т.к. требует merge-фазы
— distinct() на UNORDERED → ConcurrentHashMap, на ORDERED — linked-структура с барьерами
— limit(n) + parallel + ORDERED — ловушка: буферизация убивает параллелизм
— unordered() перед limit()/distinct() — не стилистика, а указание рантайму выбрать дешёвый алгоритм

💬 Какой самый неочевидный баг ловили из-за механик стримов?

══════ Навигация ══════
Вакансии • Задачи • Собесы

🐸 Библиотека джависта

#CoreJava
  • 👍 12
  • 🔥 7
  • ❤ 6
Post #7673 2.09K
⚙️ Как настроить Observability в Spring Boot 3

Знакомая ситуация: микросервис начинает тормозить, логи чистые, CPU в норме, а команда две недели перебирает гипотезы. Оказывается один сервис молча ретраит внешний API без таймаута. С нормальным трейсингом нашли бы за час. Вот как это настроить.

🔵 Что изменилось в Spring Boot 3

Главное: Spring Cloud Sleuth мёртв. Вместо него — Micrometer Tracing. Настройки другие, зависимости другие, подводные камни другие.

7 шагов от нуля до дашборда

1️⃣ Зависимости
spring-boot-starter-actuator
micrometer-registry-prometheus
micrometer-tracing-bridge-brave
zipkin-reporter-brave

Actuator даёт эндпоинты, micrometer — экспорт метрик в Prometheus, brave + zipkin — отправку трейсов.

2️⃣ Открываем /prometheus

В application.yml включаем экспорт метрик:
management:
endpoints:
web:
exposure:
include: health,info,prometheus
metrics:
export:
prometheus:
enabled: true
tags:
application: my-awesome-service


Тег application — это метка, по которой потом в Prometheus и Grafana можно фильтровать метрики конкретного сервиса. Когда у вас 10+ микросервисов без этого каша.

Проверка: открываем http://localhost:8080/actuator/prometheus, если видим простыню из jvm_memory_used_bytes, http_server_requests_seconds и прочих метрик, работает.

3️⃣ Настраиваем трейсинг
management:
tracing:
sampling:
probability: 1.0 # для теста, в проде 0.1
zipkin:
tracing:
endpoint: http://localhost:9411/api/v2/spans

Обратите внимание: endpoint теперь /api/v2/spans, а не старый формат.

4️⃣ Прокидываем traceId в логи

Подводный камень: Micrometer Tracing может не прокидывать traceId в MDC автоматически. Решение — явные бины Slf4JEventListener и BraveBaggageTagCorrelation в @Configuration классе. Если используете OTel bridge вместо Brave — нужен OtelBaggageTagCorrelation.

5️⃣ Prometheus

Создаём prometheus.yml с targets: ['app:8080'] и поднимаем через Docker Compose в одной сети с приложением. Важно: обращение по имени сервиса, а не localhost — контейнеры резолвят друг друга внутри общей Docker-сети.

Проверка: http://localhost:9090, запрос up — если сервис показывает 1, метрики собираются.

6️⃣ Loki + Promtail

Легковесная замена ELK для логов.

Loki — это «Prometheus, но для логов». Не индексирует содержимое целиком (как Elasticsearch), а только метки — за счёт этого жрёт в разы меньше ресурсов. Promtail — агент, который читает файлы логов (tail) и отправляет в Loki. Оба сервиса добавляем в тот же docker-compose.yml.

7️⃣ Grafana

Поднимаем через docker run -d -p 3000:3000 grafana/grafana, заходим на http://localhost:3000 (admin/admin). Добавляем три источника данных: Prometheus (http://prometheus:9090), Zipkin (если нет в списке — ставим плагин из каталога, не путать с Jaeger) и Loki (http://loki:3100).

Дальше — либо импортируем готовый дашборд из каталога Grafana (например, популярный Spring Boot дашборд ID 4701), либо собираем свой из трёх панелей: график RPS и ошибок из Prometheus, список последних трейсов из Zipkin, логи по выбранному traceId из Loki.

Финальная проверка: делаем запрос, который генерирует ошибку. В Grafana находим трейс, кликаем — подтягиваются соответствующие логи. Если связка работает — observability собрана.

Где propagation НЕ работает из коробки: — Kafka / RabbitMQ — gRPC — @Async и кастомные пулы потоков — Apache HttpClient / OkHttp без интерцепторов.

Для Kafka подключаем micrometer-tracing-integration-kafka.

🔵 Бизнес-теги в трейсах (Observation API)

Вместо устаревшего Tracer.currentSpan() в Spring Boot 3.2+ используем:
Observation current = Observation.current();
current.highCardinalityKeyValue("orderId", id);

Spring Boot создаёт Observation для каждого HTTP-запроса автоматически. Но в @Async и Kafka-хендлерах контекста нет — создавайте через Observation.createNotStarted().

Итого: actuator + micrometer + brave + Prometheus + Loki + Zipkin + Grafana = полная observability за полдня.

══════ Навигация ══════
Вакансии • Задачи • Собесы

🐸 Библиотека джависта

#Enterprise
  • 👍 4
  • 🔥 3
  • 👏 2
Post #7671 2.4K
До 31 мая можно забрать любой курс Proglib Academy со скидкой 40%

Если давно хотели прокачаться в Python, ML, алгоритмах или AI-агентах, сейчас самое время выбрать программу и начать обучение по сниженной цене.

🎁 Разработка AI-агентов — от 49.000 ₽ (вместо 69.000 ₽)

Практический курс по разработке AI-агентов для автоматизации задач, работы и собственных проектов

🎁 Курс AgentOps — 129.000 ₽ (вместо 149.000 ₽)

Для разработчиков и LLM-инженеров, которые хотят внедрять AI-логику в бэкенд и сохранять стабильность сервиса.

🎁 Математика для разработки AI-моделей — 23.990 ₽ (вместо 31.990 ₽)

Практическая база по математике для анализа данных, ML и дальнейшего развития в AI.

🎁 Математика для Data Science — от 29.990 ₽ (вместо 39.990 ₽)

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

🎁 ML для старта в Data Science — 28.990 ₽ (вместо 38.990 ₽)

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

🎁 Основы IT для непрограммистов — 16.990 ₽ (вместо 28.990 ₽)

Курс для IT-рекрутеров, маркетологов, проджектов, продактов и всех, кто работает с IT, но не пишет код.

🎁 Архитектуры и шаблоны проектирования — 27.990 ₽ (вместо 37.900 ₽)

Освоите основные паттерны проектирования и прокачаете навыки архитектора программного обеспечения.

🎁 Специалист по ИИ — 89.000 ₽ (вместо 113.900 ₽)

Курс для тех, кто хочет получить профессию в сфере ИИ, собрать портфолио из 5 проектов и научиться разрабатывать сложных AI-агентов.

🎁 Алгоритмы и структуры данных — 33.990 ₽ (вместо 57.990 ₽)

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

🎁 Программирование на языке Python — 27.990 ₽ (вместо 47.390 ₽)

Освоите Python на практике: без сухой теории, с пошаговой прокачкой навыков и итоговым проектом в портфолио.

🙌 Выбирайте курс по ссылке, оставляйте заявку, и менеджер поможет подобрать программу под ваши цели — https://clc.to/0z0fnQ
Post #7669 2.54K
🔧 Магия kubectl

Нужно быстро форварднуть порт сервиса из Kubernetes на localhost для отладки? kubectl port-forward — ваш туннель в кластер без Ingress, LoadBalancer и VPN.

🔹 Зачем это нужно

— Доступ к сервисам внутри кластера без внешнего endpoint-а.
— Подключение к БД, Redis, RabbitMQ для отладки прямо с рабочей машины.
— Не нужно менять конфиги, создавать NodePort или разворачивать Ingress.

🔹 Как использовать

— К поду: kubectl port-forward pod/my-pod 8080:80
— К сервису: kubectl port-forward svc/my-service 5432:5432
— К деплойменту: kubectl port-forward deploy/my-app 3000:3000
— Другой локальный порт: kubectl port-forward svc/postgres 15432:5432 (localhost:15432 → postgres:5432)
— Слушать на всех интерфейсах: kubectl port-forward --address 0.0.0.0 svc/my-service 8080:80

══════ Навигация ══════
Вакансии • Задачи • Собесы

🐸 Библиотека джависта

#Enterprise
  • 👍 5
  • ❤ 3
  • 🔥 1
Post #7668 2.99K
💥 «Clean Code» — самая переоценённая книга в индустрии

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

Uncle Bob написал набор рекомендаций, а индустрия превратила их в религию. «Метод не длиннее 5 строк». «Каждый класс — одна ответственность». «Имя должно быть самодокументирующим». Звучит красиво, а на практике:

— 47 приватных методов, каждый вызывается ровно один раз
— AbstractNotificationStrategyProviderFactory
— 6 слоёв абстракции ради эндпоинта, который возвращает список товаров
— Интерфейс с единственной реализацией «на будущее»

Такие проекты всегда «чистые». И на каждом из них новый разработчик тратит две недели, чтобы найти бизнес-логику.

Откройте исходники любого успешного фреймворка в вашей экосистеме. God-классы, методы на 80 строк, комменты «don't ask why». Работает, развивается, приносит деньги.

Моё мнение:

→ Код должен быть понятен через 6 месяцев. Не «чист» — а понятен.
→ Абстракция оправдана, когда у неё больше одной реализации прямо сейчас, а не «потенциально».
→ YAGNI важнее SOLID.

Книгу стоит прочитать, принять к сведению, понять фундаментальные основы. Но не применять подходы в каждом методе.

💬 Пишите в комменты Ваше мнение

🐸 Библиотека джависта

#DevLife
  • 👍 28
  • 😁 7
  • 💯 6
  • 🥱 4
Post #7667 2.63K
❓ Когда и как использовать var?

var добавили ещё в Java 10, чтобы облегчить жизнь. Но когда его лучше использовать, а когда стоит быть осторожнее?

Когда использовать:

🔵 Когда всё понятно с контекста: если тип переменной очевиден, то можно не писать лишнее

var list = new ArrayList<String>(); // Это список, и это сразу видно


🔵 Когда тип слишком громоздкий: если объявление слишком длинное и перегружает код, var упрощает задачу:

var map = new HashMap<String, List<Integer>>(); // Чисто и просто


🔵 Короткие методы: в небольших методах с чёткой логикой, var помогает сделать код компактнее и читабельнее.

А вот где лучше избегать:

🔵 Если тип неочевиден: когда сложно сразу понять, что это за переменная, лучше явно указать тип, чтобы не путать коллег.
var result = process(); // И что за процесс тут? 


Итог: var — непдохой инструмент, но используйте его с умом.

💬 Используете var в своих проектах?

══════ Навигация ══════
Вакансии • Задачи • Собесы

🐸 Библиотека джависта

#Enterprise
  • 👍 5
  • ❤ 2
  • 🔥 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →