Telegram Web Link
🦾 Как уменьшить код Java Boilerplate с помощью Lombok
Home


Если вы начинаете новый проект, вы можете выбрать язык, который требует меньше кода для достижения целей. Однако в более крупных проектах нельзя просто переключиться на другой язык программирования. Коллега посоветовал нам рассмотреть возможность использования Project Lombok, чтобы писать меньше шаблонного кода в проектах Java. Недавно мы создали новый микросервис, основанный на Java, поэтому я подумал, что это хорошая возможность опробовать Project Lombok.

Статья
Github

@javatg
Задача с собеседования на Java разработчика | Тестовое задание Java

В этом видео разберу тестовое задание с собеседования на Java разработчика. Задание рассчитано на понимание структур данных, временной зависимости и поиска оптимального решения.

Видео
Код

@javatg
DBeaver – Бесплатный, мультиплатформенный инструмент баз данных для разработчиков, SQL программистов, администраторов баз данных и аналитиков.

Поддерживает любую базу данных, которая имеет драйвер JDBC (что означает - почти любую базу данных).
Также поддерживаются базы не на основе драйверов JDBC, такие как MongoDB, Cassandra, Couchbase, Redis, BigTable, DynamoDB и т. д.

DBeaver меет множество функций, включая редактор метаданных, редактор SQL, rich data editor, ERD, экспорт/импорт/миграцию данных, планы выполнения SQL и т. д.

#GitHub | #Java #Database #SQL

@javatg
#Вопросы_с_собеседования

К каким конструкциям Java применим модификатор static?

• полям;
• методам;
• вложенным классам;
• членам секции import.


@javatg
Vector API в Java: краткий обзор и тестирование

Итак, Vector API в Java сейчас — это модуль, который предоставляет возможность выполнять векторные вычисления, ускоряемые аппаратно. Является частью Project Panama.

В данный момент (Java 18) модуль находится в стадии третьего инкубатора.

Ключевая особенность — использование SIMD (single instruction, multiple data) — т.е. выполнение математической операции над несколькими скалярными значениями ( == вектором ) одновременно, что в теории может дать ускорение вычислений.

Читать дальше

@javatg
«SQL-блокнот» — web-приложение на Java + Spring Boot / MVC

В начале статьи расскажу о возможностях программы, а в конце будет ссылка на репозиторий. Программа запускается везде, где есть JVM (Java Virtual Machine), имеет простой и понятный интерфейс.

Итак, какую программу будем собирать? Ту, которая умеет:

Писать, хранить, редактировать SQL запросы;
Создавать подключения к различным СУБД;
Исполнять SQL запросы;
Выгружать результаты отработки запросов в Excel, обходя его ограничение в 1 млн строк (выборка автоматически разбивается по excel листам);
Разграничивать роли пользователей (пользователь/администратор);
Также программа имеет собственный механизм регистрации/авторизации, логирования действий пользователей;
Для примера я также приложил сервер СУБД Postgres, развернутый через Docker, чтобы описанная программа запускалась «из коробки».


Читать дальше

@javatg
Java – темный случайный лес

Про решающие деревья уже писали и на JAVA их показывали. При этом все знают деревья сами по себе работают, мягко говоря, не очень. Поэтому, зачем нужно одно плохое дерево, если есть отличный лес. Про лес мы сегодня и расскажем. Конечно, тут может быть ремарка, что «про это уже сто раз рассказывали» – да, но это будет рассказ про лес на JAVA.

Достоинства случайного леса перечислять глупо – любой, кто работает в DS больше одного дня и решивший хоть что-либо сложнее «Титаника» про него знает. Но, все-таки, давайте укажем на именно самые критичные:

— Лес годно отрабатывает пропуски, а пропуски данных в нашей практике — это очень частое дело.

— Он хорошо отрабатывает большие массивы данных. И, в нашем случае, это тоже критично, т.к. наши датасеты с ярдом-другим строк могут легко подвесить любую другую модель этак на месяц-другой и без гарантии на развешивание.

В рамках проведения аудита одной модели нам нужно было проверить насколько адекватно считаются показатели при принятии решения. В ходе проверки мы увидели наличие отклонения от нормального значения данных. Но, чтобы это проверить, нужно произвести воспроизведение модели

Читать дальше

@javatg
⚡️ Какой класс пакета java io позволяет создать поток вывода текстовых данных с учетом кодировки

Стандартная библиотека Java имеет весьма развитые средства вывода данных. Все возможности вывода данных сосредоточены в пакете java.io.

Существуют две параллельные иерархии классов вывода : OutputStream и Writer. Класс Writer введен в последних версиях Java.

Читать дальше

@javatg
Алгоритмическая задача про острова 

Решаем алгоритмическую задачу с собеседований про острова несколькими способами: реализация на языках Java и C#.

https://tproger.ru/problems/algoritmicheskaja-zadacha-pro-ostrova/
Метод delete()

Удаляет символы в подстроке данной строки буфера (StringBuffer). Подстрока начинается с указанного начального индекса и распространяется до символа конечного индекса, или до конца StringBuffer, если такого символа не существует.

Другими словами метод позволяет удалить символы из строки, начиная и заканчивая указанными индексами.

Если start (начальный индекс) равен end (конечный индекс), то изменения не производятся.

Параметры:
• start — начальный индекс, включительно;
• end — конечный индекс, не включая.
📌 Собеседование Java разработчика. Наиболее Часто Задаваемые Вопросы

В этом посте, я с удовольствием раскрою, вероятно, большинство возможных вопросов на Java-собеседовании, от простых до самых сложных.

Читать

@javatg
#вопросы_с_собеседований
Как обрабатывать исключения в Spring MVC Framework?

В Spring MVC интерфейс HandlerExceptionResolver (из пакета org.springframework.web.servlet) предназначен для работы с непредвиденными исключениями, возникающими во время выполнения обработчиков. По умолчанию DispatcherServlet регистрирует класс DefaultHandlerExceptionResolver (из пакета org.springframework.web.servlet.mvc.support). Этот распознаватель обрабатывает определенные стандартные исключения Spring MVC, устанавливая специальный код состояния ответа. Можно также реализовать собственный обработчик исключений, аннотировав метод контроллера с помощью аннотации @ExceptionHandler и передав ей в качестве атрибута тип исключения. В общем случае обработку исключений можно описать таким образом:

Controller Based – указать методы для обработки исключения в классе контроллера. Для этого нужно пометить такие методы аннотацией @ExceptionHandler.

Global Exception Handler – для обработки глобальных исключений спринг предоставляет аннотацию @ControllerAdvice.

HandlerExceptionResolver implementation – Spring Framework предоставляет интерфейс HandlerExceptionResolver, который позволяет задать глобального обработчика исключений. Реализацию этого интерфейса можно использовать для создания собственных глобальных обработчиков исключений в приложении.

Подробнее

@javatg
#вопросы_с_собеседований
Что такое класс Spring JdbcTemplate и как его использовать?

Шаблон Spring JDBC — это основной API, через который мы можем получить доступ к интересующей нас логике операций с базой данных:
☕️ Создание и закрытие соединений
☕️ Выполнение операторов и вызовы хранимых процедур
☕️ Итерация по ResultSet и возврат результатов

Чтобы использовать его, нам нужно определить простую конфигурацию DataSource:
@Configuration
@ComponentScan("org.smth.jdbc")
public class SpringJdbcConfig {
@Bean
public DataSource mysqlDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/springjdbc");
dataSource.setUsername("guest_user");
dataSource.setPassword("guest_password");

return dataSource;
}
}

@javatg
Как устроены атомики?

Начнем с того, что такое атомики и зачем нужны. Atomic* – семейство классов из java.util.concurrent. Они предоставляют набор атомарных операций для соответствующих типов. Например с помощью методов getAndIncrement/incrementAndGet класса AtomicInteger можно делать неатомарный в обычных условиях инкремент (i++).

Условно можно разделить подходы реализации большинства atomic-методов на две группы: compare-and-set и set-and-get.

Методы категории compare-and-set принимают старое значение и новое. Если переданное старое значение совпало с текущим, устанавливается новое. Обычно делегируют вызов в методы класса Unsafe, которые заменяются нативными реализациями виртуальной машины. Виртуальная машина в большинстве случаев использует атомарную операцию процессора compare-and-swap (CAS). Поэтому атомики обычно более эффективны чем стандартная дорогостоящая блокировка.

В случае set-and-get старое значение неизвестно. Поэтому нужен небольшой трюк: программа сначала считывает текущее значение, а затем записывает новое, тоже с помощью CAS, потому что запись могла успеть поменяться даже за этот шаг. Эта попытка чтения+записи повторяется в цикле, пока старое значение не совпадет и переменная не будет успешно записана.

Этот трюк называется double-checked или optimistic locking, и может быть использован и в пользовательском коде с любым способом синхронизации. Оптимистичность заключается в том, что мы надеемся что состояния гонки нет, прибегая к синхронизации только если гонка всё же случилась. Реализация оптимистичной блокировки может быть дана как отдельная задача.

#Многопоточность

@javatg
🏆 Java Concurrency или как работают потоки: применение на практике

Для того, чтобы успешно строить карьеру программиста, необходимо устроиться работать по соответствующей профессии, а также знать особенности языков программирования. Огромным спросом у разработчиков на данный момент пользуется Java. Это – кроссплатформенный универсальный вариант «общения» с компьютерами и программным обеспечением. Прост в освоении, обладает относительно понятным синтаксисом. Многофункционален, имеет возможность ООП.

Когда будущий разработчик проходит собеседование, ему задают разнообразные вопросы по коддингу. В случае с Java немаловажным моментом является тема потоков. Особенно многопоточности. Данная статья поможет разобраться в соответствующем направлении, а также составить приложение, использующее Java Concurrency.

➡️ Читать дальше

@javatg
2024/10/04 03:21:36
Back to Top
HTML Embed Code: