Books for Java and SQL
211 subscribers
29 photos
2 videos
23 files
67 links
All of the best books for java/SQL and some other👌
Download Telegram
Forwarded from Java: fill the gaps
HashMap в Java 8.

О работе HashMap спрашивают и джуниоров, и сеньоров. Часто всё сводится к рассказу о бакетах и оценке сложности на базе статей 1998 года. С тех времён много изменилось. Этот пост о текущей структуре, особенностях и недостатках HashMap.

Как устроен HashMap?
В основе HashMap лежит массив начальных элементов, которые называют бакетами. Их количество зависит от количества элементов — подбирается ближайшая степень двойки. Если элементов 20, то создаётся 32 бакета.
Если хэш-функция ключа распределяет значения равномерно, то в каждом бакете будет 0 или 1 элемент.
На практике такое происходит редко, и значения хэшей элементов иногда совпадают. Тогда элементы с одинаковым хэш кодом организуются в список. Если их становится больше 8, то элементы перестраиваются в двоичное дерево.

Как определяется нужный бакет?
Популярное заблуждение - по остатку деления хэша на количество бакетов. Это не совсем так. Количество бакетов кратно степени двойки, и при вычислении используется логическое И.
В массиве из 16 бакетов последний элемент имеет номер 15, в битовом представлении это 1111. Операция & оставит последние 4 бита числа.
Сравним:
hash % 16
hash & 15
Результат будет одинаковый, но логическое И выполняется в 2 раза быстрее. Вычисление бакета — частая операция в HashMap, и такая микрооптимизация даёт хороший прирост в производительности.

Что такое 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.putAll(anotherMap);
Если бы внутренняя структура result создавалась в конструкторе, пришлось бы тут же её расширять. С отложенной инициализацией можно этого избежать.

А теперь разберём вопрос про порядок элементов:
Обход 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 - список каналов
Атомарность (atomicity) гарантирует, что никакая транзакция не будет зафиксирована в системе частично. Будут либо выполнены все её подоперации, либо не выполнено ни одной.

Согласованность (consistency). Транзакция, достигающая своего нормального завершения и, тем самым, фиксирующая свои результаты, сохраняет согласованность базы данных.

Изолированность (isolation). Во время выполнения транзакции параллельные транзакции не должны оказывать влияние на её результат.

Долговечность (durability). Независимо от проблем на нижних уровнях (к примеру, обесточивание системы или сбои в оборудовании) изменения, сделанные успешно завершённой транзакцией, должны остаться сохранёнными после возвращения системы в работу.
Books for Java and SQL pinned «https://thorben-janssen.com/best-practices-many-one-one-many-associations-mappings/»
Forwarded from QA Memes
Шпаргалки по SQL
Forwarded from Vitaly
JAVA_CODING_PROBLEMS.pdf
7 MB
кароч книжку читаю вроде как полезная 200+ задачек разными способами решены включая стримы
👍1
Forwarded from Библиотека программиста
😻 5 проектов на GitHub, которые помогут вам стать лучшим инженером DevOps

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 хоче бачити саме вас на програмі – приєднуйтесь!
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.
#security #guide

Справочник по разработке безопасных веб-приложений: лучшие практики, анализ и исправление уязвимостей.

https://proglib.io/w/3e42e3da