Кто кого расширяет: 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, основанные на сравнении ссылок.
#вопросы_с_собеседований
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) — добавляет список объектов, начиная с определенного индекса.
#вопросы_с_собеседований
Перегрузка методов — это свойство полиморфизма, в котором при помощи изменения сигнатуры метода можно создать различные реализации методов для одной и той же операции:
☕️ одинаковое имя метода;
☕️ различные аргументы;
☕️ различный порядок аргументов;
Например, один и тот же add() из List может быть перегружен следующим образом и будет выполнять добавление разным способом, в зависимости от аргументов метода:
☕️ add(Object o) — просто добавляет объект;
☕️ add(int index, Object o) — добавляет объект в определенный индекс;
☕️ add(Collection c) — добавляет список объектов;
☕️ add(int index, Collection c) — добавляет список объектов, начиная с определенного индекса.
#вопросы_с_собеседований
Подборка новых полезных материалов по разработке, сохраняй себе:
☕️ Визуализация популярных команд Git
☕️ 11 интересных фишек Java
☕️ Рекомендации по миграции на Spring 6
☕️ Security, Cloud с JWT и WebFlux
☕️ Разработчики Java продолжают работать над упрощением языка и бороться с его многословностью
☕️ Love, Spring and HTTP Bugs
☕️ Быстрые фичи IntelliJIDEA
☕️ Как правильно делать кодревью
☕️ Как IntelliJIDEA помогает в анализе зависимостей
☕️ Про виртуальные потоки и когда их применять
#дайджест
☕️ Визуализация популярных команд Git
☕️ 11 интересных фишек Java
☕️ Рекомендации по миграции на Spring 6
☕️ Security, Cloud с JWT и WebFlux
☕️ Разработчики Java продолжают работать над упрощением языка и бороться с его многословностью
☕️ Love, Spring and HTTP Bugs
☕️ Быстрые фичи IntelliJIDEA
☕️ Как правильно делать кодревью
☕️ Как IntelliJIDEA помогает в анализе зависимостей
☕️ Про виртуальные потоки и когда их применять
#дайджест
Джуны в шоке, какие таблицы ведут тимлиды. А вы прошли бы такой отбор?
#интерактив
#интерактив
👩💻 Docker Compose и Spring Boot 3.1 👩💻
Наверняка вам приходилось запускать разрабатываемое приложение для какого-то ручного тестирования разрабатываемых функций. А для этого, как правило, нужно некоторое окружение: базы данных, серверы кэша, брокеры очередей сообщений и т.д.
И чтобы не разворачивать это всё вручную, можно использовать контейнеры, а разработчики Spring Boot предлагают интеграцию Spring Boot и Docker Compose, благодаря которой использование контейнеров требует минимум кода.
Смотреть видео
Наверняка вам приходилось запускать разрабатываемое приложение для какого-то ручного тестирования разрабатываемых функций. А для этого, как правило, нужно некоторое окружение: базы данных, серверы кэша, брокеры очередей сообщений и т.д.
И чтобы не разворачивать это всё вручную, можно использовать контейнеры, а разработчики Spring Boot предлагают интеграцию Spring Boot и Docker Compose, благодаря которой использование контейнеров требует минимум кода.
Смотреть видео
Поддерживает ли язык Java множественное наследование?
Это очень хитрый вопрос. Интервьюеры часто говорят: если язык C++ может поддерживать непосредственное множественное наследование, то почему Java не может?
Ответ несколько более сложен, чем может показаться на первый взгляд, поскольку Java поддерживает множественное наследование типов, ведь интерфейс в нём может расширять другие интерфейсы. Но множественное наследование реализаций язык Java не поддерживает.
#вопросы_с_собеседований
Это очень хитрый вопрос. Интервьюеры часто говорят: если язык C++ может поддерживать непосредственное множественное наследование, то почему Java не может?
Ответ несколько более сложен, чем может показаться на первый взгляд, поскольку Java поддерживает множественное наследование типов, ведь интерфейс в нём может расширять другие интерфейсы. Но множественное наследование реализаций язык Java не поддерживает.
#вопросы_с_собеседований
assert может принимать 2 аргумента
Обычно assert используется для проверки некоторого условия и бросает AssertionError если условие не удовлетворяется. Чаще всего проверка выглядит так (см пример 1 на картинке). Однако, она может быть и такой, как в примере 2.
Второе выражение (кстати, оно ленивое) возвращает значение типа Object, которое передаётся в AssertionError и несёт пользователю дополнительные сведения об ошибке. Более формальное описание можно посмотреть тут.
Обычно assert используется для проверки некоторого условия и бросает AssertionError если условие не удовлетворяется. Чаще всего проверка выглядит так (см пример 1 на картинке). Однако, она может быть и такой, как в примере 2.
Второе выражение (кстати, оно ленивое) возвращает значение типа Object, которое передаётся в AssertionError и несёт пользователю дополнительные сведения об ошибке. Более формальное описание можно посмотреть тут.
Сколько памяти нужно для запуска 1 миллиона конкурирующих задач?
В cтатье сравнивается потребление памяти между асинхронными и многопоточными программами популярных языков — Rust, Go, Java, C#, Python, Node.js, Elixir. Спойлер — худший результат показалElixir .
Читать статью
В cтатье сравнивается потребление памяти между асинхронными и многопоточными программами популярных языков — Rust, Go, Java, C#, Python, Node.js, Elixir. Спойлер — худший результат показал
Читать статью
Можно ли так реализовать метод equals?
Нельзя, так как метод hashCode() не гарантирует уникальность значения для каждого объекта.
Но для сравнения экземпляров объекта Object такой метод допустим, так как там хешкод вычисляется на основании использовании адреса объекта в памяти, поэтому он уникален для разных объектов.
#вопросы_с_собеседований
Нельзя, так как метод hashCode() не гарантирует уникальность значения для каждого объекта.
Но для сравнения экземпляров объекта Object такой метод допустим, так как там хешкод вычисляется на основании использовании адреса объекта в памяти, поэтому он уникален для разных объектов.
#вопросы_с_собеседований
Подборка полезных ссылок для самостоятельного обучения. Сохраняй себе и делись с другом:
☕️ Курс лекций по информатике от профессора МИРЭА Романа Шамина. Профессор расскажет, что такое программирование, и объяснит основные понятия, которыми вам предстоит оперировать.
☕️ Crash Course Computer Science Preview — быстрый курс по основам Computer Science.
☕️ dev.java — платформа обучения от Oracle. Курс повышенной сложности.
☕️ Раздел документации от Oracle с туториалами. Море полезной информации.
☕️ Популярный бесплатный курс на Udemy
☕️ Один из полезнейших каналов по самым разным Java-темам от баз данных до Spring Security.
☕️ Курс от Хельсинского университета по ООП на Java. Подходит для обучения с нуля.
#дайджест
☕️ Курс лекций по информатике от профессора МИРЭА Романа Шамина. Профессор расскажет, что такое программирование, и объяснит основные понятия, которыми вам предстоит оперировать.
☕️ Crash Course Computer Science Preview — быстрый курс по основам Computer Science.
☕️ dev.java — платформа обучения от Oracle. Курс повышенной сложности.
☕️ Раздел документации от Oracle с туториалами. Море полезной информации.
☕️ Популярный бесплатный курс на Udemy
☕️ Один из полезнейших каналов по самым разным Java-темам от баз данных до Spring Security.
☕️ Курс от Хельсинского университета по ООП на Java. Подходит для обучения с нуля.
#дайджест
🤖🎮 GPT-4 играет в Minecraft и самообучается: сингулярность, в результате которой ИИ сам сделает себя умнее людей
В этой статье речь пойдет об эксперименте Voyager, в котором группа исследователей дала GPT-4 поиграть в Minecraft. Нейросеть сама учила себя играть, обучалась разным действиям вроде «срубить дерево» или «убить паука» и добавляла скиллы в свою библиотеку. Проще говоря, GPT-4 теперь пишет код, проверяет его и совершенствует. Именно с такого начинается так называемая сингулярность, в результате которой ИИ сам сделает себя умнее людей. Сингулярность Майнкрафта.
🔗 Основной сайт
🔗 Зеркало
В этой статье речь пойдет об эксперименте Voyager, в котором группа исследователей дала GPT-4 поиграть в Minecraft. Нейросеть сама учила себя играть, обучалась разным действиям вроде «срубить дерево» или «убить паука» и добавляла скиллы в свою библиотеку. Проще говоря, GPT-4 теперь пишет код, проверяет его и совершенствует. Именно с такого начинается так называемая сингулярность, в результате которой ИИ сам сделает себя умнее людей. Сингулярность Майнкрафта.
🔗 Основной сайт
🔗 Зеркало
Что подразумевается под конфигурацией контейнера на основе аннотаций? (Spring)
Вместо использования XML для описания связывания компонента разработчик перемещает конфигурацию в сам класс компонента, используя аннотации в соответствующем объявлении класса, метода или поля. Это работает как альтернатива настройкам XML. Пример на картинке.
#вопросы_с_собеседований
Вместо использования XML для описания связывания компонента разработчик перемещает конфигурацию в сам класс компонента, используя аннотации в соответствующем объявлении класса, метода или поля. Это работает как альтернатива настройкам XML. Пример на картинке.
#вопросы_с_собеседований
🪜 Как программисту попросить о повышении зарплаты и что говорить
Иногда бывает так: работаешь за всех, а зарплату не повышают. Тогда нужно брать инициативу в свои руки и поговорить с руководством тет-а-тет. Но как правильно это сделать и выйти победителем? Постараемся разобраться.
🔗 Основной сайт
🔗 Зеркало
Иногда бывает так: работаешь за всех, а зарплату не повышают. Тогда нужно брать инициативу в свои руки и поговорить с руководством тет-а-тет. Но как правильно это сделать и выйти победителем? Постараемся разобраться.
🔗 Основной сайт
🔗 Зеркало
Что такое абстрактный метод в языке Java?
Абстрактный метод – это метод без тела. Вы просто объявляете метод, не определяя его, с использованием ключевого слова abstract в объявлении метода. Все объявленные внутри интерфейса в языке Java методы – по умолчанию абстрактные. Пример абстрактного метода в языке Java представлен на картинке.
Теперь для реализации этого метода необходимо расширить абстрактный класс и этот метод переопределить.
Абстрактный метод – это метод без тела. Вы просто объявляете метод, не определяя его, с использованием ключевого слова abstract в объявлении метода. Все объявленные внутри интерфейса в языке Java методы – по умолчанию абстрактные. Пример абстрактного метода в языке Java представлен на картинке.
Теперь для реализации этого метода необходимо расширить абстрактный класс и этот метод переопределить.
Что такое Map.of()?
Map.of() — это метод, представленный в Java 9, который позволяет разработчикам создавать неизменяемый Map, содержащий до десяти пар ключ-значение. Он обеспечивает удобный и лаконичный способ создания Map без необходимости написания большого количества кода.
Map.of() является улучшением по сравнению с предыдущим способом создания небольших Map с использованием конструктора класса HashMap, который может быть довольно громоздким и многословным.
#вопросы_с_собеседований
Map.of() — это метод, представленный в Java 9, который позволяет разработчикам создавать неизменяемый Map, содержащий до десяти пар ключ-значение. Он обеспечивает удобный и лаконичный способ создания Map без необходимости написания большого количества кода.
Map.of() является улучшением по сравнению с предыдущим способом создания небольших Map с использованием конструктора класса HashMap, который может быть довольно громоздким и многословным.
#вопросы_с_собеседований