Библиотека джависта | 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
加入频道
#вопросы_с_собеседований
Расскажите об интерфейсе SingleThreadModel.
SmartMarket — единая точка доступа ко всем технологиям Сбера

💻 Хотите быть в курсе передовых технологий в IT? Регистрируйтесь на платформе SmartMarket!

Платформа позволяет JavaScript-разработчикам решать IT-задачи любой сложности и использовать:

— Визуальный конструктор и фреймворк для создания приложений на JS;
— Среду разработки на языках JS и SmartApp DSL;
— Нейросетевые решения;
— Сервисы для хранения данных, отправки пушей, аналитики;
— FaaS-решение для событийно-ориентированных бессерверных вычислений;
— Веб-хостинг и многое другое.

А еще вы сможете монетизировать свои проекты в один клик, подключать голосовое управление и распознавание жестов и получите доступ к сообществу из 2500+ разработчиков!

👉🏻 Подробности и бесплатная регистрация в SmartMarket Studio здесь.
Интерфейс SingleThreadModel является маркерным - в нем не объявлен ни один метод, однако, если сервлет реализует этот интерфейс, то метод service() этого сервлета гарантированно не будет одновременно выполняться в двух потоках. Контейнер сервлетов либо синхронизирует обращения к единственному экземпляру, либо обеспечивает поддержку пула экземпляров и перенаправление запроса свободному сервлету. Другими словами, контейнер гарантирует отсутствие конфликтов при одновременном обращении к переменным или методам экземпляра сервлета. Однако существуют также и другие разделяемые ресурсы, которые даже при использовании этого интерфейса остаются всё так же доступны обработчикам запросов в других потоках. Т.е. пользы от использования этого интерфейса немного и в спецификации Servlet 2.4 он был объявлен deprecated.
Станьте специалистом в Data Science в новом году!

📈«Библиотека программиста» разработали курс по математике для Data Science совместно с преподавателями ВМК МГУ, одного из лучших математических факультетов страны.

В конце курса вы будете владеть математическим аппаратом, который необходим, чтобы стать специалистом в Data Science. Наш курс идеально подходит к поступлению в ШАД или Computer Science Center.

Вы научитесь:

– Подготовитесь к ШАД. В программу курса входит материал, необходимый вам для успешной сдачи вступительных экзаменов в Школу анализа данных «Яндекс».
– Усвоите специальную терминологию и сможете читать статьи по Data Science без постоянных обращений к поисковику.
– Узнаете роль чисел, формул и функций в разработке алгоритмов машинного обучения.

🎄Новый год – самый подходящий момент учиться новому. Для наших подписчиков действует скидка 55% до 31 декабря. Остался один день!

Курс постоянно обновляется, ваш доступ остается с вами навсегда.

Посмотреть тарифы и записаться можно здесь.
#вопросы_с_собеседований
Как вывести на экран 10 случайных чисел в порядке возрастания?
Быстрый старт во Frontend-разработке: с нуля до первого интернет-магазина!

💻На курсе «Библиотеки программиста» «Основы веб-разработки: принцип работы современного веба» вы:

– сверстаете свой первый адаптивный макет с учетом семантики и множество декоративных элементов на HTML и CSS;
– поймете, как с помощью JavaScript разрабатывать пользовательские интерфейсы;
– разберетесь, как JavaScript используется в работе с Backend и создадите свой первый обмен данными сервером;
– углубитесь в более сложную разработку на React.js и напишете свой первый интернет-магазин.

Вас ждут:

– 4 проекта в портфолио после курса;
– изучение HTML, CSS, JavaScript, React – стек технологий, который позволит начать работать в любой компании на любом проекте;
– опция персонального менторства.

🎁Новый год – самый подходящий момент учиться новому. Для наших подписчиков действует скидка 65% до 31 декабря. Остался один день!

Посмотреть тарифы и записаться можно здесь.
Какие существуют уровни изолированности транзакций?

В порядке увеличения изолированности транзакций и, соответственно, надёжности работы с данными:
Чтение неподтверждённых данных (грязное чтение) (read uncommitted, dirty read) — чтение незафиксированных изменений как своей транзакции, так и параллельных транзакций. Нет гарантии, что данные, изменённые другими транзакциями, не будут в любой момент изменены в результате их отката, поэтому такое чтение является потенциальным источником ошибок. Невозможны потерянные изменения, возможны неповторяемое чтение и фантомы.
Чтение подтверждённых данных (read committed) — чтение всех изменений своей транзакции и зафиксированных изменений параллельных транзакций. Потерянные изменения и грязное чтение не допускается, возможны неповторяемое чтение и фантомы.
Повторяемость чтения (repeatable read, snapshot) — чтение всех изменений своей транзакции, любые изменения, внесённые параллельными транзакциями после начала своей, недоступны. Потерянные изменения, грязное и неповторяемое чтение невозможны, возможны фантомы.
Упорядочиваемость (serializable) — результат параллельного выполнения сериализуемой транзакции с другими транзакциями должен быть логически эквивалентен результату их какого-либо последовательного выполнения. Проблемы синхронизации не возникают.
🎄2️⃣0️⃣2️⃣2️⃣🎁

Чего только не было в этом году: нашествие нейросетевых алгоритмов и ARM-процессоров, GitHub Copilot и автодополнение кода, сражение с чёрной дырой пандемии и рождение метавселенных — всего и не припомнишь.

Под занавес принято подводить итоги. В 2021 году редакция «Библиотеки программиста» выпустила 448 статей, а сайт proglib.io посетили 4.7 миллиона читателей. Суммарное число подписчиков наших сообществ превысило 500 тысяч. Наконец, мы открыли собственный образовательный центр — proglib.academy.

Мы сердечно поздравляем всех читателей и членов нашего IT-коммьюнити с Новым годом. Желаем лёгкого кодинга, добра, счастья, здоровья и удачных проектов! Оставайтесь с нами, впереди много интересного! 😉
🧠 Международный Java-квиз

Хорошо владеете Java? Примите участие в квизе, войдите в десятку тех, кто ответит правильно быстрее всех и выиграйте подарочную карту! Просто не будет – ведь за подарки сражаются участники с разных стран!

Призы:
− 1 место - подарочная карта на 100 евро
− 2 место - подарочная карта на 50 евро
− с 3 по 10 место - подарочная карта на 10 евро

Для участия необходимо указать адрес электронной почты, который мы будем использовать для связи с вами по поводу вашего приза.
Квиз завершится 6 января, а свяжемся с победителями до 12 января.

Еще больше новогодних новостей в телеграм-канале Luxoft.
#вопросы_с_собеседований
Что такое «временная таблица»? Для чего она используется?

Временная таблица - это объект базы данных, который хранится и управляется системой базы данных на временной основе. Они могут быть локальными или глобальными. Используется для сохранения результатов вызова хранимой процедуры, уменьшение числа строк при соединениях, агрегирование данных из различных источников или как замена курсоров и параметризованных представлений.
Выполнение консольных команд

Java позволяет выполнять консольные команды прямо из кода, используя класс Runtime. Очень важно не забывать об обработке исключений.

Например, давайте попробуем открыть файл PDF через терминал Java (на Linux’e).
Что такое «представление» (view) и для чего оно применяется?

Представление, View - виртуальная таблица, представляющая данные одной или более таблиц альтернативным образом.

В действительности представление – всего лишь результат выполнения оператора SELECT, который хранится в структуре памяти, напоминающей SQL таблицу. Они работают в запросах и операторах DML точно также как и основные таблицы, но не содержат никаких собственных данных. Представления значительно расширяют возможности управления данными. Это способ дать публичный доступ к некоторой (но не всей) информации в таблице.
#вопросы_с_собеседований
Для чего нужны функциональные интерфейсы UnaryOperator<T>, DoubleUnaryOperator, IntUnaryOperator и LongUnaryOperator?
UnaryOperator<T> (унарный оператор) принимает в качестве параметра объект типа T, выполняет над ними операции и возвращает результат операций в виде объекта типа T:

UnaryOperator<Integer> operator = x -> x * x;
System.out.println(operator.apply(5)); // 25

☕️ DoubleUnaryOperator - унарный оператор, получающий на вход Double;
☕️ IntUnaryOperator - унарный оператор, получающий на вход Integer;
☕️ LongUnaryOperator - унарный оператор, получающий на вход Long.
🧩 5 интересных головоломок и задач, чтобы отвлечься от рутины и немного пошевелить извилинами (выпуск 12)

В нашей еженедельной подборке мы подготовили 5 новых интересных алгоритмических, логических и математических задачек для отдыха и прокачки мозгов.

https://proglib.io/sh/RD8Ib53kaW
Пул строк – это набор строк, хранящийся в Heap.

☕️ Пул строк возможен благодаря неизменяемости строк в Java и реализации идеи интернирования строк;
☕️ Пул строк помогает экономить память, но по этой же причине создание строки занимает больше времени;
☕️ Когда для создания строки используются ", то сначала ищется строка в пуле с таким же значением, если находится, то просто возвращается ссылка, иначе создается новая строка в пуле, а затем возвращается ссылка на неё;
☕️ При использовании оператора new создаётся новый объект String. Затем при помощи метода intern() эту строку можно поместить в пул или же получить из пула ссылку на другой объект String с таким же значением;
☕️ Пул строк является примером паттерна «Приспособленец» (Flyweight).
Перечислите основные агрегатные функции.

Агрегатные функции - функции, которые берут группы значений и сводят их к одиночному значению.

SQL предоставляет несколько агрегатных функций:
COUNT - производит подсчет записей, удовлетворяющих условию запроса;
SUM - вычисляет арифметическую сумму всех значений колонки;
AVG - вычисляет среднее арифметическое всех значений;
MAX - определяет наибольшее из всех выбранных значений;
MIN - определяет наименьшее из всех выбранных значений.
Advanced hiring: попадите в команду Luxoft за несколько дней

У Luxoft крутые новости − попасть в команду теперь можно гораздо быстрее. В компании хорошо понимают, что время – это важный ресурс, поэтому упростили процесс найма. Уже сейчас вы можете получить job offer всего за несколько дней после успешного прохождения технического интервью.

Advanced hiring даёт возможность выбрать проект после принятия оффера. В зависимости от ваших компетенций, опыта и интересов мы подберем для вас оптимальное решение и лучшую команду.

Узнать об открытых вакансиях можно по ссылке.

Еще больше новостей в телеграм-канале Luxoft.