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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
Как написать свой первый автотест за 1 час?

Посетить открытое занятие курса "Автоматизация тестирования на Java" от ребят из школы автоматизации QA.GURU бесплатное открытое занятие состоится 18-го мая в 20:00 МСК.

Почему надо сходить:
— Разработаем ваш первый (или не первый) автотест на поиск в Google
—Расскажут о рынке QA🔥 Кто, кому, за что и сколько платит?
— Покажут боевой проект с полной инфраструктурой (Web, mobile, API)
— Дадут домашнее задание и проверят его.

Занятие бесплатное — для участия вступайте в чат @qa_guru_chat — ссылка на занятие будет там.
👎9👍2
☕️ ТОП-20 бесплатных учебных курсов по Java для новичков

Популярность Java не спадает и только набирает обороты. Представляем лучшие бесплатные курсы для его изучения начинающим разработчикам.

https://proglib.io/sh/O3826tAiV0
👍13👎5
Чем отличается ArrayList от LinkedList? В каких случаях лучше использовать первый, а в каких второй?

ArrayList это список, реализованный на основе массива, а LinkedList — это классический двусвязный список, основанный на объектах с ссылками между ними.

ArrayList:
• доступ к произвольному элементу по индексу за константное время O(1);
• доступ к элементам по значению за линейное время O(N);
• вставка в конец в среднем производится за константное время O(1);
• удаление произвольного элемента из списка занимает значительное время т.к. при этом все элементы, находящиеся «правее» смещаются на одну ячейку влево (реальный размер массива (capacity) не изменяется);
• вставка элемента в произвольное место списка занимает значительное время т.к. при этом все элементы, находящиеся «правее» смещаются на одну ячейку вправо;
• минимум накладных расходов при хранении.

LinkedList:
• на получение элемента по индексу или значению потребуется линейное время O(N);
• на добавление и удаление в начало или конец списка потребуется константное O(1);
• вставка или удаление в/из произвольного место константное O(1);
• требует больше памяти для хранения такого же количества элементов, потому что кроме самого элемента хранятся еще указатели на следующий и предыдущий элементы списка.

В целом, LinkedList в абсолютных величинах проигрывает ArrayList и по потребляемой памяти, и по скорости выполнения операций. LinkedList предпочтительно применять, когда нужны частые операции вставки/удаления или в случаях, когда необходимо гарантированное время добавления элемента в список.
👍42👎7🤔3🔥1
#вопросы_с_собеседований
Какое худшее время работы метода contains() для элемента, который есть в LinkedList?

O(N). Время поиска элемента линейно пропорционально количеству элементов в списке.
👍10🤯1
#вопросы_с_собеседований
Как происходит удаление элементов из ArrayList? Как меняется в этом случае размер ArrayList?

При удалении произвольного элемента из списка, все элементы, находящиеся «правее» смещаются на одну ячейку влево и реальный размер массива (его емкость, capacity) не изменяется никак. Механизм автоматического «расширения» массива существует, а вот автоматического «сжатия» нет, можно только явно выполнить «сжатие» командой trimToSize().
👍26
#вопросы_с_собеседований
Приведите примеры основных шаблонов проектирования.

☕️ Делегирование (Delegation pattern)
- Сущность внешне выражает некоторое поведение, но в реальности передаёт ответственность за выполнение этого поведения связанному объекту.
☕️ Функциональный дизайн (Functional design) - Гарантирует, что каждая сущность имеет только одну обязанность и исполняет её с минимумом побочных эффектов на другие.
☕️ Неизменяемый интерфейс (Immutable interface) - Создание неизменяемого объекта.
☕️ Интерфейс (Interface) - Общий метод структурирования сущностей, облегчающий их понимание.
☕️ Интерфейс-маркер (Marker interface) - В качестве атрибута (как пометки объектной сущности) применяется наличие или отсутствие реализации интерфейса-маркера. В современных языках программирования вместо этого применяются атрибуты или аннотации.
☕️ Контейнер свойств (Property container) - Позволяет добавлять дополнительные свойства сущности в контейнер внутри себя, вместо расширения новыми свойствами.
☕️ Канал событий (Event channel) - Создаёт централизованный канал для событий. Использует сущность-представитель для подписки и сущность-представитель для публикации события в канале. Представитель существует отдельно от реального издателя или подписчика. Подписчик может получать опубликованные события от более чем одной сущности, даже если он зарегистрирован только на одном канале.
👍15👎82
За день вряд ли исправишь сделанный впопыхах хардкод.
За день нельзя выкатить фичу, на которую нужна неделя, как бы ни умолял проджект.
Зато всего за день можно стать Java-разработчиком в одной из двух продуктовых команд Сбера, приняв участие в One Day Offer 21-22 мая.
 
Platform V
Основной элемент технологической стратегии Сбера, предоставляющий набор PAAS-сервисов для быстрого создания и развития бизнес-приложений в облаке.
 
Требования к участникам и условия работы смотрите здесь: http://sber.me/?p=vp3XM
👎21👍2
#вопросы_с_собеседований
Сколько необходимо дополнительной памяти при вызове ArrayList.add()?

Если в массиве достаточно места для размещения нового элемента, то дополнительной памяти не требуется. Иначе происходит создание нового массива размером в 1,5 раза превышающим существующий (это верно для JDK выше 1.7, в более ранних версиях размер увеличения иной).
👍9
➡️ Привет! Мы проводим опрос «Что тебя больше всего раздражает в рабочем процессе и в программировании?»

🔥 Говори прямо, не сдерживай себя. Орфографию и пунктуацию мы сохраним. Правда, вульгаризмы заменим на эвфемизмы, но без потери смысла :D

Что тебя больше всего раздражает на работе? 😶 Бессмысленные комментарии к коду? 😐 Постоянно отвлекают от работы, а потом ты полчаса входишь в рабочий процесс? 🤔 Переработки? 😕 Срочные задачи в конце рабочего дня? 😲 Низкий стол? 😵 14" электронно-лучевой монитор? 🤣

Опрос анонимный. Делись наболевшим. А в июне мы опубликуем статью со всеми ответами.

➡️ Опрос можно пройти по ссылке ⬅️
Тинькофф приглашает на One Day Offer

Ищем Java- и Kotlin-разработчиков с опытом от трех лет, чтобы сделать им оффер за день. В течение дня вы общаетесь с командой, а после получаете оффер, если вам понравится команда, работа подойдет по условиям, а задачи — по скиллам.

Встречаемся 28 мая онлайн. Успейте подать заявку до 26 мая. В течение трех дней вернемся с обратной связью: https://l.tinkoff.ru/java-one-day-offer
👎17👍4
Сколько выделяется дополнительно памяти при вызове LinkedList.add()?

Создается один новый экземпляр вложенного класса Node.
👍14👎1
Сколько нужно времени, чтобы освоить востребованную профессию Java-программиста? Всего 10 месяцев! И начать можно бесплатно: https://clck.ru/h7jKs

Научим:
=> Писать код на Java, использовать фреймворки Javalin, Spring
=> Применять принципы ООП, работать с базами данным, SQL
=> Настраивать окружение: IDEA, Gradle/Maven, JDK
=> Пользоваться командной строкой и Git

Поможем:
=> Наработать практику — вы сделаете 5 проектов на GitHub
=> Грамотно оформить резюме
=> Подготовиться к собеседованиям

А еще порекомендуем в хорошие компании и познакомим с сообществом из 28 тысяч айтишников. Присоединяйтесь!
👎14👍3
🔑 Чем полезен Git Credential Manager? Обзор менеджера аутентификации для новичков и профессионалов

Обзор популярного менеджера аутентификации Git Credential Manager (GCM), обеспечивающего безопасную и удобную аутентификацию к репозиторию.

https://proglib.io/sh/yGKYarRFbH
👍2
#вопросы_с_собеседований
Оцените количество памяти на хранение одного примитива типа byte в LinkedList?

Каждый элемент LinkedList хранит ссылку на предыдущий элемент, следующий элемент и ссылку на данные.

 static class Node<E> {
E item;
Node<E> next;
Node<E> prev;
//...
}

Для 32-битных систем каждая ссылка занимает 32 бита (4 байта). Сам объект (заголовок) вложенного класса Node занимает 8 байт. 4 + 4 + 4 + 8 = 20 байт, а т.к. размер каждого объекта в Java кратен 8, соответственно получаем 24 байта. Примитив типа byte занимает 1 байт памяти, но в JCF примитивы упаковываются: объект типа Byte занимает в памяти 16 байт (8 байт на заголовок объекта, 1 байт на поле типа byte и 7 байт для кратности 8). Также напомню, что значения от -128 до 127 кэшируются и для них новые объекты каждый раз не создаются. Таким образом, в x32 JVM 24 байта тратятся на хранение одного элемента в списке и 16 байт - на хранение упакованного объекта типа Byte. Итого 40 байт.

Для 64-битной JVM каждая ссылка занимает 64 бита (8 байт), размер заголовка каждого объекта составляет 16 байт (два машинных слова). Вычисления аналогичны: 8 + 8 + 8 + 16 = 40байт и 24 байта. Итого 64 байта.
😱17👍12👎4
🛠 25 полезных малоизвестных интернет-ресурсов для фронтендера и бэкендера

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

https://proglib.io/sh/v3GP6WwUCe
👍12🔥2
#вопросы_с_собеседований
Назовите основные характеристики шаблонов проектирования.

Имя - все шаблоны имеют уникальное имя, служащее для их идентификации;
Назначение данного шаблона;
Задача - задача, которую шаблон позволяет решить;
Способ решения - способ, предлагаемый в шаблоне для решения задачи в том контексте, где этот шаблон был найден;
Участники - сущности, принимающие участие в решении задачи;
Следствия - последствия от использования шаблона как результат действий, выполняемых в шаблоне;
Реализация - возможный вариант реализации шаблона.
👎29👍5😁2
Привет!

Сбер начинает серию коротких вебинаров «5 минут на запуск»!

На встречах «без лишней воды» расскажут, как быстро начать работу в личном кабинете платформы SberCloud Advanced с запуска виртуального сервера или деплоя базы данных. Выбирайте тему любого из 4-х вебинаров и регистрируйтесь по ссылке.

1) Как запустить виртуальную машину за 5 минут

2) «Хостинг сайта в облаке: проще, чем кажется»

3) «5 минут на всё: скоростной деплой базы данных»

4) «Как быстро настроить облачное хранилище»

До встречи на интенсиве!
👎20👍11
#вопросы_с_собеседований
Оцените количество памяти на хранение одного примитива типа byte в ArrayList?

ArrayList
основан на массиве, для примитивных типов данных осуществляется автоматическая упаковка значения, поэтому 16 байт тратится на хранение упакованного объекта и 4 байта (8 для x64) - на хранение ссылки на этот объект в самой структуре данных. Таким образом, в x32 JVM 4 байта используются на хранение одного элемента и 16 байт - на хранение упакованного объекта типа Byte. Для x64 - 8 байт и 24 байта соответственно.
👍8
#вопросы_с_собеседований
Что позволяет сделать PriorityQueue?

Особенностью PriorityQueue является возможность управления порядком элементов. По-умолчанию, элементы сортируются с использованием «natural ordering», но это поведение может быть переопределено при помощи объекта Comparator, который задаётся при создании очереди. Данная коллекция не поддерживает null в качестве элементов.

Используя PriorityQueue, можно, например, реализовать алгоритм Дейкстры для поиска кратчайшего пути от одной вершины графа к другой. Либо для хранения объектов согласно определённого свойства.
👍8
#вопросы_с_собеседований
Для ArrayList или для LinkedList операция добавления элемента в середину (list.add(list.size()/2, newElement)) медленнее?

Для ArrayList:
• проверка массива на вместимость. Если вместимости недостаточно, то увеличение размера массива и копирование всех элементов в новый массив (O(N));
• копирование всех элементов, расположенных правее от позиции вставки, на одну позицию вправо (O(N));
• вставка элемента (O(1)).

Для LinkedList:
• поиск позиции вставки (O(N));
• вставка элемента (O(1)).

В худшем случае вставка в середину списка эффективнее для LinkedList. В остальных - скорее всего, для ArrayList, поскольку копирование элементов осуществляется за счет вызова быстрого системного метода System.arraycopy().
👍25👎3🔥1👏1