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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
#вопросы_с_собеседований
Какое худшее время работы метода contains() для элемента, который есть в LinkedList?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

https://proglib.io/sh/yGKYarRFbH
#вопросы_с_собеседований
Оцените количество памяти на хранение одного примитива типа 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 байта.
🛠 25 полезных малоизвестных интернет-ресурсов для фронтендера и бэкендера

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Insentry – разработчик решений в области интеллектуальных систем видеонаблюдения и видеоаналитики – приглашает в команду Java-разработчиков.
 
Мы предлагаем стандартный мотивационный набор:
• Гибридный формат работы (оффлайн/удаленно), офис в Москва Сити
• Конкурентная зарплата, ДМС
• Большие и интересные проекты для крупнейших заказчиков
 
Если вы разрабатываете на Java более 3 лет, обладаете уверенными знаниями SQL, ООП, узнайте подробности о нас и откликнитесь на вакансию __по ссылке__ или напишите @akoroleva13.
 
А, если вы, помимо вышесказанного, также владеете основными пакетами Spring Framework, React и смежными технологиями и/или имеете опыт использования Hibernate или других ORM-фреймворков, то мы призываем вас связаться с нами __так__ или @akoroleva13.
 
#вопросы_с_собеседований
В реализации класса ArrayList есть следующие поля: Object[] elementData, int size. Объясните, зачем хранить отдельно size, если всегда можно взять elementData.length?

Размер массива elementData представляет собой вместимость (capacity) ArrayList, которая всегда больше переменной size - реального количества хранимых элементов. При необходимости вместимость автоматически возрастает.
👷 Кто такой архитектор решений и как им стать: дорожная карта

Какими навыками должен обладать Solution Architect и как их развить? Постарались собрать все ответы в нашей дорожной карте.

https://proglib.io/sh/BcXkEOfSoi