Telegram Web Link
⚡️Маст-хэв список для программистов, каналы с последними книжными новинками, библиотеками, разбором кода и актуальной информацией, связанной с вашим языком программирования.
Лучший способ получать свежие обновлении и следить за трендами в разработке.

Машинное обучение: www.tg-me.com/ai_machinelearning_big_data
Python: www.tg-me.com/pythonl
C#: www.tg-me.com/csharp_ci
C/C++/ www.tg-me.com/cpluspluc
Data Science: www.tg-me.com/data_analysis_ml
Devops: www.tg-me.com/devOPSitsec
Go: www.tg-me.com/Golang_google
Базы данных: www.tg-me.com/sqlhub
Rust: www.tg-me.com/rust_code
Javascript: www.tg-me.com/javascriptv
React: www.tg-me.com/react_tg
PHP: www.tg-me.com/phpshka
Android: www.tg-me.com/android_its
Мобильная разработка: www.tg-me.com/mobdevelop
Linux: www.tg-me.com/+A8jY79rcyKJlYWY6
Big Data: www.tg-me.com/bigdatai
Хакинг: www.tg-me.com/linuxkalii
Тестирование: https://www.tg-me.com/+F9jPLmMFqq1kNTMy
Java: www.tg-me.com/javatg

💼 Папка с вакансиями: www.tg-me.com/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: www.tg-me.com/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: www.tg-me.com/addlist/eEPya-HF6mkxMGIy

Папка машинное обучение: https://www.tg-me.com/addlist/_FjtIq8qMhU0NTYy

📕 Бесплатные Книги для программистов: https://www.tg-me.com/addlist/YZ0EI8Ya4OJjYzEy

🎞 YouTube канал: https://www.youtube.com/@uproger

😆ИТ-Мемы: www.tg-me.com/memes_prog

🇬🇧Английский: www.tg-me.com/english_forprogrammers
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
Что выведет код ?

class Test
{
boolean[] array = new boolean[3];
int count = 0;

void set(boolean[] arr, int x)
{
arr[x] = true;
count++;
}

void func()
{
if(array[0] && array[++count - 2] | array [count - 1])
count++;

System.out.println("count = " + count);
}


public static void main(String[] args)
{
Test object = new Test();
object.set(object.array, 0);
object.set(object.array, 1);
object.func();
}
}


Пишите свое решение в комментариях👇

@javatg
👍81🔥1👏1
Как Spring Framework реализует паттерн Dependency Injection?

Инверсия контроля (inversion of control, IoC) – принцип проектирования, по которому контроль над потоком управления передается фреймворку. Управляющий и прикладной код разделяются. При разработке модуля этот подход избавляет от необходимости знать о других модулях программы и деталях их взаимодействия. Такой код становится более переипользуемым и модульным, уменьшает связность.

Внедрение зависимостей (Dependency Injection, DI) – одна из реализаций IoC. При взаимодействии с другими модулями, программа оперирует высокоуровневыми абстракциями, тогда как конкретная её реализация поставляется фреймворком.

Стандартная реализация DI – фреймворк инстанциирует все сервисы, и складывает их в IoC-контейнер. При этом специальная сущность, Service Locator, занимается поиском соответствия реализаций абстракциям и их внедрением.

Spring – большой набор различных библиотек. DI реализуется одной из основных библиотек – Spring IoC.

Сущности бизнес-логики в Spring, как и в JavaEE называются beans. Бины объявляются различными способами, корни большинства из них лежат в понятии Configuration. В качестве контейнера бинов выступает ApplicationContext. Чтобы передать инициализацию зависимости контексту, она помечается аннотацией
@Autowired.

@javatg
👍206👎2🔥2
🖥Spring Security в деталях

Аутентификация - Spring Security в деталях
Получение информации о пользователе - Spring Security в деталях
Ещё один способ получения аутентифицированного пользователя #java #springsecurity
Точки входа аутентификации - Spring Security в деталях
Источники информации о пользователях - Spring Security в деталях
Устаревшие DSL в Spring Security 6.1
Отладка контекста безопасности - Spring Security в деталях
DSL и конфигураторы контекста безопасности - Spring Security в деталях
Фильтры безопасности - Spring Security в деталях

📌 источник

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25👍41
🔥20 приемов кода Java, которые помогут повысить вашу производительность

1. Используйте расширенный цикл for.
Расширенный цикл for, также известный как цикл for-each, позволяет перебирать массивы или коллекции без ручного управления индексами. Это упрощает код и делает его более читабельным. Взглянем на пример:

int[] numbers = {1, 2, 3, 4, 5};
for (int number : numbers) {
// Делаем что-то с number
}
2. Используйте Java Stream API.
Stream API, представленный в Java 8, расширяет возможности при выполнении операций обработки коллекций. Он позволяет выполнять такие действия, как фильтрация, сопоставление и сокращение, более лаконичным образом. Потоки могут улучшить читаемость кода и уменьшить количество шаблонов. Например:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
.filter(n -> n % 2 == 0)
.mapToInt(n -> n)
.sum();

3. Пользуйтесь преимуществом ключевого слова var (Java 10+).
Ключевое слово var позволяет вам объявлять переменные с неявным выводом типа. Это уменьшает потребность в явном указании типов, делая код более кратким. Еще один пример кода:

var message = "Hello, world!";
var numbers = List.of(1, 2, 3, 4, 5);


4. Используйте StringBuilder для эффективного объединения строк.
При объединении нескольких строк использование класса StringBuilder более эффективно, чем многократное использование оператора v+. StringBuilder позволяет избежать создания ненужных объектов и обеспечивает более высокую производительность. Взгляните на этот код:

StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" ");
sb.append("world");
String result = sb.toString();


5. Применяйте тернарный оператор для кратких условных выражений.
Тернарный оператор (? 🙂 позволяет записывать простые условные выражения в компактной форме. Это может быть полезно для присвоения значений или выполнения простой логики ветвления. Например:


int x = 10;
String message = (x > 5) ? "Greater than 5" : "Less than or equal to 5";
6. Используйте try-with-resources для автоматического управления ресурсами.
При работе с ресурсами, которые реализуют интерфейс AutoCloseable, такими как файловые потоки или соединения с базой данных, лучше использовать оператор try-with-resources, чтобы обеспечить надлежащую очистку ресурсов, не закрывая их явным образом. Посмотрите на пример кода:

try (FileWriter writer = new FileWriter("myfile.txt")) {
//Запись в файл
}
7. Используйте оператор ромба для вывода типа.
Оператор ромба (<>) позволяет опустить аргументы типа при создании экземпляра универсального класса, если тип можно вывести из контекста присваивания. Это уменьшает избыточность и делает код чище. Например:

List<String> names = new ArrayList<>(); // Определение типа для ArrayList

8. Используйте пакет java.time для операций с датой и временем.
В Java 8 появился пакет java.time, который предоставляет более полный и интуитивно понятный API для работы с датой и временем. Он предлагает такие классы, как LocalDate, LocalTime, LocalDateTime и Duration, которые упрощают общие операции с датой и временем.

9. Применяйте ссылки на методы.
Ссылки на методы позволяют обращаться к методу по его имени, не вызывая его. Они могут сделать ваш код более лаконичным и выразительным, особенно при работе с функциональными интерфейсами. Например:

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.forEach(System.out::println); // Ссылка на метод System.out.println


10. Используйте методы по умолчанию (default) в интерфейсах.
Начиная с Java 8, интерфейсы могут иметь методы по умолчанию, которые обеспечивают реализацию по умолчанию (default-реализацию). Методы по умолчанию позволяют добавлять в интерфейсы новые методы, не нарушая существующие реализации. Они могут быть удобны для добавления служебных методов к интерфейсам или обеспечения поведения по умолчанию.

#junior

📌 Читать дальше

@javatg
👍238🔥2
🟡 Дайджест полезных материалов из мира java за неделю

Почитать:
Поднимаем кластер PostgreSQL в Docker и Testcontainers
Исчерпывающее руководство по одномерным массивам в Java
Новый взгляд на Maven-plugin для IDEA — GMaven
Kafka UI краткий гайд
Пошушукаемся о Барбаре Лисков или раз и навсегда запоминаем принцип подстановки
Список популярных утечек с GitHub: Анализ репозиториев компаний
Java Digest #3
Из кладовщика в разработчики
Использование Kotlin и WebFlux для выполнения задач ML в Apache Spark на GPU
Свойство типа Controller Service в кастомном процессоре NiFi
Опыт Сдачи: Oracle Certified Professional: Java SE 11 Developer 1Z0-819
Get URL pointed Resource Information in Java
GPT me liste 10 exercicios...
How to Install JDK for Debian using ARM64: Fixing 'dpkg: error: archive 'jdk-20.0.2' is not a regular file'
3 Ways to Make Your API Beautiful
A beginner-friendly design patterns masterclass
Product of Array Except Self - LeetCode Java Solution
Two Sum — LeetCode Java Solution
Valid Anagram - LeetCode Java Solution
Contains Duplicate - LeetCode Java Solution
In Java ein Word-Dokument in ein verschlüsseltes PDF-Dokument umwandeln

Посмотреть:
🌐Why They Called It Java | Prime Reacts

Хорошего дня!

❤️ Лайк, если полезно

@javatg
👍2213🔥4🥰1
Вопросы-ответы собеседования

1. Что такое статический блок инициализации? static инициализатор
2. Что такое статический вложенный класс? static nested class
3. Какие типы ссылок есть в Java? Что такое Strong, Soft, Weak, Phantom Reference?
4. Что такое Strong Reference? Как работает сильная ссылка?
5. Что такое Soft Reference? Как работает мягкая ссылка?
6. Что такое Weak Reference? Как работает слабая ссылка?
7. Что такое Phantom Reference? Как работает фантомная ссылка?
8. Чем отличается интерфейс от абстрактного класса? Что использовать?
9. Что такое String Pool? Как работает пул строк?
10. Что такое пул строк? Изучаем String Pool за 50 секунд!

#video #java

https://www.youtube.com/watch?v=onDWBO2CYKY&list=PLvalLeYySoeC9i2KLvq1af7P6CllrsBsm&ab_channel=Javangelion%7C%D0%94%D0%B6%D0%B0%D0%B2%D0%B0%D0%BD%D0%B3%D0%B5%D0%BB%D0%B8%D0%BE%D0%BD

@javatg
14👍8🔥2
🖥Заменят ли потоки данных циклы в Java?

Выпуск версии Java 8 стал знаменательным событием в истории Java. В нем были представлены потоки данных (англ. Streams) и лямбда-выражения, которые сейчас широко применяются. Если вы не знакомы с потоками данных или никогда не слышали о них, то ничего страшного. В большинстве случаев можно обойтись без них, задействуя циклы.

И зачем тогда, спрашивается, нужны потоки данных? Есть ли у них преимущества перед циклами? Могут ли они их заменить? В статье мы изучим соответствующий код, сравним производительность и посмотрим, смогут ли потоки данных стать полноценной заменой циклов.

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

Список имен элементов с заданным типом
Допустим, у нас есть список элементов, и нужно получить список имен элементов с заданным типом. Используя циклы, пишем следующий код:

List<String> getItemNamesOfType(List<Item> items, Item.Type type) {
List<String> itemNames = new ArrayList<>();
for (Item item : items) {
if (item.type() == type) {
itemNames.add(item.name());
}
}
return itemNames;
}

Читаем код и видим, что требуется создать новый ArrayList и в каждом цикле выполнять проверку типов и вызов add(). Теперь посмотрим, как с этой же задачей справляется поток данных:

List<String> getItemNamesOfTypeStream(List<Item> items, Item.Type type) {
return items.stream()
.filter(item -> item.type() == type)
.map(item -> item.name())
.toList();
}

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

Генерация случайного списка
Переходим к другому примеру. В следующих разделах мы рассмотрим ключевые методы потоков данных и сравним время их выполнения с циклами. Для этого потребуется случайный список Item. Ниже представлен фрагмент кода со статическим методом, который генерирует такой список:

public record Item(Type type, String name) {
public enum Type {
WEAPON, ARMOR, HELMET, GLOVES, BOOTS,
}

private static final Random random = new Random();
private static final String[] NAMES = {
"beginner",
"knight",
"king",
"dragon",
};

public static Item random() {
return new Item(
Type.values()[random.nextInt(Type.values().length)],
NAMES[random.nextInt(NAMES.length)]);
}
}

Теперь создаем случайный список Item с помощью циклов. Пишем следующий код:

List<Item> items = new ArrayList<>(100);
for (int i = 0; i < 100; i++) {
items.add(Item.random());
}

Код с потоками данных выглядит следующим образом:

List<Item> items = Stream.generate(Item::random).limit(length).toList();
Превосходный и легко читаемый код. Более того, List, возвращаемый методом toList(), представляет собой неизменяемый список. Так что вы можете пользоваться неизменяемостью List и размещать его в любых местах кода, не беспокоясь о побочных эффектах. Такой подход снижает вероятность появления ошибок в коде и облегчает его понимание.

Потоки данных предоставляют множество полезных методов, способствующих написанию лаконичного кода. Перечислим самые востребованные из них:

allMatch();
anyMatch();
count();
filter();
findFirst();
forEach();
map();
reduce();
sorted();
limit()


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

📌Читать дальше

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥43
🟡 Дайджест полезных материалов из мира: Java за неделю

Почитать:
Как скомпилировать Spring Boot приложение в native image с помощью GraalVm и развернуть его с помощью Docker
Объяснения по шардинга баз данных
Синхронизация в Java, часть 1: состояния гонки, блокировки и условия
Как задеплоить монолитный pet проект на Java с 0 и не сойти с ума… Часть 1
Авторизация в Spring Boot приложении с Spring Security 3.1.0 и PostgreSQL
Ракету пустил и забыл. Или как заставить DI работать
Поднимаем кластер PostgreSQL в Docker и Testcontainers
Meeting & Mastering Java
Navigating Code Testing Waters with Mockito: Your Testing Crew for Smooth Sailing
I'm Learning Java s̶c̶r̶i̶p̶t̶
Journey of completing Oracle Java Certification OCA 1Z0-808 exam
Object Oriented Programming (OOP)
A Deep Dive into Parking Spot LLD Design
Difference between Interface and Abstract Class
I’m continuing jDOSBox
Mastering Background Processing in Android with WorkManager: A Guide to Efficient Background Processing
[Digest] Java, Kotlin, Spring, Cloud, and More - Episode 8

Посмотреть:
🌐 Тестовое собеседование Java разработчика #28 - Леонид Земенков

Хорошего дня!

❤️ Лайк, за подборку

@javatg
👍178🔥5
Легкий способ получать свежие обновлении и следить за трендами в разработке на вашем языке. Находите свой стек и подписывайтесь:


Машинное обучение: @ai_machinelearning_big_data
Go: @Golang_google
C#: @csharp_ci
Базы данных: @sqlhub
Python: @python_job_interview
C/C++/: @cpluspluc
Data Science: @data_analysis_ml
Devops: @devOPSitsec
Rust: @rust_code
Javascript: @javascriptv
React: @react_tg
PHP: @phpshka
Docker: @docker
Android: @android_its
Мобильная разработка: @mobdevelop
Linux: linuxacademy
Big Data: www.tg-me.com/bigdatai
Хакинг: @linuxkalii
Java:@javatg
Собеседования: @machinelearning_interview


💼 Папка с вакансиями: www.tg-me.com/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: www.tg-me.com/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: www.tg-me.com/addlist/eEPya-HF6mkxMGIy

🔥ИТ-Мемы: www.tg-me.com/memes_prog

🇬🇧Английский: @english_forprogrammers
👍5👎3🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥52
2025/10/01 07:59:32
Back to Top
HTML Embed Code: