Библиотека джависта | 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
加入频道
Наиболее используемые методы класса File:

☕️ boolean createNewFile(): делает попытку создать новый файл;
☕️ boolean delete(): делает попытку удалить каталог или файл;
☕️ boolean mkdir(): делает попытку создать новый каталог;
☕️ boolean renameTo(File dest): делает попытку переименовать файл или каталог;
☕️ boolean exists(): проверяет, существует ли файл или каталог;
☕️ String getAbsolutePath(): возвращает абсолютный путь для пути, переданного в конструктор объекта;
☕️ String getName(): возвращает краткое имя файла или каталога;
☕️ String getParent(): возвращает имя родительского каталога;
☕️ boolean isDirectory(): возвращает значение true, если по указанному пути располагается каталог;
☕️ boolean isFile(): возвращает значение true, если по указанному пути находится файл;
☕️ boolean isHidden(): возвращает значение true, если каталог или файл являются скрытыми;
☕️ long length(): возвращает размер файла в байтах;
☕️ long lastModified(): возвращает время последнего изменения файла или каталога;
☕️ String[] list(): возвращает массив файлов и подкаталогов, которые находятся в определенном каталоге;
☕️ File[] listFiles(): возвращает массив файлов и подкаталогов, которые находятся в определенном каталоге.
Как контейнер сервлетов управляет жизненным циклом сервлета, когда и какие методы вызываются?

Контейнер сервлетов управляет четырьмя фазами жизненного цикла сервлета:
• Загрузка класса сервлета — когда контейнер получает запрос для сервлета, то происходит загрузка класса сервлета в память и вызов его конструктора без параметров.
• Инициализация класса сервлета — после того как класс загружен контейнер инициализирует объект ServletConfig для этого сервлета и внедряет его через init() метод. Это и есть место где сервлет класс преобразуется из обычного класса в сервлет.
• Обработка запросов — после инициализации сервлет готов к обработке запросов. Для каждого запроса клиента сервлет контейнер порождает новый поток и вызывает метод service() путем передачи ссылки на объекты ответа и запроса.
• Удаление - когда контейнер останавливается или останавливается приложение, то контейнер сервлетов уничтожает классы сервлетов путем вызова destroy() метода.

Таким образом, сервлет создаётся при первом обращении к нему и живёт на протяжении всего времени работы приложения (в отличии от объектов классов, которые уничтожаются сборщиком мусора после того, как они уже не используются) и весь жизненный цикл сервлета можно описать как последовательность вызова методов:
public void init(ServletConfig config) – используется контейнером для инициализации сервлета. Вызывается один раз за время жизни сервлета.
public void service(ServletRequest request, ServletResponse response) – вызывается для каждого запроса. Метод не может быть вызван раньше выполнения init() метода.
public void destroy() – вызывается для уничтожения сервлета (один раз за время жизни сервлета).
Surviving the Whiteboard Interview (2019)
Автор: William Gant
Количество страниц: 136

Whiteboard-этап интервью может показаться большой проблемой для начинающих разработчиков. Опытные разработчики могут взять себя в руки и справиться с возрастающим напряжением, но как быть тем, кто собеседуется на позицию Junior'а? Автор книги использует свои реальные знания и опыт, чтобы помочь вам преодолеть психологические препятствия, связанные с интервью, а также предлагает образцы задач. При наличии достаточной подготовки и уверенности в себе вы сможете пройти whiteboard-собеседование в любой организации. Автор также дает общие советы по прохождению собеседования, например, рассказывает, как произвести наилучшее впечатление на интервьюера.

Скачать книгу
Компания: Kotelov https://kotelov.com
Формат работы: Офис (в центре Петербурга) или удаленка
Занятость: Полная

Что мы ждем от тебя:
1. Опыт коммерческой разработки на Java от 3-х лет;
2. Понимание принципов ООП и SOLID;
3. Знание фреймворка spring boot;
4. Опыт в проектировании и написание Rest API;
5. Опыт работы с брокерами очередей (RabbitMQ, Kafka, etc);

Будет плюсом:
1. Знакомство с JAVA EE;
2. Опыт работы с Kafka, умение конфигурировать и оптимизировать;
3. Опыт работы с Kubernetes.

Контакты: @kristina_anfimiadi (Кристина)
Есть ли смысл определять для сервлета конструктор? Каким образом лучше инициализировать данные?

Большого смысла определять для сервлета конструктор нет, т.к. инициализировать данные лучше не в конструкторе, а переопределив метод init(), в котором имеется возможность доступа к параметрам инициализации сервлета через использование объекта ServletConfig.
#вопросы_с_собеседований
Имеет ли смысл индексировать данные, имеющие небольшое количество возможных значений?
Senior Java-разработчик, присоединяйся к нашей команде Luxoft и получи не только работу мечты, но и Welcome Bonus, который точно порадует!

До 31 октября 2021 года заполни короткую форму, и мы расскажем о наших проектах и бонусе!

Все подробности и регистрация по ссылке.
Библиотека джависта | Java, Spring, Maven, Hibernate
#вопросы_с_собеседований Имеет ли смысл индексировать данные, имеющие небольшое количество возможных значений?
Примерное правило, которым можно руководствоваться при создании индекса - если объем информации (в байтах) НЕ удовлетворяющей условию выборки меньше, чем размер индекса (в байтах) по данному условию выборки, то в общем случае оптимизация приведет к замедлению выборки.
💥 Java Hiring Sprint, 18-29 октября | онлайн
Мы приглашаем Java-разработчиков уровня Middle/Senior/Lead/Architect с опытом работы от 2 лет стать частью команды EPAM Anywhere.

🎯 Пройди техническое интервью и в течение 48 часов получи оффер от EPAM Anywhere, а также бонус до US $5,000 после присоединения к нашей команде!

🔸 Бонус для специалиста уровня Middle – US $2,000
🔸 Бонус для специалиста уровня Senior — US $3,000
🔸 Бонус для специалиста уровня Lead — US $4,000
🔸 Бонус для специалиста уровня Architect — US $5,000.
Сумма бонуса фиксирована независимо от оклада.

Хочешь узнать больше? Заполни регистрационную форму и узнай о платформе EPAM Anywhere и Java Hiring Sprint!

👉 Зарегистрироваться -> https://epa.ms/2aWdI1
Добрый вечер. Комьюнити Библиотеки программиста подумывает о том, чтобы организовать встречу офлайн в конце октября у нас на локации в мск. Хотим узнать ваше мнение, во что бы вы хотели поиграть в компании из 6-10 человек (единомышленников-программистов)
Anonymous Poll
15%
Монополия
20%
Мафия
9%
Крокодил
5%
Домино
18%
Покер
14%
Кто я такой (стикеры на лбу)
11%
Квизы (участики делятся на команды)
13%
Манчкин
4%
Другое (в комментариях)
41%
Полное прекращение работы Telegram в России
Фреймворк Fork/Join, представленный в JDK 7, - это набор классов и интерфейсов позволяющих использовать преимущества многопроцессорной архитектуры современных компьютеров. Он разработан для выполнения задач, которые можно рекурсивно разбить на маленькие подзадачи, которые можно решать параллельно.

• Этап Fork: большая задача разделяется на несколько меньших подзадач, которые в свою очередь также разбиваются на меньшие. И так до тех пор, пока задача не становится тривиальной и решаемой последовательным способом.
• Этап Join: далее (опционально) идёт процесс «свёртки» - решения подзадач некоторым образом объединяются пока не получится решение всей задачи.
Решение всех подзадач (в т.ч. и само разбиение на подзадачи) происходит параллельно.

Для решения некоторых задач этап Join не требуется. Например, для параллельного QuickSort — массив рекурсивно делится на всё меньшие и меньшие диапазоны, пока не вырождается в тривиальный случай из 1 элемента. Хотя в некотором смысле Join будет необходим и тут, т.к. всё равно остаётся необходимость дождаться пока не закончится выполнение всех подзадач.

Ещё одно замечательное преимущество этого фреймворка заключается в том, что он использует work-stealing алгоритм: потоки, которые завершили выполнение собственных подзадач, могут «украсть» подзадачи у других потоков, которые всё ещё заняты.
#вопросы_с_собеседований
Как создать потокобезопасный Singleton?
Static field
 class Singleton {
public static final Singleton INSTANCE = new Singleton();
}

• Enum
 enum Singleton {
INSTANCE;
}

Synchronized Accessor
 class Singleton {
private static Singleton instance;

public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}

• Double Checked Locking & volatile
 class Singleton {
private static volatile Singleton instance;

public static Singleton getInstance() {
Singleton localInstance = instance;
if (localInstance == null) {
synchronized (Singleton.class) {
localInstance = instance;
if (localInstance == null) {
instance = localInstance = new Singleton();
}
}
}
return localInstance;
}
}

• On Demand Holder Idiom
public class Singleton {

public static class SingletonHolder {
public static final Singleton HOLDER_INSTANCE = new Singleton();
}

public static Singleton getInstance() {
return SingletonHolder.HOLDER_INSTANCE;
}
}
Привет, Username! Приглашаем тебя на новый хакатон Цифрового Прорыва на тему "Транспорт и логистика"!

Для тебя мы подготовили крутецкие кейсы от Росатома, Ростелекома, Транспортных инноваций Москвы, международного аэропорта Шереметьево, Accenture и др.!

Участвовать можно онлайн из любой точки России, либо в специальных оффлайн-коворкингах (см. список доступных на сайте).

Успей собрать команду 3-5 человек (или присоединиться к имеющимся), выбрать кейс и побороться за призовой фонд до 4.500.000 руб. 🚀🚀🚀

Регистрируйся прямо сейчас: https://proglib.io/w/589dba35
#вопросы_с_собеседований
Для чего в стримах применяются методы forEach() и forEachOrdered()?
☕️ forEach() применяет функцию к каждому объекту стрима, порядок при параллельном выполнении не гарантируется;
☕️ forEachOrdered() применяет функцию к каждому объекту стрима с сохранением порядка элементов.
Как реализовать запуск сервлета одновременно с запуском приложения?

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

Если необходимо загрузить сервлет прямо на старте приложения (например если загрузка сервлета происходит длительное время) следует использовать элемент <load-on-startup> в дескрипторе или аннотацию @loadOnStartup в коде сервлета, что будет указывать на необходимость загрузки сервлета при запуске.

Если целочисленное значение этого параметра отрицательно, то сервлет будет загружен при запросе клиента. В противном случае - загрузится на старте приложения, при этом, чем число меньше, тем раньше в очереди на загрузку он окажется.

<servlet>
<servlet-name>ExampleServlet</servlet-name>
<servlet-class>xyz.company.ExampleServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
Все больше специалистов из стран Восточной Европы обращают внимание на рынок Польши в качестве следующего этапа в развитии карьеры:

- зарплаты в среднем на 30%-40 выше;
- схожесть менталитета и близость к дому;
- простота в получении визы и вида на жительство;
- огромный спрос со стороны работодателей;
- один из наиболее высоких темпов роста экономики в Европе.

Для тех, кто хочет открыть для себя глобальные возможности этого рынка, мы рекомендуем платформу Just Join IT — самый популярный Job board для сферы IT в Польше.

Найдите наилучшее предложение среди 500+ вакансий и работайте на крупнейшие компании: https://bit.ly/justjoinit-java
Что представляет собой ServletConfig?

Интерфейс javax.servlet.ServletConfig используется для передачи сервлету конфигурационной информации. Каждый сервлет имеет свой собственный экземпляр объекта ServletConfig, создаваемый контейнером сервлетов.

Для установки параметров конфигурации используются параметры init-param в web.xml:

    <servlet-name>ExampleServlet</servlet-name>
<servlet-class>xyz.company.ExampleServlet</servlet-class>
<init-param>
<param-name>exampleParameter</param-name>
<param-value>parameterValue</param-value>
</init-param>
</servlet>

или аннотации @WebInitParam:

    urlPatterns = "/example",
initParams = {
@WebInitParam(name = "exampleParameter", value = "parameterValue")
}
)
public class ExampleServlet extends HttpServlet {
//...
}

Для получения ServletConfig сервлета используется метод getServletConfig().