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

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

Відкрити в Telegram

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

Показати більше
6 954
Підписники
-124 години
-117 днів
+1330 день
Архів дописів
⌨️ Optional это полезная фишка языка, которая помогает работать с возможными null значениями, избегая проблем с NullPointerException. Optional оборачивает значение, которое может быть либо пустым, либо присутствующим, и предоставляет методы для работы с этим значением безопасным способом. Пример использования:

Optional<String> name = Optional.ofNullable(getUserName());
name.ifPresent(n -> System.out.println("Имя пользователя: " + n));
Если значение есть, оно выводится на экран. Если значение null, программа просто пропустит это место, и не возникнет исключения. Также можно задать значение по умолчанию:

String defaultName = name.orElse("Гость");
System.out.println(defaultName);
Это делает код более устойчивым к ошибкам и улучшает его читаемость. #java #Optional

Хочешь практиковать Java на реальных задачах? В поисках оригинального контента, а не копипаста из других источников? 👉 Заходи на новый канал 👈 Топовые задачи: — Много вопросов по concurrency и jvm — Разбираем стандартные ошибки и их решения — Оптимизируем код — Best practices — Задачи с реальных собеседований — Разный уровень сложности — Подробный разбор каждого решения Достойный материал для подготовки к собеседованиям, а также сложные и интересные задачи из реальной практики. Автор канала – Java-эксперт, более 10 лет в разработке. Опытный Lead dev и тимлид. 👉 Подписывайся и попробуй решить последнюю задачу! https://t.me/java_interview_tasks

Что выведет код?
Anonymous voting

public class Quest {
    private final String name;

    Quest(String name) {
        this.name = name;
    }

    private String name() {
        return name;
    }

    private void reproduce() {
        new Quest("reproduce") {
            void printName() {
                System.out.println(name());
            }
        }.printName();
    }

    public static void main(String[] args) {
        new Quest("main").reproduce();
    }
}
#java #quest

photo content

Что выведет код?
Anonymous voting

public class Quest {
    public static void main(String[] args) {
        System.out.println(isEqual(1, 1));
    }

    private static boolean isEqual(int i, int j) {
        return (i == j) ? null : false;
    }
}
#java #quest

Делюсь самой топовой 🔝 подборкой каналов, которые ведут профи своего дела и раскрывают важные темы в сфере: Разработки и Аналитики ⬇️ Не нужно больше искать тематические каналы и тратит на это кучу времени — уже всё тут Нажимай на ссылку ниже: 💻 https://t.me/addlist/d23m2d_lHE42MjAy и следи за каналами, чтобы держать руку на пульсе и первым получать самую актуальную информацию ✔️ Понравилось и хочешь в подборку?

⌨️ Пакетное выполнение запросов — это техника, которая позволяет выполнять несколько SQL-запросов в одной транзакции, что помогает оптимизировать производительность и уменьшить накладные расходы на соединение с базой данных. Основные методы для работы с пакетами запросов — это addBatch() и executeBatch(), которые являются частью интерфейса Statement (а также PreparedStatement и CallableStatement). Метод addBatch() добавляет SQL-запрос (или его параметризованную версию в случае с PreparedStatement) в пакет запросов для последующего выполнения. Каждый вызов этого метода добавляет один SQL-запрос в очередь пакета. Метод executeBatch() выполняет все запросы, добавленные в пакет. Пример:

Class.forName("oracle.jdbc.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "username", "password");
Statement s = con.createStatement();

String sql1 = "CREATE TABLE STUDENT(STUDENTID VARCHAR2(10) PRIMARY KEY,NAME VARCHAR2(20),DEPARTMENT VARCHAR2(10))";
String sql2 = "INSERT INTO STUDENT VALUES('S101','JEAN','CSE')";
String sql3 = "INSERT INTO STUDENT VALUES('S102','ANA','CSE')";
String sql4 = "INSERT INTO STUDENT VALUES('S103','ROBERT','ECE')";

s.addBatch(sql1);
s.addBatch(sql2);
s.addBatch(sql3);
s.addBatch(sql4);

s.executeBatch();
con.commit();
con.close();
#java #addBatch #executeBatch

Бесплатное IT-образование в 2024 Отобрали для вас полезные телеграм-каналы, которые помогут освоить программирование и другие
Бесплатное IT-образование в 2024 Отобрали для вас полезные телеграм-каналы, которые помогут освоить программирование и другие IT-направления Выбирайте нужное и подписывайтесь: 👩‍💻 Java: @Java_Iibrary 👩‍💻 Моб. разработка: @MobDev 📱 GitHub: @git_developer 🤓 Книги айти: @portalToIT ⚙️ Backend: @BackendPortal 👩‍💻 Frontend: @FrontendPortal 👩‍💻 Python: @PythonPortal 👩‍💻 C#: @KodBlog 👩‍💻 С/С++: @Cpportal 🖥 Базы Данных & SQL: @SQL 👩‍💻 Golang: @juniorGolang 👩‍💻 PHP: @PHPortal 👩‍💻 Разработка игр: @GameDevgx 👩‍💻 DevOps: @loose_code 🖥 Data Science: @DataSciencegx 🤔 Хакинг & ИБ: @cybersecinform 🐞 Тестирование: @QAPortal 📱 Маркетинг: @MarketingPortal 🖥 Дизайн: @PortalToDesign ➡️ Сохраняйте себе, чтобы не потерять

⌨️ Выполнение команды в командной строке с выводом результата

public class CommandLine {
    public static void main(String[] args) throws IOException {
        Runtime rt = Runtime.getRuntime();
        String[] commands = {"ping", "-c 5", "google.com"};
        Process proc = rt.exec(commands);

        BufferedReader stdInput = new BufferedReader(new
                InputStreamReader(proc.getInputStream()));

        BufferedReader stdError = new BufferedReader(new
                InputStreamReader(proc.getErrorStream()));

        // Read the output from the command
        System.out.println("Here is the standard output of the command:\n");
        String s = null;
        while ((s = stdInput.readLine()) != null) {
            System.out.println(s);
        }

        // Read any errors from the attempted command
        System.out.println("Here is the standard error of the command (if any):\n");
        while ((s = stdError.readLine()) != null) {
            System.out.println(s);
        }
    }
}
Метод Runtime.getRuntime() возвращает объект, представляющий текущую среду выполнения Java. Этот объект позволяет запускать команды системы. Метод exec() запускает системную команду и возвращает объект Process, который представляет запущенный процесс. Команда, которую нужно выполнить, передается как массив строк. Далее получаем поток для чтения данных из стандартного вывода процесса, который был запущен и выводим на консоль. Так же поступаем и с потоком вывода ошибок. Вывод:
Here is the standard output of the command:

PING google.com (173.194.222.138): 56 data bytes
64 bytes from 173.194.222.138: icmp_seq=0 ttl=60 time=39.479 ms
64 bytes from 173.194.222.138: icmp_seq=1 ttl=60 time=39.753 ms
64 bytes from 173.194.222.138: icmp_seq=2 ttl=60 time=47.982 ms
64 bytes from 173.194.222.138: icmp_seq=3 ttl=60 time=39.569 ms
64 bytes from 173.194.222.138: icmp_seq=4 ttl=60 time=39.850 ms

--- google.com ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 39.479/41.327/47.982/3.330 ms
Here is the standard error of the command (if any):
#java #Runtime #exec

Правда или Миф? Чистая правда. 🔸IT-специалисты - группа риска. 🤯 Постоянная умственная нагрузка, переработки и дедлайны, ст
Правда или Миф? Чистая правда. 🔸IT-специалисты - группа риска. 🤯 Постоянная умственная нагрузка, переработки и дедлайны, стрессы, тревожность, бессонница, выгорание - это не просто слова, а реальность для многих. Результат? 😔 Хроническая усталость и упадок сил, проблемы с концентрацией и низкая производительность на работе, не хватает энергии на любимые дела... Звучит знакомо? Есть решение! 💪 Uwio - платформа терапии тревожных расстройств, депрессии и выгорания. Что отличает ☺️☺️ ? 1️⃣ Комплексный подход. Не отдельные консультации, а продуманное комплексное решение: сессии с психотерапевтом + глубокая оптимизация сна, коррекция рациона + развитие навыков самоанализа и эмоциональной устойчивости. 2️⃣Контроль прогресса в системе аналитики. Глубокий анализ клинических показателей поможет вам прозрачно видеть изменения 3️⃣Терапия, основанная на данных. Система активного контроля прогресса - это инновационная разработка, которая существует только на платформе Uwio. Психотерапевт между сессиями анализирует ваше состояние и вносит необходимые корректировки в терапию. 4️⃣ Изменения за 8 недель. Программа имеет четкие временные рамки и поможет выйти на стабильный результат не затягивая терапию на месяцы и годы 5️⃣Проверенные специалисты. Психологи Uwio проходят строгий отбор и имеют большой опыт работы с тревожными расстройствами, депрессией и выгоранием. 6️⃣Оплата долями. Оплатить программу можно по частям и начать терапию уже сегодня 🔸 Пройдите анкетирование и получите индивидуальную программу в бот-приложении в Telegram Не ждите, пока проблемы станут невыносимыми! 😌 Заботьтесь о своем ментальном и физическом здоровье! Реклама. ООО "ЮВИО" ИНН:5906175087 Erid:2VSb5zHTXTv

Что выведет код?
Anonymous voting

public class Quest {
    public static void main(String[] args) {
        final String pig = "length: 10";
        final String dog = "length: " + pig.length();

        System.out.println("Animals are equal: " + pig == dog);
    }
}
#java #quest

⌨️ Как добавить элемент в середину массива? Есть несколько способов добавить элемент в середину массива. Однако, поскольку массивы имеют фиксированную длину, напрямую добавить элемент в существующий массив нельзя — нужно создавать новый массив с увеличенной длиной и копировать данные. Рассмотрим несколько способов: 1️⃣ Копирование вручную Суть в том что бы создать новый массив на 1 элемент больше оригинального и перенести элементы из старого, не забыв при этом вставить новый элемент.

int[] array = {1, 2, 4, 5};
int index = 2;  // индекс, куда вставить новый элемент
int newElement = 3;

// Создаем новый массив на 1 больше
int[] newArray = new int[array.length + 1];

// Копируем элементы до позиции вставки
for (int i = 0; i < index; i++) {
    newArray[i] = array[i];
}

// Вставляем новый элемент
newArray[index] = newElement;

// Копируем оставшиеся элементы
for (int i = index + 1; i < newArray.length; i++) {
    newArray[i] = array[i - 1];
}

// Печатаем новый массив
System.out.println(Arrays.toString(newArray)); // [1, 2, 3, 4, 5]
2️⃣ Использование коллекций (например, ArrayList) ArrayList динамический по размеру, и можно легко вставить элемент в любое место с помощью метода add(index, element).

Integer[] array = {1, 2, 4, 5};
int index = 2;  // индекс, куда вставить новый элемент
int newElement = 3;

List<Integer> list = new ArrayList<>(Arrays.asList(array));

// Вставляем элемент
list.add(index, newElement);

// Создаем новый массив на 1 больше
Integer[] newArray = list.toArray(array);

// Печатаем новый массив
System.out.println(Arrays.toString(newArray)); // [1, 2, 3, 4, 5]
3️⃣ Использование метода System.arraycopy Метод System.arraycopy позволяет эффективно копировать части массива.

int[] array = {1, 2, 4, 5};
int index = 2;  // индекс, куда вставить новый элемент
int newElement = 3;

// Создаем новый массив на 1 больше
int[] newArray = new int[array.length + 1];

// Копируем элементы до позиции вставки
System.arraycopy(array, 0, newArray, 0, index);

// Вставляем новый элемент
newArray[index] = newElement;

// Копируем оставшиеся элементы
System.arraycopy(array, index, newArray, index + 1, array.length - index);

// Печатаем новый массив
System.out.println(Arrays.toString(newArray)); // [1, 2, 3, 4, 5]
#java #array

Научим проверять не только руками, но и писать автотесты на курсе «Автоматизатор тестирования на Java». Что в программе: ✔ ос
Научим проверять не только руками, но и писать автотесты на курсе «Автоматизатор тестирования на Java». Что в программе: ✔ основы программирования на Java; ✔ фреймворк Pytest; ✔ инструменты Selenium; ✔ паттерн проектирования Page Object Model; ✔ автоматизация с помощью Postman и Swagger; ✔ архитектура ПО. Приходите на бесплатную консультацию, чтобы задать вопросы об обучении и карьерных перспективах.

⌨️ Jasypt (Java Simplified Encryption) — это библиотека для шифрования и защиты конфиденциальных данных в Java-приложениях. Она упрощает процесс шифрования и дешифрования данных, обеспечивая простой и интуитивно понятный API. Jasypt особенно полезен для шифрования конфигурационных файлов (например, паролей для баз данных), чувствительной информации в базах данных и других данных, требующих защиты. Подключение зависимости:

<dependency>
 <groupId>org.jasypt</groupId>
 <artifactId>jasypt</artifactId>
 <version>1.9.3</version>
</dependency>
Пример использования:

String myEncryptionPassword = "mySuperSecretPassword";
String secretData = "secret data";

AES256TextEncryptor textEncryptor = new AES256TextEncryptor();
textEncryptor.setPassword(myEncryptionPassword);
String myEncryptedText = textEncryptor.encrypt(secretData);
System.out.println(myEncryptedText);
// DpMHE0Yy+6Ctlyx5lchU8j50Y2TRlGSOjHwIqAroxvmgq0VMijs/y8GkR9vcF1Pg

String plainText = textEncryptor.decrypt(myEncryptedText);
System.out.println(plainText); // secret data
Применение в Spring Boot Для интеграции с Spring Boot Jasypt позволяет зашифровать чувствительные параметры конфигурации. Например, конфигурация для базы данных может быть записана так:

spring:
  datasource:
    url: ENC(encrypted-url)
    username: ENC(encrypted-username)
    password: ENC(encrypted-password)
Затем Jasypt автоматически расшифровывает эти значения при запуске приложения. #java #Jasypt #cryptography

⚡️ Вся база знаний по IT в одном месте! 🧑‍💻 IT База — краткие разборы самого важного из мира IT. Сотни мастхев-ресурсов, каждый день новые материалы по работе и подготовке к собеседованиям. Подойдёт как новичкам, так и состоявшимся айтишникам; 🖥 Frontend База — всё для фронтенд разработчиков. Готовые решения для проектов, полезные курсы по JS/HTML/CSS, готовые роадмапы для комфортного освоения в профессии и дальнейшего развития; 👣 Backend База — самое важное для бэкендеров. Всё о работе с PHP, MySQL, MongoDB, Golang и Rust в одном месте, плюс полные курсы и лайфхаки для работы на каждый день; 🖥 База Знаний — склад полезных курсов и материалов, где легко найти что-то нужное по хэштегам. Если вам что-то интересно про IT, то оно уже лежит на Базе, проверяйте. Успей подписаться, чтобы не потерять!

⌨️ События жизненного цикла объекта JPA При работе с JPA есть несколько событий, о которых мы можем получать уведомления в течение жизненного цикла объекта. JPA определяет семь событий жизненного цикла: @PrePersist - перед тем, как вызывается persist для нового объекта @PostPersist - после того, как вызывается persist для нового объекта @PreRemove - прежде чем сущность будет удалена @PostRemove - после удаления объекта @PreUpdate - перед операцией обновления @PostUpdate - после обновления сущности @PostLoad - после загрузки объекта Итак, если мы создаем новую сущность и вызываем метод сохранения нашего репозитория, вызывается наш метод, аннотированный @PrePersist, затем запись вставляется в базу данных и, наконец, вызывается наш метод @PostPersist. Если мы используем @GeneratedValue для автоматической генерации наших первичных ключей, мы можем ожидать, что этот ключ будет доступен в методе @PostPersist. Для операций @PostPersist, @PostRemove и @PostUpdate в документации упоминается, что эти события могут произойти сразу после выполнения операции или в конце транзакции. Следует отметить, что обратный вызов @PreUpdate вызывается только в том случае, если данные действительно изменяются, то есть если необходимо выполнить фактический оператор обновления SQL. Обратный вызов @PostUpdate вызывается независимо от того, действительно ли что-то изменилось. Если какой-либо из наших обратных вызовов для сохранения или удаления объекта выдаст исключение, транзакция будет отменена.

@Entity
public class User {
    private static Log log = LogFactory.getLog(User.class);

    @Id
    @GeneratedValue
    private int id;
    
    private String userName;
    private String firstName;
    private String lastName;
    @Transient
    private String fullName;
    
    // getter and setter
    
    @PrePersist
    public void logNewUserAttempt() {
        log.info("Attempting to add new user with username: " + userName);
    }
    
    @PostPersist
    public void logNewUserAdded() {
        log.info("Added user '" + userName + "' with ID: " + id);
    }
    
    @PreRemove
    public void logUserRemovalAttempt() {
        log.info("Attempting to delete user: " + userName);
    }
    
    @PostRemove
    public void logUserRemoval() {
        log.info("Deleted user: " + userName);
    }
    
    @PreUpdate
    public void logUserUpdateAttempt() {
        log.info("Attempting to update user: " + userName);
    }
    
    @PostUpdate
    public void logUserUpdate() {
        log.info("Updated user: " + userName);
    }
    
    @PostLoad
    public void logUserLoad() {
        fullName = firstName + " " + lastName;
    }
}
#java #Entity #Lifecycle

85% наших учеников находят работу в первые 3 месяца после обучения. Это наша гордость. Станьте одним из них — попробуйте свои
85% наших учеников находят работу в первые 3 месяца после обучения. Это наша гордость. Станьте одним из них — попробуйте свои силы в одной из 4 самых востребованных IT-специальностей. Выберите сами, кем хотите стать, а мы подскажем и поддержим вас на этом пути. Не нужно никаких начальных знаний, всему начнём обучать бесплатно. В первый месяц расскажем об основах программирования, а дальше погрузим в одну из специальностей: — Python — Тестирование — Фронтенд — Java Поможем уже через полгода приблизиться к зарплате 150 000+ рублей в месяц — именно столько получают в среднем разработчики в России. Чего ждать? Обучение ведь можно начать бесплатно! 👉 Вперёд к знаниям https://epic.st/g1LVE?erid=2VtzquYEFnS Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка навыков)», ИНН: 9704088880