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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
В приведенном примере есть синтаксическая ошибка в цикле do-while, так как в нем нет фигурных скобок и выражений.
#вопросы_с_собеседований
Кто кого расширяет: 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, основанные на сравнении ссылок.
Как и в C++, когда функция статическая, нет runtime-полиморфизма.
#вопросы_с_собеседований
В чем заключаются преимущества и недостатки объектно-ориентированного подхода в программировании?
Хочешь стать Java экспертом? Подписывайся на канал @java_fillthegaps

статьи по Java и её экосистеме
паттерны и принципы разработки
прохождение собеседований и карьерный рост

Посты, обязательные к прочтению:
▪️JDK, JRE, JVM, JIT и Java 11.
▪️Полный гайд по сравнению переменных.
▪️Принцип подстановки Барбары Лисков: теория и практика.
▪️Сборщики мусора. Плюсы и минусы G1.

Подписывайся: @java_fillthegaps
Уроки по регулярным выражениям в Java.

https://proglib.io/w/981e79b3
Ответ на вопрос
Преимущества:
Объектная модель вполне естественна, поскольку в первую очередь ориентирована на человеческое восприятие мира, а не на компьютерную реализацию.
Классы позволяют проводить конструирование из полезных компонентов, обладающих простыми инструментами, что позволяет абстрагироваться от деталей реализации.
Данные и операции над ними образуют определенную сущность, и они не разносятся по всей программе, как нередко бывает в случае процедурного программирования, а описываются вместе. Локализация кода и данных улучшает наглядность и удобство сопровождения программного обеспечения.
Инкапсуляция позволяет привнести свойство модульности, что облегчает распараллеливание выполнения задачи между несколькими исполнителями и обновление версий отдельных компонентов.
Возможность создавать расширяемые системы.
Использование полиморфизма оказывается полезным при:
✔️Обработке разнородных структур данных. Программы могут работать, не различая вида объектов, что существенно упрощает код. Новые виды могут быть добавлены в любой момент.
✔️Изменении поведения во время исполнения. На этапе исполнения один объект может быть заменен другим, что позволяет легко, без изменения кода, адаптировать алгоритм в зависимости от того, какой используется объект.
✔️Реализации работы с наследниками. Алгоритмы можно обобщить настолько, что они уже смогут работать более чем с одним видом объектов.
✔️Возможности описать независимые от приложения части предметной области в виде набора универсальных классов, или фреймворка, который в дальнейшем будет расширен за счет добавления частей, специфичных для конкретного приложения.
Повторное использование кода:
✔️Сокращается время на разработку.
✔️Компоненты многоразового использования обычно содержат гораздо меньше ошибок, чем вновь разработанные, ведь они уже не раз подвергались проверке.
✔️Когда некий компонент используется сразу несколькими клиентами, улучшения, вносимые в его код, одновременно оказывают положительное влияние и на множество работающих с ним программ.
✔️Если программа опирается на стандартные компоненты, ее структура и пользовательский интерфейс становятся более унифицированными, что облегчает ее понимание и упрощает использование.
Недостатки:
В сложных иерархиях классов поля и методы обычно наследуются с разных уровней. И не всегда легко определить, какие поля и методы фактически относятся к данному классу.
Код для обработки сообщения иногда «размазан» по многим методам (иначе говоря, обработка сообщения требует не одного, а многих методов, которые могут быть описаны в разных классах).
Документирование классов - задача более трудная, чем это было в случае процедур и модулей. Поскольку любой метод может быть переопределен, в документации должно говориться не только о том, что делает данный метод, но и о том, в каком контексте он вызывается.
Неэффективность и неэкономное распределение памяти на этапе выполнения (по причине издержек на динамическое связывание и проверки типов на этапе выполнения).
Излишняя универсальность. Часто содержится больше методов, чем это реально необходимо текущей программе. А поскольку лишние методы не могут быть удалены, они становятся мертвым грузом.
016 - восьмеричное число. На это указывает префикс 0
public class Solution {
public static void main(String args) {
System.out.print("Скидка 50% на годовую подписку JavaRush");
}
}
Beginning Programming with Java For Dummies (2017)
Автор: Barry Burd

Если вы хотите программировать на Java, книга научит вас созданию программ, способам решения стандартных задач и многому другому. Независимо от того, работаете ли вы с кем-то или начинаете карьеру, эта книга может стать ресурсом, к которому вы будете обращаться снова и снова, совершенствуя свое понимание нюансов этого популярного языка программирования.

Скачать книгу
#вопросы_с_собеседований
1. Может ли статический метод быть переопределён или перегружен?
2. Могут ли нестатические методы перегрузить статические?
1. Перегружен - да. Всё работает точно так же как и с обычными методами - 2 статических метода могут иметь одинаковое имя, если количество их параметров или типов различается.

Переопределён - нет. Выбор вызываемого статического метода происходит при раннем связывании (на этапе компиляции, а не выполнения) и выполняться всегда будет родительский метод, хотя синтаксически переопределение статического метода - вполне корректная языковая конструкция.

В целом, к статическим полям и методам рекомендуется обращаться через имя класса, а не объект.
2. Да. В итоге получатся два разных метода. Статический будет принадлежать классу и будет доступен через его имя, а нестатический будет принадлежать конкретному объекту и доступен через вызов метода этого объекта.
Java Performance Companion (2016)

В книге авторы показывают, как систематически и активно улучшать производительность Java с помощью современного многоядерного оборудования и сложных операционных сред. Все авторы, являющиеся ведущими экспертами по производительности Java и Java HotSpot VM, помогаут вам повысить эффективность проектов путем использования современных методов разработки программного обеспечения, избежать распространенных ошибок и применить советы и приемы, почерпнутые из многолетнего опыта работы.

Скачать книгу