es
Feedback
Секреты Java

Секреты Java

Ir al canal en Telegram

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

Mostrar más
7 991
Suscriptores
Sin datos24 horas
Sin datos7 días
Sin datos30 días
Archivo de publicaciones
✅ Использование класса ThreadLocal ThreadLocal - это класс в Java, который предоставляет уникальную копию переменной для кажд
Использование класса ThreadLocal ThreadLocal - это класс в Java, который предоставляет уникальную копию переменной для каждого потока. Это означает, что каждый поток имеет свою собственную копию переменной, которая не доступна другим потокам. Давайте рассмотрим пример: Создадим класс реализующий Runnable, в котором будет два счетчика, один - примитив, другой ThreadLocal. Значения обоих увеличиваются в методе run() и выводятся в консоль:
public class Counter implements Runnable {
    private int count = 0;
    private ThreadLocal<Integer> threadCount = ThreadLocal.withInitial(() -> 0);

    @Override
    public void run() {
        count = count + 1;
        threadCount.set(threadCount.get() + 1);

        System.out.println("count: " + count);
        System.out.println("threadCount: " + threadCount.get());
    }
}
И запустим выполнение в трех потоках последовательно:
public class Demo {

    @SneakyThrows
    public static void main(String[] argv) {
        var counter = new Counter();

        startAndWait(new Thread(counter));
        startAndWait(new Thread(counter));
        startAndWait(new Thread(counter));
    }

    @SneakyThrows
    private static void startAndWait(Thread thread) {
        thread.start();
        thread.join();
    }
}
Вывод в консоль будет:
counter: 1
threadCounter: 1
counter: 2
threadCounter: 1
counter: 3
threadCounter: 1
При выполнение метода run() каждый из трех потоков работает с общей переменной count и получает свою копию threadCount. Использование ThreadLocal позволяет безопасно работать с данными в многопоточной среде и предоставляет удобный способ хранения данных, которые должны быть доступны только в рамках определенного потока исполнения. ThreadLocal может быть полезен в многопоточных приложениях при кешировании данных, хранении какой-либо информации о сеансе в веб-приложениях, для изоляции данных между потоками и много чего другого. 🫡 Секреты Java #multithreading #threadlocal

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

#test
#test

✅ Стереотипные аннотации в Spring Стереотипные аннотации используются для автоматического определения Spring'ом бинов. Другим
Стереотипные аннотации в Spring Стереотипные аннотации используются для автоматического определения Spring'ом бинов. Другими словами - без необходимости писать дополнительный код Spring: ▫️Найдет классы помеченные этими аннотациями ▫️Создаст их экземпляры ▫️Внедрит все необходимые зависимости Основные стереотипные аннотации в Spring включают в себя @Component, @Service, @Repository и @Controller. Каждая из них представляет определенный тип компонента в приложении и имеет свои особенности. ▫️Component: @Component является базовой аннотацией для всех остальных стереотипных аннотаций в Spring, т.е. другие стереотипные аннотации помечены аннотацией @Component. Используется для пометки класса как компонента, который Spring должен автоматически обнаружить и настроить. ▫️Repository: @Repository является специализацией @Component, для маркировки класса используемого для доступа к базе данных. Класс помеченный этой аннотацией будет преобразовывать исключения пробрасываемые из этого класса в Spring DataAccessExeption (с помощью классов реализующих PersistenceExceptionTranslator) ▫️Service: @Service также является специализацией @Component и используется для пометки класса как сервиса, обеспечивающего бизнес-логику. Хоть он и не имеет функциональных отличий от @Component, предпочтительнее использовать его для того чтобы обозначить явно, что класс выполняет бизнес-логику. ▫️Controller: @Controller также является специализацией @Component и используется для пометки класса как контроллера, обрабатывающего HTTP-запросы. В отличии от предыдущих аннотаций, мы не можем заменить @Controller на какую либо другую стереотипную, т.к. DispatcherServler Spring'a сканирует классы, аннотированные с помощью @Controller, и ищет в них методы, помеченные аннотациями @RequestMapping для мапинга на них HTTP-запросов. В итоге, стереотипные аннотации в Spring помогают определить разные роли компонентов в приложении и обеспечить их автоматическую конфигурацию и управление контейнером Spring. 🫡 Секреты Java #spring

✅ Что такое Snapshot версия у артефактов Maven? Наверняка вы встречали такие зависимости у которых в версии стоит слово SNAPS
Что такое Snapshot версия у артефактов Maven? Наверняка вы встречали такие зависимости у которых в версии стоит слово SNAPSHOT. Пример:
<dependency>
    <groupId>com.example</groupId>
    <artifactId>my-library</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</dependency>
Что это значит? SNAPSHOT версия в Maven - это версия, которая все еще разрабатывается и может меняться. Она удобна для тестирования и обмена обновлениями на стадии разработки. Release версия (без суффикса SNAPSHOT)- это окончательная, стабильная версия проекта, которая готова к использованию и меняться уже не будет (только от версии к версии). Если ваше приложение использует какую-либо библиотеку с версией SNAPSHOT, это значит ее автор может доработать/удалить функционал и залить новый артефакт не поменяв версию. Совесть автора чиста, а ваше приложение после обновления зависимостей может не собраться. 🫡 Секреты Java #maven #gradle

❓Исходя из изображения выше, при поднятии Spring приложения, какое будет имя у созданного бина?
Anonymous voting

#test
#test

✅ Использование аннотаций @PostConstruct и @PreDestroy в Spring приложении Spring позволяет нам привязывать выполнение кастом
Использование аннотаций @PostConstruct и @PreDestroy в Spring приложении Spring позволяет нам привязывать выполнение кастомной логики к созданию и уничтожению бина. В этом посте мы рассмотрим аннотации @PostConstruct и @PreDestroy для определения методов, которые должны быть выполнены после создания и до уничтожения бина соответственно. До JDK 8 данные аннотации были частью стандартных библиотек, с JDK 11 удален из них и вынесен в отдельный артифакт, который можно найти в мавен репозитории:
implementation 'jakarta.annotation:jakarta.annotation-api:2.1.1'
- Аннотация @PostConstruct помечает метод, который Spring выполнит после завершения конструктора и инжекта всех зависимостей, но перед тем, как бин будет использоваться. Это полезно для инициализации ресурсов или выполнения других операций, которые требуют доступа к зависимостям. - Аннотация @PreDestroy помечает метод, который должен быть выполнен перед уничтожением бина. Это полезно для освобождения ресурсов или выполнения других операций перед тем, как бин больше не будет использоваться. Пример:
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

@Component
public class MyBean {

    @PostConstruct
    public void init() {
        System.out.println("MyBean init");
    }

    @PreDestroy
    public void cleanup() {
        System.out.println("MyBean will be destroyed");
    }
}
При запуске Spring приложения, будет создан бин MyBean и в консоль будет выведен текст "MyBean init". Если Spring будет удалять этот бин (по каким-либо причинам), он сначала вызовет метод cleanup() и выведет в консоль "MyBean will be destroyed", после чего удалит бин. Заключение: Аннотации @PostConstruct и @PreDestroy в Spring обеспечивают простой и эффективный способ управления жизненным циклом бинов, позволяя выполнить необходимые действия перед и после использования бина. Это делает их ценными инструментами для инициализации и освобождения ресурсов в приложениях Spring. 🫡 Секреты Java #spring #javax #jakarta

Ребят, в начале или середине своего пути вам часто нужно смотреть на примеры кода и реализацию разных возможностей ⚠️ Это повышает вашу насмотренность, понимание кода, да и вы всегда можете сохранить заготовки себе на будущие проекты Раньше я публиковал множество сайтов. Но теперь есть специальный канал для этого: @code_ready У вас будет все под рукой, с оформленным кодом, примерами, шпаргалками и без занудства ➡️ Так что подписываемся

❓Какой из следующих HTTP методов НЕ является идемпотентным?
Anonymous voting

#test
#test

🔥 Это база с 1700 вопросами с собеседований на Java разработчика. Фишка в том, что просчитана вероятность с которой вопрос буден задан и есть примеры ответов. Теперь можно легко получить оффер, подготовившись к самым популярным вопросам 😏

✅ Нормализация SQL баз данных: Первая нормальная форма (1NF) Нормализация баз данных нужна для того, чтобы сделать данные в н
Нормализация SQL баз данных: Первая нормальная форма (1NF) Нормализация баз данных нужна для того, чтобы сделать данные в них более организованными, структурированными и легко управляемыми. Это помогает избежать избыточности информации и дублирования данных, что делает базу данных более эффективной, улучшает производительность и уменьшает вероятность возникновения ошибок. Нормализация также способствует обеспечению целостности данных, что означает, что данные в базе остаются точными, актуальными и надежными во всех условиях. Существует несколько нормальных форм и мы рассмотрим их все в серии постов. Первая нормальная форма базы данных требует, чтобы каждая ячейка таблицы содержала только одно значение одного типа данных и чтобы каждая запись была уникальной. Пример без нормализации: Предположим, у нас есть таблица students, содержащая информацию о студентах и курсах, на которых они учатся.
| name     | courses          |
|----------|------------------|
| Алиса    | Математика, Физика |
| Боб      | Физика, Химия    |
В этом примере информация о курсах хранится в одной колонке courses, что является нарушением нормализации. С нормализацией: Чтобы привести таблицу к 1NF, мы разделим колонку courses на отдельные строки, каждая из которых содержит только один предмет:

| name   | courses   |
|--------|-----------|
| Алиса  | Математика|
| Алиса  | Физика    |
| Боб    | Физика    |
| Боб    | Химия     |
Теперь каждая колонка содержит только одно значение, и таблица соответствует требованиям 1NF. 🫡 Секреты Java #sql #1nf

Невозможно написать чистый код, действуя по списку правил. Нельзя стать мастером, изучив набор приемов. Профессионализм и мастерство формируются на основе ценностей, которые определяют дисицплину.
© Роберт Мартин 🫡 Секреты Java #quotes

Каналы любого уважающего себя разработчика: Java Developer — поможет узнать обо всех тонкостях и секретах языка Java. Python
Каналы любого уважающего себя разработчика: Java Developer — поможет узнать обо всех тонкостях и секретах языка Java. Python Developer — научит программировать на Python как настоящий разработчик. Подписывайся и прокачивай свои навыки👇🏻

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

#test
#test

⚡ Когда мне говорят, что Java слишком простой язык, я показываю канал Java Learning Здесь я научился: ▪️ Разрабатывать высоко
Когда мне говорят, что Java слишком простой язык, я показываю канал Java Learning Здесь я научился: ▪️ Разрабатывать высоконагруженные серверные приложения ▪️ Управлять сложными базами данных ▪️ Организовывать эффективную многопоточную обработку данных ▪️ Проходить технические собеседования в ведущие IT-компании Самый необычный канал про Java, подписывайся@Java_per_month

✅ Протокол HTTP простыми словами Протокол HTTP, что означает Hypertext Transfer Protocol (Протокол передачи гипертекста) - се
✅ Протокол HTTP простыми словами Протокол HTTP, что означает Hypertext Transfer Protocol (Протокол передачи гипертекста) - сетевой протокол прикладного уровня, который изначально предназначался для запроса у серверов документов в формате HTML, а позже стал универсальным протоколом взаимодействия в интернете. HTTP основан на модели клиент-сервер и предполагает обмен информацией в виде запросов и ответов. В рамках этого протокола, клиент отправляет запрос серверу, запрашивая определенные данные или ресурсы, а сервер отвечает на этот запрос, предоставляя необходимые данные или выполняя запрошенные операции. Основные понятия: ▫️Сервер: Это компьютер, который хранит данные или ресурсы и отправляет их по запросу. Он "слушает" запросы от клиентов и отправляет им нужные данные в ответе. ▫️Клиент: Это ваш браузер, приложение, или другой сервис, который отправляет запросы серверу, когда нужно получить какие-то данные от него. ▫️URL (Uniform Resource Locator): Это веб-адрес, по которому находится какой-то ресурс (та же веб-страница). Например, https://www.example.com/resource - это URL. ▫️HTTP-запрос: Когда вы вводите URL в браузер, он отправляет HTTP-запрос на сервер, запрашивая данные (например, HTML-страницу). ▫️HTTP-ответ: После получения запроса сервер отправляет HTTP-ответ обратно клиенту. Этот ответ может содержать запрошенную веб-страницу, изображения или другие данные. ▫️Методы HTTP: Это способы, с помощью которых клиент может взаимодействовать с сервером. Например, метод GET используется для получения данных, а метод POST - для отправки данных на сервер (например, когда вы отправляете форму). ▫️Статусы HTTP: Это числовые коды, которые сообщают клиенту о том, что произошло с запросом. Например, код "200" означает успешный запрос, а "404" - что ресурс не найден. HTTP позволяет веб-страницам и другим данным передаваться по всему миру, обеспечивая связь между серверами и клиентами. 🫡 Секреты Java #http #protocol

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