Java for Beginner
743 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
Что выведет код?

public class Task290825 {
public static void main(String[] args) {
try {
System.out.print("A");
int result = 10 / 0;
System.out.print("B");
} catch (Exception e) {
System.out.print("C");
} finally {
System.out.print("D");
}
System.out.print("E");
}
}


#Tasks
👍2
Варианты ответа:
Anonymous Quiz
67%
ACDE
3%
ABDE
15%
ACD
15%
ADE
👍4
Вопрос с собеседований

Что такое composition vs aggregation в деталях? 🤓

Ответ:

Оба — отношения "has-a":

Composition: сильная зависимость, часть не существует без целого (например, комнаты в доме). Уничтожение дома уничтожает комнаты.
Aggregation: слабая зависимость, часть может существовать отдельно (например, студенты в классе).

Пример composition:
class House {

private List<Room> rooms = new ArrayList<>();

} // Rooms depend on House

Composition подразумевает ownership, aggregation — reference.


#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🗓 История IT-технологий сегодня — 30 августа


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

Джон Уильям Мокли (англ. John William Mauchly, в русскоязычной литературе фамилия также транскрибируется как «Моучли») (30 августа 1907 года, Цинциннати, Огайо — 8 января 1980 года, Амблер, Пенсильвания) — со-создатель ENIAC/EDVAC; один из родоначальников электронных цифровых вычислений.

Гордон Стэнли Браун (30 августа 1907 г., Австралия — 23 августа 1996 г., Тусон, Аризона) — профессор MIT, внёс вклад в теорию управления и развитие цифровых вычислительных систем в инженерии.


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

1901английский изобретатель Хьюберт Сесил Бут (Hubert Cecil Booth) запатентовал электрический пылесос.

1995Йон Стефенсон фон Течнер и Гейр Иварсёй создали компанию Opera Software, которая продолжила разработку браузера. Этот день разработчики считают «днём рождения» Opera.

2001 — суд в Сан-Хосе официально выдвинул обвинение против российского программиста Дмитрия Склярова и московской компании «Элкомсофт», обвиняемых в снятии защиты с коммерческих продуктов фирмы Adobe.


#Biography #Birth_Date #Events #30Августа
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Введение в NoSQL базы данных

Что такое NoSQL и почему они появились

NoSQL базы данных — это нереляционные системы, которые хранят информацию не в табличной форме. Они возникли в 2000-х годах благодаря компаниям вроде Google и Amazon, чтобы обрабатывать петабайты данных в распределенных системах. В отличие от реляционных баз, как MySQL или PostgreSQL, NoSQL не требуют предопределенной схемы данных, что упрощает разработку и изменения.

Отличия от реляционных баз

Реляционные базы используют таблицы, где данные организованы в строки и столбцы с отношениями через ключи. Они следуют ACID-принципам: атомарность (все или ничего), согласованность, изоляция и долговечность. NoSQL, напротив, часто следуют BASE-модели: базовая доступность, мягкое состояние и eventual consistency. Это значит, что данные могут быть временно несогласованными, но система всегда доступна. NoSQL лучше масштабируется горизонтально, добавляя дешевые серверы, в то время как SQL — вертикально, улучшая один сервер.

Что такое NoSQL базы данных?

NoSQL (от "not only SQL") — это класс баз данных, которые не придерживаются строгой реляционной модели. В отличие от классических баз, где данные хранятся в таблицах с фиксированными столбцами и строками, NoSQL позволяют работать с данными в более естественной форме. Термин "NoSQL" появился в конце 1990-х, но настоящий бум пришелся на 2000-е годы благодаря компаниям вроде Google (с их BigTable) и Amazon (Dynamo). Эти системы предназначены для обработки огромных объемов данных в распределенных средах, где традиционные базы дают сбой из-за масштаба.

NoSQL фокусируются на горизонтальной масштабируемости (sharding — разделение данных по серверам) и отказоустойчивости. Они часто реализуют распределенные архитектуры с репликацией (копированием данных на несколько узлов), что обеспечивает высокую доступность. Однако это требует понимания trade-off'ов, таких как потеря строгой consistency в пользу availability, как описано в CAP-теореме Эрика Брюера: в распределенной системе можно гарантировать только два из трех свойств — Consistency (согласованность), Availability (доступность) и Partition tolerance (устойчивость к разделению сети). Большинство NoSQL выбирают AP (availability + partition tolerance), жертвуя immediate consistency.


Где применяются NoSQL базы данных

NoSQL shine в сценариях с высокой нагрузкой и разнообразными данными. Они доминируют в web 2.0 и cloud-native приложениях.

- Big Data и аналитика: Для обработки петабайт данных, как в Hadoop-экосистемах. Пример: HBase для хранения логов в Facebook.
- Реал-тайм приложения: Социальные сети (Twitter использует Cassandra для timeline), рекомендации (Netflix с DynamoDB-подобными системами).
- IoT и сенсорные данные: Миллионы устройств генерируют неструктурированные данные; NoSQL справляется с velocity (скоростью поступления).
- E-commerce: Управление каталогами, сессиями, корзинами. Amazon DynamoDB для Black Friday трафика.
- Мобильные и гейминг apps: Redis для лидербордов, MongoDB для пользовательских профилей.
- Контент-менеджмент: CMS вроде WordPress на MongoDB для динамического контента.


В микросервисах NoSQL поддерживает polyglot persistence — разные сервисы используют разные базы. Например, key-value для caching в Redis, graph для fraud detection в Neo4j. Учитывайте latency: NoSQL часто использует in-memory storage для sub-millisecond отклика, но требует мониторинга quorum (кворума реплик) для consistency. В hybrid подходах сочетают SQL для транзакций и NoSQL для scale-out.


#Java #middle #on_request #no_sql_db
👍7
Основные типы и виды NoSQL баз

NoSQL классифицируют по модели данных. Вот четыре основных типа с примерами и применениями.

1. Key-Value stores (хранилища ключ-значение)

Самые простые, как словарь в Python. Ключ — уникальный идентификатор, значение — любой blob данных (строка, объект). Нет сложных запросов, только get/set по ключу.
- Преимущества: Высокая скорость, простота, отличны для caching.
- Недостатки: Нет поддержки сложных поисков без индексов.
- Примеры: Redis (in-memory, поддерживает pub/sub), Amazon DynamoDB (managed, с auto-scaling).
- Применения: Сессии пользователей, временные данные, как в онлайн-играх.


2. Document stores (документные базы)

Хранят данные как документы (JSON, BSON, XML). Каждый документ — самодостаточный, с вложенными структурами.
- Преимущества: Гибкость, естественное маппинг на объекты в коде, поддержка индексов и aggregation.
- Недостатки: Могут быть неэффективны для глубоких joins.
- Примеры: MongoDB (с MQL-запросами, sharding), CouchDB (фокус на replication для offline-first apps).
- Применения: CMS, e-commerce каталоги, где схема эволюционирует.


3. Column-family stores (столбцовые или wide-column базы)

Данные в таблицах, но столбцы динамические и группируются в семьи. Эффективны для sparse data (много null).
- Преимущества: Масштабируемость для write-heavy нагрузок, compression столбцов.
- Недостатки: Сложные для ad-hoc запросов.
- Примеры: Apache Cassandra (ring-архитектура, tunable consistency), HBase (на Hadoop, для time-series).
- Применения: Логи, аналитика, социальные фиды.


4. Graph databases (графовые базы)

Данные как узлы (nodes), ребра (edges) и свойства. Идеальны для traversal (проход по связям).
- Преимущества: Быстрые запросы на отношения (e.g., "друзья друзей"), алгоритмы вроде shortest path.
- Недостатки: Меньше подходит для простых CRUD.
- Примеры: Neo4j (Cypher язык, ACID-транзакции), ArangoDB (multi-model, сочетает document+graph).
- Применения: Социальные сети, рекомендации, knowledge graphs в AI.


#Java #middle #on_request #no_sql_db
👍6
Предлагаем темы для разбора и публикации! 📖

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

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

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

Жду Ваших предложений! 👏
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Выбираем темы для рассмотрения в следующие выходные! 🤨
Anonymous Poll
28%
AOP
15%
Введение в Camunda
31%
Введение в Kubernetes
26%
Введение в реактивное программирование в Java
👍1
🗓 История IT-технологий сегодня — 31 августа


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

Уиллис Уэр (31 августа 1920 г. Атлантик-Сити, Нью-Джерси – 22 ноября 2013 г. Санта-Моника, Калифорния) — повлиял на многие аспекты вычислений, включая инициирование и направление одного из первых компьютерных курсов в UCLA и автором некоторых из первые учебники в области компьютерной безопасности. Кроме того, он возглавлял несколько влиятельных исследований, в том числе одно, проведенное в 1967 году, в результате которого был подготовлен новаторский и трансформирующий отчет для Совета по оборонным наукам для ARPA (ныне DARPA ), который впоследствии был известен как «The Ware Report. "

Жан-Даниэль Нико (родился 31 августа 1938 года) — швейцарский пионер вычислительной техники и робототехники, автор ранних оптических мышей и учебных роботов.


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

1966 — В Нью-Йорке начался первый шахматный турнир между компьютерами. За три года до этого состоялся матч между советскими и американскими электронными шахматистами, в котором победила советская сторона. В 1974 году уже прошёл первый чемпионат мира, в котором победу также одержала советская программа «Каисса».


#Biography #Birth_Date #Events #31Августа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Предлагаю сегодня собраться! Пообсуждать наболевшее и просто интересное. Часиков в 16 по МСК
Anonymous Poll
73%
Да я приду поболтать) 👍
9%
Не, не интересно 🗿
18%
Как я оказался в этой группе? 😱
👍1
Трекер времени: кандалы или инструмент свободы?


Сегодня будет наверно не мотивационная статья, а больше статья - размышление...

Намедни в одном из созвонов с HR, мне предложили работу с трекером времени.
Скажу сразу, опыта работы с подобным у меня не было и я глубоко задумался, а каково это вообще?

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



Условия которые мне предложили

Самый важный вопрос на котором девушка с милым голосом решила остановиться - а готов ли я вообще работать с трекером.
И это оказалось наверно самым сложным.
Я конечно безапелляционно соврал, что да. Но внутри все вопило - "БЕЖИМ, бл" 😂. Все таки интересно послушать условия.


Итак, что такое трекер:
- На Вашу или выданную компанией машину, устанавливается приложение в котором Вы при начале работы запускаете и при окончании отключаете трекинг.
- Руководитель и заинтересованные лица имеет к нему доступ.
- Кроме того оно в рандомном режиме делает скриншоты вашего экрана (тут от HR последовал рассказ о пойманных работников - обманщиков, но не тех кто писал код с LLM
😂)
- Включать и выключать трекинг рабочего времени можно в любое удобное для Вас время, главное чтобы по итогу в месяц набралось необходимое количество часов.


Трекает и скриншотит ли все остальное время это приложения - история умалчивает.


Затравка для размышлений


На мой взгляд, программист — не кассир и не водитель такси. Его работа творческая, её практически невозможно измерить только часами. Как будет считаться время на поиск "красивого", а не быстрого решения?
Ведь это окажется субъективной оценкой руководителя, на основе которой могут и уволить.

А что если я включил трекер и читаю книгу, к примеру по Спрингу? Работаю? - работаю. Видно результаты? - нет
🤣. Докажите обратное? Но в трудовом кодексе нет презумпции невиновности. Решит руководитель, что ты бездельничал - и здравствуй HH.

И понятно, что "Кампания" требует цифр: менеджеру нужны отчёты, заказчику — бюджеты, компании — предсказуемость и возможность рассчитать время на ту или иную фичу. И тотальный контроль по сути может это значительно ускорить.


Отсюда вопросы которые у меня возникли:
🔜 трекинг времени - это инструмент контроля или инструмент развития?
🔜 насколько законно увольнение на основе трекера?
🔜 и кто вообще согласен на такое?

HR конечно пыталась убедить меня, что к этому быстро привыкаешь, что еще никого не уволили за бездельничество и в целом никто не смотрит на результаты трекера, а важны лишь результаты работы.

Но отчего-то я ей не поверил...



Плюсы и минусы работы с трекером для разработчика


Осознанность: видишь, куда реально утекает твой день. Иногда полдня жрут встречи и попытка понять документацию.
Фокус: легче отслеживать прокрастинацию и возвращать себя в работу, потому, что помнишь о надзоре.
Данные для переговоров: если лид говорит почему так долго - у тебя есть история: вот 12 часов тестов и багфиксов.



Давление и стресс: ощущение, что за тобой следят каждую минуту. Убивает.
Фальшивая эффективность: начинаешь набивать часы, а не реально решать задачи.
Творчество под рубильник: сложно засечь, сколько времени ушло на придумку архитектуры или рефакторинг.
Неформальные задачи теряются: созвоны, менторство, обсуждения коллег — вроде бы работа, а в трекере пустота.



В целом для себя я решил, что пойду работать с трекером только если совсем прижмет.

И для каждого на самом деле это наверно личный выбор.

Кому - то не страшны скриншоты рабочего экрана, так как он честный и трудолюбивый 😏
А кто-то (как сказала HR) - "привык работать по 3 часа и нам такие не нужны!". Вот же негодник какой
😄

А что касается законности, читайте договор, должностную инструкцию или внутренний регламент:
Если компания документально закрепила за вами обязанность фиксировать время и его не нарушать, ознакомила под подпись, то в этом случае уволить могут за систематическое неисполнение обязанностей (ст. 81 ТК РФ).

А что вы думаете об этом?

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

😎

#motivation
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍2👎1
Всем привет! 👋

Ссылка на встречу как всегда у бота!

Залетайте
✈️

@JFB_admin_bot
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
🗓 История IT-технологий сегодня — 1 сентября


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

Я́ков Леони́дович Шра́йберг (род. 1 сентября 1952, Житомир, УССР) — российский специалист по библиотечно-информационным технологиям, один из драйверов цифровых библиотек и ИТ-инфраструктур для науки и образования.

Майкл Озер Рабин ( иврит : מִיכָאֵל עוזר רַבִּין ; родился 1 сентября 1931 года) — лауреат премии Тьюринга; внес фундаментальный вклад в теорию автоматов, вероятностные алгоритмы и криптографию.


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

1982 — запуск Commodore 64. Легендарный домашний компьютер, сыгравший ключевую роль в популяризации домашних ПК и программирования.

1992 — релиз Super Mario Kart в Северной Америке (SNES). Культовая гоночная игра, которая стала одной из самых продаваемых на SNES и штурмовала жанр аркадных гонок.

1994 — «Virtual Library» (Библиотека Конгресса США). Библиотека Конгресса США начинает проект виртуальной библиотеки — один из первых в мире масштабных цифровых архивов онлайн, важная веха в развитии электронных библиотек и доступа к знаниям.


#Biography #Birth_Date #Events #01Сентября
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Основы ООП в Java

Глава 4. Полиморфизм

Поведение через суперкласс и интерфейс


Полиморфизм (от греч. "много форм") — это способность объектов разных классов отвечать на один и тот же вызов метода по-разному. Это ключевой принцип ООП, который делает код гибким и расширяемым: вы можете работать с объектами через общий тип, не зная их конкретного класса.

Типы полиморфизма в Java:
Compile-time (статический): Через перегрузку методов (overloading) — выбор метода на этапе компиляции.
Runtime (динамический): Через переопределение методов (overriding) — выбор на этапе выполнения, основан на типе объекта.



Поведение через суперкласс: Наследование и overriding

Через суперкласс полиморфизм достигается, когда подкласс переопределяет методы суперкласса. Ссылка суперкласса может указывать на объект подкласса, и вызов метода выполнит версию подкласса (динамическая диспетчеризация).

Пример
// Animal.java
public class Animal {
protected String name;

public Animal(String name) {
this.name = name;
}

public void makeSound() {
System.out.println(name + " издает звук.");
}
}

// Dog.java
public class Dog extends Animal {
public Dog(String name) {
super(name);
}

@Override
public void makeSound() {
System.out.println(name + " лает: Гав!");
}
}

// Cat.java (еще один подкласс)
public class Cat extends Animal {
public Cat(String name) {
super(name);
}

@Override
public void makeSound() {
System.out.println(name + " мяукает: Мяу!");
}
}


Теперь полиморфизм в действии:
public class Main {
public static void main(String[] args) {
Animal animal1 = new Dog("Шарик"); // Ссылка Animal на объект Dog
Animal animal2 = new Cat("Мурка"); // Ссылка Animal на объект Cat

animal1.makeSound(); // Вывод: Шарик лает: Гав! (версия Dog)
animal2.makeSound(); // Вывод: Мурка мяукает: Мяу! (версия Cat)
}
}

Здесь Animal animal1 = new Dog("Шарик"); Тип ссылки — Animal (статический тип), тип объекта — Dog (динамический тип).
Вызов makeSound(): JVM смотрит на динамический тип и вызывает переопределенную версию.


Нюанс: Если метод не переопределен, вызовется версия суперкласса.

Это позволяет писать общий код:

например, массив Animal[] animals = {new Dog(), new Cat()}; и цикл for (Animal a : animals) a.makeSound(); — каждый издаст свой звук.


Поведение через интерфейс: Implements и полиморфизм

Интерфейс — это контракт, определяющий методы без реализации. Полиморфизм через интерфейсы достигается, когда классы реализуют (implements) интерфейс, предоставляя свою реализацию. Ссылка интерфейса может указывать на любой реализующий объект.

Синтаксис:
public interface InterfaceName { void method(); }


Класс:
public class ClassName implements InterfaceName { @Override public void method() { ... } }


Пример интерфейса SoundMaker:
public interface SoundMaker {
void makeSound(); // Абстрактный метод
}


Теперь классы реализуют его:
// Dog.java (теперь implements SoundMaker, без extends для простоты)
public class Dog implements SoundMaker {
private String name;

public Dog(String name) {
this.name = name;
}

@Override
public void makeSound() {
System.out.println(name + " лает: Гав!");
}
}

// Cat.java
public class Cat implements SoundMaker {
private String name;

public Cat(String name) {
this.name = name;
}

@Override
public void makeSound() {
System.out.println(name + " мяукает: Мяу!");
}
}


Полиморфизм:
public class Main {
public static void main(String[] args) {
SoundMaker sound1 = new Dog("Шарик"); // Ссылка интерфейса на Dog
SoundMaker sound2 = new Cat("Мурка");

sound1.makeSound(); // Шарик лает: Гав!
sound2.makeSound(); // Мурка мяукает: Мяу!
}
}


Интерфейс обеспечивает полиморфизм без наследования: классы не связаны иерархией, но объединены контрактом.


#Java #для_новичков #beginner #poliphormizm
👍6
Нюансы полиморфизма через суперкласс и интерфейс

Статический vs динамический тип:
Статический: Тип ссылки (Animal a) — проверяется на компиляции.
Динамический: Тип объекта (new Dog()) — определяет метод на runtime.
Нюанс: Для полей — статический тип (field hiding), для методов — динамический.


Перегрузка vs переопределение:
Перегрузка: Compile-time, разные сигнатуры.
Переопределение: Runtime, одинаковые сигнатуры.


Интерфейсы vs абстрактные классы:
Интерфейсы: Только абстрактные методы (до Java 8), множественная реализация.
Суперклассы: Могут иметь реализацию, состояние, одиночное наследование.


Ошибки:
Если метод не переопределен: Вызов супер/интерфейс версии (или ошибка, если abstract).
Несовместимая сигнатура: Не overriding, а новый метод.
@Override помогает ловить ошибки.

Полиморфизм в коллекциях:
List list = new ArrayList<>(); list.add(new Dog()); — затем цикл по list с вызовом makeSound().

Ограничения:
Private/final/static методы: Не участвуют в полиморфизме.
Конструкторы: Не полиморфны.



Как создать это в IntelliJ IDEA

Создайте интерфейс: New → Interface → SoundMaker.
Implements: В классе Dog: extends/implements, IDE подскажет override.
Полиморфизм: В Main создайте ссылки и протестируйте.



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

Используйте полиморфизм для обобщения: Пишите код для супер/интерфейса, добавляйте подклассы без изменений.
@Override всегда: Избегайте ошибок.
Интерфейсы для контрактов: Когда нужно поведение без состояния.
Ресурсы: Oracle Tutorials on Polymorphism.



#Java #для_новичков #beginner #poliphormizm
👍3🔥2