Предлагаем темы для разбора и публикации! 📖
В комментариях к данному посту предлагайте вопросы, которые вы хотели бы увидеть максимально подробно разобранными в постах, а если будет интересно то и на видео.
Голосование будет проводиться всю неделю, а статья или видео - выходить по выходным.
Примерные правила:
🟢 темы, не выше уровня middle, чтоб был интерес общим.
🟢 Один человек - одна тема.
🟢 Тема должна быть отдельным теоретически-практическим вопросом. Готовый проект - это не тема!
Жду Ваших предложений!👏
В комментариях к данному посту предлагайте вопросы, которые вы хотели бы увидеть максимально подробно разобранными в постах, а если будет интересно то и на видео.
Голосование будет проводиться всю неделю, а статья или видео - выходить по выходным.
Примерные правила:
Жду Ваших предложений!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Выбираем темы для рассмотрения в следующие выходные! 🤨
Anonymous Poll
44%
IO/NIO
15%
AOP
33%
OkHttp
7%
HATEOAS
👍3
А вы знали, что изначально компьютерный "курсор мыши" был стрелкой направленной вертикально вверх?
Когда исследовательское подразделение Palo Alto, принадлежавшее Xerox, начало разрабатывать персональные компьютеры с мышью, инженер Xerox Дуглас Энгельбарт решил сделать курсор удобнее. Он наклонил стрелку примерно на 45 градусов — так она стала выделяться среди остального текста, расположенного строго вертикально. А наклон влево обусловлен тем, что большинство людей — правши, хотя сейчас это можно легко поменять.
Proof
#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
"Технологии меняют не только экономику, но и человеческую природу."
Александр Аузан, экономист, сказал это в 2017 году на форуме "Открытые инновации" в Москве.
Биография
#Citation #Biography
Please open Telegram to view this post
VIEW IN TELEGRAM
Wikipedia
Аузан, Александр Александрович
российский экономист
👍1
Базовый синтаксис Java.
Структура простой программы
Классы в Java: синтаксис и структура
Java — строго объектно-ориентированный язык, и класс является его основной строительной единицей. Классы определяют форму объектов, объединяя состояние (поля) и поведение (методы).
1. Что такое класс в Java?
Класс в Java — это шаблон, по которому создаются объекты.
Он определяет:
Поля (переменные экземпляра) — для хранения состояния объекта.
Конструкторы — для создания и инициализации объектов.
Методы — для описания поведения (в этом уроке мы их не рассматриваем).
Вложенные классы — если нужно логически сгруппировать поведение.
Блоки инициализации — для дополнительной логики во время загрузки или создания объекта.
Каждый объект — это экземпляр класса, имеющий собственное состояние (значения полей) и поведение (определённое методами).
2. Минимальная структура класса
Пример базового класса:
Структурные элементы:
class: ключевое слово для объявления класса.
ClassName: имя класса.
{}: тело класса.
В одном .java файле может быть несколько классов, но только один — public, и его имя должно совпадать с именем файла.
3. Поля класса
Поля определяют внутреннее состояние объектов и объявляются внутри класса, но вне методов или конструкторов.
Синтаксис:
Пример:
Виды полей:
Поля экземпляра — принадлежат каждому объекту.
Статические поля — общие для всех экземпляров, принадлежат самому классу.
Инициализация:
Поля экземпляра могут инициализироваться:
При объявлении;
В блоке инициализации;
В конструкторе.
4. Конструкторы
Конструктор — специальный блок кода, вызываемый при создании объекта с помощью new. Имя конструктора совпадает с именем класса, он не имеет возвращаемого значения.
Синтаксис:
Пример:
Особенности:
Если ни один конструктор не определён, компилятор автоматически добавляет конструктор без параметров.
При наличии хотя бы одного конструктора — компилятор ничего не добавляет автоматически.
Ключевое слово this используется для:
обращения к полям экземпляра;
вызова другого конструктора внутри класса.
Пример использования this:
#Java #для_новичков #beginner #java_syntax #Class
Структура простой программы
Классы в Java: синтаксис и структура
Java — строго объектно-ориентированный язык, и класс является его основной строительной единицей. Классы определяют форму объектов, объединяя состояние (поля) и поведение (методы).
1. Что такое класс в Java?
Класс в Java — это шаблон, по которому создаются объекты.
Он определяет:
Поля (переменные экземпляра) — для хранения состояния объекта.
Конструкторы — для создания и инициализации объектов.
Методы — для описания поведения (в этом уроке мы их не рассматриваем).
Вложенные классы — если нужно логически сгруппировать поведение.
Блоки инициализации — для дополнительной логики во время загрузки или создания объекта.
Каждый объект — это экземпляр класса, имеющий собственное состояние (значения полей) и поведение (определённое методами).
2. Минимальная структура класса
class ClassName {
// Поля
// Конструкторы
// Вложенные классы
// Блоки инициализации
}
Пример базового класса:
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
void introduce() {
System.out.println("Меня зовут " + name + ", мне " + age + " лет.");
}
}
Структурные элементы:
class: ключевое слово для объявления класса.
ClassName: имя класса.
{}: тело класса.
В одном .java файле может быть несколько классов, но только один — public, и его имя должно совпадать с именем файла.
3. Поля класса
Поля определяют внутреннее состояние объектов и объявляются внутри класса, но вне методов или конструкторов.
Синтаксис:
Тип имяПоля;
Тип имяПоля = начальноеЗначение;
Пример:
class Car {
String model; // Поле экземпляра
int speed = 0; // Поле с начальным значением
static int totalCars = 0; // Статическое поле
}
Виды полей:
Поля экземпляра — принадлежат каждому объекту.
Статические поля — общие для всех экземпляров, принадлежат самому классу.
Инициализация:
Поля экземпляра могут инициализироваться:
При объявлении;
В блоке инициализации;
В конструкторе.
4. Конструкторы
Конструктор — специальный блок кода, вызываемый при создании объекта с помощью new. Имя конструктора совпадает с именем класса, он не имеет возвращаемого значения.
Синтаксис:
ClassName(параметры) {
// Инициализация объекта
}
Пример:
class Student {
String name;
int grade;
Student(String name, int grade) {
this.name = name;
this.grade = grade;
}
Student() {
this("Unknown", 0); // Вызов другого конструктора
}
}
Особенности:
Если ни один конструктор не определён, компилятор автоматически добавляет конструктор без параметров.
При наличии хотя бы одного конструктора — компилятор ничего не добавляет автоматически.
Ключевое слово this используется для:
обращения к полям экземпляра;
вызова другого конструктора внутри класса.
Пример использования this:
class Book {
String title;
Book(String title) {
this.title = title;
}
}
#Java #для_новичков #beginner #java_syntax #Class
👍3
5. Вложенные классы
Классы могут быть определены внутри других классов. Это удобно для логического объединения компонентов.
Виды вложенных классов:
Статический вложенный класс (static)
Внутренний класс (нестатический)
Локальный класс (внутри метода)
Анонимный класс (без имени, создаётся на лету)
Пример статического вложенного класса:
Пример внутреннего класса:
Создание экземпляров:
6. Блоки инициализации
Блоки инициализации выполняются перед выполнением конструктора.
Существуют два вида:
Экземплярный блок - выполняется каждый раз при создании объекта, до конструктора.
Статический блок - выполняется один раз при загрузке класса в память (JVM).
Порядок инициализации:
Статические поля → статические блоки (в порядке появления).
Поля экземпляра → блоки экземпляра → конструктор (в порядке появления в коде).
7. Дополнительные структурные аспекты
Несколько классов в одном файле:
Только один класс может быть public, и его имя должно совпадать с именем файла.
Структура .java файла:
Каждый класс принадлежит пакету. Структура пакетов влияет на компиляцию, размещение файлов и импорт.
8. Лучшие практики по структуре
Инкапсуляция полей через геттеры/сеттеры — отдельная тема, но важно помнить, что прямой доступ к полям может быть нежелателен.
Минимизация дублирования кода в конструкторах — через this(...).
Инициализация по умолчанию — используется с осторожностью; рекомендуется явно задавать значения.
9. Типичные ошибки и подводные камни
Неинициализированные поля: хотя JVM задаёт значения по умолчанию (0, null, false), это может приводить к логическим ошибкам.
Статические поля: избыточное или некорректное использование может привести к ошибкам синхронизации и неправильному поведению.
Повторяющийся код в конструкторах: рекомендуется использовать цепочку вызовов this(...).
#Java #для_новичков #beginner #java_syntax #Class
Классы могут быть определены внутри других классов. Это удобно для логического объединения компонентов.
Виды вложенных классов:
Статический вложенный класс (static)
Внутренний класс (нестатический)
Локальный класс (внутри метода)
Анонимный класс (без имени, создаётся на лету)
Пример статического вложенного класса:
class Outer {
static class StaticNested {
void display() {
System.out.println("Static nested class");
}
}
}
Пример внутреннего класса:
class Outer {
class Inner {
void display() {
System.out.println("Inner class");
}
}
}
Создание экземпляров:
Outer.StaticNested nested = new Outer.StaticNested();
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
6. Блоки инициализации
Блоки инициализации выполняются перед выполнением конструктора.
Существуют два вида:
Экземплярный блок - выполняется каждый раз при создании объекта, до конструктора.
class Example {
{
System.out.println("Экземплярный блок инициализации");
}
}
Статический блок - выполняется один раз при загрузке класса в память (JVM).
class Example {
static {
System.out.println("Статический блок инициализации");
}
}
Порядок инициализации:
Статические поля → статические блоки (в порядке появления).
Поля экземпляра → блоки экземпляра → конструктор (в порядке появления в коде).
7. Дополнительные структурные аспекты
Несколько классов в одном файле:
class A {
// основной класс
}
class B {
// вспомогательный
}
Только один класс может быть public, и его имя должно совпадать с именем файла.
Структура .java файла:
package my.project;
import java.util.List;
class Example {
// тело класса
}
Каждый класс принадлежит пакету. Структура пакетов влияет на компиляцию, размещение файлов и импорт.
8. Лучшие практики по структуре
Инкапсуляция полей через геттеры/сеттеры — отдельная тема, но важно помнить, что прямой доступ к полям может быть нежелателен.
Минимизация дублирования кода в конструкторах — через this(...).
Инициализация по умолчанию — используется с осторожностью; рекомендуется явно задавать значения.
9. Типичные ошибки и подводные камни
Неинициализированные поля: хотя JVM задаёт значения по умолчанию (0, null, false), это может приводить к логическим ошибкам.
Статические поля: избыточное или некорректное использование может привести к ошибкам синхронизации и неправильному поведению.
Повторяющийся код в конструкторах: рекомендуется использовать цепочку вызовов this(...).
#Java #для_новичков #beginner #java_syntax #Class
👍4
Что выведет код?
#Tasks
class A300625 {
{ System.out.print("1"); }
public A300625() { System.out.print("2"); }
}
class B300625 extends A300625 {
{ System.out.print("3"); }
public B300625() { System.out.print("4"); }
}
public class Task300625 {
public static void main(String[] args) {
new B300625();
}
}
#Tasks
👍1
🔥1😱1
Что такое record в Java? 🤓
Ответ:
record (введено в Java 14, стабильно с Java 16) — это специальный класс для неизменяемых данных.
Автоматически создает конструктор, геттеры, equals(), hashCode() и toString().
Пример:
record Point(int x, int y) {}
Point p = new Point(1, 2);
System.out.println(p.x()); // 1
Подходит для DTO (Data Transfer Objects), сокращает шаблонный код и обеспечивает иммутабельность.
#собеседование
Ответ:
Автоматически создает конструктор, геттеры, equals(), hashCode() и toString().
Пример:
record Point(int x, int y) {}
Point p = new Point(1, 2);
System.out.println(p.x()); // 1
Подходит для DTO (Data Transfer Objects), сокращает шаблонный код и обеспечивает иммутабельность.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
"Архитектура компьютера — это баланс между скоростью и простотой."
Борис Бабаян, разработчик Эльбрус, сказал это в 1980-х годах на конференции в Ереване.
Биография
И немного хабра
#Citation #Biography
Please open Telegram to view this post
VIEW IN TELEGRAM
Wikipedia
Бабаян, Борис Арташесович
Бори́с Арташе́сович Бабая́н (род. 20 декабря 1933, Баку) — советский и российский учёный, доктор технических наук, профессор, разработчик вычислительной техники, член-корреспондент АН СССР (1984; с 1991 года — Российской академии наук). Автор трудов по архитектурным…
👍1
Плагины и цели Maven
Плагины и цели (goals) являются ключевыми компонентами Maven, обеспечивающими выполнение конкретных задач в процессе сборки. Они интегрируются с жизненным циклом Maven, позволяя разработчикам компилировать код, запускать тесты, создавать артефакты и выполнять другие действия.
Что такое плагин и цель
Плагин в Maven — это модуль, содержащий набор функций для выполнения задач сборки, таких как компиляция, тестирование или развертывание. Каждый плагин состоит из одной или нескольких целей (goals), которые представляют собой конкретные действия, выполняемые плагином. Например, плагин maven-compiler-plugin имеет цели compile (компиляция исходного кода) и testCompile (компиляция тестового кода).
Цели привязываются к фазам жизненного цикла Maven (например, compile, test, package), что позволяет автоматически вызывать их в нужный момент сборки. Плагины и их цели загружаются в память как Java-объекты во время выполнения, что делает их гибкими, но требует внимания к управлению ресурсами.
Архитектура Maven Plugins
Плагины Maven построены на основе архитектуры, которая использует Plexus — контейнер инверсии управления (IoC), встроенный в Maven. Каждый плагин представляет собой JAR-файл, содержащий Java-классы, реализующие интерфейс org.apache.maven.plugin.Mojo.
Основные аспекты архитектуры:
Mojo (Maven plain Old Java Object): Основной строительный блок плагина. Mojo — это Java-класс, реализующий интерфейс Mojo, который определяет метод execute() для выполнения задачи. Каждый Mojo соответствует одной цели плагина. Например, в maven-compiler-plugin цель compile реализована классом CompilerMojo.
Plexus Container: Управляет жизненным циклом плагинов, загружая их классы и зависимости. Plexus создает изолированные классовые загрузчики (classloaders) для каждого плагина, чтобы избежать конфликтов зависимостей.
POM Model Integration: Плагины получают доступ к объектной модели проекта (POM) через API Maven, что позволяет им читать конфигурацию, зависимости и свойства проекта.
Descriptor File: Каждый плагин содержит файл META-INF/maven/plugin.xml, описывающий его цели, параметры и привязки к фазам жизненного цикла.
В памяти плагины загружаются как экземпляры Mojo, каждый из которых хранит свою конфигурацию и состояние. Это увеличивает потребление памяти, особенно при использовании множества плагинов или сложных конфигураций. Maven оптимизирует загрузку, кэшируя зависимости плагинов в локальном репозитории (~/.m2/repository), но интенсивные задачи, такие как компиляция, могут временно увеличивать использование оперативной памяти.
#Java #middle #Maven #Plugin #Goals
Плагины и цели (goals) являются ключевыми компонентами Maven, обеспечивающими выполнение конкретных задач в процессе сборки. Они интегрируются с жизненным циклом Maven, позволяя разработчикам компилировать код, запускать тесты, создавать артефакты и выполнять другие действия.
Что такое плагин и цель
Плагин в Maven — это модуль, содержащий набор функций для выполнения задач сборки, таких как компиляция, тестирование или развертывание. Каждый плагин состоит из одной или нескольких целей (goals), которые представляют собой конкретные действия, выполняемые плагином. Например, плагин maven-compiler-plugin имеет цели compile (компиляция исходного кода) и testCompile (компиляция тестового кода).
Цели привязываются к фазам жизненного цикла Maven (например, compile, test, package), что позволяет автоматически вызывать их в нужный момент сборки. Плагины и их цели загружаются в память как Java-объекты во время выполнения, что делает их гибкими, но требует внимания к управлению ресурсами.
Архитектура Maven Plugins
Плагины Maven построены на основе архитектуры, которая использует Plexus — контейнер инверсии управления (IoC), встроенный в Maven. Каждый плагин представляет собой JAR-файл, содержащий Java-классы, реализующие интерфейс org.apache.maven.plugin.Mojo.
Основные аспекты архитектуры:
Mojo (Maven plain Old Java Object): Основной строительный блок плагина. Mojo — это Java-класс, реализующий интерфейс Mojo, который определяет метод execute() для выполнения задачи. Каждый Mojo соответствует одной цели плагина. Например, в maven-compiler-plugin цель compile реализована классом CompilerMojo.
Plexus Container: Управляет жизненным циклом плагинов, загружая их классы и зависимости. Plexus создает изолированные классовые загрузчики (classloaders) для каждого плагина, чтобы избежать конфликтов зависимостей.
POM Model Integration: Плагины получают доступ к объектной модели проекта (POM) через API Maven, что позволяет им читать конфигурацию, зависимости и свойства проекта.
Descriptor File: Каждый плагин содержит файл META-INF/maven/plugin.xml, описывающий его цели, параметры и привязки к фазам жизненного цикла.
В памяти плагины загружаются как экземпляры Mojo, каждый из которых хранит свою конфигурацию и состояние. Это увеличивает потребление памяти, особенно при использовании множества плагинов или сложных конфигураций. Maven оптимизирует загрузку, кэшируя зависимости плагинов в локальном репозитории (~/.m2/repository), но интенсивные задачи, такие как компиляция, могут временно увеличивать использование оперативной памяти.
#Java #middle #Maven #Plugin #Goals
👍1