В чем разница между 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
В этом ролике автор рассказывает о компонентах и реализации аутентификации в Spring Security.
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Аутентификация - Spring Security в деталях
В этом ролике я рассказываю о компонентах и реализации аутентификации в Spring Security.
00:00 Вступление
01:45 Приземляется Ил-76ТД
02:44 Идентификация, аутентификация и авторизация
06:15 Интеграция Spring Security
08:36 Basic-аутентификация
16:24 Basic…
00:00 Вступление
01:45 Приземляется Ил-76ТД
02:44 Идентификация, аутентификация и авторизация
06:15 Интеграция Spring Security
08:36 Basic-аутентификация
16:24 Basic…
👍18🔥11❤1
В этом ролике автор рассказывает о способах получения доступа к аутентифицированному пользователю
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Получение информации о пользователе - Spring Security в деталях
В этом ролике я рассказываю о способах получения доступа к аутентифицированному пользователю
Мой сайт: https://alexkosarev.name/
Паблик в VK: https://vk.com/public218833461
Канал в Telegram:https://t.me/+TZCuO38vG3oqu_Jq
Стать доном: https://vk.com/donut/shurik.codes…
Мой сайт: https://alexkosarev.name/
Паблик в VK: https://vk.com/public218833461
Канал в Telegram:https://t.me/+TZCuO38vG3oqu_Jq
Стать доном: https://vk.com/donut/shurik.codes…
👍12
Learning Java: An Introduction to Real-World Programming with Java, 6th Edition (Final) (2023) True ePUB
Ideal for working programmers new to Java, this best-selling book guides you through the language features and APIs of Java 21. Through fun, compelling, and realistic examples, authors Marc Loy, Patrick Niemeyer, and Dan Leuck introduce you to Java's fundamentals, including its class libraries, programming techniques, and idioms, with an eye toward building real applications.
This updated sixth edition expands the content to continue covering lambdas and streams, and shows you how to use a functional paradigm in Java. You'll learn about the latest Java features introduced since the book's fifth edition, from JDK 15 through 21. You'll also take a deep dive into virtual threads (introduced as Project Loom in Java 19).
Ideal for working programmers new to Java, this best-selling book guides you through the language features and APIs of Java 21. Through fun, compelling, and realistic examples, authors Marc Loy, Patrick Niemeyer, and Dan Leuck introduce you to Java's fundamentals, including its class libraries, programming techniques, and idioms, with an eye toward building real applications.
This updated sixth edition expands the content to continue covering lambdas and streams, and shows you how to use a functional paradigm in Java. You'll learn about the latest Java features introduced since the book's fifth edition, from JDK 15 through 21. You'll also take a deep dive into virtual threads (introduced as Project Loom in Java 19).
👍11🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Яндекс запустил канал ТЕХНО, в котором простым языком рассказывает о том, как устроен мир технологий. Внутри всё то, что мы так любим: нейросети, роботы, чат-боты, голосовые помощники и многое другое.
Из любопытного:
— Что такое промпт и как его правильно формулировать
— Почему на первых клавиатурах не было 0 и 1
— Чем занимается преподаватель для нейросети
— И наконец, займут ли ваше рабочее место роботы и ИИ
Подписывайтесь тут 👉 https://t.me/techno_yandex!
Из любопытного:
— Что такое промпт и как его правильно формулировать
— Почему на первых клавиатурах не было 0 и 1
— Чем занимается преподаватель для нейросети
— И наконец, займут ли ваше рабочее место роботы и ИИ
Подписывайтесь тут 👉 https://t.me/techno_yandex!
👍7❤2
Программирование на Kotlin для Android (2023) PDF, djvu
Книга посвящена разработке мобильных приложений для Android на языке Kotlin. Рассмотрены основные структуры и элементы языка, подробно описан фреймворк коллекций Kotlin. Показана архитектура операционной системы Android, приложений и их контейнеров, изучаются основы параллельного программирования. Рассказано о потокобезопасности, работе с параллелизмом с использованием обратных вызовов. Отдельная глава посвящена специальным конструкциям Kotlin — сопрограммам, с акцентом на структурированный параллелизм. Рассматриваются каналы, использование потоков для асинхронной обработки данных. Изучаются вопросы повышения производительности приложений с использованием инструментов профилирования Android и снижения потребления ресурсов за счет оптимизации производительности.
Книга посвящена разработке мобильных приложений для Android на языке Kotlin. Рассмотрены основные структуры и элементы языка, подробно описан фреймворк коллекций Kotlin. Показана архитектура операционной системы Android, приложений и их контейнеров, изучаются основы параллельного программирования. Рассказано о потокобезопасности, работе с параллелизмом с использованием обратных вызовов. Отдельная глава посвящена специальным конструкциям Kotlin — сопрограммам, с акцентом на структурированный параллелизм. Рассматриваются каналы, использование потоков для асинхронной обработки данных. Изучаются вопросы повышения производительности приложений с использованием инструментов профилирования Android и снижения потребления ресурсов за счет оптимизации производительности.
👍10🔥5