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

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

Для обратной связи: @proglibrary_feeedback_bot

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

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
Какие алгоритмы нужно знать, чтобы стать хорошим программистом?

Самые распространенные алгоритмы и структуры данных, но и более сложные вещи, о которых вы могли не знать.

🔗 Основной сайт
🔗 Зеркало

Зачем вообще нужны алгоритмы?
Знание алгоритмов и структур данных является важной базой у начинающих программистов для оптимизации кода. Эти знания помогут держать мозг в тонусе, пройти техническое собеседование любой сложности на позицию разработчика и повысить свой чек за работу.

Как мне оперативно научиться применять алгоритмы?
Мы запустили курс «Алгоритмы и структуры данных», на котором junior и middle+ программисты смогут потренировать навыки применения алгоритмов и сгенерировать идеальные решения сложных задач в сообществе других разработчиков.

➡️ Начать обучение
#вопросы_с_собеседований
Что вы знаете о действиях JSP (Action tag и JSP Action Elements).

Action tag и JSP Action Elements предоставляют методы работы с Java Beans, подключения ресурсов, проброса запросов и создания динамических XML элементов. Такие элементы всегда начинаются с записи jsp: и используются непосредственно внутри страницы JSP без необходимости подключения сторонних библиотек или дополнительных настроек.

Наиболее часто используемыми JSP Action Elements являются:
jsp:include: <jsp:include page="относительный URL" flush="true"/> - подключить файл при запросе страницы. Если необходимо, чтобы файл подключался в процессе трансляции страницы, то используется директива page совместно с атрибутом include;
jsp:useBean: <jsp:useBean att=значение*/> или <jsp:useBean att=значение*>...</jsp:useBean> - найти или создать Java bean;
jsp:setProperty: <jsp:setProperty att=значение*/> - установить свойства Java bean, или явно, или указанием на соответствующее значение, передаваемое при запросе;
jsp:forward: <jsp:forward page="относительный URL"/> - передать запрос другой странице;
jsp:plugin: <jsp:plugin attribute="значение"*>...</jsp:plugin> - сгенерировать (в зависимости от типа браузера) тэги OBJECT или EMBED для апплета, использующего технологию Java Plugin.
Тест: Python, Java, JavaScript — что выбрать?

Чтобы помочь вам сориентироваться с будущей профессией и не жалеть о впустую потраченном времени, мы вместе с Яндекс Практикумом подготовили тест, который поможет сделать правильный выбор на основе ваших предпочтений.

На выходе получите рекомендацию, с какого языка вам начать свой путь в программировании будет интереснее.
Python, Java или JavaScript.

🔗 Основной сайт
🔗 Зеркало
Spring: новости за прошедшую неделю / 11-е октября

Вашему вниманию предлагается информационная подборка материалов "Spring: новости за прошедшую неделю" от Джоша Лонга (Josh Long).

Приятного чтения!
😃

https://spring.io/blog/2022/10/11/this-week-in-spring-october-11th-2022
#вопросы_с_собеседований
Чем stub отличается от mock?

stub используется как заглушка сервисов, методов, классов и т.д. с заранее запрограммированным ответом на вызовы.

mock использует подмену результатов вызова, проверяет сам факт взаимодействия, протоколирует и контролирует его.
Вы используете ненадежный код

В декабре прошлого года Log4Shell сократил ночи многих людей в мире JVM. Хуже того, используя аналогию с землетрясением, после первоначального землетрясения возникло множество афтершоков.

Я сразу установил связь между Log4Shell и Security Manager. Сначала я не хотел об этом писать. Но ко мне поступили просьбы, и я не мог обойти это стороной.

Насколько я помню команда Oracle отказалась от Security Manager в Java 17. Один из аргументов, на котором основывалось это решение, заключается в том, что он изначально был разработан для защиты апплетов.

Читать статью
Как работает метод Thread.join()?

Когда поток вызывает join() для другого потока, текущий работающий поток будет ждать, пока другой поток, к которому он присоединяется, не будет завершён:

void join()
void join(long millis)
void join(long millis, int nanos)
Какие аннотации фикстур существуют в JUnit?

@BeforeClass - определяет код, который должен единожды выполниться перед запуском набора тестовых методов.
@AfterClass - код, выполняемый один раз после исполнения набора тестовых методов.
@Before - определяет код, который должен выполняться каждый раз перед запуском любого тестовым методом.
@After - код, выполняемый каждый раз после исполнения любого тестового метода.
⬆️ Достиг потолка в профессии: как устроиться в международную компанию

Расскажем о том, как оценить свой уровень английского, грамотно оформить резюме и успешно пройти собеседование в международную команду.

https://proglib.io/sh/1wkX235TZe
Зеркало
#вопросы_с_собеседований
Что такое «шаблон проектирования»?

Шаблон (паттерн) проектирования (design pattern) — это проверенное и готовое к использованию решение. Это не класс и не библиотека, которую можно подключить к проекту, это нечто большее - он не зависит от языка программирования, не является законченным образцом, который может быть прямо преобразован в код и может быть реализован по-разному в разных языках программирования.

Плюсы использования шаблонов:
• снижение сложности разработки за счёт готовых абстракций для решения целого класса проблем.
• облегчение коммуникации между разработчиками, позволяя ссылаться на известные шаблоны.
• унификация деталей решений: модулей и элементов проекта.
• возможность отыскав удачное решение, пользоваться им снова и снова.
• помощь в выборе выбрать наиболее подходящего варианта проектирования.

Минусы:
• слепое следование некоторому выбранному шаблону может привести к усложнению программы.
• желание попробовать некоторый шаблон в деле без особых на то оснований.
Типы шаблонов проектирования.

• Основные (Fundamental) - основные строительные блоки других шаблонов. Большинство других шаблонов использует эти шаблоны в той или иной форме.
• Порождающие шаблоны (Creational) — шаблоны проектирования, которые абстрагируют процесс создание экземпляра. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов. Шаблон, порождающий классы, использует наследование, чтобы изменять созданный объект, а шаблон, порождающий объекты, делегирует создание объектов другому объекту.
• Структурные шаблоны (Structural) определяют различные сложные структуры, которые изменяют интерфейс уже существующих объектов или его реализацию, позволяя облегчить разработку и оптимизировать программу.
• Поведенческие шаблоны (Behavioral) определяют взаимодействие между объектами, увеличивая таким образом его гибкость.
Многопоточность Java. #неОпятьАСнова #javaJunior #javaCore

Эта статья, как и все последующие – моя попытка структурировать полученные знания в процессе изучения Java. В этой статье тезисно собрана вся основная информация по теме и те формулировки, которые показались мне наиболее удачными и понятными.
Это мой конспект, если хотите.

На источники, откуда черпалась информация, предоставлены ссылки в конце статьи.

Статья будет полезна тем, кто изучает или повторяет основы Java Core.
И тем, кто готовится к собеседованию.

https://habr.com/ru/post/693244/
Напишите простейший многопоточный ограниченный буфер с использованием synchronized.

class QueueSynchronized<T> {
private volatile int size = 0;
private final Object[] content;
private final int capacity;

private int out;
private int in;

private final Object isEmpty = new Object();
private final Object isFull = new Object();

QueueSynchronized(final int capacity) {
this.capacity = capacity;
content = new Object[this.capacity];
out = 0;
in = 0;
size = 0;
}

private int cycleInc(int index) {
return (++index == capacity)
? 0
: index;
}

@SuppressWarnings("unchecked")
T get() throws InterruptedException {
if (size == 0) {
synchronized (isEmpty) {
while (size < 1) {
isEmpty.wait();
}
}
}
try {
synchronized (this) {
final Object value = content[out];
content[out] = null;
if (size > 1) {
out = cycleInc(out);
}
size--;
return (T) value;
}
} finally {
synchronized (isFull) {
isFull.notify();
}
}
}

QueueSynchronized<T> put(T value) throws InterruptedException {
if (size == capacity) {
synchronized (isFull) {
while (size == capacity) {
isFull.wait();
}
}
}
synchronized (this) {
if (size == 0) {
content[in] = value;
} else {
in = cycleInc(in);
content[in] = value;
}
size++;
}
synchronized (isEmpty) {
isEmpty.notify();
}
return this;
}
}
Что такое ООП?

Объектно-ориентированное программирование (ООП) — методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования.

• объектно-ориентированное программирование использует в качестве основных логических конструктивных элементов объекты, а не алгоритмы;
• каждый объект является экземпляром определенного класса
• классы образуют иерархии.

Программа считается объектно-ориентированной, только если выполнены все три указанных требования. В частности, программирование, не использующее наследование, называется не объектно-ориентированным, а программированием с помощью абстрактных типов данных.

Согласно парадигме ООП программа состоит из объектов, обменивающихся сообщениями. Объекты могут обладать состоянием, единственный способ изменить состояние объекта - послать ему сообщение, в ответ на которое, объект может изменить собственное состояние.
Spring: новости за прошедшую неделю / 18-е октября

Вашему вниманию предлагается информационная подборка материалов "Spring: новости за прошедшую неделю" от Джоша Лонга (Josh Long).

Приятного чтения! 😃

Читать статью