📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP
Параллельность в Java на практике
Как следует из названия, здесь будет только про параллельное выполнение (не путать с конкурентностью). Так же я не буду затрагивать проект Loom, который «должен убить» все остальные подходы написания параллельного кода. Надеюсь изложенное ниже позволит начинающим java программистам разобраться с разными подходами и структурировать имеющиеся знания.
https://habr.com/ru/articles/759054/
👉@BookJava
💻 Профессия «Java-разработчик»
Освойте язык крупного бизнеса и финансовых технологий и научитесь разрабатывать веб-приложения на фреймворке Spring.
Уже во время обучения вы вступите в программу «Карьерный трек», чтобы найти свою первую работу в IT.
Пройдите 5 бесплатных уроков и поймите, подходит ли вам профессия!
COSMO чёрная пятница: успейте получить скидку до 120 000р.
Расширяем горизонты Вселенной - добавим +6 месяцев сопровождения наставника и карьерного консультанта после завершения обучения.
Другого такого предложения в этой Вселенной вы не найдете!
Переходите по ссылке, выбирайте скидку и забирайте подарки🎁
Реклама. АНПОО "ХЕКСЛЕТ КОЛЛЕДЖ". ИНН 7839056670. erid: LjN8K8L3k
Minum Web Framework
Minum - минималистичный экспериментальный Java-фреймворк, демонстрирующий принцип "меньше - значит больше".
Документация https://github.com/byronka/minum/blob/master/docs/development_handbook.md
https://github.com/byronka/minum
👉@BookJava
Оптимизация методов equals() с помощью метода Pattern Matching
0:00 Intro: designing equals() methods
1:13 Generating equals() and hashCode() methods
1:56 What could go wrong with a bad hashCode() method
4:31 Taking a look at the generated equals() methods
7:11 Checking the record and pattern matching implementations
9:33 What is predictive branching, what is the cost of a failing prediction?
12:41 Evaluating the cost of two failing predictions.
14:53 Evaluating the performance of equals() methods on simple data sets
16:07 First data set: all the objects are the same instance
16:46 Second data set: different instances carrying the same state
18:43 Third data set: different objects of the same type
20:41 Fourth data set: objects of different types
22:00 First conclusions on what patterns are the best
22:39 Adding glitches to the data sets
24:41 Results for first data set (same instances) with glitches
25:20 Results for second data set (equal instances) with glitches
26:07 Results for third data set (different instances) with glitches
28:30 Results for fourth data set (different types) with glitches
30:05 What conclusions can you draw from all these benches?
32:33 That's it for today, talk to you soon!
источник
👉@BookJava
Как новичку подарить жизнь telegram-боту на java
Как все начиналось
Мне 43 года и я профессиональный юрист. Неуемная интеллектуальная энергия и неудовлетворенность основной профессией 2,5 года назад привели меня в IT. Да-да, вот так – взрослая тетя с гуманитарным образованием решила попробовать себя на ниве программирования и замахнулась аж на такой язык как… JAVA!
https://habr.com/ru/articles/723580/
👉@BookJava
Avoid Lombok. Use Records to write cleaner code in Java 17
https://medium.com/naukri-engineering/avoid-lombok-use-records-to-write-cleaner-code-in-java-17-b174548a6f5f
👉@BookJava
⚡️ Как написать REST-клиента на Spring?
Узнаете на бесплатном открытом уроке «Разработка REST-клиентов на Spring» от OTUS.
На эфире рассмотрим Rest Template и WebClient, SOAP-сервисы и SOAP-клиентов на Spring.
📢📢 Занятие пройдёт 14 ноября в 20:00 мск и будет приурочено к старту курса «Разработчик на Spring Framework».
🎫 После урока вы сможете приобрести полный курс в рассрочку.
Это отличная возможность совершенно бесплатно протестировать формат обучения и задать преподавателю любые вопросы в режиме реального времени.
➡️ Регистрируйтесь на мероприятия прямо сейчас: https://vk.cc/cscLcNРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Приведите примеры использования fork/join framework
Как следует из названий связанных классов, ForkJoinPool
используется для рекурсивных задач. Это такие задачи, которые можно делить на порции, подзадачи. Отделение подзадачи – это операция fork, финальная агрегация результатов подзадач – join.
Реализация fork/join для самых популярных общих случаев уже есть в стандартной библиотеке, работать непосредственно с классом ForkJoinPool
не потребуется. Метод parallelSetAll
из класса Arrays
применяет fork/join для генерации элементов массива; parallelPrefix
для модификации; parallelSort
для сортировки.
Фреймворк неявно работает и в параллельных стримах. В этом случае логику fork определяет его сплитератор, а join выполняют потоковые операции. Классический пример:Arrays.stream(new int[]{1, 2, 3, 4}).parallel().sum();
Существуют целые категории частных задач, решения которых хорошо параллелизуются: векторные операции, работа с графами, поиск данных. Для специфичных задач придется реализовывать собственные RecursiveTask
, RecursiveAction
, или Spliterator
.
👉@BookJava
Категоризированный список всех возможностей Java и JVM с JDK 8 по 21
С момента выхода 8-й версии и до 21-й версии Java получила 232 предложения по улучшению JDK (JEP) и множество более мелких обновлений, каждое из которых вносит определенные улучшения в платформу. Эта статья представляет собой категоризированный и курируемый список наиболее важных улучшений.
https://advancedweb.hu/a-categorized-list-of-all-java-and-jvm-features-since-jdk-8-to-21/
👉@BookJava
⚡️ Узнайте о фреймворке QT то, чего не знают другие, и станьте более востребованным специалистом
Начните с бесплатного открытого урока «StateMachine в Qt» от OTUS.
На эфире мы познакомимся с концепцией машины состояний, а также узнаем о том, как она реализована в Qt и как можно эффективно ее использовать.
📢📢 Занятие пройдёт 2 ноября в 19:00 мск и будет приурочено к старту курса «Разработка прикладного ПО на Qt и ОС Аврора».
🎫 После урока вы сможете продолжить обучение в рассрочку на комфортных условиях.
➡️ Регистрируйтесь на мероприятие прямо сейчас: https://vk.cc/cs5lV8Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Как вызвать нативный код?
Нативным (или машинным) кодом называется скомпилированный бинарный код. В него компилируется, например, код на C++. Java приложение может работать на любой платформе именно потому, что оно не компилируется в бинарник – вместо этого его байткод выполняется на виртуальной машине. Но порой нужно обратиться к готовой программе на другом языке, или воспользоваться специальными возможностями ОС.
Если бинарный код поставляется в виде библиотеки (.dll в Windows, .so в Unix), у вас есть два варианта:
JNI (Java Native Interface) – стандартный фреймворк взаимодействия с бинарным кодом. С ним можно в Java исходнике объявить метод без тела, а реализацию брать из бинарного файла. Простой пример использования читайте на хабре.
JNA (Java Native Access) – сторонняя open-source библиотека, ставшая стандартом де-факто. Медленнее чем JNI, но гораздо проще в использовании. В отличие от JNI не требует кодогенерации и написания вспомогательной обвязки. Несколько примеров вызова из Java кода функций бинарных библиотек можно найти на википедии.
Когда нативный код исполняемый (.exe в Windows, файл с правом x в Unix), можно запустить его отдельным процессом. Но если вы разрабатываете этот бинарный код самостоятельно, то лучше сэкономить на создании отдельного процесса, и выбрать вариант сборки в библиотеку.
👉@BookJava
Компилирование «железного» бинарника Java-программы Google Closure Stylesheets с GraalVM
Closure Stylesheets -- это компилятор CSS, написанный Гугл на Java в рамках набора инструментов Closure Tools для веб-разработки, который в свое время обладал внушительными функциями такими как экспансия браузерных префиксов (например, для трансформации display: flex; в display: -webkit-flex; display: -ms-flexbox), переменными и др. Прошло уже более 10 лет с момента зачатия этого проекта, многие инновации уже укоренились, и в прошлом году его архивировали, т.к. все, включая сотрудников Гугл, используют мейнстрим утилиты типа SASS / autoprefixer. Я же успешно держу свой форк Exposure Stylesheets, потому что верю, что инструменты должны быть простыми и с душой из 2010х.
В статье речь пойдет про то, как я обновил свой форк с Java 1.8 на JDK 11 и использовал утилиту Oracle native-image из пакета GraalVM для того, чтобы собрать native binary, то есть бинарник с машинным кодом, который позволяет запускать программу вообще без Java. Я расскажу о том, какие проблемы встретил во время апгрейда, в том числе связанных с рефлексией, и сравню скорость запуска / работы / потребления памяти стандартного JAR и собранного bin.
https://habr.com/ru/articles/758300/
👉@BookJava
Java Tutorial for Beginners | Full Course
Intro - 00:00:00
How to use Eclipse - 00:03:50
2. Getting Started - 09:20
3. How Java Works - 14:16
4. Variable in Java - 15:46
5. Working with Variables - 20:30
6. Primitive Data Type in Java - 28:25
7. Naming Convention in Java - 34:25
8. Arithmetic Operators in Java - 41:33
9. If Else | Selection Statement - 50:29
00:50:16 - Ternary & Switch Selection Statement
11. While | For | Iteration Statement | Loops -01:05:25
12. Nested Loops | Iteration Statement - 01:13:21
13. Break and Continue - 01:18:40
14. Class and Object - 01:21:23
15. Constructor in Java Theory - 01:30:32
16. Constructor Example - 01:40:51
17. This keyword - 01:47:52
18. Method and Constructor Overloading - 01:51:29
19. Static Keyword - 01:56:41
20. Inner Class - 02:08:50
21. Array Theory - 02:16:23
22. Array 1D | 2D | Jagged Array - 02:22:35
23. Enhanced for loop - 02:35:02
24. Varargs - 02:39:02
25. Inheritance - 02:42:13
26. Super Method - 02:50:42
27. Multiple Inheritance in Java? - 02:57:18
28. Method Overriding | Super Keyword - 02:59:29
29. Dynamic Method Dispatch - 03:04:07
30. Encapsulation - 03:08:40
31. Wrapper class | AutoBoxing - 03:14:54
32. Abstract Keyword - 03:23:19
33. Why do we need Abstract Class? - 03:28:39
34. Final Keyword - 03:33:25
35. Interface | Why and What? - 03:39:27
36. More about Interface - 03:46:20
37. Anonymous Inner class - 03:51:33
38. Anonymous class with Interface - 03:54:51
39. Functional Interface | Lambda Expression - 03:57:12
40. Default method in Interface - 04:04:06
41. Multiple Inheritance issue with Interface - 04:09:39
42. Static method in Interface - 04:12:49
43. Package - 04:15:47
44. Access Modifiers - 04:22:14
45. Exception Handling Try Catch Finally - 04:32:35
46. Multiple Catch blocks - 04:38:37
47. Checked Exception | Finally block - 04:44:35
48. Try with Resource - 04:49:32
49. User Defined - 04:51:40
50. User Input using Scanner - 04:56:32
51. MultiThreading in Java Theory - 04:58:58
52. Thread class - 05:09:39
53. Runnable Interface - 05:20:34
54. Lambda Expression - 05:24:30
55. Join | isAlive method - 05:28:4
56. Thread Priority - 05:31:18
57. Synchronized Keyword - 05:36:34
58. Collection and Generics in Java - 05:45:10
59. Iterator Interface - 05:59:25
60. List Interface - 06:07:29
61. Generics with List - 06:13:00
62. Collections Class - 06:16:20
63. Comparator Interface - 06:20:34
64. Comparable Interface - 06:29:11
65. Set Interface - 06:35:08
66. Map Interface - 06:40:41
https://youtu.be/8cm1x4bC610?si=o-8AEjYU0v0xwVBW
👉@BookJava
Подборка Telegram каналов для программистов
Системное администрирование 📌
/channel/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
/channel/sysadminof Книги для админов, полезные материалы
/channel/i_odmin Все для системного администратора
/channel/i_odmin_book Библиотека Системного Администратора
/channel/i_odmin_chat Чат системных администраторов
/channel/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
/channel/sysadminoff Новости Линукс Linux
/channel/tikon_1 Новости высоких технологий, науки и техники💡
/channel/mir_teh Мир технологий (Technology World)
/channel/rust_lib Полезный контент по программированию на Rust
/channel/golang_lib Библиотека Go (Golang) разработчика
/channel/itmozg Программисты, дизайнеры, новости из мира IT.
/channel/phis_mat Обучающие видео, книги по Физике и Математике
/channel/php_lib Библиотека PHP программиста 👨🏼💻👩💻
/channel/nodejs_lib Подборки по Node js и все что с ним связано
/channel/ruby_lib Библиотека Ruby программиста
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/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT
Чат программистов📌
/channel/developers_ru
Библиотеки 📌
/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 Полезные советы по программированию
QA, тестирование 📌
/channel/testlab_qa Библиотека тестировщика
Шутки программистов 📌
/channel/itumor Шутки программистов
Защита, взлом, безопасность 📌
/channel/thehaking Канал о кибербезопасности
/channel/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
/channel/ux_web Статьи, книги для дизайнеров
Английский 📌
/channel/UchuEnglish Английский с нуля
Математика 📌
/channel/Pomatematike Канал по математике
Excel лайфхак📌
/channel/Excel_lifehack
Освойте микросервисную архитектуру за 5 месяцев на курсе «Microservice Architecture» от OTUS
В процессе обучения вы:
- рассмотрите множество нетривиальных проблем проектирования backend-приложений и их дальнейшего сопровождения;
- изучите не только паттерны проектирования новых сервисов, но и подходы к работе с legacy-сервисами;
- научитесь решать проблемы с согласованностью изменений или с оркестрацией сервисов;
- как разработчик научитесь базовым навыкам работы с Kubernetes.
💻 Программа идеально подойдёт архитекторам, разработчикам, системным аналитикам, администраторам и DevOps-инженерам.
В конце программы вы получите практическую помощь в трудоустройстве и карьерную консультацию от эксперта.
🌐 Обучение начнется уже 30 октября и в честь Хеллоуина вы можете записаться на курс со скидкой 15% по промокоду «Hello15». Пройдите тестирование прямо сейчас, чтобы воспользоваться предложением: https://vk.cc/crX8Ps
Как прочитать байткод?
Байткод – аналог машинного кода для JVM. Он получается в результате компиляции исходного .java файла и хранится в .class файле. Анализ байткода иногда может помочь в исследовании бага, или лучше настроить производительность. Он необходим для отладки с инструментами динамической манипуляции байткодом, вроде ASM или BCEL.
Это бинарный код, и открыть его простым текстовым редактором не выйдет. В пакете утилит JDK доступен инструмент javap
. Это утилита командной строки для чтения .class файлов.
Аргументами передается полное имя класса, и classpath в котором этот класс искать. По умолчанию отображаются только объявления публичных членов. Ключ -p
добавит приватные методы и поля; -v
выведет дополнительные метаданные; -c
отобразит сам байткод – скомпилированную реализацию методов.
👉@BookJava
Байки джависта
Я конечно не Джеймс Гослинг, но за долгое время работы с Java у меня накопилась масса мыслей. Уверен, что они будут многим полезны, поэтому принимаю решение поделиться ими. Эти мысли зарождались у меня в самые разные периоды:
когда я мучительно пытался понять, как работает только что написанный код
во время холиварных споров с коллегами
и особенно в моменты дебага
https://habr.com/ru/articles/759102/
👉@BookJava
Подборка Telegram каналов для программистов
Системное администрирование 📌
/channel/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
/channel/sysadminof Книги для админов, полезные материалы
/channel/i_odmin Все для системного администратора
/channel/i_odmin_book Библиотека Системного Администратора
/channel/i_odmin_chat Чат системных администраторов
/channel/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
/channel/sysadminoff Новости Линукс Linux
/channel/tikon_1 Новости высоких технологий, науки и техники💡
/channel/mir_teh Мир технологий (Technology World)
/channel/rust_lib Полезный контент по программированию на Rust
/channel/golang_lib Библиотека Go (Golang) разработчика
/channel/itmozg Программисты, дизайнеры, новости из мира IT.
/channel/phis_mat Обучающие видео, книги по Физике и Математике
/channel/php_lib Библиотека PHP программиста 👨🏼💻👩💻
/channel/nodejs_lib Подборки по Node js и все что с ним связано
/channel/ruby_lib Библиотека Ruby программиста
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/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT
Чат программистов📌
/channel/developers_ru
Библиотеки 📌
/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 Полезные советы по программированию
QA, тестирование 📌
/channel/testlab_qa Библиотека тестировщика
Шутки программистов 📌
/channel/itumor Шутки программистов
Защита, взлом, безопасность 📌
/channel/thehaking Канал о кибербезопасности
/channel/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
/channel/ux_web Статьи, книги для дизайнеров
Английский 📌
/channel/UchuEnglish Английский с нуля
Математика 📌
/channel/Pomatematike Канал по математике
Excel лайфхак📌
/channel/Excel_lifehack
Бэкенд-тур — возможность попасть в Яндекс за неделю
С 13 по 17 ноября техногигант проведет масштабный бэкенд-тур по 5 городам России, где яндексоиды расскажут о своих текущих проектах, продуктах и технологиях:
📍 Москва — 13.11 (здесь можно будет посмотреть онлайн-трансляцию)
📍Нижний Новгород — 14.11
📍Екатеринбург — 15.11
📍Новосибирск — 16.11
📍Санкт-Петербург — 17.11
Участники с опытом коммерческой разработки могут получить оффер в компанию всего за неделю, с 20 по 26 ноября. Предварительно нужно подать заявку на участие до 19 ноября и выполнить контест с задачами для прохождения на следующий этап. Уже в течение недели отборов разработчики пройдут 2 технические фракции с кодингом в онлайн-редакторе, пообщаются с представителями команд разработчиков Яндекса и выберут подходящее направление. До 26 ноября лучшим участникам уже презентуют офер.
Более детально ознакомиться с подробностями тура и быстрого найма в компанию можно на сайте
🔥 Топ-5 способов создания ассоциативного массива
1. Односвязный список
2. Отсортированный массив
3. Двоичное дерево поиска
4. Хэш-таблица
5. Префиксное дерево
💪 Разберём каждый из них подробно на бесплатном открытом уроке «Создание ассоциативного массива различными способами» от OTUS.
На эфире мы:
✔️ реализуем структуру данных «ассоциативный массив» для хранения пар (ключ, значение)
✔️ рассмотрим несколько алгоритмов для решения этой задачи
✔️ сравним их эффективность
📢📢 Занятие состоится 15 ноября в 20:00 мск и будет приурочено к старту курса «Алгоритмы и структуры данных» в Otus.
🎫 После вебинара можно приобрести курс в рассрочку.
➡️ Регистрация на вебинар: https://vk.cc/csg4GPРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Совет по Spring Boot 🍃💡
Если вы перешли на Java 21 и используете Spring Boot 3.1 или ниже, необходимо обновить билдер Paketo, чтобы избежать ошибки: "Builder lifecycle 'creator' failed with status code 51" при выполнении mvn spring-boot:build-image
.
👉@BookJava
Что такое абстрактные классы и методы в Java
Абстрагирование – это процесс, в ходе которого от пользователя скрываются многие детали реализации, а предоставляются только те детали, которые действительно важны. Так удаётся сфокусироваться на том, что делает объект, а не как он это делает.
В Java абстрактные классы и методы – это основные инструменты для реализации абстракций. Абстрактные классы служат шаблонами для создания субклассов, а абстрактные методы можно сравнить с чертежами, описывающими поведение этих субклассов.
https://www.appsdeveloperblog.com/17-abstract-classes-and-methods-in-java/
👉@BookJava
6 ноября в 15:00 по МСК пройдёт бесплатный вебинар «Обработка тысяч одновременных записей и обеспечение согласованности данных»
Мы рассмотрим потенциальные проблемы при работе со связкой java->database. Будут выполнены тысячи апдейтов над одними и теми же строками так что будут показаны наиболее распространенные подходы для достижения согласованности и производительности.
Ведущий: Роман Оборин, Software Engineer at Tesco
🚀 Бесплатная регистрация: https://clck.ru/36JGRk
Реклама. ООО "Платформа непрерывного обучения" education.dhabits.ru
erid:2Vtzqx6gpAj
RabbitMQ vs Kafka vs ActiveMQ
👉@BookJava
Байт-код — это просто! Как сделать DI по-настоящему быстрым
Привет! Меня зовут Григорий Юрков, и я уже несколько лет работаю в инфраструктурной команде Яндекс Маркета. Два года назад мы начали разрабатывать свой легковесный DI-фреймворк Scout, который предоставляет выразительный Kotlin DSL. Он не генерирует код, а делает всю работу в рантайме.
Недавний переход с compile-time-библиотеки Dagger 2 на нашу привёл к замедлению старта приложения. Подробнее об этом и о том пути, который мы прошли от идеи до публикации в опенсорс, можно прочитать в статье моего коллеги Александра Миронычева.
В этой статье мы будем подробно рассматривать то, как применение байт-кода помогло сохранить скорость на том же уровне и спасти проект по миграции на Scout.
https://habr.com/ru/companies/yandex/articles/770800/
👉@BookJava
♨️ Тест на знание языка Java
— Ответьте на 21 вопрос и проверьте, насколько хорошо вы знаете язык Java и готовы освоить Spring. Сможете сдать — пройдёте на продвинутый онлайн-курс "Разработчик на Spring" Framework со скидкой!
👉 ПРОЙТИ ТЕСТ ОНЛАЙН-КУРСА "Разработчик на Spring Framework": https://vk.cc/cs3LkL
Курс доступен в рассрочку.
🎁 Пройдете успешно тест, получите доступ к открытым урокам курса.Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
⌨️ Java | Фишки и трюки — крайне полезный канал для любого джависта
Тонкости и секреты языка Java, интересные фишки, статьи и примеры кода.
👉🏻 Подписывайся и прокачивай свои навыки
От чего может случиться NoSuchMethodError?
Как очевидно из названия, программа пытается вызвать метод, которого не существует. В большинстве случаев это приводит к ошибке еще на этапе компиляции. Но в некоторых ситуациях о проблеме становится известно только во время выполнения, и тогда выбрасывается это исключение.
Вариантов таких ситуаций два. Либо проект был изменен и частично перекомпилирован; либо программа несовместима с внешней зависимостью: например неправильная версия jar-библиотеки в classpath.
Исключение NoSuchMethodError
наследуется от LinkageError
. Все такие ошибки – признаки несовместимых изменений после компиляции класса.
Не следует путать эту ошибку с NoSuchMethodException
– исключением, которое случается при попытке вызвать несуществующий метод с помощью Reflection API. Важное отличие в том, что это не Error
, его можно ловить и обрабатывать.
👉@BookJava
Ускоряем java-рефлексию в 2023
С момента выхода в свет предыдущей статьи прошёл год с хвостиком, и у меня наконец-то дошли руки до написания исправленной версии, учитывающей предыдущие косяки с замером времени вызова и несправедливо забытую тему доступа к полям классов.
Ну что же, поехали!
Постановка задачи
Имеем в наличии jdk 17, хотим вызывать методы класса по имени и таким же образом обращаться к полям.
https://habr.com/ru/articles/758664/
👉@BookJava
Распределённые транзакции
В статье рассматриваются общие подходы к решению проблемы двойной записи, когда два микросервиса должны гарантировано, атомарно записать информацию в бд.
Каждый из рассмотренных вариантов имеет свои достоинства и недостатки, и может быть применен в промышленной разработке.
https://developers.redhat.com/articles/2021/09/21/distributed-transaction-patterns-microservices-compared
👉@BookJava