10986
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP
Как вызвать нативный код?
Нативным (или машинным) кодом называется скомпилированный бинарный код. В него компилируется, например, код на 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
Mastering the Fundamentals of Cache for Systems Design Interview
Освоение основ кэш-памяти для собеседований по проектированию систем крайне важно, поскольку эти знания будут требоваться очень часто. Кэш значительно повышает производительность при проектировании систем, тем более в настоящее время, когда системы находятся в облаке. Кроме того, кэш имеет еще более существенное значение при большом количестве пользователей. Если к части системы обращаются более 1 млн. пользователей, то кэш будет иметь огромное значение для производительности.
Далее рассмотрим наиболее важные концепции кэширования, в каких ситуациях их следует использовать, а также технологии, которые их реализуют.
https://javachallengers.com/cache-systems-design/
👉@BookJava
Все о нестатических блоках инициализации в Java
Сегодня мы поговорим о возможножности инициализировать поля во время создания объекта с помощью нестатических блоков инициализации.
[Данная статья подготовлена на основе материала из книги OCP Oracle Certified Professional Java SE 17 Developer (Exam 1Z0-829) Programmer’s Guide, опубликованной издательством Oracle Press. — Ред.]
Инициализаторы нужны для установки начальных значений полей в объектах и классах. Существует три вида инициализаторов:
Инициализирующие выражения
Статические блоки инициализации
Нестатические блоки инициализацииpublic class InstanceInitializersII {https://blogs.oracle.com/javamagazine/post/java-instance-initializer-block
{ //Instance initializer with forward references. (1)
i = j = 10; // (2) Permitted.
int result = this.i * this.j; // (3) i is 10, j is 10.
System.out.println(this.i); // (4) 10
System.out.println(this.j); // (5) 10
System.out.println(this.k); // (6) 50
}
// Instance field declarations.
int i; // (7) Field declaration without initializer expression
int j = 100; // (8) Field declaration with initializer expression.
final int k = 50; // (9) Final instance field with constant expression.
}
👉@BookJava
Мой десятилетний поиск лаконичных лямбда-выражений в Java
Череда удачных и неудачных событий
Я начал изучать Java в 1997 году. Вначале я думал, что Java окажется причудой и что Smalltalk выйдет победителем в борьбе за производительность объектно-ориентированных программистов над C++. Я ошибался. В великой объектно-ориентированной битве 1990-х годов между C++ и Smalltalk победила Java.
https://betterprogramming.pub/my-ten-year-quest-for-concise-lambda-expressions-in-java-39fde576b950
👉@BookJava
Внутри JVM: Массивы и их отличие от других объектов
Массивы являются уникальными объектами в JVM, и понимание их структуры позволяет лучше писать код.
Самый простой способ классификации элементов данных Java - это разделение их на примитивы и объекты. К примитивам, как известно большинству разработчиков Java, относятся булевы числа, байты, символы, варианты целых чисел (short, int и long), а также варианты чисел с плавающей точкой (floats и doubles). Внутри JVM эти примитивы инстанцируются в "сыром" виде. Объявление int создает для JVM 32-разрядное знаковое целое поле, с которым она может работать. Чаще всего эти примитивы создаются в стеке операндов, который строится при каждом вызове метода. (Заметным исключением являются статические примитивы, которые создаются в куче).
https://blogs.oracle.com/javamagazine/post/java-array-objects
👉@BookJava
В чём разница между интерпретатором, AOT и JIT-компилятором?
Интерпретация – простое последовательное воспроизведение кода программы, команда за командой.
AOT-компиляция (ahead-of-time, статическая) – процесс превращения текста на языке программирования в нативный код на машинном языке. Так работают языки вроде C++. В современных JDK можно получить настоящий ahead-of-time скомпилированный машинный код с помощью утилиты jaotc.
JIT-компиляция (just-in-time, динамическая) – «умная» интерпретация. Среда выполнения анализирует исполняемый код, оптимизируя часто вызываемые участки. Таким способом программа работает значительно быстрее, и сохраняет при этом преимущества платформо-независимости оригинального кода. Именно с JIT-компиляцией связана необходимость «прогрева» программ перед тестированием производительности.
Эти термины относятся не только к JVM, но и ко множеству других языков программирования. Конкретно в Java байткод – интерпретируемый. Но в JVM по умолчанию работает JIT-компилятор. А процесс компиляции Java-кода в байткод можно назвать AOT-компиляцией.
Для взаимодействия с JIT-компилятором из кода в JDK поставляется класс java.lang.Compiler. Его методом disable() можно отключить JIT и перевести программу в режим простой интерпретации. Сейчас этот класс объявлен устаревшим и готовится к удалению.
Более красивый способ влиять на компилятор – передавать его настройки параметрами JVM. Параметр -Djava.compiler=NONE также переключит программу с JIT на интерпретатор. В теории, через этот же параметр можно подключить другой JIT-компилятор, альтернативный встроенному в JVM.
👉@BookJava
Что такое перегрузка методов?
Перегрузка методов — это свойство полиморфизма, в котором при помощи изменения сигнатуры метода можно создать различные реализации методов для одной и той же операции:
- одинаковое имя метода;
- различные аргументы;
- различный порядок аргументов;
Например, один и тот же add() из List может быть перегружен следующим образом и будет выполнять добавление разным способом, в зависимости от аргументов метода:
- add(Object o) — просто добавляет объект;
- add(int index, Object o) — добавляет объект в определенный индекс;
- add(Collection<Object> c) — добавляет список объектов;
- add(int index, Collection<Object> c) — добавляет список объектов, начиная с определенного индекса.
👉@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
Что такое статическое и динамическое связывание?
Присоединение вызова метода к телу метода называется связыванием. Если связывание проводится компилятором (компоновщиком) перед запуском программы, то оно называется статическим или ранним связыванием (early binding).
В свою очередь, позднее связывание (late binding) это связывание, проводимое непосредственно во время выполнения программы, в зависимости от типа объекта. Позднее связывание также называют динамическим (dynamic) или связыванием на стадии выполнения (runtime binding). В языках, реализующих позднее связывание, должен существовать механизм определения фактического типа объекта во время работы программы, для вызова подходящего метода. Иначе говоря, компилятор не знает тип объекта, но механизм вызова методов определяет его и вызывает соответствующее тело метода. Механизм позднего связывания зависит от конкретного языка, но нетрудно предположить, что для его реализации в объекты должна включаться какая-то дополнительная информация.
Для всех методов Java используется механизм позднего (динамического) связывания, если только метод не был объявлен как final (приватные методы являются final по умолчанию).
👉@BookJava
Курс «Зоотехник»: Без "воды" и ненужных предметов!
Курс «Зоотехник». 5 мес. Диплом. Рассрочка 0%. Научим работать с с/х животными.
Ведем прием документов!
Узнать больше
#реклама
academy.dpomipk.ru
О рекламодателе
✅ Узнать об Avito Career
Пусть это будет вашим первым шагом на пути к офферу мечты, ведь в Avito Career мы каждый будний день рассказываем о новых вакансиях разных грейдов в различные команды — от разработчиков разных направлений до тимлидов команд.
Никакого спама, только вакансии и стажировки Авито. Подписывайтесь 😎
♨️ Тест на знание языка 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
😱 Вредные советы для Java разработчиков
Все мы пишем много кода и слышим много советов о том, как это делать лучше. Но как же это надоело, хочу дать вам советы, как сделать код, который сложно прочитать и, следовательно, сложно сопровождать.
В статье мы научимся:
✔️ как тратить своё время и время коллег впустую;
✔️ стать незаменимым, так как больше в вашем коде никто не разберется;
✔️заслужить всеобщую ненависть.
💡 Читайте вредные советы от Отус и не пытайтесь это повторить!
А если хотите прокачать свои навыки, приходите на наш авторский курс "Java Developer. Professional" и становитесь экспертом в своей области!
📌Курс рассчитан на программистов с опытом, и чтобы понять достаточно ли у вас навыков для обучения, пройдите небольшой тест из 20 вопросов: https://vk.cc/crV6WtРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
😱 Вредные советы для Java разработчиков
Все мы пишем много кода и слышим много советов о том, как это делать лучше. Но как же это надоело, хочу дать вам советы, как сделать код, который сложно прочитать и, следовательно, сложно сопровождать.
В статье мы научимся:
✔️ как тратить своё время и время коллег впустую;
✔️ стать незаменимым, так как больше в вашем коде никто не разберется;
✔️заслужить всеобщую ненависть.
💡 Читайте вредные советы от Отус и не пытайтесь это повторить!
А если хотите прокачать свои навыки, приходите на наш авторский курс "Java Developer. Professional" и становитесь экспертом в своей области!
📌Курс рассчитан на программистов с опытом, и чтобы понять достаточно ли у вас навыков для обучения, пройдите небольшой тест из 20 вопросов: https://vk.cc/crTYx9Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Как реализовать двусторонний обмен данными между потоками?
Вопрос, который зачастую дается в виде практической задачи. Конечно, результата можно добиться разными способами: парой атомарных переменных, критическими секциями, потокобезопасными коллекциями. Но полезно знать, что специально для этого случая в стандартной библиотеке java.util.concurrent есть простой класс Exchanger.
Класс содержит единственный метод V exchange(V x). Один поток передает в него данные, и встает в ожидание. Ожидание завершается, когда второй поток также приходит в метод exchange со своей порцией информации. В качестве результата вызова потоки получают данные друг друга.
На основе класса Exchanger удобно создавать пайплайны обработки данных. Первый поток выполняет свою часть обработки, и складывает результаты в буфер. В качестве буфера может работать любой многоразовый объект-контейнер. Когда он заполняется, следующий поток обменивает его на второй, пустой буфер. Таким образом два буфера используются поочередно, не выделяется лишний раз память и не нагружается GC. Далее из попарно обменивающихся буферами потоков может строиться длинная многопоточная цепочка обработки.
👉@BookJava
Как работает Spring MVC Web Framework внутри?
Как обрабатывается HTTP-запрос? Что происходит при отправке HTTP-запроса в веб-приложение на базе Spring MVC
Здравствуйте, ребята, один из часто задаваемых вопросов на собеседовании по Spring MVC касается объяснения потока веб-запросов, т.е. того, как HTTP-запрос обрабатывается от начала до конца. Другими словами, объяснение потока запросов в Spring MVC.
Поскольку многие мои читатели то и дело задают этот вопрос, я решил кратко описать процесс обработки запросов в небольшой статье. Все начинается с клиента, который посылает запрос на определенный URL.
Когда запрос попадает в веб-контейнер, например Tomcat, он заглядывает в web.xml и находит сервлет или фильтр, сопоставленный с этим URL. Он делегирует этому сервлету или фильтру обработку запроса.
https://levelup.gitconnected.com/how-does-spring-mvc-web-framework-work-internally-7a3b06f1716e
👉@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 месяцев и создавайте приложения на Java
🔥🔝 Знание Spring Framework – один из самых востребованных скиллов для разработчика, многие крупные проекты ищут именно таких специалистов на самые желанные офферы.
5️⃣ Вместе с OTUS вы можете освоить Spring всего за 5 месяцев в рамках курса «Разработчик на Spring Framework»!
❌❌Что даст вам этот курс:
- Умение эффективно работать в проектах, где есть Spring
✔️ Знание современных возможностей Spring
✔️ Понимание, как создавать Web-приложения на микросервисной архитектуре и решать высокоуровневые задачи по разработке
✔️ Умение быстро проходить путь от идеи до production-grade
✔️ Владение фреймворками Spring и технологиями вспомогательных проектов (Spring MVC, Spring Security, Spring Boot, Spring Reactive Stack, Spring 5)
🎫 Курс доступен для приобретения в рассрочку!
Пройдите бесплатное вступительное тестирование прямо сейчас и узнайте, готовы ли вы стать студентом!
➡️ ПРОЙТИ ТЕСТ: https://clck.ru/36AeLbРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
🚀 Изучай Symfony Framework для работы над масштабными PHP-проектами!
Записывайся на продвинутый онлайн-курс Symfony Framework от Отус (старт 21 ноября 2023 года) и получи возможность:
✅ развивать идеи Java Spring в PHP-экосистеме
✅ участвовать в создании enterprise-проектов со сложной бизнес-логикой
✅ претендовать на высокооплачиваемые вакансии middle+
Ответь на вопросы вступительного теста за 30 минут и проверь, насколько ты готов к освоению Symfony Framework: https://clck.ru/369kTP
Я хотел сломать Java и я это сделал
На написание этой статьи, меня натолкнул разбор результата изменения полей объекта, лежащего в HashSet. Я развил идею и привнёс альтернативную математику в Java.
Ломаем
В Java существуют примитивные типы и их объектные версии. Для оптимизации JVM заранее создаёт и кеширует Boolean, Byte, Short и часть диапазона Integer, чтобы вместо создания нового объекта использовать существующий в кеше.
Взглянем на Integer.javapublic final class Integer extends Number
implements Comparable<Integer>, Constable, ConstantDesc {
private final int value;
@IntrinsicCandidate
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
}
https://habr.com/ru/articles/767114/
👉@BookJava
Разработка децентрализованных приложений на Spring Boot: инструменты Web3 Tech
Привет! Меня зовут Даниил, я разработчик в Web3 Tech. Недавно в JVM-инструментарии для нашей основной платформы «Конфидент» состоялся новый релиз, в который вошли библиотеки клиента для взаимодействия с нодой и Spring Boot стартеры. Далее в посте я расскажу об этих библиотеках, которые помогут вам комфортно и эффективно создавать на JVM-языках программирования полноценные приложения, взаимодействующие со смарт-контрактами нашей платформы.
https://habr.com/ru/companies/web3_tech/articles/768310/
👉@BookJava
Разрешаем фронту подписаться на бэкенд. Server Sent Events на Java Spring Boot.
Простой способ избежать постоянного опроса сервера. Событийный способ работы.
источник
👉@BookJava