uz
Feedback
Секреты Java

Секреты Java

Kanalga Telegram’da o‘tish

Обсуждаем Java, архитектуру, фреймворки и всё, о чем должны говорить разработчики. Владелец: @Alexey_Morl Реклама на бирже: https://telega.in/c/java_secrets

Ko'proq ko'rsatish
7 991
Obunachilar
Ma'lumot yo'q24 soatlar
Ma'lumot yo'q7 kunlar
Ma'lumot yo'q30 kunlar
Postlar arxiv
Присоединяйтесь к нашему бесплатному курсу и начните увлекательное путешествие в мир Java! Изучайте основы, создавайте програ
Присоединяйтесь к нашему бесплатному курсу и начните увлекательное путешествие в мир Java! Изучайте основы, создавайте программы, разбирайтесь с методами и анализируйте ошибки в коде. Практика, упражнения и проверочные тесты помогут вам освоить навыки программирования. 🎓 Чему вы научитесь: — Создавать программы с использованием основных конструкций языка.  — Разделять код на методы для повторного использования.  — Анализировать ошибки в коде с использованием отладочной печати. 💼 Включено в курс: 29 уроков (видео и/или текст), 35 упражнений в тренажере, 95 проверочных тестов + дополнительные материалы. Вы с нами?😉

❓Что выведет код на изображении выше?
Anonymous voting

#java #test
#java #test

✅ Варианты конкатенации строк В Java существует несколько способов конкатенации строк, каждый из которых имеет свои особеннос
Варианты конкатенации строк В Java существует несколько способов конкатенации строк, каждый из которых имеет свои особенности и области применения. Рассмотрим основные методы: ▫️Оператор "+" Самый простой и интуитивно понятный способ.
var result = "Hello" + " " + "World";
При таком подходе в пуле строк каждый раз создается новая строка. Простой, но не самый эффективный способ, когда происходит множество конкатенаций. ▫️StringBuilder Является более эффективным способом конкатенации строк, особенно в циклах или при частом изменении строк.
var sb = new StringBuilder("Hello");
sb.append(" ");
sb.append("World");
sb.toString(); // Hello World
Но такой вариант не потокобезопасен. ▫️StringBuffer Работает аналогично StringBuilder, но он синхронизирован и, следовательно, потокобезопасен.
var sb = new StringBuffer("Hello");
sb.append(" ");
sb.append("World");
sb.toString(); // Hello World
Но потокобезопасноть идет в ущерб производительности по сравнению со StringBuilder. ▫️String.concat()
var str = "Hello";
var result = str.concat(" ").concat("World"); // Hello World
Помните, что оригинальная строка не меняется! Производительнее оператора "+", принимает параметром только String. В отличии от "+" при аргументе null кидает NPE. ▫️String.join() Позволяет конкатенировать строки с использованием разделителя (в примере первый аргумент).
var result = String.join(" ", "Hello", "World"); // Hello World
Следующие аргументы - последовательность! Т.е. можете передать несколько параметров, или закинуть массив. Лучше использовать когда есть массив строк, чем конкатенировать их в цикле. ▫️String.format() Позволяет форматировать строки с помощью шаблонов, что может сделать код более читабельным.
var str1 = "Hello";
var str2 = "World";
var result = String.format("%s %s", str1, str2); // Hello World
Меньшая производительность по сравнению с другими методами и более сложный синтаксис для простых задач. Выбор метода, конечно, зависит от конкретных задач и требований. 🫡 Секреты Java #java #string

❓Что выведет код на изображении выше?
Anonymous voting

#test
#test

Когда там восстание машин? 🤖 Эксперты с каждый днём все больше волнуются из-за нейросетей: как бы они не вышли из под контро
Когда там восстание машин? 🤖 Эксперты с каждый днём все больше волнуются из-за нейросетей: как бы они не вышли из под контроля. И не зря. Те, что читают Гаджетную, в курсе всех новостей из мира технологий, а кто владеет информацией - тот владеет миром. 💎Полезные сервисы для работы, тренды, новые профессии - без этого теперь никуда. И да, о восстании машин мы сообщим раньше всех - https://t.me/+oYh5s591YuI1Y2Ji

Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
© Линус Торвальдс От себя: большинство хороших и исключительно все лучшие. 🫡 Секреты Java #quotes

Оплачиваемая стажировка и трудоустройство без опыта — ну ничего себе 😳 Все возможно с Добровольным квалификационным экзамено
Оплачиваемая стажировка и трудоустройство без опыта — ну ничего себе 😳 Все возможно с Добровольным квалификационным экзаменом! Это бесплатный проект Правительства Москвы, где ты можешь показать свои знания по специальности, запомниться потенциальным работодателям и получить оффер в престижные компании Москвы. Тебя ждет всего три шага: 1️⃣ Пройди тест После регистрации на сайте ДКЭ тебе будет доступно 70 профессий по 7 направлениям. Выбирай тест по своей специальности и проверь уровень своих знаний! 2️⃣ Реши кейс Если ты успешно сдал тест, тебя пригласят на следующий этап, где ты с другими участниками в команде будешь решать реальный кейс одного из работодателей. 3️⃣ Стань победителем Окажись в числе лучших по общему количеству баллов за оба этапа и получи шанс попасть на оплачиваемую стажировку с дальнейшим трудоустройством. Готов проявить себя? Регистрируйся и начинай проходить тест — https://dke.moscow Реклама. АНО "РАЗВИТИЕ ЧЕЛОВЕЧЕСКОГО КАПИТАЛА", АНО "РЧК". ИНН 7710364647. erid: LjN8KB6nL

❓Что выведет код на изображении выше?
Anonymous voting

#test
#test

✅ Open-Closed Principle Принцип открытости-закрытости (один из принципов SOLID) был сформулирован Бертраном Мейером в 1988 го
Open-Closed Principle Принцип открытости-закрытости (один из принципов SOLID) был сформулирован Бертраном Мейером в 1988 году:
Программные сущности должны быть открыты для расширения и закрыты для изменения
А если переформулировать этот принцип, то можно сказать - если расширение функционала требует существенных изменений уже существующего рабочего кода, значит ваша архитектура трещит по швам. Это, возможно, самый основной принцип построения надежной архитектуры, но и четкого критерия, что вот это сервис спроектирован с учетом OCP, тут нет. И по правде говоря, мы не сможем на 100% закрыть систему от изменений, но должны свести необходимость этих изменений к минимуму. Как? Тут на помощь приходят SRP - мы разделяем модули, которые меняются по разным причинам, и DIP - мы правильно организуем зависимости между ними. Расширение - это не столько про наследование, это про отделение абстракций от деталей реализации. Vertical Sliced Architecture, паттерны Listener, Strategy и другие - это все инструменты нам в помощь. Можете себе представить работу системе, где код бизнес-логики зависел бы от протоколов интеграций, от способов ввода/вывода, от реализации бд? Небольшое изменение в какой-либо части приложение приведет к необходимости каскадных изменений по всей системе. Глянем на небольшой пример:
public class Reporter {

    public void makeReport() {
        Data data = getDataFromDb();
        Report report = generateReport(data);
        print(report);
    }

    private Data getDataFromDb() {...}
    private Report prepareReport(Data data) {...}
    private void print(Report report) {...}
}
Реализация методов сейчас не важна. А теперь подумайте: Что если бизнесу, помимо печати, нужно будет этот отчет еще и в JSON на другом сервисе? Что если получать данные мы начнем не из бд? Что если на основании этих данных попросят формировать отчет и с другим набором полей для другого отдела? И что если сущность этого отчета потребуется в другой части приложения? Что бы вы изменили в этом коде? 🫡 Секреты Java #solid

✅ Open-Closed Principle Принцип открытости-закрытости (один из принципов SOLID) был сформулирован Бертраном Мейером в 1988 го
Open-Closed Principle Принцип открытости-закрытости (один из принципов SOLID) был сформулирован Бертраном Мейером в 1988 году:
Программные сущности должны быть открыты для расширения и закрыты для изменения
А если переформулировать этот принцип, то можно сказать - если расширение функционала требует существенных изменений уже существующего рабочего кода, значит ваша архитектура трещит по швам. Это, возможно, самый основной принцип построения надежной архитектуры, но и четкого критерия, что вот это сервис спроектирован с учетом OCP, тут нет. И по правде говоря, мы не сможем на 100% закрыть систему от изменений, но должны свести необходимость этих изменений к минимуму. Как? Тут на помощь приходят SRP - мы разделяем модули, которые меняются по разным причинам, и DIP - мы правильно организуем зависимости между ними. Расширение - это не столько про наследование, это про отделение абстракций от деталей реализации. Vertical Sliced Architecture, паттерны Listener, Strategy и другие - это все инструменты нам в помощь. Можете себе представить работу системе, где код бизнес-логики зависел бы от протоколов интеграций, от способов ввода/вывода, от реализации бд? Небольшое изменение в какой-либо части приложение приведет к необходимости каскадных изменений по всей системе. Глянем на небольшой пример:
public class Reporter {

    public void makeReport() {
        Data data = getDataFromDb();
        Report report = generateReport(data);
        print(report);
    }

    private Data getDataFromDb() {...}
    private Report prepareReport(Data data) {...}
    private void print(Report report) {...}
}
Реализация методов сейчас не важна. А теперь подумайте: Что если бизнесу, помимо печати, нужно будет этот отчет еще и в JSON на другом сервисе? Что если получать данные мы начнем не из бд? Что если на основании этих данных попросят формировать отчет и с другим набором полей для другого отдела? И что если сущность этого отчета потребуется в другой части приложения? Что бы вы изменили в этом коде? 🫡 Секреты Java #solid

✅ Использование @BatchSize для решения проблемы N+1 запроса в Hibernate В Hibernate проблема N+1 запроса возникает, когда вып
Использование @BatchSize для решения проблемы N+1 запроса в Hibernate В Hibernate проблема N+1 запроса возникает, когда выполняется один запрос для получения основного набора данных, а затем N дополнительных запросов для загрузки связанных данных. Это может сильно замедлить производительность приложения. Один из способов решения этой проблемы — использование аннотации @BatchSize. Аннотация @BatchSize позволяет указать размер партии (batch size) для загрузки связанных сущностей. Вместо выполнения множества отдельных запросов Hibernate будет загружать связанные сущности партиями, что значительно уменьшает количество запросов к базе данных. На примере из поста про проблему N+1 запроса: Если мы дополнительно пометим нашу связанную коллекцию аннотацией @org.hibernate.annotations.BatchSize (специально указал пакет - эта аннотация библиотеки Hibernate):
@Entity
public class Author {
    @Id
    private Long id;
    private String name;
    @BatchSize(size=5)
    @OneToMany(mappedBy = "author", fetch = FetchType.EAGER)
    private List<Book> books;
}
то в этом случае Hibernate будет загружать связанные книги партиями по 5 штук за один запрос и мы получим 2 запроса (с таким заполнением таблиц):
Hibernate: select a1_0.id,a1_0.name from authors a1_0
Hibernate: select b1_0.author_id,b1_0.id,b1_0.title from books b1_0 where b1_0.author_id = any (?)
Как это работает? ▫️Запрос загрузит всех авторов из базы данных. ▫️Запрос книг - вместо того, чтобы выполнять отдельный запрос для каждого автора, Hibernate выполнит запросы по 5 списков книг за раз (используя SQL конструкцию = ANY - эквивалент IN(...)) Т.е. если бы у нас было 20 авторов в бд, то при @BatchSize(size=5) мы выполнили бы 1 + (20/5) запрос, вместо 1 + 20; Использование аннотации @BatchSize — это простой и эффективный способ решить проблему N+1 запроса в Hibernate. Однако, важно выбирать размер партии, соответствующий вашему сценарию использования и нагрузке на базу данных, чтобы избежать чрезмерного потребления ресурсов. 🫡 Секреты Java #hibernate #jpa #nplus1

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

❓Что выведет код на изображении выше?
Anonymous voting

#test
#test

Мечтаешь об успешной карьере в Java-разработке, но не знаешь, с чего начать ❓ Прокачайся бесплатно в ИТ-лагере T1.Дебют! 🌟 Приглашаем студентов и выпускников всей страны в ИТ-лагерь — это новый образовательный интенсив для Java-разработчиков от Холдинга Т1 — крупнейшей ИКТ-компании в России по версии RAEX 2023. ИТ-лагерь проходит в два этапа: 1 месяц онлайн-обучения и неделя летнего атмосферного офлайн-буткемпа! ☀️ Гибкий формат позволяет совмещать обучение в ИТ-лагере со сдачей сессии или работой. Финалисты получат сертификат на оплачиваемую стажировку, а лучших выпускников с опытом сразу пригласят в команду Т1. 🗓 Подай заявку до 31 мая Реклама. ООО "Т1". ИНН 7720484492.

❓Какая переменная определена допустимым способом?
Anonymous voting

#test
#test