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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
Для чего используется оператор assert?

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

Утверждения существенно упрощают локализацию ошибок в коде. Даже проверка результатов выполнения очевидного кода может оказаться полезной при последующем рефакторинге, после которого код может стать не настолько очевидным и в него может закрасться ошибка.

Обычно утверждения оставляют включенными во время разработки и тестирования программ, но отключают в релиз-версиях программ.

Т.к. утверждения могут быть удалены на этапе компиляции либо во время исполнения программы, они не должны менять поведение программы. Если в результате удаления утверждения поведение программы может измениться, то это явный признак неправильного использования assert. Таким образом, внутри assert нельзя вызывать методы, изменяющие состояние программы, либо внешнего окружения программы.

В Java проверка утверждений реализована с помощью оператора assert, который имеет форму:

 [Выражение типа boolean]; 
или
 assert [Выражение типа boolean] : [Выражение любого типа, кроме void];

Во время выполнения программы в том случае, если поверка утверждений включена, вычисляется значение булевского выражения, и если его результат false, то генерируется исключение java.lang.AssertionError. В случае использования второй формы оператора assert выражение после двоеточия задаёт детальное сообщение о произошедшей ошибке (вычисленное выражение будет преобразовано в строку и передано конструктору AssertionError).
#вопросы_с_собеседований
В чем заключаются различия между cтеком (stack) и кучей (heap) с точки зрения многопоточности?

Cтек
– участок памяти, тесно связанный с потоками. У каждого потока есть свой стек, которые хранит локальные переменные, параметры методов и стек вызовов. Переменная, хранящаяся в стеке одного потока, не видна для другого.

Куча – общий участок памяти, который делится между всеми потоками. Объекты, неважно локальные или любого другого уровня, создаются в куче. Для улучшения производительности, поток обычно кэширует значения из кучи в свой стек, в этом случае для того, чтобы указать потоку, что переменную следует читать из кучи, используется ключевое слово volatile.
👔 Senior Java Dev
⛳️ СберМаркет
💼🥁 Удаленка\офис Мск\гибрид — выбирай
💵 от 300 т.р. на руки

Делаем Core Services в eCom. Давай с нами строить платформу для продуктовых команд!
У нас нет легаси, можно хорошо прокачаться в kubernetes и service mesh, много инженерных и инфраструктурных проектов.
Примеры задач: делать аутентификации, авторизации, отправки смс, пушей, email, подписок через API. Все это на микросервисной распределенной архитектуре на Java.

СберМаркет был создан на основе стартапа Instamart, присоединившегося к экосистеме Сбера в 2019 годe. Важно, что с одной стороны у нас есть стабильность экосистемы, а с другой — мы отдельная компания со своими процессами, командами, корп культурой и инфраструктурой.
В Tech-команде сейчас 650+ человек, за 2021 год мы стали сервисом №1 в e-grocery, хотим укрепиться на этой позиции, и твоя работа поможет достичь эту амбициозную цель.

Подробности по ссылке
🛒Пиши @aurecruit и рекомендуй знакомых
#вопросы_с_собеседований
Когда в приложении может быть выброшено исключение ClassCastException?

ClassCastException (потомок RuntimeException) - исключение, которое будет выброшено при ошибке приведения типа.
#вопросы_с_собеседований
Как поделиться данными между двумя потоками?

Данными между потоками возможно делиться, используя общий объект или параллельные структуры данных, например BlockingQueue.
#вопросы_с_собеседований
Почему String неизменяемый и финализированный класс?

Есть несколько преимуществ в неизменности строк:

• Пул строк возможен только потому, что строка неизменяемая, таким образом виртуальная машина сохраняет больше свободного места в Heap, поскольку разные строковые переменные указывают на одну и ту же переменную в пуле. Если бы строка была изменяемой, то интернирование строк не было бы возможным, потому что изменение значения одной переменной отразилось бы также и на остальных переменных, ссылающихся на эту строку.
• Если строка будет изменяемой, тогда это станет серьезной угрозой безопасности приложения. Например, имя пользователя базы данных и пароль передаются строкой для получения соединения с базой данных и в программировании сокетов реквизиты хоста и порта передаются строкой. Так как строка неизменяемая, её значение не может быть изменено, в противном случае злоумышленник может изменить значение ссылки и вызвать проблемы в безопасности приложения.
• Неизменяемость позволяет избежать синхронизации: строки безопасны для многопоточности и один экземпляр строки может быть совместно использован различными потоками.
• Строки используются classloader и неизменность обеспечивает правильность загрузки класса.
• Поскольку строка неизменяемая, её hashCode() кэшируется в момент создания и нет необходимости рассчитывать его снова. Это делает строку отличным кандидатом для ключа в HashMap т.к. его обработка происходит быстрее.
#вопросы_с_собеседований
В чем разница между операторами GROUP BY и DISTINCT?

DISTINCT указывает, что для вычислений используются только уникальные значения столбца. NULL считается как отдельное значение. GROUP BY создает отдельную группу для всех возможных значений (включая значение NULL).

Если нужно удалить только дубликаты лучше использовать DISTINCT, GROUP BY лучше использовать для определения групп записей, к которым могут применяться агрегатные функции.
Привет! Наш проект proglib.academy растет и сейчас мы ищем Digital-маркетолога в команду, который обеспечит поток клиентов на продукты Proglib.academy из органических и платных каналов, будет строить маркетинговые воронки и проектировать CJM, а также оптимизировать показатели и тестировать гипотезы.

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

Более подробно о вакансии можно прочитать тут: https://proglib.io/vacancies/digital-marketolog-biblioteka-programmista-2022-04-04
#вопросы_с_собеседований
Почему char[] предпочтительнее String для хранения пароля?

С момента создания строка остаётся в пуле, до тех пор, пока не будет удалена сборщиком мусора. Поэтому, даже после окончания использования пароля, он некоторое время продолжает оставаться доступным в памяти и способа избежать этого не существует. Это представляет определённый риск для безопасности, поскольку кто-либо, имеющий доступ к памяти сможет найти пароль в виде текста. В случае использования массива символов для хранения пароля имеется возможность очистить его сразу по окончанию работы с паролем, позволяя избежать риска безопасности, свойственного строке.
👔 Senior Java Dev
⛳️ СберМаркет
💼🥁 Удаленка\офис Мск\гибрид — выбирай
💵 от 300 т.р. на руки

Делаем Core Services в eCom. Давай с нами строить платформу для продуктовых команд!
У нас нет легаси, можно хорошо прокачаться в kubernetes и service mesh, много инженерных и инфраструктурных проектов.
Примеры задач: делать аутентификации, авторизации, отправки смс, пушей, email, подписок через API. Все это на микросервисной распределенной архитектуре на Java.

СберМаркет был создан на основе стартапа Instamart, присоединившегося к экосистеме Сбера в 2019 годe. Важно, что с одной стороны у нас есть стабильность экосистемы, а с другой — мы отдельная компания со своими процессами, командами, корп культурой и инфраструктурой.
В Tech-команде сейчас 650+ человек, за 2021 год мы стали сервисом №1 в e-grocery, хотим укрепиться на этой позиции, и твоя работа поможет достичь эту амбициозную цель.

Подробности по ссылке
🛒Пиши @aurecruit и рекомендуй знакомых
#вопросы_с_собеседований
Как зарегистрировать драйвер JDBC?

Регистрацию драйвера можно осуществить несколькими способами:
☕️ java.sql.DriverManager.registerDriver(%объект класса драйвера%).
☕️ Class.forName(«полное имя класса драйвера»).newInstance().
☕️ Class.forName(«полное имя класса драйвера»);
#вопросы_с_собеседований
Что такое race condition?

Состояние гонки
(race condition) - ошибка проектирования многопоточной системы или приложения, при которой эта работа напрямую зависит от того, в каком порядке выполняются потоки. Состояние гонки возникает, когда поток, который должен исполнится в начале, проиграл гонку и первым исполняется другой поток: поведение кода изменяется, из-за чего возникают недетерменированные ошибки.
#вопросы_с_собеседований
Почему строка является популярным ключом в HashMap в Java?

Поскольку строки неизменяемы, их хэш код вычисляется и кэшируется в момент создания, не требуя повторного пересчета при дальнейшем использовании. Поэтому в качестве ключа HashMap они будут обрабатываться быстрее.
#вопросы_с_собеседований
Что такое WebSocket?

WebSocket — протокол полнодуплексной связи поверх TCP-соединения, предназначенный для обмена сообщениями между браузером и web-сервером в режиме реального времени.

Протокол WebSocket определяет две URI схемы

☕️ ws: - нешифрованное соединение
☕️ wss: - шифрованное соединение
#вопросы_с_собеседований
Что делает метод intern() в классе String?

Метод intern() используется для сохранения строки в пуле строк или получения ссылки, если такая строка уже находится в пуле.
#вопросы_с_собеседований
Расположите в виде иерархии следующие интерфейсы: List, Set, Map, SortedSet, SortedMap, Collection, Iterable, Iterator, NavigableSet, NavigableMap.
#вопросы_с_собеседований
Какие подклассы класса InputStream вы знаете, для чего они предназначены?

✔️InputStream - абстрактный класс, описывающий поток ввода;
✔️BufferedInputStream - буферизованный входной поток;
✔️ByteArrayInputStream позволяет использовать буфер в памяти (массив байтов) в качестве источника данных для входного потока;
✔️DataInputStream - входной поток для байтовых данных, включающий методы для чтения стандартных типов данных Java;
✔️FileInputStream - входной поток для чтения информации из файла;
✔️FilterInputStream - абстрактный класс, предоставляющий интерфейс для классов-надстроек, которые добавляют к существующим потокам полезные свойства;
✔️ObjectInputStream - входной поток для объектов;
✔️StringBufferInputStream превращает строку (String) во входной поток данных InputStream;
✔️PipedInputStream реализует понятие входного канала;
✔️PushbackInputStream - разновидность буферизации, обеспечивающая чтение байта с последующим его возвратом в поток, позволяет «заглянуть» во входной поток и увидеть, что оттуда поступит в следующий момент, не извлекая информации.
✔️SequenceInputStream используется для слияния двух или более потоков InputStream в единый.
#вопросы_с_собеседований
Для чего используются операторы INTERSECT, EXCEPT в Transact-SQL?

Оператор EXCEPT возвращает уникальные записи из левого входного запроса, которые не выводятся правым входным запросом.

Оператор INTERSECT возвращает уникальные записи, выводимые левым и правым входными запросами.
#вопросы_с_собеседований
Предположим, есть метод, который может выбросить IOException и FileNotFoundException. в какой последовательности должны идти блоки catch? Сколько блоков catch будет выполнено?

Общее правило: обрабатывать исключения нужно от «младшего» к старшему. Т.е. нельзя поставить в первый блок catch(Exception ex) {}, иначе все дальнейшие блоки catch() уже ничего не смогут обработать, т.к. любое исключение будет соответствовать обработчику catch(Exception ex).

Таким образом, исходя из факта, что FileNotFoundException extends IOException сначала нужно обработать FileNotFoundException, а затем уже IOException:

void method() {
try {
//...
} catch (FileNotFoundException ex) {
//...
} catch (IOException ex) {
//...
}
}
Weekend Offer для мобильных разработчиков

Всего за выходные вы сможете получить оффер от команды мессенджера VK Teams, И крутым бонусом — дополнительную зарплату уже на старте.

Вам предстоит развивать highload-системы, поставлять VK Teams on-premise на серверах для крупных компаний, а также предоставлять SaaS-решение для среднего и малого бизнеса.

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

Расписание:
📌 до 22 апреля — приём заявок и HR-интервью;
📌 23 апреля — знакомство с командой, техническое интервью;
📌 24 апреля — финальное собеседование и оффер.

Подать заявку можно тут.