🦾 Как уменьшить код Java Boilerplate с помощью Lombok
Home
Если вы начинаете новый проект, вы можете выбрать язык, который требует меньше кода для достижения целей. Однако в более крупных проектах нельзя просто переключиться на другой язык программирования. Коллега посоветовал нам рассмотреть возможность использования Project Lombok, чтобы писать меньше шаблонного кода в проектах Java. Недавно мы создали новый микросервис, основанный на Java, поэтому я подумал, что это хорошая возможность опробовать Project Lombok.
Статья
Github
@javatg
Home
Если вы начинаете новый проект, вы можете выбрать язык, который требует меньше кода для достижения целей. Однако в более крупных проектах нельзя просто переключиться на другой язык программирования. Коллега посоветовал нам рассмотреть возможность использования Project Lombok, чтобы писать меньше шаблонного кода в проектах Java. Недавно мы создали новый микросервис, основанный на Java, поэтому я подумал, что это хорошая возможность опробовать Project Lombok.
Статья
Github
@javatg
DBeaver – Бесплатный, мультиплатформенный инструмент баз данных для разработчиков, SQL программистов, администраторов баз данных и аналитиков.
Поддерживает любую базу данных, которая имеет драйвер JDBC (что означает - почти любую базу данных).
Также поддерживаются базы не на основе драйверов JDBC, такие как MongoDB, Cassandra, Couchbase, Redis, BigTable, DynamoDB и т. д.
DBeaver меет множество функций, включая редактор метаданных, редактор SQL, rich data editor, ERD, экспорт/импорт/миграцию данных, планы выполнения SQL и т. д.
#GitHub | #Java #Database #SQL
@javatg
Поддерживает любую базу данных, которая имеет драйвер JDBC (что означает - почти любую базу данных).
Также поддерживаются базы не на основе драйверов JDBC, такие как MongoDB, Cassandra, Couchbase, Redis, BigTable, DynamoDB и т. д.
DBeaver меет множество функций, включая редактор метаданных, редактор SQL, rich data editor, ERD, экспорт/импорт/миграцию данных, планы выполнения SQL и т. д.
#GitHub | #Java #Database #SQL
@javatg
#Вопросы_с_собеседования
К каким конструкциям Java применим модификатор static?
• полям;
• методам;
• вложенным классам;
• членам секции import.
@javatg
К каким конструкциям Java применим модификатор static?
• методам;
• вложенным классам;
• членам секции import.
@javatg
Vector API в Java: краткий обзор и тестирование
Итак, Vector API в Java сейчас — это модуль, который предоставляет возможность выполнять векторные вычисления, ускоряемые аппаратно. Является частью Project Panama.
В данный момент (Java 18) модуль находится в стадии третьего инкубатора.
Ключевая особенность — использование SIMD (single instruction, multiple data) — т.е. выполнение математической операции над несколькими скалярными значениями ( == вектором ) одновременно, что в теории может дать ускорение вычислений.
Читать дальше
@javatg
Итак, 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
В начале статьи расскажу о возможностях программы, а в конце будет ссылка на репозиторий. Программа запускается везде, где есть JVM (Java Virtual Machine), имеет простой и понятный интерфейс.
Итак, какую программу будем собирать? Ту, которая умеет:
Писать, хранить, редактировать SQL запросы;
Создавать подключения к различным СУБД;
Исполнять SQL запросы;
Выгружать результаты отработки запросов в Excel, обходя его ограничение в 1 млн строк (выборка автоматически разбивается по excel листам);
Разграничивать роли пользователей (пользователь/администратор);
Также программа имеет собственный механизм регистрации/авторизации, логирования действий пользователей;
Для примера я также приложил сервер СУБД Postgres, развернутый через Docker, чтобы описанная программа запускалась «из коробки».
Читать дальше
@javatg
Java – темный случайный лес
Про решающие деревья уже писали и на JAVA их показывали. При этом все знают деревья сами по себе работают, мягко говоря, не очень. Поэтому, зачем нужно одно плохое дерево, если есть отличный лес. Про лес мы сегодня и расскажем. Конечно, тут может быть ремарка, что «про это уже сто раз рассказывали» – да, но это будет рассказ про лес на JAVA.
Достоинства случайного леса перечислять глупо – любой, кто работает в DS больше одного дня и решивший хоть что-либо сложнее «Титаника» про него знает. Но, все-таки, давайте укажем на именно самые критичные:
— Лес годно отрабатывает пропуски, а пропуски данных в нашей практике — это очень частое дело.
— Он хорошо отрабатывает большие массивы данных. И, в нашем случае, это тоже критично, т.к. наши датасеты с ярдом-другим строк могут легко подвесить любую другую модель этак на месяц-другой и без гарантии на развешивание.
В рамках проведения аудита одной модели нам нужно было проверить насколько адекватно считаются показатели при принятии решения. В ходе проверки мы увидели наличие отклонения от нормального значения данных. Но, чтобы это проверить, нужно произвести воспроизведение модели
Читать дальше
@javatg
Про решающие деревья уже писали и на JAVA их показывали. При этом все знают деревья сами по себе работают, мягко говоря, не очень. Поэтому, зачем нужно одно плохое дерево, если есть отличный лес. Про лес мы сегодня и расскажем. Конечно, тут может быть ремарка, что «про это уже сто раз рассказывали» – да, но это будет рассказ про лес на JAVA.
Достоинства случайного леса перечислять глупо – любой, кто работает в DS больше одного дня и решивший хоть что-либо сложнее «Титаника» про него знает. Но, все-таки, давайте укажем на именно самые критичные:
— Лес годно отрабатывает пропуски, а пропуски данных в нашей практике — это очень частое дело.
— Он хорошо отрабатывает большие массивы данных. И, в нашем случае, это тоже критично, т.к. наши датасеты с ярдом-другим строк могут легко подвесить любую другую модель этак на месяц-другой и без гарантии на развешивание.
В рамках проведения аудита одной модели нам нужно было проверить насколько адекватно считаются показатели при принятии решения. В ходе проверки мы увидели наличие отклонения от нормального значения данных. Но, чтобы это проверить, нужно произвести воспроизведение модели
Читать дальше
@javatg
⚡️ Какой класс пакета java io позволяет создать поток вывода текстовых данных с учетом кодировки
Стандартная библиотека Java имеет весьма развитые средства вывода данных. Все возможности вывода данных сосредоточены в пакете java.io.
Существуют две параллельные иерархии классов вывода : OutputStream и Writer. Класс Writer введен в последних версиях Java.
Читать дальше
@javatg
Стандартная библиотека Java имеет весьма развитые средства вывода данных. Все возможности вывода данных сосредоточены в пакете java.io.
Существуют две параллельные иерархии классов вывода : OutputStream и Writer. Класс Writer введен в последних версиях Java.
Читать дальше
@javatg
Алгоритмическая задача про острова
Решаем алгоритмическую задачу с собеседований про острова несколькими способами: реализация на языках Java и C#.
https://tproger.ru/problems/algoritmicheskaja-zadacha-pro-ostrova/
Решаем алгоритмическую задачу с собеседований про острова несколькими способами: реализация на языках Java и C#.
https://tproger.ru/problems/algoritmicheskaja-zadacha-pro-ostrova/
Tproger
Алгоритмическая задача про острова / Tproger
Решаем алгоритмическую задачу с собеседований про острова несколькими способами: реализация на языках Java и C#.
Метод delete()
Удаляет символы в подстроке данной строки буфера (StringBuffer). Подстрока начинается с указанного начального индекса и распространяется до символа конечного индекса, или до конца StringBuffer, если такого символа не существует.
Другими словами метод позволяет удалить символы из строки, начиная и заканчивая указанными индексами.
Если start (начальный индекс) равен end (конечный индекс), то изменения не производятся.
Параметры:
• start — начальный индекс, включительно;
• end — конечный индекс, не включая.
Удаляет символы в подстроке данной строки буфера (StringBuffer). Подстрока начинается с указанного начального индекса и распространяется до символа конечного индекса, или до конца StringBuffer, если такого символа не существует.
Другими словами метод позволяет удалить символы из строки, начиная и заканчивая указанными индексами.
Если start (начальный индекс) равен end (конечный индекс), то изменения не производятся.
Параметры:
• start — начальный индекс, включительно;
• end — конечный индекс, не включая.
Какое из следующих утверждений верно для класса: java.util.ArrayList?
Anonymous Quiz
3%
Элементы коллекции гарантированно уникальные
5%
Коллекция гарантированно неизменная (immutable)
21%
Элементы в коллекции упорядочены.
20%
Элементы в коллекции доступны с помощью уникального ключа.
46%
Все варианты неверные
5%
Узнать ответ
#вопросы_с_собеседований
Как обрабатывать исключения в Spring MVC Framework?
В Spring MVC интерфейс HandlerExceptionResolver (из пакета org.springframework.web.servlet) предназначен для работы с непредвиденными исключениями, возникающими во время выполнения обработчиков. По умолчанию DispatcherServlet регистрирует класс DefaultHandlerExceptionResolver (из пакета
Controller Based – указать методы для обработки исключения в классе контроллера. Для этого нужно пометить такие методы аннотацией
Global Exception Handler – для обработки глобальных исключений спринг предоставляет аннотацию
HandlerExceptionResolver implementation – Spring Framework предоставляет интерфейс HandlerExceptionResolver, который позволяет задать глобального обработчика исключений. Реализацию этого интерфейса можно использовать для создания собственных глобальных обработчиков исключений в приложении.
Подробнее
@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
✅ 1 год в качестве Java разработчика, опыт собеседований, зарплата, ответы на вопросы
https://www.youtube.com/watch?v=I1_nGjLxlNk
@javatg
https://www.youtube.com/watch?v=I1_nGjLxlNk
@javatg
YouTube
1 год в качестве Java разработчика, опыт собеседований, зарплата, ответы на вопросы
Мой курс для начинающих Java разработчиков (запущен в 2024):
- https://stepik.org/a/210257 - на stepik
- https://www.udemy.com/course/java-backend-with-nikiforovjava/?referralCode=D69F489FBE10102F6D5B - на udemy
Вы также можете приобрести один из курсов…
- https://stepik.org/a/210257 - на stepik
- https://www.udemy.com/course/java-backend-with-nikiforovjava/?referralCode=D69F489FBE10102F6D5B - на udemy
Вы также можете приобрести один из курсов…
#вопросы_с_собеседований
Что такое класс Spring JdbcTemplate и как его использовать?
Шаблон Spring JDBC — это основной API, через который мы можем получить доступ к интересующей нас логике операций с базой данных:
☕️ Создание и закрытие соединений
☕️ Выполнение операторов и вызовы хранимых процедур
☕️ Итерация по ResultSet и возврат результатов
Чтобы использовать его, нам нужно определить простую конфигурацию DataSource:
Что такое класс 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-методов на две группы: compare-and-set и set-and-get.
Методы категории compare-and-set принимают старое значение и новое. Если переданное старое значение совпало с текущим, устанавливается новое. Обычно делегируют вызов в методы класса
В случае set-and-get старое значение неизвестно. Поэтому нужен небольшой трюк: программа сначала считывает текущее значение, а затем записывает новое, тоже с помощью CAS, потому что запись могла успеть поменяться даже за этот шаг. Эта попытка чтения+записи повторяется в цикле, пока старое значение не совпадет и переменная не будет успешно записана.
Этот трюк называется double-checked или optimistic locking, и может быть использован и в пользовательском коде с любым способом синхронизации. Оптимистичность заключается в том, что мы надеемся что состояния гонки нет, прибегая к синхронизации только если гонка всё же случилась. Реализация оптимистичной блокировки может быть дана как отдельная задача.
#Многопоточность
@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
Для того, чтобы успешно строить карьеру программиста, необходимо устроиться работать по соответствующей профессии, а также знать особенности языков программирования. Огромным спросом у разработчиков на данный момент пользуется Java. Это – кроссплатформенный универсальный вариант «общения» с компьютерами и программным обеспечением. Прост в освоении, обладает относительно понятным синтаксисом. Многофункционален, имеет возможность ООП.
Когда будущий разработчик проходит собеседование, ему задают разнообразные вопросы по коддингу. В случае с Java немаловажным моментом является тема потоков. Особенно многопоточности. Данная статья поможет разобраться в соответствующем направлении, а также составить приложение, использующее Java Concurrency.
➡️ Читать дальше
@javatg