Java | Фишки и трюки
الذهاب إلى القناة على Telegram
Java: примеры кода, интересные фишки и полезные трюки Купить рекламу: https://telega.in/c/java_tips_and_tricks ✍️По всем вопросам: @Pascal4eg
إظهار المزيد6 677
المشتركون
-224 ساعات
-167 أيام
-6630 أيام
أرشيف المشاركات
6 678
public class Quest {
public static void main(String[] args) {
System.out.print(op1() + op2() * op3());
}
private static int op1() {
System.out.print(1);
return 1;
}
private static int op2() {
System.out.print(2);
return 2;
}
private static int op3() {
System.out.print(3);
return 3;
}
}
#java #quest6 678
⌨️ Использование Fixed Thread Pool
1️⃣ Создание пула потоков
Для начала нужно создать экземпляр
ExecutorService, который будет представлять ваш пул потоков. В этом примере мы создадим фиксированный пул из 5 потоков:
ExecutorService executor = Executors.newFixedThreadPool(5);
2️⃣ Отправка задач для выполнения
После создания пула, вы можете отправлять ему задачи с помощью метода submit(). В качестве примера, давайте создадим несколько задач, которые будут выполняться параллельно:
for (int i = 0; i < 10; i++) {
final int taskId = i;
executor.submit(() -> {
System.out.println("Задача " + taskId + " выполняется в: " + Thread.currentThread().getName());
// Имитация длительной задачи
try {
Thread.sleep(1000); // Задержка на 1 секунду
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
System.out.println("Задача " + taskId + " завершена в: " + Thread.currentThread().getName());
});
}
3️⃣ Завершение работы пула
После того как все задачи были отправлены, важно завершить работу пула, чтобы освободить ресурсы:
executor.shutdown(); // Ждем завершения всех задач
В этом примере создается пул из 5 потоков, и на него отправляется 10 задач. Поскольку пул состоит из 5 потоков, одновременно будут выполняться не более 5 задач. Остальные задачи будут ожидать своей очереди. Это демонстрирует, как Thread Pool управляет ресурсами и оптимизирует обработку задач.
При использовании Thread Pool вы можете быть уверены, что ваше приложение будет работать более эффективно, избегая затрат на создание новых потоков и управляя нагрузкой на систему.
#java #FixedThreadPool6 678
💼 Декабрьский челлендж для алготрейдеров!
Используешь роботов в торговле на бирже? Тогда заходи в Терминал или приложение Т-Банка, нажимай на кнопку «Участвовать», подключай брокерский счет и готовься к конкурсу от Т-Инвестиций.
С 2 по 13 декабря твой робот должен совершить минимум 1000 сделок. По итогам конкурса выберем трейдеров с самой высокой доходностью в двух категориях: портфели до 1 млн руб. и от 1 млн руб.
Лидеры категорий разделят между собой призовой фонд в размере 550 000 рублей.
Узнать больше про конкурс можно тут.
P.S.📚 А если не торгуешь, но эта тема интересна - то изучи Invest API для подключения торговых роботов, готовый sdk и примеры роботов других участников.
Сроки акции с 2.12.2024 по 13.12.2024. Подробнее об организаторе акции, порядке её проведения, призах, сроках, месте и порядке их получения на tbank.ru. АО «ТБанк». Реклама.
6 678
⌨️ Использование логов: Log4j и SLF4J
Логирование — важная часть программирования, позволяющая отслеживать поведение приложения, находить и устранять ошибки, а также анализировать производительность. В мире Java два наиболее популярных инструмента для логирования — Log4j и SLF4J. Разберем их, выясним, в чем их отличия, и как их эффективно использовать!
🛠 Log4j — это мощная библиотека логирования, создающая гибкий и настраиваемый механизм для записи отчетов о различных событиях.
Плюсы:
- Гибкая настройка: Вы можете четко настраивать уровни логирования, выводить логи в различные форматы и хранить их в файлах или базах данных.
- Аспектная ориентация: Легко создавать сложные правила логирования.
Пример использования Log4j:
1. Добавление зависимостей (в
pom.xml):
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
2. Создание конфигурации (log4j.properties):
log4j.rootLogger=DEBUG, FILE
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=application.log
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1} - %m%n
3. Пример кода:
import org.apache.log4j.Logger;
public class Log4jExample {
static Logger logger = Logger.getLogger(Log4jExample.class);
public static void main(String[] args) {
logger.info("Информационное сообщение");
logger.error("Ошибка!", new Exception("Пример исключения"));
}
}
📖 SLF4J (Simple Logging Facade for Java) — это абстракция для разных библиотек логирования, которая позволяет сменить библиотеку логирования без изменения кода.
Плюсы:
- Универсальность: Поддерживает различные реализации логирования, что позволяет быть гибким в выборе инструментов.
- Чистота кода: Позволяет более лаконично управлять логами.
Пример использования SLF4J:
1. Добавление зависимостей (в pom.xml):
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.30</version>
</dependency>
2. Пример кода:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Slf4jExample {
private static final Logger logger = LoggerFactory.getLogger(Slf4jExample.class);
public static void main(String[] args) {
logger.info("Информационное сообщение с SLF4J");
logger.error("Ошибка!", new Exception("Пример исключения"));
}
}
🔄 Когда использовать?
- Log4j — когда вам нужен детальный контроль и настройка логирования. Хорошо подходит для сложных приложений, требующих многофункционального логирования.
- SLF4J — когда нужна гибкость и возможность переключаться между различными библиотеками логирования. Идеален для разработчиков, работающих с несколькими проектами.
💡 Итог: Используйте SLF4J для создания абстрактного логирования и Log4j в качестве конкретной реализации, чтобы не только создать гибкую, но и мощную систему логирования для вашего Java-приложения!
#java #Logging #Log4j #SLF4J6 678
🔍 Google — В С Ё ?
В 2024 году невозможно найти что-то полезное, просто загуглив: выдача поиска забита мусором из ChatGPT, а все годные материалы не попадают в топы поиска.
Хорошо, что есть База Знаний — сеть каналов, в которой команда опытных айтишников постит лучшее из мира IT. Для вашего удобства всё отсортировано по категориям:
👩💻 Все языки: https://t.me/main_it_baza
🖥 Java: https://t.me/java_baza
👩💻 Frontend: https://t.me/frontend_baza
👣 Backend: https://t.me/backend_baza
📊 Архив: https://t.me/knowledge_baza
🕔 Ссылки будут активны ещё 48 часов, успейте сохранить себе, чтобы не потерять
6 678
⌨️ Что такое Пул Потоков (Thread Pool)?
Пул потоков (Thread Pool) — это группа заранее созданных потоков, готовых к выполнению задач. Вместо создания нового потока для каждой задачи, пул повторно использует уже существующие потоки, что снижает нагрузку на систему и повышает производительность приложения.
📌 Основные виды пулов потоков:
1️⃣ Фиксированный Пул (Fixed Thread Pool):
- Создает заданное количество потоков. Если все потоки заняты, новые задачи ждут в очереди.
ExecutorService executor = Executors.newFixedThreadPool(5);
2️⃣ Пул с переменным количеством потоков (Cached Thread Pool):
- Создает новые потоки по мере необходимости и уничтожает неактивные потоки после определенного времени.
ExecutorService executor = Executors.newCachedThreadPool();
3️⃣ Планировщик (Scheduled Thread Pool):
- Позволяет выполнять задачи с задержкой или периодически.
ScheduledExecutorService executor = Executors.newScheduledThreadPool(3);
🏷️ Используйте пулы потоков, чтобы упростить управление многопоточными задачами и улучшить производительность вашего приложения!
#java #ThreadPool6 678
+4
Senior-разработчик создал крутейший канал про SQL
Благодаря простым картинкам даже новичок научится разрабатывать приложения с использованием баз данных.
Присоединяйтесь: @SQL
6 678
⌨️ Создание RESTful API на Spring Boot
1️⃣ Настройка проекта
Создайте новый проект Spring Boot, добавив зависимости Spring Web и Lombok.
2️⃣ Создание модели
User
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Long id;
private String name;
private String email;
}
Модель данных для пользователя с свойствами ID, именем и email.
3️⃣ Создание контроллера UserController
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping("/api/users")
public class UserController {
private final List<User> users = new ArrayList<>();
@GetMapping
public List<User> getAllUsers() {
return users; // Получение всех пользователей
}
@PostMapping
public User createUser(@RequestBody User user) {
users.add(user); // Создание нового пользователя
return user;
}
}
Контроллер, обрабатывающий запросы для получения и создания пользователей.
4️⃣ Примеры запросов
✔️ Получение всех пользователей:
Запрос:
GET /api/users
Возвращает список всех пользователей.
✔️ Создание нового пользователя:
Запрос:
POST /api/users
Content-Type: application/json
{
"id": 1,
"name": "John Doe",
"email": "john.doe@example.com"
}
Создаёт нового пользователя и возвращает его данные.
5️⃣ Тестирование API с Postman
Используйте Postman для отправки запросов и проверки работы вашего API. Вы можете получать данные, добавлять пользователей, обновлять и удалять их по аналогии с примерами выше.
#java #RESTfulAPI #SpringBoot6 678
🌐 REST и RESTful API
REST (Representational State Transfer) — это архитектурный стиль для проектирования сетевых приложений. Он использует стандартные методы HTTP и акцентирует внимание на взаимодействии между клиентом и сервером с помощью ресурсов.
Основные принципы REST:
1️⃣ Клиент-серверная архитектура:
- Четкое разделение между клиентом и сервером. Клиент отвечает за пользовательский интерфейс, а сервер — за обработку данных и бизнес-логику.
2️⃣ Статус и состояние:
- Каждый запрос от клиента к серверу должен содержать всю необходимую информацию для обработки запроса. Сервер не хранит состояние сеанса (stateless).
3️⃣ Кэшируемость:
- Ответы должны быть явно обнародованы как кэшируемые или не кэшируемые. Это позволяет уменьшить количество запросов к серверу и улучшает производительность.
4️⃣ Единообразие интерфейса:
- Все взаимодействия между клиентом и сервером осуществляются через четкий и единообразный интерфейс, что упрощает интеграцию.
5️⃣ Многоуровневость:
- Система может быть структурирована на несколько уровней, где каждый уровень может вызывать другой, обеспечивая гибкость и упрощая управление.
RESTful API — это API, который следует принципам REST. Это интерфейс, который использует стандартные HTTP методы для выполнения операций с ресурсами, представленными в виде URI.
Основные HTTP методы в RESTful API:
1️⃣ GET:
- Используется для получения информации о ресурсе.
- Пример:
GET /users — получить список всех пользователей.
2️⃣ POST:
- Используется для создания нового ресурса.
- Пример: POST /users — создать нового пользователя.
3️⃣ PUT:
- Используется для обновления существующего ресурса (полное обновление).
- Пример: PUT /users/1 — обновить информацию о пользователе с ID=1.
4️⃣ PATCH:
- Используется для частичного обновления ресурса.
- Пример: PATCH /users/1 — обновить определенные поля у пользователя с ID=1.
5️⃣ DELETE:
- Используется для удаления ресурса.
- Пример: DELETE /users/1 — удалить пользователя с ID=1.
RESTful API обычно возвращают данные в форматах:
- JSON (JavaScript Object Notation): легковесный формат, который легко читаем и записывается как людьми, так и машинами. Это самый распространенный формат для передачи данных в RESTful API.
- XML (eXtensible Markup Language): более старый формат, который также используется, но менее популярен в новых приложениях.
Применение RESTful API:
✔️ Веб-приложения: RESTful API часто используются в веб-приложениях для взаимодействия с серверами и базами данных.
✔️ Мобильные приложения: Многие мобильные приложения используют RESTful API для получения данных.
✔️ Интеграция систем: RESTful API позволяют различным системам взаимодействовать друг с другом с минимальными усилиями.
#REST #RESTfulAPI #API6 678
public class Quest {
public static void main(String[] args) {
int b = 500;
int c = inc(b);
System.out.println(b==c);
}
private static int inc(int num) {
return num++;
}
}
#java #quest6 678
Прожарка резюме для Java-разработчиков уже завтра
Ребята из менторской программы ШОРТКАТ разберут на эфире реальные резюме и подскажут, что улучшить, чтобы точно дойти до собеса.
Когда: 28 ноября, в четверг, в 19:00 по мск
Ревьюит резюме рекрутер с опытом работы в Яндексе и Т-Банке.
☑️ Если хотите закинуть своё резюме, подпишитесь на бота @shortcut_sh_bot — резюме будут собирать там
☑️ Если закидывать нечего, но хочется посмотреть со стороны — тоже подписывайтесь на бота @shortcut_sh_bot. Там будет ссылка на трансляцию и запись после
После эфира все получат памятку, как использовать ChatGPT для резюме.
Ссылку пришлют, не поверите, тоже в боте @shortcut_sh_bot
Короче, подпишитесь на бот, чтобы ничего не пропустить @shortcut_sh_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqwCXBFD
6 678
⌨️ Сравнение объектов с помощью
Comparator и Comparable
В Java для сортировки объектов используются два ключевых интерфейса: Comparable и Comparator. Понимание их отличий и применения поможет вам эффективно управлять сортировкой данных в коллекциях.
📚 Краткие определения:
- Comparable:
- Используется, когда класс должен иметь естественный порядок. Например, мы можем сортировать людей по возрасту.
- Сигнатура метода: int compareTo(T o).
Пример:
class Person implements Comparable<Person> {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
@Override
public int compareTo(Person other) {
return Integer.compare(this.age, other.age); // Сравнение по возрасту
}
}
- Comparator:
- Используется для создания внешних стратегий сравнения, позволяя определять несколько способов сортировки. Подходит для сортировки объектов разных классов.
- Сигнатура метода: int compare(T o1, T o2).
Пример:
import java.util.Comparator;
class NameComparator implements Comparator<Person> {
@Override
public int compare(Person p1, Person p2) {
return p1.name.compareTo(p2.name); // Сравнение по имени
}
}
⚖️ Когда использовать:
- Comparable:
- Используйте, если у класса есть естественный порядок. Например, чтобы сортировать людей по возрасту.
- Сортировка с помощью Collections.sort() или Arrays.sort() будет проще.
Пример использования:
List<Person> people = Arrays.asList(new Person("Alice", 30), new Person("Bob", 25));
Collections.sort(people); // Сортировка по возрасту с использованием Comparable
- Comparator:
- Идеален для ситуаций, когда необходимо изменить порядок сортировки или сравнивать объекты разных классов.
Пример использования:
List<Person> people = Arrays.asList(new Person("Alice", 30), new Person("Bob", 25));
Collections.sort(people, new NameComparator()); // Сортировка по имени с использованием Comparator
#java #Comparator #Comparable6 678
Типичная картина на рынке в 2024:
вы отправили свое резюме в 100+ компаний, и… тишина. Или наконец-то попали на собеседование, а после него — опять шаблонное сообщение с отказом.
Знакомо каждому новичку. Чтобы не допустить типичных ошибок и чувствовать себя уверенно на любом интервью, приходи на бесплатную карьерную консультацию!
Координатор FAANG School найдет слабые места и превратит их в твои сильные стороны:
🟠основные ошибки, которые допускают джуны в своем резюме;
🟠проекты, которые реально вызывают интерес работодателей (вместо скучных формальных списков);
🟠как сегодня выглядит рынок труда и чего ждут работодатели от твоего CV;
🟠полный обзор востребованных технологий - какие навыки будут важны в 2025 году, и как их освоить
Улучши резюме, выделись среди конкурентов и успешно пройти собеседование.
⬇️ Без лишней воды, фокус только на том, что сработает в реальном мире. Не упусти свой шанс. Записывайся на карьерную сессию прямо сейчас и получи Java Roadmap в подарок!
6 678
public class Quest {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1,2,3);
List<Integer> subList = list.subList(1, 2);
subList.set(0, 5);
System.out.println(list.get(1));
}
}
#java #quest6 678
Бесплатный интенсив: Java-разработчик: старт в профессии с нуля.
📆 Когда: 27-28 ноября в 19:00 по мск.
За два дня интенсива в прямом эфире, под руководством опытного Java-разработчика, вы сможете:
✔️ Познакомиться с синтаксисом и основными конструкциями языка Java.
✔️ Написать свой первый проект и определить, подходит ли вам профессия разработчика.
✔️ Создать Telegram-бота с нуля.
✔️ Узнать ответы интересующие вас вопросы.
✔️ Получить доступ к закрытому профессиональному сообществу.
🎁 Подарки для участниковинтенсива: гайд «Как заговорить на сленге IT-специалистов», карта компетенций начинающего Java-разработчика и доступ в закрытое сообщество «Старт в Java» от Хекслета!
6 678
⌨️ HashMap и TreeMap: Когда и как использовать
В Java коллекции Map предоставляют возможность хранить пары "ключ-значение". Два популярных варианта —
HashMap и TreeMap. Давайте разберем их ключевые особенности и когда их лучше использовать.
📚 Kраткие определения:
- HashMap:
- Неупорядоченная коллекция.
- Основан на хэш-таблице.
- TreeMap:
- Упорядоченная коллекция.
- Основан на красно-черном дереве.
- Поддерживает сортировку по ключам.
⚖️ Когда использовать:
- HashMap:
- Если важна производительность и порядок хранения не имеет значения.
- Когда нужно быстро получать значения по ключу
- TreeMap:
- Если необходимо хранить элементы в отсортированном порядке.
- Для использования функционала "примитивного" поиска (например, firstKey() или lastKey()).
📌 Подведение итогов:
Выбор между HashMap и TreeMap зависит от ваших требований к производительности и порядку элементов. Помните, что HashMap лучше подходит для большинства случаев, когда необходим быстрый доступ, а TreeMap — для упорядоченного хранения данных.
#java #HashMap #TreeMap