📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP
В чем разница между классами StringBuffer и StringBuilder в языке Java?
В языке Java классы StringBuffer
и StringBuilder
предназначены для работы с изменяемыми строками, но их основное различие заключается в потокобезопасности:
🟢 1. StringBuffer:
- Потокобезопасность: Все методы синхронизированы, что делает этот класс безопасным для использования в многопоточных приложениях.
- Производительность: Из-за синхронизации работает медленнее в однопоточных сценариях, поскольку приходится выполнять дополнительные проверки на блокировку.
- Использование: Подходит, если требуется работа с изменяемыми строками в многопоточном окружении.
🟢 2. StringBuilder:
- Потокобезопасность: Методы не синхронизированы, поэтому StringBuilder
не является потокобезопасным.
- Производительность: Быстрее, чем StringBuffer
, при работе в однопоточном приложении, поскольку отсутствуют накладные расходы на синхронизацию.
- Использование: Подходит для сценариев с однопоточной обработкой строк.
🟢 3. Общие черты:
- Оба класса используют внутренний изменяемый буфер для хранения данных, что позволяет эффективно добавлять, изменять или удалять содержимое строки.
- Методы, такие как append()
, insert()
, delete()
, reverse()
и replace()
, одинаково реализованы в обоих классах.
🟢 4. Рекомендации по выбору:
- Используйте StringBuffer
, если требуется работа с несколькими потоками и безопасность важнее производительности.
- Используйте StringBuilder
, если работаете с однопоточным кодом, чтобы обеспечить максимальную производительность.
🟢 Пример кода:
// StringBuffer (потокобезопасный)
StringBuffer buffer = new StringBuffer("Hello");
buffer.append(" World");
System.out.println(buffer);
// StringBuilder (быстрее в однопоточных сценариях)
StringBuilder builder = new StringBuilder("Hello");
builder.append(" World");
System.out.println(builder);
StringBuffer
и StringBuilder
зависит от контекста использования — многопоточная или однопоточная среда.⁉️ Устали гадать, что творится внутри вашего Java-приложения? Хотите мониторить всё в реальном времени?
🗓 На открытом вебинаре 10 декабря в 20:00 мск мы расскажем, как внедрить Observability в Java-приложения, отслеживать состояние системы и решать проблемы до их появления!
Получите навыки, которые помогут вам создавать надежные приложения, повысить стабильность и оперативно выявлять ошибки. Применяйте эти знания и станьте разработчиком нового уровня.
Спикер Сергей Петрелевич — опытный разработчик на Java и Kotlin.
🔗 Регистрируйтесь на вебинар: https://vk.cc/cFHd67
Успейте получить скидку на участие в курсе «Java Developer. Professional».Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Приглашаем на митап IT_One «Джедайские трюки Java, или Как оптимизировать приложения»
📍Офлайн в Москве
🌐 С онлайн-трансляцией
📆 17 декабря в 18:30 (МСК, GMT+3)
В программе — два доклада и круглый стол:
🗣 Рецепты оптимизации Hibernate — Андрей Зяблин (Magnit Tech)
Узнаем, как повысить производительность и функциональность Hibernate.
🗣 Happens-before и откуда он берется — Дмитрий Владимиров (IT_One)
Команды не всегда исполняются в нужном порядке. Выясним, когда это происходит и научимся влиять на последовательность с помощью happens-before.
🗣 Круглый стол «Как грамотно использовать многопоточку, чтобы от нее был профит?»
Разберемся, как выглядит современная многопоточка, сколько ядер должно быть в компании и как определять процессы, которые стоит сделать многопоточными.
Вы сможете задать вопросы спикерам, а авторы лучших вопросов получат призы от IT_One.
Регистрируйтесь на сайте митапа.
Реклама. ООО "ИТ1-Решения". ИНН 9717134195
⚡️ Только что закончили ВУЗ?
Начните карьеру Java-разработчика с прочной базой!
Java — один из ключевых языков программирования, который используют в банковском деле, корпоративных приложениях и IT-гигантах. Курс поможет вам освоить современные инструменты, такие как Spring, Docker, Hibernate и PostgreSQL.
Обучение на примерах реальных задач, опытные наставники и живая практика с кодом. С дипломом от OTUS вы станете заметным кандидатом для работодателей!
💪 Готовы сделать первый шаг в IT?
👉 Присоединяйтесь к курсу «Java-разработчик» и получите скидку на обучение: https://vk.cc/cFD8XYРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Как гарантировать возможность обращения N
нитей к N
ресурсам без взаимной блокировки?
Если вы не слишком хорошо разбираетесь в написании многопоточного кода, этот вопрос будет для вас по-настоящему каверзным. Он может оказаться непростым даже для опытного программиста, не имевшего дела с взаимными блокировками и состояниями гонки.
Весь трюк тут в упорядочении: предотвратить взаимную блокировку можно благодаря освобождению ресурсов в порядке, обратном порядку их получения.
👉@BookJava
Test Driven Development (TDD) in Java
Creating a Queue Abstract Data Type class
Introduction to Test Doubles Dummies and Stubs
Introduction to Test Doubles Spies
Introduction to Test Doubles Mocks
Introduction to Test Doubles - Fakes
источник
👉@BookJava
В случае, когда метод генерирует исключение NullPointerException
в родительском классе, можно ли его переопределить методом, генерирующим RuntimeException
?
Еще один каверзный вопрос, связанный с концепциями перегрузки и переопределения.
Ответ: в переопределенном методе можно спокойно генерировать родительский класс исключения NullPointerException
– RuntimeException
, но нельзя сделать то же самое с проверяемым исключением типа Exception
.
👉@BookJava
⚡️ Приглашаем на открытый урок «Разрабатываем Kafka-appender для логгера».
🗓 05 декабря в 20:00 МСК
Интеграция логирования с системами обмена сообщениями, такими как Apache Kafka, становится все более востребованной в современных Java-приложениях. Однако найти готовый функционал для этой задачи не всегда просто, поэтому часто возникает необходимость разработки собственного Kafka-appender для логгера.
На вебинаре разберем:
✔️ Зачем нужен Kafka-appender для логгера.
✔️ Подходы к разработке собственного Kafka-appender.
✔️ Шаги по созданию Kafka-appender для логгера.
✔️Практические рекомендации
Вебинар пройдет в рамках курса «Java Developer. Professional», все посетители получат welcome-скидку на обучение.
🔗 Ссылка на регистрацию: https://vk.cc/cFouc3Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Spring Framework в деталях
SimpleJdbcInsert - Spring Framework JDBC
АОП в Spring Framework
XML-конфигурация АОП в Spring Framework
Транзакции - Spring Framework в деталях
источник
👉@BookJava
Java. Сортировки
Java. Сортировка пузырьком.
Java. О сортировке выбором.
Java. Быстрая сортировка. Объяснение на пальцах)
Java. Оценка сложности алгоритмов сортировки.
Java. Сортировка слиянием.
Java. Сортировка подсчетом.
Java. Сортировка вставками.
Java. Сортировка расческой. От пузырька до расчески.
👉@BookJava
Совет по Spring Boot 💡
Если вы используете DTO в Spring Data/JPA, вы можете автоматизировать отображение между сущностями и DTO с помощью библиотеки Blaze Persistence (https://persistence.blazebit.com). Тогда вы сможете воспользоваться преимуществами, например, паттерна Spring repository.
👉@BookJava
Как бы изменились наши будни, если бы создание программного кода стало легким и непринужденным? Представьте язык, созданный для удобства именно человека, а не машины, его синтаксис прост и понятен.
Такая мечта жила в умах разработчиков Microsoft, и в результате для нас разработали C#.
Итак, основные причины продолжить изучение C# уже на профессиональном уровне:
✔️C# занимает ведущую позицию среди языков программирования для создания компьютерных игр.
- Только C# официально совместим с движком Unity, одной из самых востребованных и надежных платформ для разработки игр.
⁃ Какой доход вы можете ожидать, изучив C# для разработки игр? При усердной работе можно рассчитывать на заработок от 200 000 рублей в месяц!
✔️C# - основной язык для разработки приложений под Windows:
- Изначально C# создан Microsoft для использования в своих продуктах.
- Они также разработали среду разработки Visual Studio, где поддержка C# реализована на высшем уровне. В Visual Studio есть инструменты Windows Forms, позволяющие создавать интерфейсы для приложений с использованием C# за считанные минуты.
✔️C# и .NET: идеальный тандем.
- C# тесно связан с платформой .NET от Microsoft. Несмотря на то, что они разные, они гармонично дополняют друг друга.
C# — это язык программирования, а .NET — это набор библиотек и функций, к которым C# предоставляет доступ. Раньше программы на C# могли работать только в Windows, но с выпуском .NET Core в 2016 году стало возможным разрабатывать программное обеспечение на C# для различных операционных систем.
🎉А теперь главная причина: выгода 12750 рублей на обучение на курсе C# Developer. Professional до 28.11.2024 по ссылке: https://vk.cc/cF5ZzvРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
⁉️ Хотите понять, как работают потоки ввода/вывода в Java? Готовы создать свой первый сетевой чат?
Приглашаем на бесплатный вебинар 4 декабря в 20:00 мск., который пройдет в рамках курса «Java-разработчик».
Мы покажем, как с нуля создать консольный сетевой чат на Java, освоить работу с сетью и разобраться в потоках ввода/вывода.
Спикер Александр Фисунов — Senior Kotlin Developer в SSP Software на проекте ВТБ, опытный Java-разработчик и кандидат технических наук.
Получите практический опыт работы с java. io, разберитесь, как работает сеть, и начните свой путь в мир профессиональной разработки на Java!
👉 Регистрируйтесь на вебинар прямо сейчас: https://vk.cc/cEZSlH
🎁 Только в "Черную пятницу", скидки на курс до 15%! Подробности у менеджеров.Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Уже сегодня собеседование на Middle Java с разработчиком из МТС
20 ноября (уже сегодня) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
1. Мария Ядерцова ведущий Java-разработчик в МТС Диджитал и ex. Сбербанк-Технологии будет задавать реальные вопросы и задачи разработчику-добровольцу
2. Мария будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
3. В конце можно будет задать любой вопрос Марии
Что узнаешь на прямом эфире от ШОРТКАТ:
• Чего ждут от кандидатов на Middle позиции в Java-разработке
• Какие вопросы задают на интервью и зачем
• Как подготовиться к собесу, чтобы получить оффер
Это бесплатно? Бесплатно
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqvFh2Fp
Addressing Fragmentation in ZGC through Custom Allocators
Исследование направлено на уменьшение фрагментации в ZGC с помощью пользовательских распределителей. Цель исследования — уменьшить необходимость перемещения объектов в ZGC за счет использования распределителя на основе свободного списка.
https://inside.java/2024/06/19/thesis-zgc-fragmentation/
👉@BookJava
Совет 💡
Установка @Column в updateable=false
приводит к тому, что реализация JPA будет игнорировать этот столбец при выполнении оператора обновления. При этом не будет выброшено исключение. Это никак не влияет на базу данных. Вы по-прежнему можете обновлять столбец вне Hibernate.
👉@BookJava
Многопоточность в Java
В Java многопоточность реализована через класс Thread
и интерфейс Runnable
. Вот основные моменты, которые могут быть полезны при работе с многопоточностью:
🔵1. Создание и запуск потока
- Поток может быть создан двумя способами:
- Наследование от класса Thread:
class MyThread extends Thread {
public void run() {
// Код, выполняемый в потоке
}
}
MyThread t = new MyThread();
t.start();
Runnable
:
class MyRunnable implements Runnable {
public void run() {
// Код, выполняемый в потоке
}
}
Thread t = new Thread(new MyRunnable());
t.start();
Thread
start()
— запуск потока.sleep(long millis)
— приостановка потока на определенное время.join()
— ожидание завершения потока.interrupt()
— прерывание потока.isAlive()
— проверка, работает ли поток.
synchronized (this) {
// Критическая секция
}
ExecutorService
. Пример:
ExecutorService executor = Executors.newFixedThreadPool(10);
executor.submit(() -> {
// Задача для потока
});
executor.shutdown();
ForkJoinPool
— используется для параллельного выполнения задач с разделением на подзадачи.CountDownLatch
, CyclicBarrier
, Semaphore
— различные утилиты для синхронизации между потоками.parallelStream()
:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.parallelStream().forEach(System.out::println);
Уроки Java для начинающих
#1 — Установка JDK и IDE
#2 — Переменные. Примитивные типы данных
#3 — Строки (String). Ссылочные типы данных
#4 — Условные конструкции (if-else, switch-case)
#5 — Цикл for
#6— Циклы While и Do While
#7 — Консольный ввод данных
#8 — Массивы
#9 — Многомерные массивы
#10 — Классы и объекты
источник
👉@BookJava
Java spring exception handling | обработка исключений за 5 минут
В этом видео речь пойдет об обработке исключений на уровне контроллера на языке Java. Покажу, какие инструменты есть у Spring.
00:23 - try catch, ResponseEntity
00:47 - наследование ResponseStatusException
01:10 - настройки отображения сообщения, названия ошибки и стек трейс в ответе
01:47 - бросаем ResponseStatusException
02:04 - аннотация @ ExceptionHandler
03:05 - аннотация @ RestControllerAdvice
03:40 - кастомный объект вместо ResponseEntity
04:02 - аннотация @ ResponseStatus
Код можно посмотреть тут: https://github.com/dispikerton/exceptionHandling
источник
👉@BookJava
📕Открытый урок по Scala для Java, C#, Kotlin и Android программистов, аналитиков данных и специалистов по обработке больших данных
На открытом уроке 4 декабря в 20:00 мск мы изучим, функциональные стримы в Scala на примере fs2.
📗На уроке:
- Рассмотрим, что такое стримы и их разновидности;
- Изучим конструкторы и комбинаторы fs2;
- Проанализируем примеры использования стримов для обработки данных без загрузки в память.
📘В результате:
- Поймете, что такое стримы и как они отличаются от коллекций;
- Как использовать конструкторы и комбинаторы fs2 для обработки данных;
- Получите примеры применения стримов в реальных задачах, что позволит оптимизировать обработку данных.
Спикер Валентин Шилин — senior программист/аналитик данных Deutsche Telekom IT GmbH, 15+ лет программирования на С++, С#, JavaScript, Python, Scala, Java и эксперт в обработке больших данных с помощью Scala/Spark и Hadoop Cloudera.
👉 Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cFAjec
📙 Все участники открытого урока получат скидку на курс "Scala-разработчик"Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Подборка Telegram каналов для программистов
Системное администрирование 📌
/channel/sysadmin_girl Девочка Сисадмин
/channel/srv_admin_linux Админские угодья
/channel/linux_srv Типичный Сисадмин
/channel/devops_star DevOps Star (Звезда Девопса)
/channel/i_linux Системный администратор
/channel/linuxchmod Linux
/channel/sys_adminos Системный Администратор
/channel/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
/channel/sysadminof Книги для админов, полезные материалы
/channel/i_odmin Все для системного администратора
/channel/i_odmin_book Библиотека Системного Администратора
/channel/i_odmin_chat Чат системных администраторов
/channel/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
/channel/sysadminoff Новости Линукс Linux
1C разработка 📌
/channel/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
/channel/cpp_lib Библиотека C/C++ разработчика
/channel/cpp_knigi Книги для программистов C/C++
/channel/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
/channel/pythonofff Python академия. Учи Python быстро и легко🐍
/channel/BookPython Библиотека Python разработчика
/channel/python_real Python подборки на русском и английском
/channel/python_360 Книги по Python Rus
Java разработка 📌
/channel/BookJava Библиотека Java разработчика
/channel/java_360 Книги по Java Rus
/channel/java_geek Учим Java на примерах
GitHub Сообщество 📌
/channel/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
/channel/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
/channel/developer_mobila Мобильная разработка
/channel/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
/channel/frontend_1 Подборки для frontend разработчиков
/channel/frontend_sovet Frontend советы, примеры и практика!
/channel/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
/channel/game_devv Все о разработке игр
Библиотеки 📌
/channel/book_for_dev Книги для программистов Rus
/channel/programmist_of Книги по программированию
/channel/proglb Библиотека программиста
/channel/bfbook Книги для программистов
/channel/books_reserv Книги для программистов
БигДата, машинное обучение 📌
/channel/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
/channel/bookflow Лекции, видеоуроки, доклады с IT конференций
/channel/coddy_academy Полезные советы по программированию
/channel/rust_lib Полезный контент по программированию на Rust
/channel/golang_lib Библиотека Go (Golang) разработчика
/channel/itmozg Программисты, дизайнеры, новости из мира IT
/channel/php_lib Библиотека PHP программиста 👨🏼💻👩💻
/channel/nodejs_lib Подборки по Node js и все что с ним связано
/channel/ruby_lib Библиотека Ruby программиста
QA, тестирование 📌
/channel/testlab_qa Библиотека тестировщика
Шутки программистов 📌
/channel/itumor Шутки программистов
Защита, взлом, безопасность 📌
/channel/thehaking Канал о кибербезопасности
/channel/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
/channel/ux_web Статьи, книги для дизайнеров
Английский 📌
/channel/UchuEnglish Английский с нуля
Математика 📌
/channel/Pomatematike Канал по математике
/channel/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак📌
/channel/Excel_lifehack
/channel/tikon_1 Новости высоких технологий, науки и техники💡
/channel/mir_teh Мир технологий (Technology World)
Вакансии 📌
/channel/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT
Поддерживает ли язык Java множественное наследование?
Это очень хитрый вопрос. Интервьюеры часто говорят: если язык C++ может поддерживать непосредственное множественное наследование, то почему Java не может?
Ответ несколько более сложен, чем может показаться, поскольку Java поддерживает множественное наследование типов, ведь интерфейс в нём может расширять другие интерфейсы. Но множественное наследование реализаций язык Java не поддерживает.
👉@BookJava
Что произойдет, если поместить оператор return или System.exit () в блок try/catch?
Это очень популярный вопрос "на засыпку" по Java. Хитрость его в том, что многие программисты считают, что блок finally
выполнится в любом случае. Данный вопрос ставит эту концепцию под сомнение, путем помещения оператора return
в блок try/catch
или вызова из блока try/catch
оператора System.exit ()
.
Ответ на этот каверзный вопрос: блок finally
будет выполняться при помещении оператора return в блок try/catch
, и не будет выполняться при вызове из блока try/catch
оператора System.exit ()
.
👉@BookJava
Прожарка резюме для Java-разработчиков в четверг
Ребята из менторской программы ШОРТКАТ разберут на эфире реальные резюме и подскажут, что улучшить, чтобы точно дойти до собеса.
Когда: 28 ноября, в четверг, в 19:00 по мск
Ревьюит резюме рекрутер с опытом работы в Яндексе и Т-Банке.
☑️ Если хотите закинуть своё резюме, подпишитесь на бота @shortcut_sh_bot — резюме будут собирать там
☑️ Если закидывать нечего, но хочется посмотреть со стороны — тоже подписывайтесь на бота @shortcut_sh_bot . Там будет ссылка на трансляцию и запись после
После эфира все получат памятку, как использовать ChatGPT для резюме. Ссылку пришлют, не поверите, тоже в боте @shortcut_sh_bot
Короче, подпишитесь на бот, чтобы ничего не пропустить @shortcut_sh_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqucSshH
👩💻 Начали путь в программировании и хотите практики?
На вебинаре 4 декабря в 20:00 мск вы создадите свой первый сетевой чат на Java!
Вместе разберем, как работать с сетью, потоками и java .io.
Этот вебинар — отличная практика для начинающих.
Это ваш шанс выйти за рамки теории и сделать реальный проект, который отлично подойдет для портфолио.
Спикер Александр Фисунов — Senior Kotlin Developer в SSP Software на проекте ВТБ, опытный Java-разработчик и кандидат технических наук.
➡️ Регистрируйтесь на вебинар, погружайтесь в мир Java и получайте скидку на большое обучение «Java-разработчик»: https://vk.cc/cFk5ZBРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Hibernate WITH RECURSIVE query
Небольшая статья Vlad Michalcea посвящена запросам WITH RECURSIVE в Hibernate. Описано, как они работают и как могут быть использованы для иерархических структур данных.
https://vladmihalcea.com/hibernate-with-recursive-query/
👉@BookJava
Hibernate JAVA_TIME_USE_DIRECT_JDBC setting
Небольшая статья Vlad Mihalcea о настройке в Hibernate, которая позволяет маппить типы времени из java.time напрямую, без прослойки в виде объекта Timestamp. А еще рассматривается то, какими драйверами для популярных БД это поддерживается.
https://vladmihalcea.com/hibernate-type-java_time_use_direct_jdbc/
👉@BookJava
🚀 Совет Spring 🚀
SSEEvent от Spring для плавных обновлений в реальном времени в ваших приложениях 🔥
👉@BookJava
Hack a Java application with the debugger
В статье автор рассматривает использование дебаггера для взаимодействия и изменения поведения JVM-приложений в режиме реального времени. Автор демонстрирует примеры изменения значений переменных и вызова методов приложения через отладчик, что позволяет вносить изменения в приложение без его перезапуска.
https://foojay.io/today/debugger-godmode-hacking-a-jvm-application-with-the-debugger/
👉@BookJava
🔥 Как сократить баги и ускорить релизы с помощью безопасной разработки
Ты создаешь крутые приложения, но баги и уязвимости продолжают отнимать драгоценное время, особенно когда горят дедлайны? 😬
Представь, что ты можешь защитить свой код на каждом этапе разработки и при этом сэкономить нервы и время! Мы разработали новый курс «Безопасность приложений для разработчиков», чтобы показать, что безопасность — это не про сложности, а про качество и экономию времени.
🎯 Почему стоит записаться?
· Ты научишься строить защиту ещё на этапе планирования, минимизируя уязвимости.
· Безопасность не замедлит процесс — мы покажем, как сохранять темп и укладываться в дедлайны.
· Меньше проблем на проде — ты будешь предотвращать уязвимости на ранних стадиях, избегая лишних правок.
👨💻 Авторы курса — эксперты Positive Technologies, одной из лидирующих компаний на рынке кибербезопасности. Ты будешь учиться у профессионалов, которые ежедневно работают над безопасностью приложений.
⏰ Старт курса 25 ноября, длительность — 3 недели, формат — онлайн. Учись в любое время и из любой точки.
Не трать время на исправления багов — записывайся на курс и учись предотвращать их заранее!
👉 [Забронировать место на курсе]