Библиотека джависта | Java, Spring, Maven, Hibernate
24.9K subscribers
1.86K photos
38 videos
42 files
2.64K links
Все самое полезное для Java-разработчика в одном канале.

Список наших каналов: https://yangx.top/proglibrary/9197

Обратная связь: @proglibrary_feedback_bot

По рекламе: @proglib_adv

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
Зубчатый массив в Java

Зубчатый массив — это массив массивов, в котором массивы элементов могут быть разных размеров, т. е. мы можем создать двумерный массив, но с переменным числом столбцов в каждой строке. Эти типы массивов также известны как зубчатые массивы.

Подробнее о зубчатых массивах можно почитать здесь.
Сталкивались с дискриминацией по возрасту от работодателей? Считаете ли её справедливой?
NullPointer Exception

Исключение нулевого указателя возникает в Java довольно часто при попытке вызова метода несуществующего объекта.

Рассмотрим строчку кода из примера 1 на картинке. Если объект school окажется равен null или его метод listStudents вернет null, вы получите исключение NullPointerException.

Хорошей практикой разработки на Java является предварительная проверка на null в методах (как в примере 2).
📝 Как правильно составить сопроводительное письмо программисту

Давайте разберемся, зачем нужно сопроводительное письмо и как его написать так, чтобы вас захотели взять на работу.

🔗 Основной сайт
🔗 Зеркало
🎡 Что такое комбинаторика и как она используется в программировании

Расскажем, какие задачи помогает решать комбинаторика и зачем программистам нужно ее знать.

🔗 Основной сайт
🔗 Зеркало
Какое исключение выбрасывается при возникновении ошибки в блоке инициализации класса?

Если возникшее исключение - наследник RuntimeException:
• для статических блоков инициализации будет выброшено java.lang.ExceptionInInitializerError;
• для нестатических будет проброшено исключение-источник.
Если возникшее исключение - наследник Error, то в обоих случаях будет выброшено java.lang.Error. Исключение: java.lang.ThreadDeath - смерть потока. В этом случае никакое исключение выброшено не будет.
#вопросы_с_собеседований
Можем ли мы перегрузить методы по возвращаемому типу?

Мы не можем перегружать по возвращаемому типу. Это поведение аналогично C++.
🌵 Мексиканская перестрелка: какую IT-профессию выбрать джуну в 2023 году, чтобы зарабатывать $100кк в наносек

В этой статье мы рассмотрим несколько перспективных IT-направлений, которые приблизят вас к заветным цифрам на вашем банковском счете.

Читать статью
Кто кого расширяет: Queue расширяет Deque, или Deque расширяет Queue?

Queue — это очередь, которая обычно (но не обязательно) строится по принципу FIFO (First-In-First-Out) — соответственно извлечение элемента осуществляется с начала очереди, вставка элемента — в конец очереди. Хотя этот принцип нарушает, к примеру, PriorityQueue, использующая «natural ordering» или переданный Comparator при вставке нового элемента.

Deque (Double Ended Queue) расширяет Queue и, согласно документации, это линейная коллекция, поддерживающая вставку/извлечение элементов с обоих концов. Помимо этого реализации интерфейса Deque могут строится по принципу FIFO, либо LIFO.

Реализации и Deque, и Queue обычно не переопределяют методы equals() и hashCode(), вместо этого используются унаследованные методы класса Object, основанные на сравнении ссылок.

#вопросы_с_собеседований
Что такое перегрузка методов?

Перегрузка методов — это свойство полиморфизма, в котором при помощи изменения сигнатуры метода можно создать различные реализации методов для одной и той же операции:
☕️ одинаковое имя метода;
☕️ различные аргументы;
☕️ различный порядок аргументов;

Например, один и тот же add() из List может быть перегружен следующим образом и будет выполнять добавление разным способом, в зависимости от аргументов метода:
☕️ add(Object o) — просто добавляет объект;
☕️ add(int index, Object o) — добавляет объект в определенный индекс;
☕️ add(Collection c) — добавляет список объектов;
☕️ add(int index, Collection c) — добавляет список объектов, начиная с определенного индекса.
#вопросы_с_собеседований
Джуны в шоке, какие таблицы ведут тимлиды. А вы прошли бы такой отбор?
#интерактив
👩‍💻 Docker Compose и Spring Boot 3.1 👩‍💻

Наверняка вам приходилось запускать разрабатываемое приложение для какого-то ручного тестирования разрабатываемых функций. А для этого, как правило, нужно некоторое окружение: базы данных, серверы кэша, брокеры очередей сообщений и т.д.
И чтобы не разворачивать это всё вручную, можно использовать контейнеры, а разработчики Spring Boot предлагают интеграцию Spring Boot и Docker Compose, благодаря которой использование контейнеров требует минимум кода.

Смотреть видео
Поддерживает ли язык Java множественное наследование?

Это очень хитрый вопрос. Интервьюеры часто говорят: если язык C++ может поддерживать непосредственное множественное наследование, то почему Java не может?

Ответ несколько более сложен, чем может показаться на первый взгляд, поскольку Java поддерживает множественное наследование типов, ведь интерфейс в нём может расширять другие интерфейсы. Но множественное наследование реализаций язык Java не поддерживает.
#вопросы_с_собеседований
assert может принимать 2 аргумента

Обычно assert используется для проверки некоторого условия и бросает AssertionError если условие не удовлетворяется. Чаще всего проверка выглядит так (см пример 1 на картинке). Однако, она может быть и такой, как в примере 2.

Второе выражение (кстати, оно ленивое) возвращает значение типа Object, которое передаётся в AssertionError и несёт пользователю дополнительные сведения об ошибке. Более формальное описание можно посмотреть тут.
Сколько памяти нужно для запуска 1 миллиона конкурирующих задач?

В cтатье сравнивается потребление памяти между асинхронными и многопоточными программами популярных языков — Rust, Go, Java, C#, Python, Node.js, Elixir. Спойлер — худший результат показал Elixir.

Читать статью
Увлекаетесь биохакингом?
Расскажите в комментариях ⬇️
#интерактив
Можно ли так реализовать метод equals?

Нельзя, так как метод hashCode() не гарантирует уникальность значения для каждого объекта.

Но для сравнения экземпляров объекта Object такой метод допустим, так как там хешкод вычисляется на основании использовании адреса объекта в памяти, поэтому он уникален для разных объектов.
#вопросы_с_собеседований
Подборка полезных ссылок для самостоятельного обучения. Сохраняй себе и делись с другом:

☕️ Курс лекций по информатике от профессора МИРЭА Романа Шамина. Профессор расскажет, что такое программирование, и объяснит основные понятия, которыми вам предстоит оперировать.
☕️ Crash Course Computer Science Preview — быстрый курс по основам Computer Science.
☕️ dev.java — платформа обучения от Oracle. Курс повышенной сложности.
☕️ Раздел документации от Oracle с туториалами. Море полезной информации.
☕️ Популярный бесплатный курс на Udemy
☕️ Один из полезнейших каналов по самым разным Java-темам от баз данных до Spring Security.
☕️ Курс от Хельсинского университета по ООП на Java. Подходит для обучения с нуля.
#дайджест