ru
Feedback
Java | Фишки и трюки

Java | Фишки и трюки

Открыть в Telegram

Java: примеры кода, интересные фишки и полезные трюки Купить рекламу: https://telega.in/c/java_tips_and_tricks ✍️По всем вопросам: @Pascal4eg

Больше
6 820
Подписчики
+724 часа
-97 дней
-6030 день
Архив постов
Что выведет код?
Anonymous voting

class Base {
    public String className = "Base";
}

class Derived extends Base {
    private String className = "Derived";
}

public class Quest {
    public static void main(String[] args) {
        System.out.println(new Derived().className);
    }
}

📚 Здесь собраны все вопросы, которые могут спросить на собеседовании. Теперь можно легко получить оффер, подготовившись к са
📚 Здесь собраны все вопросы, которые могут спросить на собеседовании. Теперь можно легко получить оффер, подготовившись к самым популярным вопросам. Просто выбери своё направление: 1. Frontend / JavaScript 2. Python 3. Java 4. Тестировщик QA 5. Data Science 6. DevOps 7. C# 8. С/C++ 9. Golang 10. PHP 11. Kotlin 12. Swift

⌨️ Вложенные классы. Когда применяются Класс называется вложенным (Nested class), если он определен внутри другого класса. Вложенный класс должен создаваться только для того, чтобы обслуживать обрамляющий его класс. Если вложенный класс оказывается полезен в каком-либо ином контексте, он должен стать классом верхнего уровня. Вложенные классы имеют доступ ко всем (в том числе приватным) полям и методам внешнего класса, но не наоборот. Из-за этого разрешения использование вложенных классов приводит к некоторому нарушению инкапсуляции. Существуют четыре категории вложенных классов: 1️⃣ Static nested class (Статический вложенный класс); 2️⃣ Member inner class (Простой внутренний класс); 3️⃣ Local inner class (Локальный класс); 4️⃣ Anonymous inner class (Анонимный класс). Такие категории классов, за исключением первого, также называют внутренними (Inner class). Внутренние классы ассоциируются не с внешним классом, а с экземпляром внешнего. Каждая из категорий имеет рекомендации по своему применению. Если вложенный класс должен быть виден за пределами одного метода или он слишком длинный для того, чтобы его можно было удобно разместить в границах одного метода и если каждому экземпляру такого класса необходима ссылка на включающий его экземпляр, то используется нестатический внутренний класс. В случае, если ссылка на обрамляющий класс не требуется - лучше сделать такой класс статическим. Если класс необходим только внутри какого-то метода и требуется создавать экземпляры этого класса только в этом методе, то используется локальный класс. А, если к тому же применение класса сводится к использованию лишь в одном месте и уже существует тип, характеризующий этот класс, то рекомендуется делать его анонимным классом.

Cамый простой способ изучить Java — залезть в голову профи Один из лучших айтишников России учит базе кодинга в Telegram. Даже гуманитарий поймёт, как создавать приложения, сайты, игры и чат-боты. Достаточно подписаться на «Секреты Java», где каждый день появляются гайды, готовые примеры кода и лучших практик. И всё это бесплатно — вместо сотен тысяч рублей за курсы. Стартовать в прибыльной профессии с нуля вы сможете гораздо проще! Теперь обучиться Java может каждый: @java_secrets

🖥 Оптимистичная и пессимистичная блокировка в базах данных Оптимистичная блокировка предполагает, что конфликтов при параллельном доступе к данным будет мало. Изменения данных происходят без блокировки, но при попытке сохранения изменений проверяется, что данные не изменились с момента последнего чтения. Алгоритм: 1️⃣ Чтение данных. 2️⃣ Обновление данных в памяти. 3️⃣ Попытка записи изменений с проверкой версии или временной метки. 4️⃣ Если данные были изменены другим процессом, транзакция откатывается и повторяется. Например, можно использовать поле version в таблице. При чтении данных запоминаем значения этого поля, а записываем данные с условием что поле version не изменилось. SQL-запрос может быть примерно таким:

update table set field1='data1', field2='data2', version=<version>+1 where id=<id> and version=<version>
После выполнения запроса нужно проверить сколько записей обновилось, если ни одной, то значит другой процесс изменил запись, и нужно начать с начала. Пессимистичная блокировка предполагает, что конфликты будут частыми. Данные блокируются при чтении, чтобы предотвратить их изменение другими транзакциями до завершения текущей транзакции. Алгоритм: 1️⃣ Чтение данных с блокировкой. 2️⃣ Обновление данных. 3️⃣ Запись изменений. 4️⃣ Снятие блокировки после завершения транзакции. Как пример, может быть использован запрос SELECT ... FOR UPDATE для блокировки строк при чтении. #java #database #optimistic #pessimistic #locking

Изучи алгоритмы, чтобы работать в Яндекс или Google Приходи на бесплатное обучение от FAANG School. Там ты узнаешь: – Как исп
Изучи алгоритмы, чтобы работать в Яндекс или Google Приходи на бесплатное обучение от FAANG School. Там ты узнаешь: – Как использовать разные структуры данных при решении задач – Какие 20% усилий дают 80% результата при подготовке к алгоритмам – Prefix Sum и Sliding Window. 2 подхода, которые закрывают задачи на 200к$ во время собесов в Google – Как научиться решать алгоритмы без матана Спикер – Разработчик из BigTech. За 7 лет решил 500 задач на LeetCode, прошел 30 собеседований в компаниях уровня Google и Meta, а сейчас работает в одной из крупных IT-гигантов в мире. Переходи и жми на кнопку «Принять участие», чтобы начать обучение.

⌨️ Где разрешена инициализация статических/нестатических полей? ✔️ Статические поля можно инициализировать при объявлении, в статическом или нестатическом блоке инициализации. ✔️ Нестатические поля можно инициализировать при объявлении, в нестатическом блоке инициализации или в конструкторе. #java #initialization #static #nonstatic

Когда код наконец-то заработал, но не совсем так, как хотелось бы

⌨️ Функциональный интерфейс Supplier является частью пакета java.util.function и предназначен для представления поставщика результатов. Этот интерфейс используется для работы с функциями, которые не принимают никаких аргументов и возвращают результат. Supplier часто используется в ленивой инициализации, генерации данных и других сценариях, где требуется получение значения без ввода. Интерфейс Supplier аннотирован @FunctionalInterface, что означает, что он предназначен для использования с лямбда-выражениями и содержит ровно один абстрактный метод:

T get();
Возвращает результат типа T. Пример:

Supplier<String> supplier = () -> "Hello, World!";
String message = supplier.get();
System.out.println(message); // Hello, World!
Еще один:

Supplier<Double> randomSupplier = Math::random;
        
Stream.generate(randomSupplier)
        .limit(5)
        .forEach(System.out::println);
// 5 дробных чисел от 0 до 1
#java #supplier

Хочется попиарить один небольшой, но довольно активный и самое важное полезный телеграм канал Algorithmics. Канал сравнительно молодой, однако авторы не сбавляют темп своего повествования, а качество материала держится на достойном уровне от поста к посту. На канале вы найдете множество материалов с решениями задач с Leetcode на Go и TypeScript и все то, что будет полезным для подготовки к собеседованиям, в частности, к алгосекции.

⌨️ В чем разница между членом экземпляра класса и статическим членом класса? Модификатор static говорит о том, что данный метод или поле принадлежат самому классу и доступ к ним возможен даже без создания экземпляра класса. Поля, помеченные static инициализируются при инициализации класса. На методы, объявленные как static, накладывается ряд ограничений: ✔️ Они могут вызывать только другие статические методы. ✔️ Они должны осуществлять доступ только к статическим переменным. ✔️ Они не могут ссылаться на члены типа this или super. В отличии от статических, поля экземпляра класса принадлежат конкретному объекту и могут иметь разные значения для каждого. Вызов метода экземпляра возможен только после предварительного создания объекта класса. Пример:

public class MainClass {
    public static void main(String args[]) {
        System.out.println(TestClass.v);
        new TestClass().a();
        System.out.println(TestClass.v);
    }
}

public class TestClass {

 public static String v = "Initial val";

 {
  System.out.println("!!! Non-static initializer");
  v = "Val from non-static";
 }

 static {
  System.out.println("!!! Static initializer");
  v = "Some val";
 }

 public void a() {
  System.out.println("!!! a() called");
 }

}
Результат:
!!! Static initializer
Some val
!!! Non-static initializer
!!! a() called
Val from non-static
#java #static

🚀 Готовься к переменам в мире IT с нашим практическим курсом по Domain Driven Design! 😰 Устал от запутанной инфраструктуры,
🚀 Готовься к переменам в мире IT с нашим практическим курсом по Domain Driven Design! 😰 Устал от запутанной инфраструктуры, вперемешку с бизнес логикой? Мы знаем, как это тяжело. Писать тесты становится неприятно и больно, приходится много мокать, тесты получаются огромными, хрупкими.. Но есть решение! Присоединяйся к нашему курсу, где мы разложим все по полочкам за 10 вебинаров, начиная с 17 июня. 🔝 Прими вызов и стань частью передовой волны технологического прогресса. Успей зарегистрироваться сейчас https://microarch.ru/courses/hexagonal-architecture?utm_source=posev&utm_medium=erid:2VtzqwL1BZQ&utm_campaign=11 🎓 На нашем курсе ты изучишь: ✅ Основы Domain-Driven Design и его важность для разработчиков. ✅ Создание эффективных и масштабируемых сервисов с использованием DDD. ✅ Применение шаблонов проектирования и принципов DDD для оптимизации кода и повышения производительности. 💡 Зачем тебе этот курс? 🌟 Плюс, ты получишь: — Новые подходы к разработке, в том числе и использование подходов ядра и слоев в онион-архитектуре. — Шанс быть первым внедрившим новые методы в отделе. — Стань Senior Developer или Team Lead. — Пиши код как профессионал, а не как в учебниках. — Получи признание в компании и увеличь свою заработную плату. 🌟 Присоединяйся к нам прямо сейчас и стань экспертом в разработке успешных проектов: https://microarch.ru/courses/hexagonal-architecture?utm_source=posev&utm_medium=erid:2VtzqwL1BZQ&utm_campaign=11 Реклама. ИП Ветчинкин К.Е. ИНН: 773376451099 Erid: 2VtzqwL1BZQ

photo content

⌨️ Полезные стримы. Метод distinct() Если у вас есть поток, который может содержать повторяющиеся элементы, используйте операцию distinct(), чтобы удалить их.

var list = Arrays.asList(1, 2, 3, 3, 4, 5, 5);
var distinctList = list.stream()
                       .distinct()
                       .collect(Collectors.toList());
// distinctList: [1, 2, 3, 4, 5]
#java #stream #distinct

Секрет IT-шников из Сбербанка Видели эти требования в вакансиях? 30 лет опыта, диплом и еще куча опций, который совместит в с
Секрет IT-шников из Сбербанка Видели эти требования в вакансиях? 30 лет опыта, диплом и еще куча опций, который совместит в себе только киборг-убийца. На самом деле HR не ищут идеального биоробота и даже новичок сможет получить оффер в Сбер или Яндекс. Однако начинающие часто сомневаются: – Да, важно знать Java, ООП, структуры данных… А вместо стандартных пет-проектов создать что-то более масштабное, использовать микросервисы и сложные фичи, но как именно это сделать? – Как понять свой уровень знаний и готовность к работе? – Как иметь уверенность, что со всем справитесь? Чтобы помочь, в IT-школе FAANG School подготовили тест, где после ответов на 5 вопросов на бесплатной карьерной сессии вы узнаете, как именно вам получить позицию Java Junior в лучших IT-компаниях. Для всех, кто пройдет его в течение 24 часов ребята дают бонус – гайд по поиску работы в IT. Спойлер: с помощью знаний FAANG School 12 человек уже начали работу в штате Сбера, не считая других позиций и компаний 😏. Переходи, ты следующий.

⌨️ Функциональный интерфейс Function является частью пакета java.util.function и предназначен для представления функций, принимающих один аргумент и возвращающих результат. Этот интерфейс широко используется в функциональном программировании и особенно полезен при работе с лямбда-выражениями и методами, которые принимают функции в качестве параметров. Интерфейс Function аннотирован @FunctionalInterface, что означает, что он предназначен для использования с лямбда-выражениями и содержит ровно один абстрактный метод:

R apply(T t);
Принимает один аргумент типа T и возвращает результат типа R. Пример:

Function<String, Integer> stringLength = String::length;
Integer length = stringLength.apply("Hello, World!");
System.out.println(length);  // 13
Еще один:

Function<Double, Double> areaOfCircle = r -> Math.PI * r * r;
System.out.println(areaOfCircle.apply(5.0));
// 78.53981633974483
#java #function

📌 Составили список лучших каналов для любого айтишника: Java Developer — советы и практики от действующего Senior-разработчи
📌 Составили список лучших каналов для любого айтишника: Java Developer — советы и практики от действующего Senior-разработчика Python Developer — секреты и тонкости программирования на Python Frontend Developer — готовый код и полезные ресурсы для любого фронтендера

Ссылки на методы — это способ упрощенного вызова методов или конструктора, который позволяет передавать их как аргументы в методы или сохранять в переменных. Ссылки на методы появились в Java 8 и являются частью улучшенной поддержки функционального программирования в языке. Есть несколько видов ссылок на методы: 1️⃣ Ссылка на статический метод Используется для вызова статических методов класса. Синтаксис:

ContainingClass::staticMethodName
Пример:

import java.util.function.Function;

public class MethodReferenceExample {
    public static void main(String[] args) {
        Function<String, Integer> converter = Integer::parseInt;
        Integer number = converter.apply("123");
        System.out.println(number); // 123
    }
}
2️⃣ Ссылка на метод экземпляра конкретного объекта Используется для вызова методов экземпляра объекта. Синтаксис:

containingObject::instanceMethodName
Пример:

import java.util.Arrays;
import java.util.List;

public class MethodReferenceExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
        names.forEach(System.out::println);
    }
}
3️⃣ Ссылка на метод экземпляра произвольного объекта определенного типа Синтаксис:

ContainingType::methodName
Пример:

import java.util.function.Function;

public class FunctionExample {
    public static void main(String[] args) {
        Function<String, Integer> stringLength = String::length;
        Integer length = stringLength.apply("Hello, World!");
        System.out.println(length); // 13
    }
}
Отличие от предыдущего вида в том, что в предыдущем ссылка на метод получается у конкретного объекта, стало быть вызовется метод этого объекта, а в нашем случае при получении ссылки на метод, мы знаем только метод, но объект у которого вызовется этот метод еще не известен, он будет предоставлен при вызове метода. Код выше будет означать "Hello, World!".length() 4️⃣ Ссылка на конструктор Используется для вызова конструктора. Синтаксис:

ClassName::new
Пример:

import java.util.function.Supplier;

public class MethodReferenceExample {
    public static void main(String[] args) {
        Supplier<MethodReferenceExample> exampleSupplier = MethodReferenceExample::new;
        MethodReferenceExample example = exampleSupplier.get();
        System.out.println(example); // MethodReferenceExample@<hashcode>
    }
}
#java #MethodReference

Git Разработчика - ваш надежный источник в мире IT! Огромное количество исходников, книг и курсов, шпаргалок, мемов и много ч
Git Разработчика - ваш надежный источник в мире IT! Огромное количество исходников, книг и курсов, шпаргалок, мемов и много чего еще.