Java for Beginner
742 subscribers
709 photos
201 videos
12 files
1.15K links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

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

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
📌 Факт дня:

А вы знали, что первый "цифровой голосовой чат" появился в 1995 году?

Программа VocalTec Internet Phone позволяла общаться голосом через интернет, используя модемы. Это был предшественник современных VoIP-сервисов, таких как Skype и Discord.


proof

#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🗓 История IT сегодня — 8 августа


ℹ️ Кто родился в этот день

Влади́мир Бори́сович Бете́лин (род. 8 августа 1946, Кинешма Ивановской области) — советский и российский учёный, академик РАН, специалист в области информационных технологий; разработал инструментальные системы программного обеспечения и прикладные графические системы (САПР).

Михаил Владимирович Донской (8 августа 1948 — 13 января 2009, Москва) — российский программист, один из авторов первой советской шахматной программы «Каисса»


🌐 Знаковые события

1973 — Первый микропроцессор в космосе (Pioneer Venus)
Начало использования микропроцессоров в космической технике.

1974 — DIY-компьютер Mark‑8
Публикация схемы одного из первых домашних ПК в Radio-Electronics. Этап на пути к персональным вычислениям.

1989 — Анонс Tandy PC
Компания Tandy Corporation начала продажи ПК под своим брендом, способствуя доступности компьютеров для массового пользователя.

1995 — IPO Netscape Communications
Одно из ключевых событий эры доткомов: популяризация браузеров и Интернета.

1999 — Представлен процессор AMD Athlon
Процессор стал прорывом в конкурентной гонке с Intel на рынке производительных CPU.

2004 — 1 миллион треков в iTunes Store
Apple достигла рубежа в 1 млн песен. Веха в развитии цифровой музыки и легальных медиаплатформ.


#Biography #Birth_Date #Events #8Августа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Интеграции, публикации в Gradle

Публикация артефактов

Gradle поддерживает публикацию артефактов (JAR, WAR, и т.д.) в репозитории с помощью плагина maven-publish.
maven-publish, publishing {}


Плагин maven-publish:
Позволяет публиковать артефакты в Maven-совместимые репозитории.

Пример (build.gradle):
plugins {
id 'java'
id 'maven-publish'
}
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
groupId = 'com.example'
artifactId = 'my-library'
version = '1.0.0'
}
}
repositories {
maven {
url 'https://nexus.example.com/repository/maven-releases'
credentials {
username = project.findProperty('nexusUsername')
password = project.findProperty('nexusPassword')
}
}
}
}


Kotlin DSL:
plugins {
java
`maven-publish`
}
publishing {
publications {
create<MavenPublication>("mavenJava") {
from(components["java"])
groupId = "com.example"
artifactId = "my-library"
version = "1.0.0"
}
}
repositories {
maven {
url = uri("https://nexus.example.com/repository/maven-releases")
credentials {
username = project.findProperty("nexusUsername") as String?
password = project.findProperty("nexusPassword") as String?
}
}
}
}


Команда публикации:
./gradlew publish


В памяти: Публикация загружает метаданные артефактов (POM-файлы, JAR) и зависимости в память, добавляя 50-100 МБ overhead. Сетевые операции для загрузки в репозиторий увеличивают время выполнения.


Нюансы:
Храните учетные данные в ~/.gradle/gradle.properties:
nexusUsername=myuser
nexusPassword=mypassword


Используйте HTTPS для безопасной публикации.


Подпись: GPG и signing

Плагин signing:
Добавляет подпись артефактов с помощью GPG для проверки их целостности.


Пример:
plugins {
id 'java'
id 'maven-publish'
id 'signing'
}
signing {
sign publishing.publications.mavenJava
}
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
}
}
}


Настройка GPG:

Установите GPG и сгенерируйте ключ:
gpg --gen-key


Настройте ~/.gradle/gradle.properties:
signing.keyId=12345678
signing.password=yourpassword
signing.secretKeyRingFile=/path/to/.gnupg/secring.gpg


В памяти: Подпись добавляет операции шифрования, увеличивая потребление памяти (10-50 МБ) и время выполнения задачи.


Нюансы:

Публикуйте публичный ключ в keyserver (например, gpg --send-keys 12345678).
Для Maven Central подпись обязательна.



Интеграция с Maven Central, Artifactory, Nexus

Maven Central:
Используйте плагин io.github.gradle-nexus.publish-plugin для упрощения публикации:
plugins {
id 'io.github.gradle-nexus.publish-plugin' version '1.3.0'
}
nexusPublishing {
repositories {
sonatype {
nexusUrl = uri('https://s01.oss.sonatype.org/service/local/')
snapshotRepositoryUrl = uri('https://s01.oss.sonatype.org/content/repositories/snapshots/')
username = project.findProperty('sonatypeUsername')
password = project.findProperty('sonatypePassword')
}
}
}


Команда:
 ./gradlew publishToSonatype closeAndReleaseRepository.


Artifactory:
Настройте репозиторий:
publishing {
repositories {
maven {
url 'https://artifactory.example.com/artifactory/libs-release'
credentials {
username = project.findProperty('artifactoryUsername')
password = project.findProperty('artifactoryPassword')
}
}
}
}


Nexus:
Аналогично Artifactory, укажите URL и учетные данные.

В памяти: Публикация в удаленные репозитории загружает метаданные и артефакты в память, а также выполняет сетевые операции, увеличивая overhead (50-200 МБ).


#Java #middle #Gradle #Task #integration
👍2
CI/CD

Gradle легко интегрируется с CI/CD системами, такими как Jenkins, GitLab CI и GitHub Actions, обеспечивая автоматизацию сборки, тестирования и публикации.

Gradle в Jenkins

Настройка:
Установите Gradle Plugin в Jenkins.

Создайте задачу с Gradle Wrapper:
./gradlew clean build --no-daemon


Настройте gradle.properties для CI:
org.gradle.jvmargs=-Xmx2048m
org.gradle.caching=true


В памяти: Используйте --no-daemon в CI, чтобы избежать постоянного процесса Gradle Daemon, экономя память (200-300 МБ).


GitLab CI

Пример
.gitlab-ci.yml:
stages:
- build
build:
stage: build
image: gradle:8.1-jdk11
script:
- ./gradlew clean build --no-daemon
cache:
paths:
- ~/.gradle/caches/
- ~/.gradle/wrapper/


В памяти: Кэширование ~/.gradle/caches между сборками снижает сетевые запросы, но требует дискового пространства.



GitHub Actions

Пример
 .github/workflows/build.yml:
name: Build
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: gradle/gradle-build-action@v2
with:
gradle-version: 8.1
- run: ./gradlew clean build --no-daemon


В памяти: GitHub Actions кэширует зависимости через gradle-build-action, минимизируя overhead.


Нюансы:
Используйте --no-daemon в CI для экономии памяти.

Включите Build Cache для ускорения:
buildCache {
local { enabled = true }
}


Публикуйте Build Scans для анализа CI-сборок.


Gradle Daemon и производительность

Gradle Daemon — это фоновый процесс, который сохраняет JVM между сборками для ускорения.

Включение:
По умолчанию включен.

Отключение:
./gradlew build --no-daemon.


Производительность:
Ускоряет повторные сборки, избегая инициализации JVM.
Поддерживает --parallel для параллельного выполнения задач.


В памяти: Daemon потребляет 200-300 МБ памяти в простое. Для крупных проектов может достигать 1-2 ГБ при активной сборке.


Нюансы:
Используйте --no-daemon в CI/CD, чтобы избежать утечек памяти.

Остановите Daemon:
 ./gradlew --stop.


Настройте память в gradle.properties:
org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m



Build Scan: анализ, оптимизация, диагностика


Build Scans — это веб-отчеты, предоставляющие детальную информацию о сборке.

Настройка:
plugins {
id 'com.gradle.build-scan' version '3.17.4'
}
buildScan {
termsOfServiceUrl = 'https://gradle.com/terms-of-service'
termsOfServiceAgree = 'yes'
}


Генерация:
./gradlew build --scan


Использование:
Анализ времени выполнения задач.
Выявление узких мест (медленные задачи, конфликты зависимостей).
Диагностика ошибок через логи и зависимости.


В памяти: Build Scan загружает метаданные сборки (граф задач, зависимости, время выполнения) в память, добавляя 50-100 МБ overhead. Данные отправляются на сервер Gradle Enterprise, требуя сетевых операций.


Нюансы:
Полезен для оптимизации CI/CD и крупных проектов.
Храните ссылки на Build Scans для командной работы.



#Java #middle #Gradle #Task #integration
👍4
Что выведет код?

public class Task080825 {
public static void main(String[] args) {
String s1 = "Java";
String s2 = "Java";
String s3 = new String("Java").intern();
String s4 = new String("Java");

System.out.println(
(s1 == s2) + " " +
(s1 == s3) + " " +
(s1.equals(s4)) + " " +
(s3 == s4)
);
}
}


#Tasks
👍1
Карточка для запоминания boolean 😎

#memory_card
👍3
Что такое marker interface? 🤓

Ответ:

Маркерный интерфейс
— это интерфейс без методов, используемый для пометки классов (например, Serializable, Cloneable). JVM или библиотеки используют его для специальной обработки.

Пример:
interface MyMarker {}
class MyClass implements MyMarker {}

Проверяется через instanceof для определения типа поведения.


#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🗓 История IT сегодня — 9 августа


ℹ️ Кто родился в этот день

Генна́дий Анато́льевич Звенигоро́дский (9 августа 1952 — 8 октября 1984) — советский математик и педагог, один из основателей школьной информатики в СССР, разработчик учебных языков и систем программирования для школ.

Ма́рвин Ли Ми́нский (англ. Marvin Lee Minsky; 9 августа 1927 — 24 января 2016) — американский учёный, пионер искусственного интеллекта, сооснователь Лаборатории ИИ MIT и лауреат премии Тьюринга.

Анатолий Иванович Китов (9 августа 1920, Самара — 14 октября 2005, Москва) — советский учёный, один из основателей кибернетики и информатики в СССР, разработчик первых ЭВМ.


🌐 Знаковые события

1995 — IPO Netscape Communications
9 августа 1995 года компания Netscape вышла на NASDAQ, открыв эпоху «доткомов» и революционизировав рынок веб-браузеров. Акции выросли с $14 до $71 в день выхода, что сделало IPO одним из крупнейших в истории рынка.

1991 — Первый email из космоса
Во время миссии шаттла Atlantis (STS-43) астронавты отправили первое электронное письмо из космоса, набрав сообщение через Mac Portable.

1910 — Патент на первый электрический стиральный автомат
9 августа 1910 года Олва Дж. Фишер получил патент на Thor — первую в истории полностью электрическую стиральную машину, заложив фундамент для будущих бытовых автоматов.

Computer Olympiad 1989
9-15 августа 1989 года в Лондоне прошла первая Computer Olympiad — международное соревнование программ-игр.

#Biography #Birth_Date #Events #9Августа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Введение в Nginx

Nginx (произносится как "engine x") — это высокопроизводительное программное обеспечение с открытым исходным кодом, выполняющее функции веб-сервера, обратного прокси-сервера, балансировщика нагрузки, TCP/UDP-прокси и почтового прокси-сервера. Созданное Игорем Сысоевым в 2004 году, оно распространяется под лицензией BSD из 2 пунктов. Nginx завоевал популярность благодаря своей скорости, стабильности и низкому потреблению ресурсов, что делает его выбором для многих высоконагруженных сайтов, таких как Netflix, Dropbox, Яндекс и ВКонтакте.

Согласно данным W3Techs (по состоянию на апрель 2025 года), Nginx занимает первое место среди веб-серверов, обслуживая 33,8% всех веб-сайтов, опережая Apache (26,4%) и Cloudflare Server (23,4%). Это подчеркивает его широкое признание и надежность.


Как работает Nginx?

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

Основные аспекты его работы включают:
Один основной процесс и несколько рабочих процессов: Основной процесс управляет конфигурацией и координирует работу, а рабочие процессы обрабатывают запросы пользователей. Это снижает накладные расходы по сравнению с многопоточной моделью, используемой, например, в Apache.
Механизмы событий: Nginx поддерживает такие технологии, как kqueue (FreeBSD), epoll (Linux) и другие, для эффективной обработки сетевых соединений.
Оптимизация передачи данных: Использование технологий, таких как sendfile и асинхронный ввод/вывод (AIO), минимизирует копирование данных и ускоряет доставку контента.
Низкое потребление памяти: Например, для 10 000 неактивных HTTP keep-alive соединений требуется всего около 2,5 МБ памяти.

Запросы пользователей разбиваются на небольшие сетевые соединения, которые обрабатываются асинхронно. После обработки они собираются в единый ответ и отправляются клиенту. Одно соединение может обрабатывать до 1024 запросов, что значительно повышает производительность.


Для чего нужен Nginx?

Nginx универсален и применяется в различных сценариях:
Веб-сервер
Обслуживает статический контент (HTML, CSS, изображения, JavaScript) с высокой скоростью.


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


Балансировка нагрузки
Распределяет входящий трафик между несколькими серверами для повышения отказоустойчивости.


Кеширование
Сохраняет часто запрашиваемый контент для ускорения доставки.


Почтовый прокси
Поддерживает протоколы IMAP, POP3, SMTP с возможностью аутентификации через HTTP.


Безопасность
Поддерживает SSL/TLS, ограничение доступа по IP и защиту от DDoS-атак.


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


Почему выбрать Nginx?

Nginx выделяется среди других веб-серверов, таких как Apache, по нескольким причинам:
Высокая производительность: Асинхронная архитектура позволяет обрабатывать больше запросов с меньшими ресурсами.
Эффективность для статического контента: Nginx быстрее Apache в доставке статических файлов, таких как изображения и CSS.
Модульная архитектура: Легко расширяется с помощью модулей для добавления новых функций.
Низкое потребление ресурсов: Минимизирует использование памяти и процессора, что идеально для серверов с ограниченными ресурсами.
Широкое применение: Используется крупными компаниями, такими как Netflix, Dropbox и
WordPress.com, что подтверждает его надежность.

Nginx также может работать в связке с Apache: Nginx обрабатывает статический контент, а Apache — динамический, что оптимизирует производительность сайта.


#Java #middle #on_request #nginx
👍6🔥3
Простая установка Nginx на Ubuntu

Установка Nginx на Ubuntu проста и занимает всего несколько минут.


Обновите списки пакетов:
sudo apt update

Эта команда обновляет индекс пакетов для системы управления пакетами apt.


Установите Nginx:
sudo apt install nginx

Подтвердите установку, нажав Y и Enter, когда система запросит разрешение.


Запустите Nginx:
sudo systemctl start nginx

Эта команда запускает веб-сервер.



Включите автозапуск Nginx:

sudo systemctl enable nginx

Это гарантирует, что Nginx будет запускаться автоматически при перезагрузке системы.


Проверьте статус Nginx:
sudo systemctl status nginx

Если в выводе указано active (running), сервер работает корректно.


Для настройки брандмауэра (если используется ufw) разрешите HTTP-трафик:
sudo ufw allow 'Nginx HTTP'
sudo ufw status


Демонстрация работы Nginx
После выполнения вышеуказанных шагов откройте веб-браузер и введите IP-адрес вашего сервера (например, http://your_server_ip). Вы увидите стандартную страницу приветствия Nginx.
Эта страница подтверждает, что Nginx установлен и функционирует корректно. Если страница не отображается, проверьте статус сервера и настройки брандмауэра.

#Java #middle #on_request #nginx
👍5🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Я и моя команда начинаем новый проект

#mems
🔥1🤓1
Есть предложение встретиться завтра в 16:00 по МСК на лайвкодинг!

Будем изучать дальнейшее тестирование в Spring - Как тестировать API.
Anonymous Poll
33%
О! Я приду! 👌
20%
Я хотел(а) б, но не могу)((( 🤷‍♀️
43%
Я посмотрю в записи! ❤️
3%
Нет, мне это не интересно 👎
👍5
Всем привет! 👋

Приглашаю всех желающих сегодня собраться в Яндекс.Телемост в 16:00 по МСК!

В этот раз мы продолжим рассматривать тестирование в Spring.

Приходите, это хороший шанс позадавать вопросы 🧑‍💻

Как всегда жду всех! 🫡
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🗓 История IT сегодня — 10 августа


ℹ️ Кто родился в этот день

Ян Райчман (10 августа 1911) — английский инженер, внёсший важный вклад в разработку электронных вычислительных машин (в частности — трубчатой памяти «Selectron» для проекта Дж. фон Неймана)


🌐 Знаковые события

1937 — Клод Шеннон защитил магистерскую диссертацию
10 августа 1937 года Клод Шеннон подал магистерскую работу «Символьный анализ релейно-переключательных цепей» в MIT — один из основополагающих трудов, положивших теоретическую основу цифровых вычислений и теории информации.

1937 — Патент на электрогитару (Rickenbacker “Frying Pan”)
Патент № 2 089 171 зарегистрирован 10 августа 1937 года, что символически стало началом электроники в музыкальной технике — косвенно влиятельной в развитии цифрового звука и технологий музыкального I/O

#Biography #Birth_Date #Events #10Августа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Молчаливые разработчики ломают проект быстрее, чем баги.

Представь - ты уже в команде.
На дейли предложили новый паттерн разработки который априори должен все улучшить.
Но ты точно знаешь, что это не сработает, так как ты вчера это пробовал в пет-проекте.

И ты промолчал, потому что "ну, я же джун, что я понимаю"? Или "они же специалисты им виднее, зачем я буду спорить?".

И через неделю команда всё переделывает с нуля...

Так вот, молчание — это не "мир в команде".

Это приглашение к ошибке.

А умение спорить — это один из важнейших навыков в разработке, особенно в командных проектах.


🔴Почему конфликты не всегда зло

В психологии есть понятие когнитивный конфликт (cognitive conflict) — это когда люди спорят о идеях, подходах и решениях, а не о том, "кто дурак".

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

Исследования показывают, что такие споры:
Повышают качество решений
Ускоряют поиск оптимального подхода
Помогают видеть проблему под разными углами

А вот эмоциональный конфликт (affective conflict) — это уже про личные обиды, сарказм и переход на личности.


Он действительно убивает команду.



🔴Почему это особенно важно в разработке

В Agile-командах решения часто принимаются на лету, и от твоей способности спорить грамотно зависит:
Будет ли проект работать через месяц
Или вы перепишете половину кода, потому что ты знал, что это не работает так, но постеснялся сказать.


Кроме того, в IT очень легко спрятаться за ноутбуком и не влезать в дискуссии. Но тогда твой вклад будет минимальным, даже если ты реально видишь лучшее решение.


Некоторых останавливает и неуверенность, даже если точно знают что решение верное. Потому что порицание за неверное решение пройдет мимо как и поощрение.


🔴Как спорить так, чтобы не сгорели мосты

Отделяй идею от человека
😔
Говори «Подход X не подходит, потому что…», а не "Ты написал ерунду".
Это снижает вероятность перехода в эмоциональный конфликт
.

Используй вопросы вместо утверждений
😉
Вместо «Это плохо» → "А что если попробовать так? Какие риски?"

Подкрепляй примерами или данными 🤓
В IT спор выигрывает не громкость голоса, а аргумент в виде теста, логов или статистики.

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


🔴 Почему этот soft skill один из важнейших?

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


В команде разработчиков побеждает не тот, кто всегда прав, а тот, кто умеет спорить так, что выигрывает команда, проект и бизнес.



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

😎

#motivation
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3