📓 Книги по Java
870 subscribers
340 photos
27 videos
5 files
835 links
📓 Книги по Java

Самый крутой канал c подборкой книг, статей, но и как без рекламы все в одном месте
По ворпосам размещения @qa_autom
Download Telegram
Java разработчик (middle/senior)
#полныйдень #удаленка
Компания: X5 Tech

Мы ждем тебя, если ты имеешь:
- Коммерческий опыт разработки на Java от 3 лет;
- Опыт работы с Java 8+ и Spring Framework;
- Опыт работы с БД, знания SQL;
- Знание принципов ООП и основных шаблонов проектирования.
#статья

Java 19 - новые фичи и изменения

Ещё больше интересных статей и полезной информации вы можете читать на нашем
_Яндекс Дзен_ канале!
Что такое тернарный оператор выбора?

Тернарный условный оператор ?: - оператор, которым можно заменить некоторые конструкции операторов if-then-else.

Выражение записывается в следующей форме:

условие ? выражение1 : выражение2

Если условие выполняется, то вычисляется выражение1 и его результат становится результатом выполнения всего оператора. Если же условие равно false, то вычисляется выражение2 и его значение становится результатом работы оператора. Оба операнда выражение1 и выражение2 должны возвращать значение одинакового (или совместимого) типа.
Что происходит внутри HashMap.put()?

Рассмотрим в деталях, как новые ключ и значение складываются в HashMap.

1. Вычисляется хэш ключа. Если ключ null, хэш считается равным 0. Чтобы достичь лучшего распределения, результат вызова hashCode() «перемешивается»: его старшие биты XOR-ятся на младшие.

2. Значения внутри хэш-таблицы хранятся в специальных структурах данных – нодах, в массиве. Из хэша высчитывается номер бакета – индекс для значения в этом массиве. Полученный хэш обрезается по текущей длине массива. Длина – всегда степень двойки, так что для скорости используется битовая операция &.

3. В бакете ищется нода. В ячейке массива лежит не просто одна нода, а связка всех нод, которые туда попали. Исполнение проходит по этой связке (цепочке или дереву), и ищет ноду с таким же ключом. Ключ сравнивается с имеющимися сначала на ==, затем на equals.

4. Если нода найдена – её значение просто заменяется новым. Работа метода на этом завершается.

5. Если ноды с таким же ключом в бакете пока нет – добавляемая пара ключ-значение запаковывается в новый объект типа Node, и прикрепляется к структуре существующих нод бакета. Ноды составляют структуру за счет того, что в ноде хранится ссылка на следующий элемент (для дерева – следующие элементы). Кроме самой пары и ссылок, чтобы потом не считать заново, записывается и хэш ключа.
6. В случае, когда структурой была цепочка а не дерево, и длина цепочки превысила 7 элементов – происходит процедура treeification – превращение списка в самобалансирующееся дерево. В случае коллизии это ускоряет доступ к элементам на чтение с O(n) до O(log(n)). У comparable-ключей для балансировки используется их естественный порядок. Другие ключи балансируются по порядку имен их классов и значениям identityHashCode-ов. Для маленьких хэш-таблиц (< 64 бакетов) «одеревенение» заменяется увеличением (см. п.8).

7. Если новая нода попала в пустую ячейку, заняла новый бакет – увеличивается счетчик структурных модификаций. Изменение этого счетчика сообщит всем итераторам контейнера, что при следующем обращении они должны выбросить ConcurrentModificationException.

8. Когда количество занятых бакетов массива превысило пороговое (capacity * load factor), внутренний массив увеличивается вдвое, а для всего содержимого выполняется рехэш – все имеющиеся ноды перераспределяются по бакетам по тем же правилам, но уже с учетом нового размера.
☕️ 5 удивительно удобных библиотек Java

Разработчики Java имеют много замечательных инструментов, облегчающих кодирование. Они могут сопоставлять объекты, сопоставлять базы данных, создавать макеты API, работать с коллекциями и легко устанавливать соединения. Ознакомьтесь со списком из 5 замечательных библиотек Java, которые вы можете использовать уже сегодня в своем проекте.




https://tomaszs2.medium.com/5-amazingly-comfortable-java-libraries-887802e240de
Битва титанов: Java vs Kotlin

Один из старейших языков программирования Java и один из наиболее молодых Kotlin — активно используются для мобильной разработки. Но они также подходят для создания десктопных и серверных решений. Главный разработчик Группы «Иннотех» Владимир Полховцев сравнивает двух гигантов Android-разработки.

Смотреть статью
This media is not supported in your browser
VIEW IN TELEGRAM
Ищем учеников на бесплатное обучение по созданию искусственного интеллекта с нуля. Опыт программирования не важен!🤖

Всего за 3 вечера под руководством Дмитрия Романова - основателя Университета Искусственного Интеллекта, лидера обучения AI-разработке в РФ, вы с легкостью напишете свой первый искусственный интеллект👨‍💻

Какие нейронные сети вы создадите?

▫️Классификация людей на входящих и выходящих из автобуса
▫️Обнаружение возгораний
▫️Оценка стоимости квартир
▫️Оценка резюме соискателей
▫️Прогнозирование стоимости полиметаллов
▫️Сегментация изображений самолетов
▫️Распознавание команд умного дома⠀

Лучше освоить навыки создания нейронных сетей вам помогут домашние задания с проверкой от кураторов.⠀

Приходите на бесплатное обучение и напишите искусственный интеллект за 3 вечера💪

Регистрация по ссылке
Learning Spring Boot 3.0

Автор:
Greg L. Turnquist
Год издания: 2022

#java #spring #english

Скачать книгу
Java-разработчик (middle)
#полныйдень #удаленка
Компания: Ростелеком-Солар

Обязанности:
- Разработка программных модулей в соответствии с требованиями.
- Устранение выявленных дефектов в программным модулях.
- Выполнение исследовательских задач.
- Проведение инспекций кода.
- Написание автоматических тестов.
- Взаимодействие с аналитиками, архитектором, тестировщиками и другими специалистами, задействованными в процессе разработки.
- Участие в оценке требований и технических решений
- Следование установленному процессу разработки.
- Следование утверждённой архитектуре ПО и техническим решениям
- Выполнение требований локально-нормативных актов Компании;
- Отчетность по фактически отработанному времени в соответствии с установленными в Компании правилами

Требования:
- Образование в области компьютерных наук
- Хорошее знание классических алгоритмов и структур данных.
- Знание паттернов проектирования ПО (и умение их применять).
- Знание Java (в т.ч. v8, v11, v17): core, collections, streams, concurrency (плюсом будет знание reactor.io и webflux)
- Знание Spring (Core, Security, Web, Data, Cloud)
- Опыт работы в разработке ПО от 3 лет.
- Опыт проведения peer-review, рефакторинга legacy-кода.
- Опыт работы с Docker (плюсом будет знание Kubernetes)
Как Junior разработчику найти свою первую работу?

Легко! Ребята из codereview помогают джунам с трудоустройством👇

1. Разработают стратегию поиска, расскажут где искать, на какие вакансии откликаться и сколько откликов делать

2. Составят тебе крутое резюме и помогут с оформлением LInkedIn и Github, чтобы ты начал получать приглашения на собеседования

3. Каждую неделю будут проводить с тобой Mock Interview: технические и поведенческие интервью + помогут с самопрезентацией

4. Будут сами помогать тебе с поиском вакансий и организовывать собеседования в компании партнеры

5. В течение полугода будут сопровождать тебя, пока ты не получишь оффер

🔥 Самое крутое - основную часть можно оплатить после трудоустройства с первой зп!

🚀 За год они трудоустроили более 150 разработчиков, со средней зарплатой 120 тыс., которые сейчас работают в Сбере, OZON, VK, Яндекс и других IT компаниях👨🏼‍💻

👉 Оставляй заявку на бесплатную консультацию с нашим HR или Senior разработчиком

✌️Let’s go искать работу вместе!
This media is not supported in your browser
VIEW IN TELEGRAM
Ищем учеников на бесплатное обучение по созданию искусственного интеллекта с нуля. Опыт программирования не важен!🤖

Всего за 3 вечера под руководством Дмитрия Романова - основателя Университета Искусственного Интеллекта, лидера обучения AI-разработке в РФ, вы с легкостью напишете свой первый искусственный интеллект👨‍💻

Какие нейронные сети вы создадите?

▫️Классификация людей на входящих и выходящих из автобуса
▫️Обнаружение возгораний
▫️Оценка стоимости квартир
▫️Оценка резюме соискателей
▫️Прогнозирование стоимости полиметаллов
▫️Сегментация изображений самолетов
▫️Распознавание команд умного дома⠀

Лучше освоить навыки создания нейронных сетей вам помогут домашние задания с проверкой от кураторов.⠀

Приходите на бесплатное обучение и напишите искусственный интеллект за 3 вечера💪

Регистрация по ссылке
Руководство по обработке исключений в Java Stream

Друзья, вашему вниманию предлагается небольшое руководство по обработке исключений в Java Stream, из которого вы узнаете: 😃
✔️ Как обрабатывать проверяемые исключения, выбрасываемые методами из промежуточных операций в стримах
✔️ Как использовать блок try-catch в лямбда-выражениях
✔️ Как безопасно извлекать метод.

Также, даны рекомендации использовать Optional вместо выбрасывания значения null из извлекаемой функции.

Хорошей практики!

https://howtodoinjava.com/java/stream/handle-exceptions-in-stream/
Как Junior разработчику найти свою первую работу?

Легко! Ребята из codereview помогают джунам с трудоустройством👇

1. Разработают стратегию поиска, расскажут где искать, на какие вакансии откликаться и сколько откликов делать

2. Составят тебе крутое резюме и помогут с оформлением LInkedIn и Github, чтобы ты начал получать приглашения на собеседования

3. Каждую неделю будут проводить с тобой Mock Interview: технические и поведенческие интервью + помогут с самопрезентацией

4. Будут сами помогать тебе с поиском вакансий и организовывать собеседования в компании партнеры

5. В течение полугода будут сопровождать тебя, пока ты не получишь оффер

🔥 Самое крутое - основную часть можно оплатить после трудоустройства с первой зп!

🚀 За год они трудоустроили более 150 разработчиков, со средней зарплатой 120 тыс., которые сейчас работают в Сбере, OZON, VK, Яндекс и других IT компаниях👨🏼‍💻

👉 Оставляй заявку на бесплатную консультацию с нашим HR или Senior разработчиком

✌️Let’s go искать работу вместе!
#вопросы_с_собеседований
Как и когда происходит увеличение количества корзин в HashMap?

Помимо capacity у HashMap есть еще поле loadFactor, на основании которого, вычисляется предельное количество занятых корзин capacity * loadFactor. По умолчанию loadFactor = 0.75. По достижению предельного значения, число корзин увеличивается в 2 раза и для всех хранимых элементов вычисляется новое «местоположение» с учетом нового числа корзин.
Работа с null ссылками: Kotlin vs. Java

Предложенная сегодня статья напомнит про "ошибку на миллион долларов", а также сравнит между собой языки программирования Java и Kotlin с точки зрения их работы с null ссылками. 😃

Приятного чтения!

Читать статью
В чём заключается разница между IO и NIO?

Java IO (input-output) является потокоориентированным, а Java NIO (new/non-blocking io) – буфер-ориентированным. Потокоориентированный ввод/вывод подразумевает чтение/запись из потока/в поток одного или нескольких байт в единицу времени поочередно. Данная информация нигде не кэшируются. Таким образом, невозможно произвольно двигаться по потоку данных вперед или назад. В Java NIO данные сначала считываются в буфер, что дает больше гибкости при обработке данных.
• Потоки ввода/вывода в Java IO являются блокирующими. Это значит, что когда в потоке выполнения вызывается read() или write() метод любого класса из пакета java.io.*, происходит блокировка до тех пор, пока данные не будут считаны или записаны. Поток выполнения в данный момент не может делать ничего другого. Неблокирующий режим Java NIO позволяет запрашивать считанные данные из канала (channel) и получать только то, что доступно на данный момент, или вообще ничего, если доступных данных пока нет. Вместо того, чтобы оставаться заблокированным пока данные не станут доступными для считывания, поток выполнения может заняться чем-то другим. Тоже самое справедливо и для неблокирующего вывода. Поток выполнения может запросить запись в канал некоторых данных, но не дожидаться при этом пока они не будут полностью записаны.
• В Java NIO имеются селекторы, которые позволяют одному потоку выполнения мониторить несколько каналов ввода. Т.е. существует возможность зарегистрировать несколько каналов с селектором, а потом использовать один поток выполнения для обслуживания каналов, имеющих доступные для обработки данные, или для выбора каналов, готовых для записи.
Как Junior разработчику найти свою первую работу?

Легко! Ребята из codereview помогают джунам с трудоустройством👇

1. Разработают стратегию поиска, расскажут где искать, на какие вакансии откликаться и сколько откликов делать

2. Составят тебе крутое резюме и помогут с оформлением LInkedIn и Github, чтобы ты начал получать приглашения на собеседования

3. Каждую неделю будут проводить с тобой Mock Interview: технические и поведенческие интервью + помогут с самопрезентацией

4. Будут сами помогать тебе с поиском вакансий и организовывать собеседования в компании партнеры

5. В течение полугода будут сопровождать тебя, пока ты не получишь оффер

🔥 Самое крутое - основную часть можно оплатить после трудоустройства с первой зп!

🚀 За год они трудоустроили более 150 разработчиков, со средней зарплатой 120 тыс., которые сейчас работают в Сбере, OZON, VK, Яндекс и других IT компаниях👨🏼‍💻

👉 Оставляй заявку на бесплатную консультацию с нашим HR или Senior разработчиком

✌️Let’s go искать работу вместе!
Анализ дампа кучи Java: разбираем на примерах

Всякий раз, когда вы создаете объект, он хранится в области памяти, которая в приложениях для JVM называется «куча». Как вы уже догадались, объем кучи ограничен, и «кто-то» должен хранить объекты в куче. Этот инструмент называется сборщиком мусора (Garbage Collector).

Смотреть статью
Какими свойствами обладает порождаемое equals() отношение эквивалентности?

Рефлексивность: для любой ссылки на значение x, x.equals(x) вернет true;

Симметричность: для любых ссылок на значения x и y, x.equals(y) должно вернуть true, тогда и только тогда, когда y.equals(x) возвращает true.

Транзитивность: для любых ссылок на значения x, y и z, если x.equals(y) и y.equals(z) возвращают true, тогда и x.equals(z) вернёт true;

Непротиворечивость: для любых ссылок на значения х и у, если несколько раз вызвать х.equals(y), постоянно будет возвращаться значение true либо постоянно будет возвращаться значение false при условии, что никакая информация, используемая при сравнении объектов, не поменялась.

Для любой ненулевой ссылки на значение х выражение х.equals(null) должно возвращать false.

👉@BookJava