Java | Фишки и трюки
الذهاب إلى القناة على Telegram
Java: примеры кода, интересные фишки и полезные трюки Купить рекламу: https://telega.in/c/java_tips_and_tricks ✍️По всем вопросам: @Pascal4eg Менеджер по рекламе: @shmyzna
إظهار المزيد6 950
المشتركون
-124 ساعات
-137 أيام
+1430 أيام
أرشيف المشاركات
6 950
📚 Чистый код. Функции
✅ Функции должны быть короткими и компактными.
✅ Функции должны быть очень короткими и очень компактными.
✅ Приблизительный максимум 20 строк и 150 символов в одной строке, если не влезает, то нужно разделять.
✅ Функция должна выполнять только одну операцию.
- Она должна выполнять её хорошо и ничего другого она делать не должна.
- Если функция выполняет только те действия, которые находятся на одном уровне абстракции, то функция выполняет одну операцию.
- Чтобы определить выполняет ли функция более одной операции, попробуй извлечь из нее другую функцию, которая не будет являться простой переформулировкой реализации.
✅ Чтобы определить выполняет ли функция более одной операции, попробуй извлечь из нее другую функцию, которая не будет являться простой переформулировкой реализации.
✅
If, else, while и т.д. должны содержать вызов одной функции. Так будет читабельнее, понятнее и проще.
✅ Идеальное количество входных аргументов для функции = 0. Если входных аргументов больше трех, то стоит задуматься каким образом лучше от них избавиться, например, создать класс для этих аргументов.
✅ Чем больше входных аргументов, тем тяжелее понимается функция.
✅ Функция в которую передается аргумент-флаг, от которого зависит работа функции говорит о том, что функция выполняет более одной операции. Такие функции следует разбить на две и вызывать их уровнем выше.
✅ Функция, которая изменяет входной аргумент, должна отдавать ссылку на измененный объект, а не просто изменять без возврата. String transform(String text)
✅ Если функция, должна изменять входной аргумент, то пусть она изменяет состояние своего объекта-владельца.
✅ Если входной аргумент функции не должен меняться (и используется дальше в коде), то следует скопировать значение аргумента и внутри функции работать с копией.
✅ Вместо return null лучше использовать пустой объект — Collection.empty() или null-объект -EmptyObject().
✅ Всегда старайся использовать нестатические функции. Если это невозможно, то используй статические.
✅ Если есть код, который должен следовать один за другим, то передавай результаты первой функции во вторую, чтобы кто-нибудь не изменил последовательность вызовов.
✅ Используй полиморфизм вместо if/else или switch/case или when.
✅ Избегай отрицательных условий.6 950
⌨️Метод parallelStream() / parallel()
Этот метод позволяет выполнять параллельные операции над элементами стрима. Это полезно при работе с большими наборами данных или при выполнении тяжелых вычислений, которые можно распараллелить.
Вот пример использования метода
parallel() для вычисления суммы квадратов всех чисел от 1 до 100:
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int sumOfSquares = IntStream.rangeClosed(1, 100)
.parallel() // запускаем параллельные операции
.map(x -> x * x) // применяем квадратное преобразование к каждому числу
.sum(); // находим сумму всех чисел
System.out.println("Sum of squares: " + sumOfSquares);
}
}
В данном примере метод parallel() позволяет выполнять вычисления одновременно для нескольких чисел параллельно, что может значительно ускорить время выполнения программы.6 950
Вам нравится читать контент на этом канале?
Возможно, вы задумывались о том, чтобы купить на нем интеграцию?
Следуйте 3 простым шагам, чтобы сделать это:
1) Регистрируйтесь по ссылке: https://telega.in/c/java_tips_and_tricks
2) Пополняйтесь удобным способом
3) Размещайте публикацию
Если тематика вашего поста подойдет нашему каналу, мы с удовольствием опубликуем его.
6 950
☕️Использование Optional.
🌐Optional - это класс, представляющий контейнер, который может содержать или не содержать значение. Он помогает избежать NullPointerException.
Пример:
List<String> names = Arrays.asList("Alice", "Bob", "Charlotte", "David");
Optional<String> nameOptional = names.stream()
.filter(name -> name.startsWith("A"))
.findFirst();
nameOptional.ifPresent(name -> System.out.println("Найдено имя, начинающееся на 'A': " + name));
✔️В этом примере мы используем Optional для поиска первого имени в списке, которое начинается на букву "A". Мы применяем метод filter для фильтрации и метод findFirst для поиска первого элемента. Затем мы используем метод ifPresent для выполнения действия, если значение было найдено.
⚙️Использование Optional помогает обработать ситуации, когда значение может отсутствовать, и предотвратить ошибки NullPointerException. Эта фишка улучшает безопасность кода и делает его более надежным, что является важным для профессиональных разработчиков на Java.6 950
Скажите что-то на карьерном
Тинькофф в поиске крутых ИТ-спецов. С компании — профессиональный рост, интересные финтех-задачи, решение бытовых забот и работа там, где вы живете. С вас — выбрать вакансию и откликнуться тут
Реклама АО «Тинькофф Банк» ИНН 7710140679
6 950
☕️Пример Java кода для реализации алгоритма быстрой сортировки
public class QuickSort {
// Метод для обмена элементов
private static void swap(int[] array, int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
// Основной метод быстрой сортировки
public static void quickSort(int[] array, int low, int high) {
if (array == null || array.length == 0){
return;
}
if (low >= high){
return;
}
// Выбор опорного элемента (pivot)
int middle = low + (high - low) / 2;
int pivot = array[middle];
// Разделение на подмассивы
int i = low, j = high;
while (i <= j) {
while (array[i] < pivot) {
i++;
}
while (array[j] > pivot) {
j--;
}
if (i <= j) {
swap(array, i, j);
i++;
j--;
}
}
// Рекурсивные вызовы для подмассивов
if (low < j){
quickSort(array, low, j);
}
if (high > i){
quickSort(array, i, high);
}
}
// Тестирование алгоритма
public static void main(String[] args) {
int[] array = {9, -3, 5, 2, 6, 8, -6, 1, 3};
System.out.println("Исходный массив: " + Arrays.toString(array));
quickSort(array, 0, array.length - 1);
System.out.println("Отсортированный массив: " + Arrays.toString(array));
}
}
🔈 Реализация алгоритма включает в себя метод quickSort, осуществляющий сортировку массива чисел, включающий в себя выбор опорного элемента, разделение на подмассивы и рекурсивные вызовы. Также, есть метод swap для обмена элементов и метод main для тестирования алгоритма.6 950
Яндекс Практикум запустил курс «Инженер по тестированию: от новичка до автоматизатора».
На нём студенты научатся вручную тестировать приложения и сайты, а потом — писать код на языке Java, чтобы запускать автоматические тесты. Автоматизация — востребованный навык у опытных тестировщиков, который открывает путь к более высоким должностям.
Что вас ждёт во время учёбы:
— Интерактивный учебник, где всё объясняем простым языком.
— Тренажёр с мгновенной проверкой заданий.
— Практика на учебных приложениях и проекты для портфолио.
— Команда сопровождения, которая поможет разобраться в сложных темах и дойти до конца.
— Карьерные консультанты, которые научат составлять резюме, проходить собеседования и тестовые задания.
Попробуйте курс бесплатно, а если понравится — приходите учиться.
6 950
☕️Использование библиотеки Lombok для автоматической генерации геттеров, сеттеров и конструкторов в Java.
Пример кода:
import lombok.Getter;
import lombok.Setter;
public class User {
@Getter @Setter
private String name;
@Getter @Setter
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
⚙️С помощью аннотаций @Getter и @Setter от Lombok, не нужно писать многочисленные геттеры и сеттеры для каждого поля класса. Библиотека автоматически их сгенерирует во время компиляции. Это значительно упрощает процесс программирования и делает код более чистым и понятным.6 950
☕️Использование аннотаций @SuppressWarnings
Аннотация @SuppressWarnings в Java используется для подавления предупреждений компилятора или IDE. Это может быть полезно, если вы уверены, что определенное предупреждение не является критическим и хотите, чтобы компилятор пропустил его. Однако следует использовать эту аннотацию осторожно, поскольку она может скрыть проблемы в коде.
Вот пример использования аннотации @SuppressWarnings:
public class DeprecatedExample {
@SuppressWarnings("deprecation")
public void useDeprecatedMethod() {
// Используем устаревший метод
DeprecatedClass deprecatedClass = new DeprecatedClass();
deprecatedClass.deprecatedMethod();
}
public static void main(String[] args) {
DeprecatedExample example = new DeprecatedExample();
example.useDeprecatedMethod();
}
}
✔️В данном примере метод useDeprecatedMethod() использует метод deprecatedMethod() из класса DeprecatedClass, который помечен аннотацией @Deprecated как устаревший. Аннотация @SuppressWarnings("deprecation") подавляет предупреждение компилятора о том, что используется устаревший метод, и позволяет успешно скомпилировать код без предупреждений.
Помните, что использование аннотации @SuppressWarnings должно быть обосновано, и важно следить за качеством кода, чтобы не упустить потенциальные проблемы в вашем приложении.6 950
Нейросеть прочитает документ за вас
❓ Что случилось?
Голландский ИИ-стартап Send AI получил инвестиции от Google's Gradient Ventures. Send AI планирует заменить признанных лидеров в области обработки документов — UiPath, Abbyy, Rossum и Kofax.
Что предлагают?
Send AI — «инфраструктура обработки документов», основанная на небольших ИИ-моделях с открытым исходным кодом. Стартап позволяет извлекать самые важные данные из объемных и сложных документов — нейросеть определяет, какой общий посыл имеет документ, ищет конкретные строки о том или ином положении и проверяет текст на точность и безопасность.
🇷🇺 Как можно переиспользовать в России?
Технологию можно использовать в России для улучшения обработки документов в государственном секторе — например, для ускорения работы МФЦ, получения визы или загранпаспорта. Основатели стартапа предлагают также внедрять технологию в сферы здравоохранение, финансов и страхования.
Про этот и другие уникальные IT - стартапы можно узнать на канале Foresight.
Подписывайтесь, чтобы быть в курсе свежих бизнес-решений.
6 950
☕️Использование Java Reflection API для динамической инспекции и манипуляции с классами, методами, полями и другими элементами программы во время выполнения.
Java Reflection API позволяет получать информацию о классах, создавать экземпляры классов, вызывать методы, получать и устанавливать значения полей, а также работать с аннотациями и конструкторами.
Пример использования Java Reflection API:
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class MyClass {
private String name;
public MyClass(String name) {
this.name = name;
}
public void printInfo() {
System.out.println("Name: " + name);
}
}
public class Main {
public static void main(String[] args) throws Exception {
MyClass obj = new MyClass("John");
// Получение класса
Class<?> clazz = obj.getClass();
// Получение и установка значения поля
Field field = clazz.getDeclaredField("name");
field.setAccessible(true);
System.out.println("Original value: " + field.get(obj));
field.set(obj, "Alice");
System.out.println("Updated value: " + field.get(obj));
// Вызов метода
Method method = clazz.getDeclaredMethod("printInfo");
method.invoke(obj);
}
}
🔔В этом примере используется Java Reflection API для получения доступа к полю name, изменения его значения, вызова метода printInfo и вывода информации об объекте класса MyClass. Reflection API предоставляет возможность обращаться к классам и их элементам динамически во время выполнения программы, что делает его мощным инструментом для реализации различных функций в профессиональной разработке на Java.6 950
🔥 Годнота
Наткнулся на базу с 1700 вопросов с собеседований на Java разработчика. Фишка в том что просчитана вероятность с которой вопрос буден задан и есть примеры ответов. Теперь можно легко получить оффер, подготовившись к самым популярным вопросам 😏
6 950
☕️Использование трассировки стека:
Отлов багов – это, возможно, самая трудоемкая составляющая процесса разработки на Java. Трассировка стека позволяет отследить, в каком именно месте проекта было выброшено исключение.
public class StackTraceExample {
public static void main(String[] args) {
try {
method1();
} catch (Exception e) {
e.printStackTrace(); // Вывод трассировки стека
}
}
public static void method1() {
method2();
}
public static void method2() {
method3();
}
public static void method3() {
throw new RuntimeException("Custom exception message");
}
}
🔈В этом примере показано как генерировать и обрабатывать трассировку стека в Java. Когда метод method3 вызывает исключение, это исключение перехватывается в методе main, и затем с помощью вызова e.printStackTrace() выводится трассировка стека, которая содержит информацию о вызове каждого метода от точки, где произошло исключение.6 950
☕️Использование аспектно-ориентированного программирования с помощью фреймворка AspectJ
Данная фишка используется для реализации перехватов событий и внедрения дополнительной логики в код без изменения его основной логики.
Пример кода:
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.JoinPoint;
@Aspect
public class LoggingAspect {
@Before("execution(* com.example.service.*.*(..))")
public void beforeServiceMethod(JoinPoint joinPoint) {
System.out.println("Логирование: Вызов метода " + joinPoint.getSignature().getName());
}
}
🔈В этом примере мы создаем аспект LoggingAspect, который использует фреймворк AspectJ для перехвата вызовов методов в пакете com.example.service. С помощью аспектно-ориентированного программирования мы можем внедрять логику логирования или другие операции в код без изменения самого кода, улучшая его модульность и поддерживаемость.6 950
❗Всем кодерам посвящается❗
Code Ready — твоя готовая библиотека:
Проекты на GitHub, JavaScript шпаргалки, разработка веб-приложений, и многое другое для твоих проектов, сразу с готовым кодом и примером их использования.
🌐 Расставь приоритеты, добавь лёгкости в свою работу и становись лучше с @code_ready
6 950
☕️Использование CountDownLatch
CountDownLatch - это класс в Java, который предоставляет возможность создания ожидания, пока не завершится определенное количество операций или событий. Он часто используется для ожидания завершения параллельных потоков.
Пример кода:
import java.util.concurrent.CountDownLatch;
public class Main {
public static void main(String[] args) throws InterruptedException {
int count = 3;
CountDownLatch latch = new CountDownLatch(count);
// Потоки, которые будут уменьшать счетчик
new Thread(new Worker(latch)).start();
new Thread(new Worker(latch)).start();
new Thread(new Worker(latch)).start();
// Ожидание завершения всех потоков
latch.await();
System.out.println("Все потоки завершили работу");
}
}
class Worker implements Runnable {
private CountDownLatch latch;
Worker(CountDownLatch latch) {
this.latch = latch;
}
public void run() {
// Имитация выполнения работы
try {
Thread.sleep((long) (Math.random() * 1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Поток завершил работу");
latch.countDown(); // Уменьшение счетчика
}
}
📣В этом примере создается объект CountDownLatch с начальным значением 3, и три потока уменьшают его значение перед завершением своей работы. Главный поток ожидает, пока значение счетчика не достигнет 0, после чего выводится сообщение о завершении всех потоков.6 950
#бесплатный _вебинар
Друзья, приглашаем вас на бесплатный вебинар, посвященный работе с Hibernate — самой популярной реализацией ORM-технологии. В рамках семинара поговорим о том, почему почти в каждом проекте используется Hibernate, разберемся какие плюсы и минусы у этой технологии. А также обсудим, почему Hibernate стал синонимом ORM в мире Java.
📝 Содержание вебинара:
• ключевые принципы ORM концепции;
• связь между ООП и реляционной моделью в Hibernate;
• плюсы и минусы Hibernate;
• разработка приложения с использованием Hibernate.
📅 Дата: 05.03.2024⏰ Время: 16:00-17:00 (мск.)
🚀 Регистрируйтесь прямо сейчас — количество мест ограничено.
6 950
☕️Использования коллекций неизменяемых (immutable) элементов.
Начиная с Java 9, была добавлена возможность использования коллекций неизменяемых (immutable) элементов. Это достигается с помощью метода of в классе List, Set и Map. Вот пример:
// Создание неизменяемого списка
List<String> immutableList = List.of("apple", "banana", "cherry");
// Создание неизменяемого множества
Set<String> immutableSet = Set.of("apple", "banana", "cherry");
// Создание неизменяемой карты
Map<String, Integer> immutableMap = Map.of("apple", 1, "banana", 2, "cherry", 3);
✔️Это полезно, поскольку неизменяемые коллекции обеспечивают безопасность параллельного доступа и гарантируют, что данные остаются неизменными. Это особенно полезно в многопоточных средах и предотвращает неожиданные изменения данных. Также это может улучшить читаемость кода, подчеркивая намерение сделать коллекцию неизменяемой.6 950
😨Вы видели этот хардовый тест для Java QA Engineer'ов (не для новичков)? Его проходят всего 30%
👉 Пройдите тест из 20 вопросов онлайн-курса «Java QA Engineer. Professional» и узнайте, осилите ли вы обучение в OTUS.
🟢 Пройти тест: https://otus.pw/49bs/
💣Все, кто успешно пройдет тест, получит доступ к записям уроков курса для знакомства с форматом обучения и спец.цену на курс.
💻 За 4 месяца обучения на курсе вы освоите:
— популярные инструменты автоматизации
— полный спектр технологий тестирования на Java
— ключевые инструменты автоматизации UI- и API-тестирования
— навыки работы с RestAssured и JsonSchemaValidator
— навыки работы с Appium
— многопоточное тестирование с помощью Selenoid
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: LjN8JwcUE
متاح الآن! بحث تيليغرام 2025 — أهم رؤى العام 
