Библиотека джависта | 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
加入频道
Одинарные и двойные кавычки

Что ты ожидаешь в результате выполнения кода с картинки?

Казалось бы, строка должна возвращать «HaHa», но на самом деле это будет «Ha169».

Двойные кавычки обрабатывают символы как строки, но одинарные кавычки ведут себя иначе. Они преобразуют символьные операнды ('H' и 'a') в целые значения посредством расширения примитивных типов — получается 169.
Как бы вы связали Spring MVC Framework с архитектурой MVC?

Как следует из названия, Spring MVC построен на основе архитектуры Model-View-Controller. DispatcherServlet — это передний контроллер в приложении Spring MVC, который обрабатывает все входящие запросы и делегирует их различным методам обработчика контроллера.

Моделью может быть любой Java-бин в Spring Framework, как и в любой другой среде MVC Spring обеспечивает автоматическую привязку данных формы к Java-бинам. Мы можем установить bean-компоненты модели в качестве атрибутов, которые будут использоваться на страницах View.

Страницы View могут быть JSP, статическим HTML и т. д., а преобразователи представлений отвечают за поиск правильной страницы просмотра. Как только страница просмотра идентифицирована, управление возвращается контроллеру DispatcherServlet. DispatcherServlet отвечает за визуализацию представления и возврат окончательного ответа клиенту.
SOLID в деталях: Принцип единственной ответственности

В серии роликов "SOLID в деталях" я постараюсь подробно рассказать о принципах SOLID, а так же продемонстрировать их практическое применение.

В первом
ролике речь пойдёт о принципе единственной ответственности (Single Responsibility Principle; SRP), его трактовках и их практическом применении.
SOLID в деталях: Принцип открытости/закрытости

В серии роликов «SOLID в деталях» автор постарается подробно рассказать о принципах SOLID, а так же продемонстрировать их практическое применение.

Второй ролик посвящён принципу открытости/закрытости.

https://youtu.be/Okwn-50NY9I
#вопросы_с_собеседований
Как исключить поля из сериализации?

Для управления сериализацией при определении полей можно использовать ключевое слово transient, таким образом исключив поля из общего процесса сериализации.
Object[] vs custom Class

Код с Object абсолютно не читабельный, когда приходится работать с возвращаемым значением в другом месте.То есть, чтобы понять что же хранит в себе возвращаемое значение — нужно вернуться в класс вызова и читать комментарии к методу, если же, конечно, они есть, а если нет, вникать в код, что не очень эффективно. Собственно, я сам этим иногда грешу, когда очень спешу. С этим можно смириться, если это очень редко, но, все же, в таких ситуациях лучше создавать новый класс. Облегчите жизнь тем, кто придет после вас.
Можно ли предопределить или перегрузить статический метод в Java?

Перегрузить статический метод в Java можно, но вот предопределить его нельзя. Вы можете написать другой статистический метод с такой же сигнатурой в подклассе, но он не будет предопределять суперкласс. в Java это называется сокрытием методов.
Пустая коллекция вместо Null

Если ваша программа может вернуть коллекцию, которая не содержит никаких значений, убедитесь, что возвращается пустая коллекция, а не Null. Это сэкономит вам время на различные проверки и избавит от многих ошибок.
#вопросы_с_собеседований
Что такое JSON схема?

JSON Schema — один из языков описания структуры JSON-документа, используя синтаксис JSON.

Это самоописательный язык: при его использовании для обработки данных и описания их допустимости могут использоваться одни и те же инструменты сериализации/десериализации.
#вопросы_с_собеседований
Предположим, у нас есть циклическая ссылка — два объекта, которые ссылаются друг на друга. Может ли такая пара объектов стать подходящей для сборки мусора и почему?

Да, пара объектов с циклической ссылкой может стать подходящей для сборки мусора. Это связано с тем, как сборщик мусора Java обрабатывает циклические ссылки. Он считает объекты живыми не тогда, когда на них есть какая-либо ссылка, а когда они достижимы при навигации по графу объектов, начиная с некоторого корня сборки мусора (локальная переменная живого потока или статическое поле). Если пара объектов с циклической ссылкой недоступна ни из одного корня, считается, что она подходит для сборки мусора.
#вопросы_с_собеседований
Объясните разницу между Linkedlist и Arraylist.

ArrayList
— это реализация интерфейса List, основанная на массиве. ArrayList внутренне обрабатывает изменение размера этого массива при добавлении или удалении элементов. Вы можете получить доступ к его элементам за константное время по их индексу в массиве. Однако вставка или удаление элемента подразумевает сдвиг всех последующих элементов, что может быть медленным, если массив огромен, а вставленный или удаленный элемент находится близко к началу списка.

LinkedList — это двусвязный список: отдельные элементы помещаются в объекты Node (узел), которые имеют ссылки на предыдущий и следующий Node. Эта реализация может оказаться более эффективной, чем ArrayList, если у вас много вставок или удалений в разных частях списка, особенно если список большой.

Однако в большинстве случаев ArrayList превосходит LinkedList. Даже перемещение элементов в ArrayList, хотя и является операцией O(n), реализовано в виде очень быстрого вызова System.arraycopy(). Это может даже оказаться быстрее, чем O(1) вставка в LinkedList, которая требует создания экземпляра объекта Node и обновления нескольких ссылок под капотом. LinkedList также может иметь большие накладные расходы памяти из-за создания нескольких небольших Node объектов.
Класс FileWriter

Наследуется от класса OutputStreamWriter, используется для записи потоков символов. Код на картинке создает файл с разрешением .txt и записывает в него текст, а после с помощью FileReader читает его из файла.

Класс имеет несколько конструкторов, а также список вспомогательных методов, которые можно использовать для управления файлами. Больше информации о методах класса есть в документации.
#вопросы_с_собеседований
Что выведет эта программа?

Ответ:
Программа напечатает “num1 == num2”. Если мы сравниваем две ссылки на объекты с помощью ==, значение всегда будет «false». Но в этом примере переменные num1 и num2 автоупаковываются (autoboxing) из-за Integer-кэширования. Вот почему num1 == num2 возвращает значение «true». Не забудьте, что Integer-кэширование актуально только для значений от -128 до 127.
#вопросы_с_собеседований
Сколько объектов типа String создает эта программа?

Ответ:
Программа создаст два string-объекта. Когда мы создаем строку, используя оператор new, она сначала создастся в Java String Pool и только потом в куче (heap memory). Но только при условии, что этой строки ещё нет в пуле Java String.
Сколько переходов происходит в момент вызова HashMap.get(key) по ключу, который есть в таблице?

• ключ равен null: 1 - выполняется единственный метод getForNullKey().
• любой ключ отличный от null: 4 - вычисление хэш-кода ключа; определение номера корзины; поиск значения; возврат значения.
Чем отличаются и что общего у InputStream, OutputStream, Reader, Writer?

☕️ InputStream и его наследники нужны для получения байтовых данных из разных источников
☕️ OutputStream и его наследники — набор классов, определяющих потоковый байтовый вывод
☕️ Writer и его наследники определяют потоковый вывод символов в юникоде
☕️ Reader и его наследники определяют потоковый ввод символов в юникоде
Проверяем наличие дубликатов в массиве в Java

Мы можем работать лучше, используя Хеширование. Идея состоит в том, чтобы пройти по заданному массиву и вставить каждый встреченный элемент в HashSet. Теперь, если встреченный элемент уже присутствовал в наборе, он является дубликатом. Временная сложность этого решения O(n) но вспомогательное пространство используется O(n).

Мы знаем это HashSet не допускает дублирования значений в нем. Мы можем использовать это свойство для проверки дубликатов в массиве. Идея состоит в том, чтобы вставить все элементы массива в HashSet. Теперь массив содержит дубликат, если длина массива не равна размеру набора.

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