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

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

الذهاب إلى القناة على Telegram

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

إظهار المزيد
6 951
المشتركون
+124 ساعات
-107 أيام
+1230 أيام
أرشيف المشاركات
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! Огромное количество исходников, книг и курсов, шпаргалок, мемов и много чего еще.

🌐 Bearer-токен — это тип авторизационного токена, который предоставляется пользователю после успешной аутентификации для доступа к защищенным ресурсам. Этот токен обычно представляет собой строку, которую пользователь должен передавать в заголовке HTTP-запроса для каждого запроса к защищенному сервису или приложению. Bearer-токен используется для идентификации пользователя и предоставления доступа к его личным данным или другим защищенным ресурсам. Он должен храниться в безопасном месте и не передаваться третьим лицам. Bearer-токен обеспечивает простой механизм аутентификации и авторизации пользователей без необходимости использования cookies или сессий. Он является частью стандарта аутентификации OAuth 2.0 и широко используется во многих современных веб-приложениях и API. Пример запроса:
GET /api/resource HTTP/1.1
Host: example.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvZSBEb2UiLCJhZG1pbiI6dHJ1ZSwiaWF0IjoxNTE2MjM5MDIyfQ.SdUMMAsFFk83SHyqGjfQ1pt8v_8t4WZku5Ty3CLMaH4
В данном примере Bearer token представлен в заголовке Authorization. Вместо значения Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvZSBEb2UiLCJhZG1pbiI6dHJ1ZSwiaWF0IjoxNTE2MjM5MDIyfQ.SdUMMAsFFk83SHyqGjfQ1pt8v_8t4WZku5Ty3CLMaH4 должен быть ваш актуальный Bearer-токен для доступа к защищенным ресурсам. Обычно, чтобы получить этот токен, нужно сделать запрос на авторизацию, и в ответе приходит этот токен. Пример запроса:
POST /login HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 52

{
    "username": "admin",
    "password": "admin"
}
Пример ответа:

{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvZSBEb2UiLCJhZG1pbiI6dHJ1ZSwiaWF0IjoxNTE2MjM5MDIyfQ.SdUMMAsFFk83SHyqGjfQ1pt8v_8t4WZku5Ty3CLMaH4","username":"admin"}
#java #OAuth #Bearer

Стать айтишником №1 с доходом, как у Билла Гейтса? Есть один лёгкий способ Держите под рукой нужные материалы. Код и дебаггин
Стать айтишником №1 с доходом, как у Билла Гейтса? Есть один лёгкий способ Держите под рукой нужные материалы. Код и дебаггинг станут в 2 раза проще: — «Сайтодел» каждый день выкладывает готовые макеты, анимации, палитры и не только. А бонусом вы освоите нейросеть, которая генерирует основу сайта за 1 минуту [смотрите, как её применяет Google]. Всё для веб-разработчика в одном месте. — «Английский для прогера», если шарите за Python, а остальные языки обошли стороной. Без духоты разберётесь в терминах и поедете на международный хакатон/в зарубежную командировку. [Первый результат увидите на этой неделе] Когда знания в соседней вкладке, быстрее выбиться в сеньоры. Знаем по себе и рекомендуем сохранить:Сайтодел; → Английский для прогера. Первые 100 человек получат бонусные гайды бесплатно 🎁

⌨️ Можно ли объявить метод абстрактным и статическим одновременно? Нет. В таком случае компилятор выдаст ошибку: "Illegal combination of modifiers: ‘abstract’ and ‘static’". Модификатор abstract говорит, что метод будет реализован в другом классе, а static наоборот указывает, что этот метод будет доступен по имени класса. #java #abstract #static

Java | Фишки и трюки - إحصائيات وتحليلات قناة تيليجرام @java_tips_and_tricks