Forwarded from Java: fill the gaps
HashMap в Java 8.
О работе HashMap спрашивают и джуниоров, и сеньоров. Часто всё сводится к рассказу о бакетах и оценке сложности на базе статей 1998 года. С тех времён много изменилось. Этот пост о текущей структуре, особенностях и недостатках HashMap.
❓Как устроен HashMap?
В основе HashMap лежит массив начальных элементов, которые называют бакетами. Их количество зависит от количества элементов — подбирается ближайшая степень двойки. Если элементов 20, то создаётся 32 бакета.
Если хэш-функция ключа распределяет значения равномерно, то в каждом бакете будет 0 или 1 элемент.
На практике такое происходит редко, и значения хэшей элементов иногда совпадают. Тогда элементы с одинаковым хэш кодом организуются в список. Если их становится больше 8, то элементы перестраиваются в двоичное дерево.
❓Как определяется нужный бакет?
Популярное заблуждение - по остатку деления хэша на количество бакетов. Это не совсем так. Количество бакетов кратно степени двойки, и при вычислении используется логическое И.
В массиве из 16 бакетов последний элемент имеет номер 15, в битовом представлении это 1111. Операция & оставит последние 4 бита числа.
Сравним:
❓Что такое load factor и зачем он нужен?
HashMap быстро работает, когда в бакете 0 или 1 элемент. При добавлении элементов повышается шанс, что в одном бакете их будет несколько, a HashMap станет менее эффективен. Поэтому HashMap периодически расширяется. Параметр load factor определяет, когда это происходит. По умолчанию равен 0.75.
Пример: в HashMap 20 элементов и 32 бакета. Когда элементов будет 32*0.75=24, количество бакетов удвоится и элементы перераспределятся по ним.
❓Какие недостатки у HashMap?
1️⃣ Cильная зависимость от функции распределения хэшей.
2️⃣ Неэкономный расход памяти. При load factor = 0.75 будет пустовать 25% памяти. При неравномерном распределении хэшей — ещё больше.
❓В конструкторе HashMap проставляются свойства, а массив бакетов создаётся только при первой вставке. Зачем нужна ленивая инициализация?
Расширение HashMap — долгая операция. Когда добавляется набор элементов, можно сразу увеличить массив до необходимого размера. Очень популярный случай - когда в пустой HashMap добавляютcя элементы другой map:
А теперь разберём вопрос про порядок элементов:
✅ Обход HashMap происходит последовательно - бакет за бакетом. Поэтому задание сводится к определению бакетов, в которые попадут значения. Это и будет порядок вывода элементов:
Ответ: 20 10 30
О работе HashMap спрашивают и джуниоров, и сеньоров. Часто всё сводится к рассказу о бакетах и оценке сложности на базе статей 1998 года. С тех времён много изменилось. Этот пост о текущей структуре, особенностях и недостатках HashMap.
❓Как устроен HashMap?
В основе HashMap лежит массив начальных элементов, которые называют бакетами. Их количество зависит от количества элементов — подбирается ближайшая степень двойки. Если элементов 20, то создаётся 32 бакета.
Если хэш-функция ключа распределяет значения равномерно, то в каждом бакете будет 0 или 1 элемент.
На практике такое происходит редко, и значения хэшей элементов иногда совпадают. Тогда элементы с одинаковым хэш кодом организуются в список. Если их становится больше 8, то элементы перестраиваются в двоичное дерево.
❓Как определяется нужный бакет?
Популярное заблуждение - по остатку деления хэша на количество бакетов. Это не совсем так. Количество бакетов кратно степени двойки, и при вычислении используется логическое И.
В массиве из 16 бакетов последний элемент имеет номер 15, в битовом представлении это 1111. Операция & оставит последние 4 бита числа.
Сравним:
hash % 16Результат будет одинаковый, но логическое И выполняется в 2 раза быстрее. Вычисление бакета — частая операция в HashMap, и такая микрооптимизация даёт хороший прирост в производительности.
hash & 15
❓Что такое load factor и зачем он нужен?
HashMap быстро работает, когда в бакете 0 или 1 элемент. При добавлении элементов повышается шанс, что в одном бакете их будет несколько, a HashMap станет менее эффективен. Поэтому HashMap периодически расширяется. Параметр load factor определяет, когда это происходит. По умолчанию равен 0.75.
Пример: в HashMap 20 элементов и 32 бакета. Когда элементов будет 32*0.75=24, количество бакетов удвоится и элементы перераспределятся по ним.
❓Какие недостатки у HashMap?
1️⃣ Cильная зависимость от функции распределения хэшей.
2️⃣ Неэкономный расход памяти. При load factor = 0.75 будет пустовать 25% памяти. При неравномерном распределении хэшей — ещё больше.
❓В конструкторе HashMap проставляются свойства, а массив бакетов создаётся только при первой вставке. Зачем нужна ленивая инициализация?
Расширение HashMap — долгая операция. Когда добавляется набор элементов, можно сразу увеличить массив до необходимого размера. Очень популярный случай - когда в пустой HashMap добавляютcя элементы другой map:
Map result=new HashMap();Если бы внутренняя структура result создавалась в конструкторе, пришлось бы тут же её расширять. С отложенной инициализацией можно этого избежать.
...
result.putAll(anotherMap);
А теперь разберём вопрос про порядок элементов:
✅ Обход HashMap происходит последовательно - бакет за бакетом. Поэтому задание сводится к определению бакетов, в которые попадут значения. Это и будет порядок вывода элементов:
10 % 16 = 10
20 % 16 = 4
30 % 16 = 14
Ответ: 20 10 30
Forwarded from Deleted Account
https://javarush.ru/ - платный курс
https://itproger.com/course/java/ - курс обучения с платными заданиями.
https://www.youtube.com/watch?v=Zxpz5tRrUvU&list=PL0lO_mIqDDFW2xXiWSfjT7hEdOUZHVNbK - видеоуроки по java от itproger
https://metanit.com/java/tutorial/ - курс джава, лекции + бесплатные задания.
https://habr.com/ru/post/440436/#10 - задачи по джава.
https://jsehelper.blogspot.com/2016/01/blog-post_59.html - список вопросов на собеседование.
https://javarush.ru/groups/posts/2434-podborka-youtube-kanalih-blogi-i-podkastih-dlja-java-programmistov - список каналов
https://itproger.com/course/java/ - курс обучения с платными заданиями.
https://www.youtube.com/watch?v=Zxpz5tRrUvU&list=PL0lO_mIqDDFW2xXiWSfjT7hEdOUZHVNbK - видеоуроки по java от itproger
https://metanit.com/java/tutorial/ - курс джава, лекции + бесплатные задания.
https://habr.com/ru/post/440436/#10 - задачи по джава.
https://jsehelper.blogspot.com/2016/01/blog-post_59.html - список вопросов на собеседование.
https://javarush.ru/groups/posts/2434-podborka-youtube-kanalih-blogi-i-podkastih-dlja-java-programmistov - список каналов
Forwarded from Nick
Cay S. Horstmann: free download. Ebooks library. On-line books store on Z-Library
https://1lib.eu/g/Cay%20S.%20Horstmann?regionChanged=&redirect=1262504
https://1lib.eu/g/Cay%20S.%20Horstmann?regionChanged=&redirect=1262504
b-ok.cc
Cay S. Horstmann: free download. Ebooks library. On-line books store on Z-Library
Cay S. Horstmann: free download. Ebooks library. On-line books store on Z-Library | B–OK. Download books for free. Find books
Forwarded from Библиотека джависта | Java, Spring, Maven, Hibernate
Атомарность (atomicity) гарантирует, что никакая транзакция не будет зафиксирована в системе частично. Будут либо выполнены все её подоперации, либо не выполнено ни одной.
Согласованность (consistency). Транзакция, достигающая своего нормального завершения и, тем самым, фиксирующая свои результаты, сохраняет согласованность базы данных.
Изолированность (isolation). Во время выполнения транзакции параллельные транзакции не должны оказывать влияние на её результат.
Долговечность (durability). Независимо от проблем на нижних уровнях (к примеру, обесточивание системы или сбои в оборудовании) изменения, сделанные успешно завершённой транзакцией, должны остаться сохранёнными после возвращения системы в работу.
Согласованность (consistency). Транзакция, достигающая своего нормального завершения и, тем самым, фиксирующая свои результаты, сохраняет согласованность базы данных.
Изолированность (isolation). Во время выполнения транзакции параллельные транзакции не должны оказывать влияние на её результат.
Долговечность (durability). Независимо от проблем на нижних уровнях (к примеру, обесточивание системы или сбои в оборудовании) изменения, сделанные успешно завершённой транзакцией, должны остаться сохранёнными после возвращения системы в работу.
Books for Java and SQL pinned «https://thorben-janssen.com/best-practices-many-one-one-many-associations-mappings/»
Forwarded from There will be no singularity
Все выпуски SQL-TIL:
1) https://t.me/nosingularity/535
2) https://t.me/nosingularity/541
3) https://t.me/nosingularity/548
4) https://t.me/nosingularity/572
5) (snowflake) https://t.me/nosingularity/582
1) https://t.me/nosingularity/535
2) https://t.me/nosingularity/541
3) https://t.me/nosingularity/548
4) https://t.me/nosingularity/572
5) (snowflake) https://t.me/nosingularity/582
Forwarded from Vitaly
JAVA_CODING_PROBLEMS.pdf
7 MB
кароч книжку читаю вроде как полезная 200+ задачек разными способами решены включая стримы
👍1
Forwarded from D K
Посоветовали поделиться со всеми, исполняю. 😄
https://горячиеклавиши.рф/intellij-idea
https://горячиеклавиши.рф/intellij-idea
горячиеклавиши.рф
Горячие клавиши IntelliJ IDEA
Горячие клавиши и клавиатурные сочетания IntelliJ IDEA для Windows. Список сочетаний в таблице с сортировкой столбцов, фильтрацией и подсветкой найденного. А также печать таблицы и возможность сохранить в PDF файл.
Forwarded from Библиотека программиста
😻 5 проектов на GitHub, которые помогут вам стать лучшим инженером DevOps
DevOps – одна из самых сложных областей, в которой чтобы отлично справляться и оставаться актуальным, вам нужно постоянно учиться. Рассмотрим 5 проектов, способных в этом помочь.
https://proglib.io/sh/pRcW3HQID2
DevOps – одна из самых сложных областей, в которой чтобы отлично справляться и оставаться актуальным, вам нужно постоянно учиться. Рассмотрим 5 проектов, способных в этом помочь.
https://proglib.io/sh/pRcW3HQID2
Forwarded from EPAM Campus UA
🎯 Easy, Medium, Hard: три сайти для підготовки до DevSecOps Fast Track
Вже цієї неділі, 15 серпня, закривається реєстрація на набір DevSecOps – напрям на стику кібербезпеки, системного адміністрування та хмарних середовищ ☁️
🔐 Щоб трохи попрактикуватися перед стартом програми або просто познайомитися з професією та зрозуміти, чи підходить вона вам, радимо потренуватися на одному з трьох сайтів різних рівней складності – Easy, Medium та Hard – які рекомендує Андрій Костромицький, керівник напрямів DevOps, BA та Python в EPAM University.
🐥 Easy: TryHackMe. Інтерактивний формат навчання, невеликі уроки, система винагород та beginner-friendly програма роблять цей сайт кращим другом початківця у кібербезпеці. Кажуть, що два тижні активного проходження уроків на цьому сайті замінюють два роки вивчення сухої теорії. Що ж, це точно варто перевірити самому!
🤯 Medium: Root Me. Більш як 400 різноманітних челенджів та близько 4400+ існуючих рішень, які запропонували юзери – тут є, де попрактикувати свій скіл як джуніору, так і досвідченому DevSecOps інженеру. На сайті можна обирати задачі 5 рівнів складності, обговорювати особливо складні кейси з ком'юніті, ну і, звісно, прокачувати свої знання з мереж, безпеки та будови вебсторінок.
😈 Hard: Offensive Security. "Бажання страждати є необхідним критерієм для закінчення цієї програми", – кажуть експерти з кібербезпеки та пентестінгу з досвідом 7+ років. Це – точно не сайт для початківців, але окрім челенджів від девелоперів Kali Linux, на сайті також можна знайти онлайн-курси, які вважаються чи не кращими з існуючих (але, звісно, не такими класними, як в EPAM University 😇). Відкривати тільки на свій страх та ризик!
🌟 Якщо ж після перегляду сайтів ви тільки впевнилися у своєму бажанні стати DevSecOps інженером, щоб незабаром будувати неприступні системи разом з командою EPAM, тоді DevSecOps Fast Track хоче бачити саме вас на програмі – приєднуйтесь!
Вже цієї неділі, 15 серпня, закривається реєстрація на набір DevSecOps – напрям на стику кібербезпеки, системного адміністрування та хмарних середовищ ☁️
🔐 Щоб трохи попрактикуватися перед стартом програми або просто познайомитися з професією та зрозуміти, чи підходить вона вам, радимо потренуватися на одному з трьох сайтів різних рівней складності – Easy, Medium та Hard – які рекомендує Андрій Костромицький, керівник напрямів DevOps, BA та Python в EPAM University.
🐥 Easy: TryHackMe. Інтерактивний формат навчання, невеликі уроки, система винагород та beginner-friendly програма роблять цей сайт кращим другом початківця у кібербезпеці. Кажуть, що два тижні активного проходження уроків на цьому сайті замінюють два роки вивчення сухої теорії. Що ж, це точно варто перевірити самому!
🤯 Medium: Root Me. Більш як 400 різноманітних челенджів та близько 4400+ існуючих рішень, які запропонували юзери – тут є, де попрактикувати свій скіл як джуніору, так і досвідченому DevSecOps інженеру. На сайті можна обирати задачі 5 рівнів складності, обговорювати особливо складні кейси з ком'юніті, ну і, звісно, прокачувати свої знання з мереж, безпеки та будови вебсторінок.
😈 Hard: Offensive Security. "Бажання страждати є необхідним критерієм для закінчення цієї програми", – кажуть експерти з кібербезпеки та пентестінгу з досвідом 7+ років. Це – точно не сайт для початківців, але окрім челенджів від девелоперів Kali Linux, на сайті також можна знайти онлайн-курси, які вважаються чи не кращими з існуючих (але, звісно, не такими класними, як в EPAM University 😇). Відкривати тільки на свій страх та ризик!
🌟 Якщо ж після перегляду сайтів ви тільки впевнилися у своєму бажанні стати DevSecOps інженером, щоб незабаром будувати неприступні системи разом з командою EPAM, тоді DevSecOps Fast Track хоче бачити саме вас на програмі – приєднуйтесь!
Forwarded from Java библиотека
Spring Boot with React and AWS: Learn to Deploy a Full Stack Spring Boot React Application to AWS (2021) PDF
Create and deploy full-stack Spring Boot applications with React and AWS. This practical and authoritative guide teaches you the fundamentals of Amazon Web Services with no prior experience.
You will start by learning the fundamentals of AWS, including EC2, S3, IAM, and load balancer. Next, you will learn to deploy a Spring Boot REST API to AWS with Elastic Beanstalk, which will give you the ability to build and deploy a Spring Boot application. You will explore the RDS relational database and create an instance of a MySQL database in AWS with RDS.
You will then deploy a Spring Boot application to MySQL in AWS and deploy a full-stack Spring Boot React application to AWS using Elastic Beanstalk and S3. Lastly, you will be introduced to ELB, CloudWatch, and Route 53. By the end of this book you will understand full-stack Spring Boot React applications and their deployment.
Create and deploy full-stack Spring Boot applications with React and AWS. This practical and authoritative guide teaches you the fundamentals of Amazon Web Services with no prior experience.
You will start by learning the fundamentals of AWS, including EC2, S3, IAM, and load balancer. Next, you will learn to deploy a Spring Boot REST API to AWS with Elastic Beanstalk, which will give you the ability to build and deploy a Spring Boot application. You will explore the RDS relational database and create an instance of a MySQL database in AWS with RDS.
You will then deploy a Spring Boot application to MySQL in AWS and deploy a full-stack Spring Boot React application to AWS using Elastic Beanstalk and S3. Lastly, you will be introduced to ELB, CloudWatch, and Route 53. By the end of this book you will understand full-stack Spring Boot React applications and their deployment.
#security #guide
Справочник по разработке безопасных веб-приложений: лучшие практики, анализ и исправление уязвимостей.
https://proglib.io/w/3e42e3da
Справочник по разработке безопасных веб-приложений: лучшие практики, анализ и исправление уязвимостей.
https://proglib.io/w/3e42e3da
vladtoie.gitbook.io
Secure Coding Handbook | Secure Coding Handbook