Forwarded from Библиотека собеса по Java | вопросы с собеседований
LinkedHashSet — это коллекция, обеспечивающая хранение уникальных элементов с сохранением порядка их вставки. LinkedHashSet, как и HashSet, работает с элементами за амортизированное O(1) время, но, в отличие от HashSet, сохраняет порядок добавления элементов благодаря дополнительной структуре связного списка.
🔹 Структура LinkedHashSet
LinkedHashSet базируется на HashMap, но имеет уникальную особенность — упорядочивание элементов за счёт использования связного списка поверх стандартной хеш-таблицы.
▪️ Хранение данных: LinkedHashSet использует LinkedHashMap для хранения элементов. Каждый добавляемый элемент выступает в роли ключа, а значение всегда фиксировано (обычно это объект-заглушка).
▪️ Связный список: Для поддержания порядка добавления, элементы связаны друг с другом в виде двусвязного списка. Это позволяет итерациям проходить элементы в порядке их вставки.
▪️ Уникальность элементов: Как и в HashSet, каждый элемент уникален. При попытке добавить дублирующий элемент он игнорируется, сохраняя уникальность всех значений.
🔹 Производительность
▪️ Добавление: Добавление элементов происходит за амортизированное O(1) время. LinkedHashSet вычисляет хэш элемента и индекс, где он будет храниться в массиве бакетов LinkedHashMap.
▪️ Удаление: Удаление происходит также за амортизированное O(1) время. LinkedHashSet находит элемент по хэшу, удаляет его из связного списка и освобождает место в корзине.
▪️ Поиск: Поиск происходит за амортизированное O(1) время благодаря хэш-таблице.
🔹 Использование памяти
LinkedHashSet требует немного больше памяти по сравнению с HashSet, так как хранит не только хэш-таблицу, но и двусвязный список, поддерживающий порядок добавления элементов. Это делает LinkedHashSet более затратным в плане памяти, особенно при большом количестве элементов.
🔹 Преимущества и недостатки
▪️ Преимущества:
- Сохранение порядка добавления элементов.
- Быстрая работа с элементами за амортизированное O(1) время, как и в HashSet.
▪️ Недостатки:
- Потребление ресурсов возрастает при большом количестве элементов, так как структура требует больше памяти для поддержания порядка.
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ — раз в год
🔥 — раз в 2-3 года
❤️ — раз в 5-6 лет
🌚 — работу можно менять?
Please open Telegram to view this post
VIEW IN TELEGRAM
Мы запустили свежий канал, где делимся идеями для дизайна интерфейсов. Всё самое стильное, оригинальное и вдохновляющее теперь в одном месте.
📌 Чем полезен канал?
→ Идеи для дизайна интерфейсов.
→ Анимации, которые можно повторить или адаптировать.
→ Лёгкий способ искать вдохновение перед новым проектом.
👉 Подписывайтесь и вдохновляйтесь: UX in GIF
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека девопса | DevOps, SRE, Sysadmin
👔❌ Слишком молодой, слишком опытный: 9 причин, почему вам могут отказать после собеседования
Собеседование прошло гладко: вы подготовились, уверенно ответили на все вопросы, проявили заинтересованность и даже получили положительный фидбек. Но вместо долгожданного оффера — отказ. Почему так произошло? На самом деле, отказ может быть вызван множеством причин: от излишнего опыта до неудачной коммуникации с рекрутером.
В этой статье разобрали 9 наиболее распространённых причин, по которым кандидаты не получают работу после интервью. Это не всегда связано с вашими навыками — иногда проблема в ожиданиях компании или внутренних процессах. Узнайте, как избежать подобных ситуаций и повысить свои шансы на успех!
📎 Разобраться в причинах
Собеседование прошло гладко: вы подготовились, уверенно ответили на все вопросы, проявили заинтересованность и даже получили положительный фидбек. Но вместо долгожданного оффера — отказ. Почему так произошло? На самом деле, отказ может быть вызван множеством причин: от излишнего опыта до неудачной коммуникации с рекрутером.
В этой статье разобрали 9 наиболее распространённых причин, по которым кандидаты не получают работу после интервью. Это не всегда связано с вашими навыками — иногда проблема в ожиданиях компании или внутренних процессах. Узнайте, как избежать подобных ситуаций и повысить свои шансы на успех!
Please open Telegram to view this post
VIEW IN TELEGRAM
JetBrains выпустили новую версию IntelliJ IDEA 2024.3, и она порадовала рядом полезных фич. Вот самые интересные моменты релиза:
Теперь окно со структурой проекта показывает не только физическое расположение файлов, но и логическую структуру. Например, если вы работаете с контроллером в Spring, то прямо в этом окне можно увидеть список эндпоинтов и их привязку.
Новый AI-помощник теперь обладает улучшенной контекстной осведомленностью и может помогать при работе с VCS и отладкой кода. Это ускоряет процесс написания и анализа кода благодаря интеллектуальным подсказкам и оптимизациям.
Отладка стала еще мощнее: улучшенная функция HotSwap позволяет быстрее обновлять код во время отладки.
Улучшена поддержка новых возможностей Kotlin, а также дебаггинг нативных изображений GraalVM, что упрощает работу с мультиплатформенными приложениями.
Это лишь краткий обзор интересных новинок. Ознакомиться со всеми подробностями релиза можно в официальном блоге JetBrains.
Please open Telegram to view this post
VIEW IN TELEGRAM
BeanPostProcessor — это интерфейс из Spring Framework, который позволяет вмешиваться в процесс создания и инициализации бинов в Spring контейнере. Он предоставляет два основных метода, которые вызываются на разных этапах жизненного цикла бина:
▪️ postProcessBeforeInitialization(Object bean, String beanName) - вызывается до того, как бин будет инициализирован (до вызова метода @PostConstruct или InitializingBean#afterPropertiesSet).
▪️ postProcessAfterInitialization(Object bean, String beanName) - вызывается после инициализации бина (после завершения всех инициализационных методов).
Зачем нужен BeanPostProcessor?
Он используется для дополнительной обработки и кастомизации бинов после их создания, но до передачи клиентскому коду. Примеры:
- Добавление проксирования бинов (например, для AOP или транзакций).
- Валидация или изменение свойств бинов.
- Логирование жизненного цикла.
- Добавление кастомных аннотаций.
- Обработка маркерных интерфейсов.
Как это работает?
@Component
public class CustomBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) {
System.out.println("Before Initialization: " + beanName);
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) {
System.out.println("After Initialization: " + beanName);
return bean;
}
}
Результат: Вывод сообщений о каждом бине до и после инициализации.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Java jobs — вакансии для java-разработчиков
#дайджест #Javadevjob
Вакансии Java разработчиков уровня Junior
▪️ Java developer
Гибрид (Москва, Санкт-Петербург, Екатеринбург), beeline
Подробнее
▪️ Junior Java-разработчик
Офис (Москва), Gridnine
Подробнее
Вакансии Java разработчиков уровня Middle
▪️ Java разработчик
Удалёнка, Comitas
Подробнее
▪️ Middle Java разработчик
Гибрид (Москва, Краснодар, Санкт-Петербург, Иннополис) / Удалёнка (РФ), Магнит
Подробнее
Вакансии Java разработчиков уровня Senior
▪️ Senior Java developer
Офис (Москва, Липецк), НЛМК ИТ
Подробнее
▪️ Senior Java разработчик
Удалёнка, МегаФон
Подробнее
Понравились вакансии?
❤️ — да
🤔 — нет
Вакансии Java разработчиков уровня Junior
▪️ Java developer
Гибрид (Москва, Санкт-Петербург, Екатеринбург), beeline
Подробнее
▪️ Junior Java-разработчик
Офис (Москва), Gridnine
Подробнее
Вакансии Java разработчиков уровня Middle
▪️ Java разработчик
Удалёнка, Comitas
Подробнее
▪️ Middle Java разработчик
Гибрид (Москва, Краснодар, Санкт-Петербург, Иннополис) / Удалёнка (РФ), Магнит
Подробнее
Вакансии Java разработчиков уровня Senior
▪️ Senior Java developer
Офис (Москва, Липецк), НЛМК ИТ
Подробнее
▪️ Senior Java разработчик
Удалёнка, МегаФон
Подробнее
Понравились вакансии?
❤️ — да
🤔 — нет
Habr
Вакансия «Java developer» в городах Москва, Санкт-Петербург и Екатеринбург, работа в компании «beeline» — Хабр Карьера
Вакансия «Java developer» в городах Москва, Санкт-Петербург и Екатеринбург, работа в компании «beeline». Полная занятость. Можно удаленно. Вакансия в архиве.
BeanFactoryPostProcessor — это интерфейс из Spring Framework, который позволяет вмешиваться в процесс создания бинов в BeanFactory до их инициализации, но после того, как Spring их создал. Он предоставляет один основной метод:
▪️ postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) — вызывается до инициализации бинов. В этом методе можно изменять конфигурацию бинов, например, добавлять или изменять их свойства, влиять на их типы или даже на порядок их создания.
Зачем нужен BeanFactoryPostProcessor?
Он используется для того, чтобы дать возможность кастомизировать настройки Spring контейнера, не вмешиваясь в сам процесс создания объектов. Примеры:
- Изменение параметров конфигурации бинов, которые уже были определены в контексте.
- Использование кастомных значений или свойств для бинов до их создания.
- Управление зависимостями на уровне контейнера.
- Добавление пользовательских конфигураций, таких как создание собственных PropertyEditors или манипуляции с BeanDefinition.
Как это работает?
Пример реализации:
@Component
public class CustomBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {
// Пример изменения beanDefinition
BeanDefinition beanDefinition = beanFactory.getBeanDefinition("someBean");
beanDefinition.getPropertyValues().add("someProperty", "newValue");
}
}
В этом примере изменяются настройки существующего бина до его создания, что позволяет управлять его поведением в контейнере.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека задач по Java | тесты, код, задания
Forwarded from Библиотека задач по Java | тесты, код, задания
Сколько объектов станут доступны для сборщика мусора после удаления ссылки на сет?
Anonymous Quiz
15%
0
18%
1
12%
2
17%
3
39%
4
🔥 Spring Data JPA
👍🏼 Hibernate
⚡️ JDBC
❤️ MyBatis
👾 JOOQ
Please open Telegram to view this post
VIEW IN TELEGRAM
ConcurrentSkipListMap — это потокобезопасная и отсортированная реализация интерфейса NavigableMap, которая работает на основе skip list (списка с пропусками). Skip list — это многослойная структура данных, состоящая из нескольких уровней связных списков: нижний уровень содержит все элементы в порядке сортировки, а верхние уровни — лишь часть элементов для ускорения поиска. При добавлении элемента случайно выбирается его "высота" (количество уровней, на которых он присутствует), что позволяет "перепрыгивать" через блоки данных на верхних уровнях и выполнять операции со сложностью O(log n).
Пример структуры:
lvl 3: 1 ------ 8
lvl 2: 1 --- 7 -- 8
lvl 1: 1 - 3 - 7 - 8 - 10
🔹 Skip List: Многослойный список с пропусками, где верхние уровни помогают быстро достигать нужного диапазона элементов, снижая количество переходов по связям.
🔹 Потокобезопасность обеспечивается за счёт использования CAS (Compare-And-Swap) операций и минимального блокирования. Модификации происходят безопасно без полной блокировки структуры.
🔹 Элементы всегда хранятся в отсортированном порядке по их ключам, что позволяет выполнять операции вроде поиска диапазонов или итераций по упорядоченным ключам очень эффективно.
🔹 Высокая доступность: чтение не блокируется, даже если выполняются параллельные операции вставки или удаления.
▪️ Операции чтения (например, get или containsKey) выполняются быстро и без блокировок благодаря структуре skip list.
▪️ Операции записи (например, put и remove) синхронизированы, но производительность сохраняется за счёт оптимизации с использованием CAS.
▪️ Поддерживает натуральный порядок ключей или порядок, определённый переданным компаратором.
▪️ Эффективен для сценариев, где важны отсортированные данные и параллельный доступ, но количество обновлений не слишком велико.
🚀 Когда использовать ConcurrentSkipListMap?
- Если нужен параллельный доступ к отсортированной мапе.
- Для обработки диапазонов данных или частых операций чтения в упорядоченном виде.
Please open Telegram to view this post
VIEW IN TELEGRAM
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
❗Вакансии «Библиотеки программиста» — ждем вас в команде!
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов
👉Переводчик и автор оригинальных статей
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов
👉Переводчик и автор оригинальных статей
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
job.proglib.io
Вакансии в медиа «Библиотека программиста»
Количество проектов в редакции постоянно растет, так что нам всегда нужны специалисты
Forwarded from Библиотека питониста | Python, Django, Flask
🌐 Как работает GraphQL и чем он лучше RESTful API
GraphQL не следует путать с SQL — он не используется для прямых запросов к таблицам базы данных. GraphQL — это, скорее, формат или структура, которая задаёт контракт между клиентом и сервером API. Его можно рассматривать как спецификацию или новый стандарт API, похожий на REST, но более эффективный и гибкий.
В новой статье делаем детальный разбор преимуществ и недостатков GraphQL с примерами кода. Помогаем понять, стоит ли переходить на эту технологию в вашем проекте.
👉 Читать по этой ссылке
В новой статье делаем детальный разбор преимуществ и недостатков GraphQL с примерами кода. Помогаем понять, стоит ли переходить на эту технологию в вашем проекте.
👉 Читать по этой ссылке
👑🧟 Король спама: насколько сильно ты бесишь коллег в рабочих чатах
Признайся, ты тоже иногда отправляешь голосовые сообщения из маршрутки? Или может быть, ты тот самый человек, который пишет «Привет» и исчезает на час? Всего 10 вопросов, которые помогут понять, являешься ли ты мастером цифрового этикета или главным спамером офиса. Готов узнать правду?
👉 Пройти тест
Признайся, ты тоже иногда отправляешь голосовые сообщения из маршрутки? Или может быть, ты тот самый человек, который пишет «Привет» и исчезает на час? Всего 10 вопросов, которые помогут понять, являешься ли ты мастером цифрового этикета или главным спамером офиса. Готов узнать правду?
👉 Пройти тест
Задумывались ли вы, как одна небольшая опечатка в коде может привести к неожиданным последствиям?
Представьте, что ваше приложение внезапно начинает показывать даты, сдвинутые на год вперёд. Причина? Всего лишь одна заглавная буква вместо строчной.
Подробнее о том, как избежать подводных камней при работе с датой в статье.
Please open Telegram to view this post
VIEW IN TELEGRAM