Что выведет программа?
Anonymous Quiz
16%
HELLO
11%
HELLO (Infinitely)
52%
Error: Unreachable statement
21%
Error: ; expected
В приведенном примере есть синтаксическая ошибка в цикле do-while, так как в нем нет фигурных скобок и выражений.
#вопросы_с_собеседований
Кто кого расширяет: Queue расширяет Deque, или Deque расширяет Queue?
Кто кого расширяет: 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, основанные на сравнении ссылок.
Deque (Double Ended Queue) расширяет Queue и, согласно документации, это линейная коллекция, поддерживающая вставку/извлечение элементов с обоих концов. Помимо этого реализации интерфейса Deque могут строится по принципу FIFO, либо LIFO.
Реализации и Deque, и Queue обычно не переопределяют методы equals() и hashCode(), вместо этого используются унаследованные методы класса Object, основанные на сравнении ссылок.
Что выведет программа?
Anonymous Quiz
23%
Base::show() called
45%
Derived::show() called
32%
Compiler Error
Как и в C++, когда функция статическая, нет runtime-полиморфизма.
#вопросы_с_собеседований
В чем заключаются преимущества и недостатки объектно-ориентированного подхода в программировании?
В чем заключаются преимущества и недостатки объектно-ориентированного подхода в программировании?
Хочешь стать Java экспертом? Подписывайся на канал @java_fillthegaps
✅ статьи по Java и её экосистеме
✅ паттерны и принципы разработки
✅ прохождение собеседований и карьерный рост
Посты, обязательные к прочтению:
▪️JDK, JRE, JVM, JIT и Java 11.
▪️Полный гайд по сравнению переменных.
▪️Принцип подстановки Барбары Лисков: теория и практика.
▪️Сборщики мусора. Плюсы и минусы G1.
Подписывайся: @java_fillthegaps
✅ статьи по Java и её экосистеме
✅ паттерны и принципы разработки
✅ прохождение собеседований и карьерный рост
Посты, обязательные к прочтению:
▪️JDK, JRE, JVM, JIT и Java 11.
▪️Полный гайд по сравнению переменных.
▪️Принцип подстановки Барбары Лисков: теория и практика.
▪️Сборщики мусора. Плюсы и минусы G1.
Подписывайся: @java_fillthegaps
Ответ на вопрос
Преимущества:
➕Объектная модель вполне естественна, поскольку в первую очередь ориентирована на человеческое восприятие мира, а не на компьютерную реализацию.
➕Классы позволяют проводить конструирование из полезных компонентов, обладающих простыми инструментами, что позволяет абстрагироваться от деталей реализации.
➕Данные и операции над ними образуют определенную сущность, и они не разносятся по всей программе, как нередко бывает в случае процедурного программирования, а описываются вместе. Локализация кода и данных улучшает наглядность и удобство сопровождения программного обеспечения.
➕Инкапсуляция позволяет привнести свойство модульности, что облегчает распараллеливание выполнения задачи между несколькими исполнителями и обновление версий отдельных компонентов.
➕Возможность создавать расширяемые системы.
➕Использование полиморфизма оказывается полезным при:
✔️Обработке разнородных структур данных. Программы могут работать, не различая вида объектов, что существенно упрощает код. Новые виды могут быть добавлены в любой момент.
✔️Изменении поведения во время исполнения. На этапе исполнения один объект может быть заменен другим, что позволяет легко, без изменения кода, адаптировать алгоритм в зависимости от того, какой используется объект.
✔️Реализации работы с наследниками. Алгоритмы можно обобщить настолько, что они уже смогут работать более чем с одним видом объектов.
✔️Возможности описать независимые от приложения части предметной области в виде набора универсальных классов, или фреймворка, который в дальнейшем будет расширен за счет добавления частей, специфичных для конкретного приложения.
➕Повторное использование кода:
✔️Сокращается время на разработку.
✔️Компоненты многоразового использования обычно содержат гораздо меньше ошибок, чем вновь разработанные, ведь они уже не раз подвергались проверке.
✔️Когда некий компонент используется сразу несколькими клиентами, улучшения, вносимые в его код, одновременно оказывают положительное влияние и на множество работающих с ним программ.
✔️Если программа опирается на стандартные компоненты, ее структура и пользовательский интерфейс становятся более унифицированными, что облегчает ее понимание и упрощает использование.
Преимущества:
➕Объектная модель вполне естественна, поскольку в первую очередь ориентирована на человеческое восприятие мира, а не на компьютерную реализацию.
➕Классы позволяют проводить конструирование из полезных компонентов, обладающих простыми инструментами, что позволяет абстрагироваться от деталей реализации.
➕Данные и операции над ними образуют определенную сущность, и они не разносятся по всей программе, как нередко бывает в случае процедурного программирования, а описываются вместе. Локализация кода и данных улучшает наглядность и удобство сопровождения программного обеспечения.
➕Инкапсуляция позволяет привнести свойство модульности, что облегчает распараллеливание выполнения задачи между несколькими исполнителями и обновление версий отдельных компонентов.
➕Возможность создавать расширяемые системы.
➕Использование полиморфизма оказывается полезным при:
✔️Обработке разнородных структур данных. Программы могут работать, не различая вида объектов, что существенно упрощает код. Новые виды могут быть добавлены в любой момент.
✔️Изменении поведения во время исполнения. На этапе исполнения один объект может быть заменен другим, что позволяет легко, без изменения кода, адаптировать алгоритм в зависимости от того, какой используется объект.
✔️Реализации работы с наследниками. Алгоритмы можно обобщить настолько, что они уже смогут работать более чем с одним видом объектов.
✔️Возможности описать независимые от приложения части предметной области в виде набора универсальных классов, или фреймворка, который в дальнейшем будет расширен за счет добавления частей, специфичных для конкретного приложения.
➕Повторное использование кода:
✔️Сокращается время на разработку.
✔️Компоненты многоразового использования обычно содержат гораздо меньше ошибок, чем вновь разработанные, ведь они уже не раз подвергались проверке.
✔️Когда некий компонент используется сразу несколькими клиентами, улучшения, вносимые в его код, одновременно оказывают положительное влияние и на множество работающих с ним программ.
✔️Если программа опирается на стандартные компоненты, ее структура и пользовательский интерфейс становятся более унифицированными, что облегчает ее понимание и упрощает использование.
Telegram
Библиотека джависта
Как и в C++, когда функция статическая, нет runtime-полиморфизма.
Недостатки:
➖В сложных иерархиях классов поля и методы обычно наследуются с разных уровней. И не всегда легко определить, какие поля и методы фактически относятся к данному классу.
➖Код для обработки сообщения иногда «размазан» по многим методам (иначе говоря, обработка сообщения требует не одного, а многих методов, которые могут быть описаны в разных классах).
➖Документирование классов - задача более трудная, чем это было в случае процедур и модулей. Поскольку любой метод может быть переопределен, в документации должно говориться не только о том, что делает данный метод, но и о том, в каком контексте он вызывается.
➖Неэффективность и неэкономное распределение памяти на этапе выполнения (по причине издержек на динамическое связывание и проверки типов на этапе выполнения).
➖Излишняя универсальность. Часто содержится больше методов, чем это реально необходимо текущей программе. А поскольку лишние методы не могут быть удалены, они становятся мертвым грузом.
➖В сложных иерархиях классов поля и методы обычно наследуются с разных уровней. И не всегда легко определить, какие поля и методы фактически относятся к данному классу.
➖Код для обработки сообщения иногда «размазан» по многим методам (иначе говоря, обработка сообщения требует не одного, а многих методов, которые могут быть описаны в разных классах).
➖Документирование классов - задача более трудная, чем это было в случае процедур и модулей. Поскольку любой метод может быть переопределен, в документации должно говориться не только о том, что делает данный метод, но и о том, в каком контексте он вызывается.
➖Неэффективность и неэкономное распределение памяти на этапе выполнения (по причине издержек на динамическое связывание и проверки типов на этапе выполнения).
➖Излишняя универсальность. Часто содержится больше методов, чем это реально необходимо текущей программе. А поскольку лишние методы не могут быть удалены, они становятся мертвым грузом.
Что выведет программа?
Anonymous Quiz
32%
120 200 16
20%
120 200 14
24%
120 200 016
25%
Compiler Error
016 - восьмеричное число. На это указывает префикс 0
public class Solution {
public static void main(String args) {
System.out.print("Скидка 50% на годовую подписку JavaRush");
}
}
public static void main(String args) {
System.out.print("Скидка 50% на годовую подписку JavaRush");
}
}
Beginning Programming with Java For Dummies (2017)
Автор: Barry Burd
Если вы хотите программировать на Java, книга научит вас созданию программ, способам решения стандартных задач и многому другому. Независимо от того, работаете ли вы с кем-то или начинаете карьеру, эта книга может стать ресурсом, к которому вы будете обращаться снова и снова, совершенствуя свое понимание нюансов этого популярного языка программирования.
Скачать книгу
Автор: Barry Burd
Если вы хотите программировать на Java, книга научит вас созданию программ, способам решения стандартных задач и многому другому. Независимо от того, работаете ли вы с кем-то или начинаете карьеру, эта книга может стать ресурсом, к которому вы будете обращаться снова и снова, совершенствуя свое понимание нюансов этого популярного языка программирования.
Скачать книгу
Telegram
Книги для программистов (reserved)
Beginning Programming with Java For Dummies (2017)
Автор: Barry Burd
Автор: Barry Burd
#вопросы_с_собеседований
1. Может ли статический метод быть переопределён или перегружен?
2. Могут ли нестатические методы перегрузить статические?
1. Может ли статический метод быть переопределён или перегружен?
2. Могут ли нестатические методы перегрузить статические?
1. Перегружен - да. Всё работает точно так же как и с обычными методами - 2 статических метода могут иметь одинаковое имя, если количество их параметров или типов различается.
Переопределён - нет. Выбор вызываемого статического метода происходит при раннем связывании (на этапе компиляции, а не выполнения) и выполняться всегда будет родительский метод, хотя синтаксически переопределение статического метода - вполне корректная языковая конструкция.
В целом, к статическим полям и методам рекомендуется обращаться через имя класса, а не объект.
Переопределён - нет. Выбор вызываемого статического метода происходит при раннем связывании (на этапе компиляции, а не выполнения) и выполняться всегда будет родительский метод, хотя синтаксически переопределение статического метода - вполне корректная языковая конструкция.
В целом, к статическим полям и методам рекомендуется обращаться через имя класса, а не объект.
2. Да. В итоге получатся два разных метода. Статический будет принадлежать классу и будет доступен через его имя, а нестатический будет принадлежать конкретному объекту и доступен через вызов метода этого объекта.
Java Performance Companion (2016)
В книге авторы показывают, как систематически и активно улучшать производительность Java с помощью современного многоядерного оборудования и сложных операционных сред. Все авторы, являющиеся ведущими экспертами по производительности Java и Java HotSpot VM, помогаут вам повысить эффективность проектов путем использования современных методов разработки программного обеспечения, избежать распространенных ошибок и применить советы и приемы, почерпнутые из многолетнего опыта работы.
Скачать книгу
В книге авторы показывают, как систематически и активно улучшать производительность Java с помощью современного многоядерного оборудования и сложных операционных сред. Все авторы, являющиеся ведущими экспертами по производительности Java и Java HotSpot VM, помогаут вам повысить эффективность проектов путем использования современных методов разработки программного обеспечения, избежать распространенных ошибок и применить советы и приемы, почерпнутые из многолетнего опыта работы.
Скачать книгу
Telegram
Книги для программистов (reserved)
Java Performance Companion (2016)
Авторы: Charlie Hunt, Monica Beckwith, Poonam Parhar, Bengt Rutisson
Авторы: Charlie Hunt, Monica Beckwith, Poonam Parhar, Bengt Rutisson