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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
#вопросы_с_собеседований
Расскажите о типах шаблонов проектирования.
Расскажите о типах шаблонов проектирования.
❗️✔️Основные (Fundamental) — основные строительные блоки других шаблонов. Большинство других шаблонов использует эти шаблоны в той или иной форме.
✔️Порождающие шаблоны (Creational) — шаблоны проектирования, которые абстрагируют процесс создания экземпляра. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов. Шаблон, порождающий классы, использует наследование, чтобы изменять созданный объект, а шаблон, порождающий объекты, делегирует создание объектов другому объекту.
✔️Структурные шаблоны (Structural) определяют различные сложные структуры, которые изменяют интерфейс уже существующих объектов или его реализацию, позволяя облегчить разработку и оптимизировать программу.
✔️Поведенческие шаблоны (Behavioral) определяют взаимодействие между объектами, увеличивая таким образом его гибкость.
Как сделать эффективными обсуждения по видеосвязи

Поговорим об использовании видеосвязи для удаленной работы. Бесплатные тарифы программ для видеоконференций и простые практики эффективных обсуждений.

https://prglb.ru/3enw4
Java Language Features, 2nd Edition (2018)

Многие опытные Java-программисты не знают всех тонкостей и интересных фишек языка, о которых автор рассказывает в данной книге. Более того, в ней содержатся интересные замечания о ядре Java и советы по написанию более эффективного рабочего кода.

Скачать книгу
#вопросы_с_собеседований
Несколько вопросов по многопоточности
1. Каким образом можно создать поток?
2. Чем различаются Thread и Runnable?
3. В чём заключается разница между методами start() и run()?
Каким образом можно создать поток?
✔️Создать потомка класса Thread и переопределить его метод run();
✔️Создать объект класса Thread, передав ему в конструкторе экземпляр класса, реализующего интерфейс Runnable. Этот интерфейс содержит метод run(), который будет выполняться в новом потоке. Поток закончит выполнение, когда завершится его метод run().
✔️Вызвать метод submit() у экземпляра класса, реализующего интерфейс ExecutorService, передав ему в качестве параметра экземпляр класса, реализующего интерфейс Runnable или Callable (содержит метод call(), в котором описывается логика выполнения).
Чем различаются Thread и Runnable?
Thread - это класс, некоторая надстройка над физическим потоком.
Runnable - это интерфейс, представляющий абстракцию над выполняемой задачей.
Помимо того, что Runnable помогает разрешить проблему множественного наследования, несомненный плюс от его использования состоит в том, что он позволяет логически отделить логику выполнения задачи от непосредственного управления потоком.
В чём заключается разница между методами start() и run()?
Несмотря на то, что start() вызывает метод run() внутри себя, это не то же самое, что просто вызов run(). Если run() вызывается как обычный метод, то он вызывается в том же потоке и никакой новый поток не запускается, как это происходит в случае, когда вы вызываете метод start().
#вопросы_с_собеседований
1. Почему в некоторых интерфейсах вообще не определяют методов?
2. Для чего в Java используются статические блоки инициализации?
Почему в некоторых интерфейсах вообще не определяют методов?
❗️Это так называемые маркерные интерфейсы. Они просто указывают, что класс относится к определенному типу. Примером может послужить интерфейс Clonable, который указывает на то, что класс поддерживает механизм клонирования.

Для чего в Java используются статические блоки инициализации?
❗️Статические блоки инициализации используются для выполнения кода, который должен выполниться один раз при инициализации класса загрузчиком классов, в момент, предшествующий созданию объектов этого класса при помощи конструктора. Такой блок (в отличие от нестатических, принадлежащих конкретному объекту класса) принадлежит только самому классу (объекту метакласса Class).
Ребята из Тинькофф Старт открывают регистрацию на онлайн-трансляцию посвященную летней программе!

26 марта в 19:00 расскажут об открытых направлениях и как подготовиться к вступительным испытаниям для каждого из них. А еще обсудят внутреннюю кухню, особенности обучения и истории ребят, которые когда-то начинали с Тинькофф Старт, а теперь строят карьеру в Тинькофф.

Для участия в трансляции зарегистрируйтесь и ищите письмо-подтверждение со ссылкой на трансляцию в указанной почте: https://prglb.ru/5wr14

Напоминаем: у ребят есть телеграм-канал, где удобно следить за всеми новостями Тинькофф Образования: @tinkoff_fintech
#вопросы_с_собеседований
1. Необходимо добавить 1 млн. элементов, какую структуру из фреймворка Collections вы будете использовать?
2. Как происходит удаление элементов из ArrayList? Как меняется в этом случае размер ArrayList?
«Ни в одном месте не проучился дольше года». Интервью с Java-разработчиком

Взяли интервью у выпускника курса Java Mentor, который мы ранее рекомендовали нашим подписчикам. В комментариях под постом вы можете задать вопросы выпускнику лично.

https://prglb.ru/3gkr7
Необходимо добавить 1 млн. элементов, какую структуру из фреймворка Collections вы будете использовать?
❗️Однозначный ответ можно дать только исходя из информации о том, в какую часть списка происходит добавление элементов, что потом будет происходить с элементами списка, существуют ли какие-то ограничения по памяти или скорости выполнения. см. Чем отличается ArrayList от LinkedList
Как происходит удаление элементов из ArrayList? Как меняется в этом случае размер ArrayList?
❗️При удалении произвольного элемента из списка, все элементы находящиеся «правее» смещаются на одну ячейку влево и реальный размер массива (его емкость, capacity) не изменяется никак. Механизм автоматического «расширения» массива существует, а вот автоматического «сжатия» нет, можно только явно выполнить «сжатие» командой trimToSize().
Суперподборка: более 70 бесплатных русскоязычных онлайн-курсов по IT-специальностям

Математика, алгоритмы, языки программирования (включая Java) и другие курсы по анализу данных, вебу, мобильной разработке, тестированию. Плюс наши ключевые статьи по каждой из тем.

https://prglb.ru/3a6ih
#вопросы_с_собеседований
Что произойдет со сборщиком мусора, если выполнение метода finalize() требует ощутимо много времени, или в процессе выполнения будет выброшено исключение?
Непосредственно вызов finalize() происходит в отдельном потоке Finalizer (java.lang.ref.Finalizer.FinalizerThread), который создаётся при запуске виртуальной машины (в статической секции при загрузке класса Finalizer). Методы finalize() вызываются последовательно в том порядке, в котором были добавлены в список сборщиком мусора. Соответственно, если какой-то finalize() зависнет, он подвесит поток Finalizer, но не сборщик мусора. Это в частности означает, что объекты, не имеющие метода finalize(), будут исправно удаляться, а вот имеющие будут добавляться в очередь, пока поток Finalizer не освободится, не завершится приложение или не кончится память.

То же самое применимо и выброшенным в процессе finalize() исключениям: метод runFinalizer() у потока Finalizer игнорирует все исключения выброшенные в момент выполнения finalize(). Таким образом возникновение исключительной ситуации никак не скажется на работоспособности сборщика мусора.
Java: Learn Java in One Day and Learn It Well (2016)
Автор: Jamie Chan

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

Скачать книгу
#вопросы_с_собеседований
Что такое «локальный класс»? Каковы его особенности?
Local inner class (Локальный класс) - это вложенный класс, который может быть декларирован в любом блоке, в котором разрешается декларировать переменные. Как и простые внутренние классы (Member inner class) локальные классы имеют имена и могут использоваться многократно. Как и анонимные классы, они имеют окружающий их экземпляр только тогда, когда применяются в нестатическом контексте.

Локальные классы имеют следующие особенности:

✔️Видны только в пределах блока, в котором объявлены;
✔️Не могут быть объявлены как private/public/protected или static;
✔️Не могут иметь внутри себя статических объявлений методов и классов, но могут иметь финальные статические поля, проинициализированные константой;
✔️Имеют доступ к полям и методам обрамляющего класса;
✔️Могут обращаться к локальным переменным и параметрам метода, если они объявлены с модификатором final.