Современные информационные системы сложно представить себе без логгирования, ценность которого сложно перееоценить. В случае возникновения каких-то непредвиденных ситуаций лог или журнал событий будет первым и, возможно, главным источником информации, на основе которой вы сможете определить причины непредвиденного поведения или ошибок, а затем исправить их.
Для записи события в лог вы можете использовать System.out, System.err и PrintStream в целом, но лучше для этого использовать специализированные инструменты: логгеры и фасады логгирования, о которых пойдёт речь в этом обзорном ролике. При подготовке к этому ролику я постарался разобраться с подавляющим большинством современных инструментов логгирования для проектов на платформе Java и сформулировать какие-то выводы. Надеюсь, после просмотра этого ролика вам станет понятнее, что есть что в списе JUL, JCL, log4j, log4j 2, SLF4J и т.д., а так же, что стоит использовать, а что - нет.
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Инструменты логгирования для платформы Java
Современные информационные системы сложно представить себе без логгирования, ценность которого сложно перееоценить. В случае возникновения каких-то непредвиденных ситуаций лог или журнал событий будет первым и, возможно, главным источником информации, на…
👍26🔥7
Зачем нужен HashMap, если есть Hashtable?
• Методы класса
•
•
Hashtable это устаревший класс и его использование не рекомендовано.
• Методы класса
Hashtable
синхронизированы, что приводит к снижению производительности, а HashMap
- нет;•
HashTable
не может содержать элементы null
, тогда как HashMap
может содержать один ключ null
и любое количество значений null
;•
Iterator
у HashMap
, в отличие от Enumeration
у HashTable
, работает по принципу «fail-fast»
(выдает исключение при любой несогласованности данных).Hashtable это устаревший класс и его использование не рекомендовано.
👍26❤4
Forwarded from Java Guru 🤓
Что будет в результате компиляции и выполнения данного кода?
Anonymous Quiz
16%
vehiclebike
3%
vehiclecar
14%
carcar
5%
bikebike
29%
Ошибка выполнения
34%
Ошибка компиляции
👍9🔥2
KeyStore Explorer - Создание самоподписанных сертификатов
В данном ролике автор рассмотрит создание самоподписанных сертификатов при помощи утилиты KeyStore Explorer.
В данном ролике автор рассмотрит создание самоподписанных сертификатов при помощи утилиты KeyStore Explorer.
YouTube
KeyStore Explorer - Создание самоподписанных сертификатов
В данном ролике я рассмотрю создание самоподписанных сертификатов при помощи утилиты KeyStore Explorer.
Сайт: https://alexkosarev.name
Паблик в VK: https://vk.com/public218833461
Канал в Telegram: https://t.me/+TZCuO38vG3oqu_Jq
#ssl #keystoreexplorer
Сайт: https://alexkosarev.name
Паблик в VK: https://vk.com/public218833461
Канал в Telegram: https://t.me/+TZCuO38vG3oqu_Jq
#ssl #keystoreexplorer
👍12
В чем разница между HashMap и WeakHashMap? Для чего используется WeakHashMap?
В
В качестве примера использования такой структуры данных можно привести следующую ситуацию: допустим имеются объекты, которые необходимо расширить дополнительной информацией, при этом изменение класса этих объектов нежелательно либо невозможно. В этом случае добавляем каждый объект в
В
Java
существует 4 типа ссылок: сильные (strong reference)
, мягкие (SoftReference)
, слабые (WeakReference)
и фантомные (PhantomReference)
. Особенности каждого типа ссылок связаны с работой Garbage Collector
. Если объект можно достичь только с помощью цепочки WeakReference
(то есть на него отсутствуют сильные и мягкие ссылки), то данный объект будет помечен на удаление.WeakHashMap
- это структура данных, реализующая интерфейс Map
и основанная на использовании WeakReference
для хранения ключей. Таким образом, пара «ключ-значение»
будет удалена из WeakHashMap
, если на объект-ключ более не имеется сильных ссылок.В качестве примера использования такой структуры данных можно привести следующую ситуацию: допустим имеются объекты, которые необходимо расширить дополнительной информацией, при этом изменение класса этих объектов нежелательно либо невозможно. В этом случае добавляем каждый объект в
WeakHashMap
в качестве ключа, а в качестве значения - нужную информацию. Таким образом, пока на объект имеется сильная ссылка (либо мягкая), можно проверять хэш-таблицу и извлекать информацию. Как только объект будет удален, то WeakReference
для этого ключа будет помещен в ReferenceQueue
и затем соответствующая запись для этой слабой ссылки будет удалена из WeakHashMap
.👍19❤3🔥3
Что такое «абстракция»?
Абстрагирование – это способ выделить набор общих характеристик объекта, исключая из рассмотрения частные и незначимые. Соответственно, абстракция – это набор всех таких характеристик.
Представьте, что водитель едет в автомобиле по оживлённому участку движения. Понятно, что в этот момент он не будет задумываться о химическом составе краски автомобиля, особенностях взаимодействия шестерёнок в коробке передач или влияния формы кузова на скорость (разве что, автомобиль стоит в глухой пробке и водителю абсолютно нечем заняться). Однако, руль, педали, указатель поворота он будет использовать регулярно.
Абстрагирование – это способ выделить набор общих характеристик объекта, исключая из рассмотрения частные и незначимые. Соответственно, абстракция – это набор всех таких характеристик.
Представьте, что водитель едет в автомобиле по оживлённому участку движения. Понятно, что в этот момент он не будет задумываться о химическом составе краски автомобиля, особенностях взаимодействия шестерёнок в коробке передач или влияния формы кузова на скорость (разве что, автомобиль стоит в глухой пробке и водителю абсолютно нечем заняться). Однако, руль, педали, указатель поворота он будет использовать регулярно.
👍23🔥2
Программирование для Android на Kotlin. 3-е изд (2023) True PDF
Вам уже пришла в голову гениальная идея мобильного приложения, которое завоюет весь мир? Дело за малым — воплотить ее в жизнь.
Эта полностью переработанная и обновленная книга поможет сразу приступить к работе. Вы на практике узнаете, как структурировать приложение, создавать гибкие и интерактивные пользовательские интерфейсы, сохранять информацию в базе данных и использовать новейшие возможности Android Jetpack и Jetpack Compose. Все, что вам нужно для успешного старта — это немного базовых знаний о языке Kotlin.
Вам уже пришла в голову гениальная идея мобильного приложения, которое завоюет весь мир? Дело за малым — воплотить ее в жизнь.
Эта полностью переработанная и обновленная книга поможет сразу приступить к работе. Вы на практике узнаете, как структурировать приложение, создавать гибкие и интерактивные пользовательские интерфейсы, сохранять информацию в базе данных и использовать новейшие возможности Android Jetpack и Jetpack Compose. Все, что вам нужно для успешного старта — это немного базовых знаний о языке Kotlin.
👍12🔥5❤1
LinkedHashMap - что в нем от LinkedList, а что от HashMap?
Реализация
При добавлении элемента, который уже присутствует в
Реализация
LinkedHashMap
отличается от HashMap
поддержкой двухсвязанного списка, определяющего порядок итерации по элементам структуры данных. По умолчанию элементы списка упорядочены согласно их порядку добавления в LinkedHashMap
(insertion-order)
. Однако порядок итерации можно изменить, установив параметр конструктора accessOrder
в значение true
. В этом случае доступ осуществляется по порядку последнего обращения к элементу (access-order)
. Это означает, что при вызове методов get()
или put()
элемент, к которому обращаемся, перемещается в конец списка.При добавлении элемента, который уже присутствует в
LinkedHashMap
(т.е. с одинаковым ключом), порядок итерации по элементам не изменяется.👍16🔥3❤2
Java Programming Made Easy: Unlock Your Coding Potential from Scratch (2023) PDF
Step into the exciting world of coding with "Java Programming Made Easy: Unlock Your Coding Potential from Scratch". Whether you're an absolute beginner with zero coding experience or an experienced programmer looking to brush up your Java skills, this comprehensive guide is your perfect companion. We've distilled complex concepts into simple, easy-to-understand explanations, complete with hands-on examples and practical exercises.
Unleash the power of one of the world's most popular programming languages. From the very basics to advanced topics, we'll guide you every step of the way in your journey to master Java. This book is packed with practical insights, expert tips, and plenty of code examples that will help you learn, practice, and excel in Java programming.
Step into the exciting world of coding with "Java Programming Made Easy: Unlock Your Coding Potential from Scratch". Whether you're an absolute beginner with zero coding experience or an experienced programmer looking to brush up your Java skills, this comprehensive guide is your perfect companion. We've distilled complex concepts into simple, easy-to-understand explanations, complete with hands-on examples and practical exercises.
Unleash the power of one of the world's most popular programming languages. From the very basics to advanced topics, we'll guide you every step of the way in your journey to master Java. This book is packed with practical insights, expert tips, and plenty of code examples that will help you learn, practice, and excel in Java programming.
👍9❤3🔥3🎉2
Как устроен HashMap?
HashMap
состоит из «корзин» (bucket)
. С технической точки зрения «корзины» — это элементы массива, которые хранят ссылки на списки элементов. При добавлении новой пары «ключ-значение», вычисляет хэш-код ключа, на основании которого вычисляется номер корзины (номер ячейки массива), в которую попадет новый элемент. Если корзина пустая, то в нее сохраняется ссылка на вновь добавляемый элемент, если же там уже есть элемент, то происходит последовательный переход по ссылкам между элементами в цепочке, в поисках последнего элемента, от которого и ставится ссылка на вновь добавленный элемент. Если в списке был найден элемент с таким же ключом, то он заменяется.👍20🔥7
Предположим, есть метод, который может выбросить IOException и FileNotFoundException в какой последовательности должны идти блоки catch? Сколько блоков catch будет выполнено?
Общее правило: обрабатывать исключения нужно от «младшего» к старшему. Т.е. нельзя поставить в первый блок
Таким образом, исходя из факта, что
Общее правило: обрабатывать исключения нужно от «младшего» к старшему. Т.е. нельзя поставить в первый блок
catch(Exception ex) {}
, иначе все дальнейшие блоки catch()
уже ничего не смогут обработать, т.к. любое исключение будет соответствовать обработчику catch(Exception ex)
.Таким образом, исходя из факта, что
FileNotFoundException extends IOException
сначала нужно обработать FileNotFoundException
, а затем уже IOException
.👍26❤8🔥4🎉1
erid: LjN8KQUDy
31 августа произойдет два важных события. И оба грустные
Во-первых, закончится лето. Во-вторых, закончится прием заявок на курс Академии ИТ-менеджмента, где можно научиться быть хорошим управленцем. Только 20 человек за 5 месяцев получат знания и опыта от Алексея Карпунина и других знаковых менеджеров ИТ!
Этот курс подойдёт тем, кто готов искать нестандартные решения в работе — навык за который платят выше рынка
После обучения вы попадёте в закрытый клуб и будете иметь доступ к опыту и знаниям топов рынка ИТ. Сильное окружение — ключевая часть успешной реализации и мы готовы это вам дать. Лучшим студентам — гарантия трудоустройства в ведущие ИТ-компании!
Подпишись на канал, чтобы следить за новостями и 24 августа задать вопросы ведущему курса (будет нестандартно, гарантируем)
Если вы уже готовы, подавайте заявку на сайте
Реклама. ИП Аргышева В.В., ИНН 745311977025
31 августа произойдет два важных события. И оба грустные
Во-первых, закончится лето. Во-вторых, закончится прием заявок на курс Академии ИТ-менеджмента, где можно научиться быть хорошим управленцем. Только 20 человек за 5 месяцев получат знания и опыта от Алексея Карпунина и других знаковых менеджеров ИТ!
Этот курс подойдёт тем, кто готов искать нестандартные решения в работе — навык за который платят выше рынка
После обучения вы попадёте в закрытый клуб и будете иметь доступ к опыту и знаниям топов рынка ИТ. Сильное окружение — ключевая часть успешной реализации и мы готовы это вам дать. Лучшим студентам — гарантия трудоустройства в ведущие ИТ-компании!
Подпишись на канал, чтобы следить за новостями и 24 августа задать вопросы ведущему курса (будет нестандартно, гарантируем)
Если вы уже готовы, подавайте заявку на сайте
Реклама. ИП Аргышева В.В., ИНН 745311977025
2024.ipwk.pro
IPWK - Авторский курс
❤7👍7🔥2☃1
Искусство чистого кода (2023) PDF
Большинство разработчиков ПО тратят тысячи часов на создание излишне сложного кода. Девять основных принципов книги «Искусство чистого кода» научат вас писать понятный и удобный в сопровождении код без ущерба для функциональности. Главный принцип — это простота: сокращайте, упрощайте и перенаправляйте освободившуюся энергию на самые важные задачи, чтобы сэкономить бесчисленное количество часов и облегчить зачастую очень утомительную задачу поддержки кода. Автор бестселлеров Кристиан Майер помог тысячам людей усовершенствовать навыки программирования и в своей новой книге делится опытом с читателями.
Большинство разработчиков ПО тратят тысячи часов на создание излишне сложного кода. Девять основных принципов книги «Искусство чистого кода» научат вас писать понятный и удобный в сопровождении код без ущерба для функциональности. Главный принцип — это простота: сокращайте, упрощайте и перенаправляйте освободившуюся энергию на самые важные задачи, чтобы сэкономить бесчисленное количество часов и облегчить зачастую очень утомительную задачу поддержки кода. Автор бестселлеров Кристиан Майер помог тысячам людей усовершенствовать навыки программирования и в своей новой книге делится опытом с читателями.
👍22❤6🔥3
Spring 6 Recipes: A Problem-Solution Approach to Spring Framework, Fifth Edition (2023) PDF
This in-depth Spring-based Java developer code reference has been updated and now solves many of your Spring Framework 6 problems using reusable, complete and real-world working code examples. Spring 6 Recipes (5th Edition) now includes Spring Native which speeds up your Java-based Spring Framework built enterprise, native cloud, web applications and microservices. It also has been updated to now include Spring R2DBC for Reactive Relational Database Connectivity, a specification to integrate SQL databases, like PostgreSQL, MySQL and more, using reactive drivers.
Furthermore, this book includes additional coverage of WebFlux for more reactive Spring web applications. Reactive programming allows you to build systems that are resilient to high load, especially common in the more complex enterprise, native cloud applications that Spring Framework lets you build.
This in-depth Spring-based Java developer code reference has been updated and now solves many of your Spring Framework 6 problems using reusable, complete and real-world working code examples. Spring 6 Recipes (5th Edition) now includes Spring Native which speeds up your Java-based Spring Framework built enterprise, native cloud, web applications and microservices. It also has been updated to now include Spring R2DBC for Reactive Relational Database Connectivity, a specification to integrate SQL databases, like PostgreSQL, MySQL and more, using reactive drivers.
Furthermore, this book includes additional coverage of WebFlux for more reactive Spring web applications. Reactive programming allows you to build systems that are resilient to high load, especially common in the more complex enterprise, native cloud applications that Spring Framework lets you build.
👍13❤7🔥2
В данном видео рассмотрен пример создания REST API с использованием следующих технологий:
- Spring Boot 3
- Spring Security (JWT)
- Spring WebFlux
- Spring Data R2DBC
- MapStruct
- PostgreSQL
- Flyway
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Создание REST API с использованием Spring WebFlux и Security
В данном видео рассмотрен пример создания REST API с использованием следующих технологий:
- Spring Boot 3
- Spring Security (JWT)
- Spring WebFlux
- Spring Data R2DBC
- MapStruct
- PostgreSQL
- Flyway
Ссылка на Github репозиторий:
https://github.…
- Spring Boot 3
- Spring Security (JWT)
- Spring WebFlux
- Spring Data R2DBC
- MapStruct
- PostgreSQL
- Flyway
Ссылка на Github репозиторий:
https://github.…
👍25❤9🔥4🎉1
Современная программная инженерия. ПО в эпоху эджайла и непрерывного развертывания (2023) PDF
Дэвид Фарли, легендарный разработчик и создатель continuous delivery, рассказывает о фундаментальных принципах разработки современного ПО. Пора познакомиться с наиболее эффективными и грамотными методами управления рабочими процессами, которые позволят повысить качество ваших приложений, вашей жизни и жизни ваших коллег.
Ключевые концепции, лежащие в основе эффективной разработки ПО, — это непрерывное обучение и управление сложностью. Дэвид Фарли анализирует их и формулирует принципы, следование которым приведет к улучшению дизайна ПО и качества кода, а также методы и подходы, доказавшие свою эффективность и приводящие к успеху. Речь идет не об абстракциях, вы освоите реальные приемы, которыми пользуются опытные разработчики ПО. Эти техники эмпирические и итеративные, они основаны на обратной связи и сосредоточены на выполнении кода, то есть соответствуют всем требованиям современной разработки.
Дэвид Фарли, легендарный разработчик и создатель continuous delivery, рассказывает о фундаментальных принципах разработки современного ПО. Пора познакомиться с наиболее эффективными и грамотными методами управления рабочими процессами, которые позволят повысить качество ваших приложений, вашей жизни и жизни ваших коллег.
Ключевые концепции, лежащие в основе эффективной разработки ПО, — это непрерывное обучение и управление сложностью. Дэвид Фарли анализирует их и формулирует принципы, следование которым приведет к улучшению дизайна ПО и качества кода, а также методы и подходы, доказавшие свою эффективность и приводящие к успеху. Речь идет не об абстракциях, вы освоите реальные приемы, которыми пользуются опытные разработчики ПО. Эти техники эмпирические и итеративные, они основаны на обратной связи и сосредоточены на выполнении кода, то есть соответствуют всем требованиям современной разработки.
❤12👍8🔥2
Согласно Кнуту и Кормену существует две основных реализации хэш-таблицы: на основе открытой адресации и на основе метода цепочек. Как реализована HashMap? Почему, по вашему мнению, была выбрана именно эта реализация? В чем плюсы и минусы каждого подхода?
HashMap в Java реализуется на основе метода цепочек (loopback hashing). Этот подход заключается в том, что каждый элемент хэш-таблицы хранится в отдельном блоке памяти, называемом хеш-блоком. Хеш-блоки связаны между собой, но не связаны друг с другом физически. Это означает, что если один хеш-блок изменяется, то все связанные с ним хеш-блоки также изменятся.
Преимущества использования метода цепочек в HashMap заключаются в следующем:
1. Простота реализации: Метод цепочек позволяет легко добавлять, удалять и изменять элементы хэш-таблицы.
2. Высокая производительность: Метод цепочек обеспечивает высокую производительность при поиске элементов в хеш-таблице, так как он работает за константное время O(1).
3. Устойчивость к коллизиям: Метод цепочек гарантирует, что два разных ключа не будут иметь одинаковый хеш-код, что делает хеш-таблицу устойчивой к коллизиям.
Однако, есть и некоторые недостатки использования метода цепочек в HashMap:
1. Сложность чтения: При использовании метода цепочек чтение элементов хэш-таблицы может быть сложным, так как каждый хеш-блок связан с другими хеш-блоками, но не связан непосредственно с самим элементом.
2. Ограниченность размера: Метод цепочек не поддерживает добавление элементов в хеш-таблицу больше, чем размер самого хеш-блока. Это означает, что если вы попытаетесь добавить элемент в хеш-таблицу, который превышает ее максимальный размер, то вы получите ошибку.
3. Неэффективность при работе с большими объемами данных: Метод цепочек может быть менее эффективным при работе с большими объемами данных, так как он требует большого количества дополнительной памяти для хранения хеш-блоков.
В итоге, выбор метода цепочек в HashMap был выбран из-за простоты реализации, высокой производительности, устойчивости к коллизиям и возможности работы с большими объемами данных. Однако, при работе с большими объемами данных использование метода цепочек может быть менее эффективным.
HashMap в Java реализуется на основе метода цепочек (loopback hashing). Этот подход заключается в том, что каждый элемент хэш-таблицы хранится в отдельном блоке памяти, называемом хеш-блоком. Хеш-блоки связаны между собой, но не связаны друг с другом физически. Это означает, что если один хеш-блок изменяется, то все связанные с ним хеш-блоки также изменятся.
Преимущества использования метода цепочек в HashMap заключаются в следующем:
1. Простота реализации: Метод цепочек позволяет легко добавлять, удалять и изменять элементы хэш-таблицы.
2. Высокая производительность: Метод цепочек обеспечивает высокую производительность при поиске элементов в хеш-таблице, так как он работает за константное время O(1).
3. Устойчивость к коллизиям: Метод цепочек гарантирует, что два разных ключа не будут иметь одинаковый хеш-код, что делает хеш-таблицу устойчивой к коллизиям.
Однако, есть и некоторые недостатки использования метода цепочек в HashMap:
1. Сложность чтения: При использовании метода цепочек чтение элементов хэш-таблицы может быть сложным, так как каждый хеш-блок связан с другими хеш-блоками, но не связан непосредственно с самим элементом.
2. Ограниченность размера: Метод цепочек не поддерживает добавление элементов в хеш-таблицу больше, чем размер самого хеш-блока. Это означает, что если вы попытаетесь добавить элемент в хеш-таблицу, который превышает ее максимальный размер, то вы получите ошибку.
3. Неэффективность при работе с большими объемами данных: Метод цепочек может быть менее эффективным при работе с большими объемами данных, так как он требует большого количества дополнительной памяти для хранения хеш-блоков.
В итоге, выбор метода цепочек в HashMap был выбран из-за простоты реализации, высокой производительности, устойчивости к коллизиям и возможности работы с большими объемами данных. Однако, при работе с большими объемами данных использование метода цепочек может быть менее эффективным.
👍20❤9🔥3
Можно ли считать Final переменную константой?
Поскольку у нас не получится присвоить новое значение для final переменной, кажется, что это переменные константы. Но это только на первый взгляд. Если тип данных, на который ссылается переменная — immutable, то да, это константа.
А если тип данных mutable, то есть изменяемый, при помощи методов и переменных можно будет изменить значение объекта, на который ссылается final переменная, и в таком случае назвать ее константой нельзя. Так вот, на примере видно, что часть финальных переменных действительно константы, а часть — нет, и их можно изменить.
Поскольку у нас не получится присвоить новое значение для final переменной, кажется, что это переменные константы. Но это только на первый взгляд. Если тип данных, на который ссылается переменная — immutable, то да, это константа.
А если тип данных mutable, то есть изменяемый, при помощи методов и переменных можно будет изменить значение объекта, на который ссылается final переменная, и в таком случае назвать ее константой нельзя. Так вот, на примере видно, что часть финальных переменных действительно константы, а часть — нет, и их можно изменить.
👍15