uz
Feedback
Библиотека собеса по Java | вопросы с собеседований

Библиотека собеса по Java | вопросы с собеседований

Kanalga Telegram’da o‘tish

Вопросы с собеседований по Java и ответы на них. По рекламе: @proglib_adv Учиться у нас: clc.to/3wECtA Для обратной связи: @proglibrary_feeedback_bot

Ko'proq ko'rsatish
6 463
Obunachilar
+124 soatlar
-47 kunlar
-1430 kunlar
Postlar arxiv
Что такое CORS-атака? CORS-атака (Cross-Origin Resource Sharing attack) — это эксплуатация неправильных настроек CORS, позволяющая злоумышленнику получить доступ к защищённым данным с другого домена. ⚙️ Как это работает Браузеры ограничивают выполнение запросов между разными источниками (same-origin policy). CORS (Cross-Origin Resource Sharing) позволяет ослабить эти ограничения. Если сервер неправильно настроен, злоумышленник может отправить вредоносный запрос от имени жертвы и похитить данные. 🔐 Как защититься — Явно указывать доверенные источники в Access-Control-Allow-Origin — Использовать строгую проверку Access-Control-Allow-Credentials — Отключать небезопасные методы (PUT, DELETE, OPTIONS), если они не нужны — Проверять Origin на сервере, а не только в заголовках CORS 🐸 Библиотека собеса по Java

😧 58% IT-специалистов страдают: психология успеха и борьба с синдромом самозванца Синдром самозванца — не просто модный терм
😧 58% IT-специалистов страдают: психология успеха и борьба с синдромом самозванца Синдром самозванца — не просто модный термин, а реальная проблема, с которой сталкиваются даже опытные разработчики. Почему так происходит и как с этим бороться? Разбираемся в причинах «стандартной болезни айтишников» ➡️ Читайте в статье Спойлер: дело не в навыках, а в психологии успеха 🐸Библиотека шарписта

🏃‍♀️ 40+ каналов, которые должен читать каждый разработчик Отобрали для вас полезные и проверенные каналы для программистов — в них вы найдете все самое интересное, от технических новостей до практических гайдов. IT Job Hub | Работа и вакансии в IT — избранные IT-вакансии Библиотека программиста — новости из мира IT и технологий Книги для программистов — самые годные книги по любым языкам и стекам IT-мемы — мемы про жизу айтишника Proglib Academy — обучение и курсы, чтобы стать топовым специалистом Азбука айтишника — азы из мира разработки Библиотека нейросетей — лайфхаки и промпты для разных задач, баттлы нейронок и новости из мира ИИ Библиотека фронтендера — все о JS, React, Angular и не только Библиотека мобильного разработчика — лайфхаки и новости из мира Swift и Kotlin Библиотека хакера — уязвимости, атаки, бэкдоры и как от них защититься Библиотека тестировщика — самое интересное о том, как крашить код 🦫 Go Библиотека Go-разработчика Библиотека задач по Go Библиотека Go для собеса Вакансии по Go #️⃣ C# Библиотека шарписта Библиотека задач по C# Библиотека собеса по C# Вакансии по C# 🔧 DevOps Библиотека devops’а Библиотека задач по DevOps Библиотека собеса по DevOps Вакансии по DevOps & SRE 🐘 PHP Библиотека пхпшника Библиотека задач по PHP Библиотека PHP для собеса Вакансии по PHP, Symfony, Laravel 🐍 Python Библиотека питониста Библиотека Python для собеса Библиотека задач по Python Вакансии по питону, Django, Flask ☕️ Java Библиотека джависта Библиотека задач по Java Библиотека Java для собеса Вакансии по Java 📊 Data Science Библиотека дата-сайентиста Библиотека задач по Data Science Библиотека Data Science для собеса Вакансии по Data Science 🎮 C++ Библиотека C/C++ разработчика Библиотека задач по C++ Библиотека C++ для собеса Вакансии по C++ Подписывайтесь на интересные вам каналы и сохраняйте пост в закладки, чтобы не потерять 🔑

Расскажите о паттерне Proxy? Proxy (Заместитель) — это структурный паттерн, который подставляет объект-заместитель вместо реального объекта для управления доступом к нему. 🔹 Когда использовать — Нужно контролировать доступ к объекту (например, кеширование, логирование, контроль прав). — Создание объекта дорогое, и его инициализацию стоит отложить (Lazy Initialization). — Требуется добавление дополнительной логики перед/после вызова методов объекта. 🔹 Типы Proxy 1. Virtual Proxy — ленивое создание объекта (например, подгрузка больших данных). 2. Protection Proxy — контроль доступа (например, права пользователей). 3. Remote Proxy — доступ к удалённому объекту (RMI, REST). 4. Logging Proxy — логирование вызовов. ⚠️ Proxy не меняет интерфейс объекта, а просто управляет доступом к нему. 🐸 Библиотека собеса по Java

В чем разница между проверяемыми и непроверяемыми исключениями? Проверяемые исключения (Checked Exceptions) — это исключения, которые компилятор требует обработать (try-catch или throws). Они наследуются от Exception, но не от RuntimeException. Примеры: IOException, SQLException. Нужны для предупреждения ошибок, которые предсказуемы, но неизбежны. Непроверяемые исключения (Unchecked Exceptions) — это исключения, которые не требуют явной обработки, компилятор их не проверяет. Они наследуются от RuntimeException и могут возникать в любом месте программы. Примеры: NullPointerException, ArrayIndexOutOfBoundsException. Возникают из-за ошибок разработчика, как правило, а не связаны с внешними условиями. 🐸 Библиотека собеса по Java

Чем отличается абстрактный класс от интерфейса? Абстрактный класс может содержать как абстрактные, так и конкретные методы, а интерфейс до Java 8 мог содержать только абстрактные методы (с Java 8 появились default и static методы). 🔹 Наследование: класс может наследоваться только от одного абстрактного класса, но реализовать несколько интерфейсов. 🔹 Модификаторы: методы интерфейса по умолчанию public, а в абстрактном классе можно использовать разные модификаторы доступа. 🔹 Поля: интерфейс содержит только public static final (константы), а абстрактный класс может иметь обычные поля. 🔹 Когда использовать Абстрактный класс — если есть частичная реализация или состояние. Интерфейс — если нужна контрактная функциональность без реализации. 🐸 Библиотека собеса по Java

Что такое стек-трейс? Стек-трейс (stack trace) — это последовательность вызовов методов в стеке выполнения программы на момент возникновения ошибки. Он показывает путь, по которому код дошел до исключения, и помогает отлаживать программы. 🔹 Что даёт стек-трейс — Помогает быстро найти причину ошибки — Показывает путь выполнения программы — Позволяет глубже понимать код и его логику 🐸 Библиотека собеса по Java

Как работает CopyOnWriteArrayList? CopyOnWriteArrayList — это потокобезопасная реализация List, в которой изменения происходят на копии массива. 🔹 Чтение (get, contains) выполняется без блокировок, т.к. работает с неизменяемым массивом. 🔹 Запись (add, set, remove) создает новую копию массива, где применяются изменения, а затем заменяет старый массив. ✔️ Плюсы — Отлично подходит для сценариев, где чтение преобладает над записью. — Не требует внешней синхронизации. Минусы — При больших объемах данных запись дорогая по памяти и производительности. — Итераторы работают с старой версией массива, поэтому изменения после их создания не видны (fail-safe). 🐸 Библиотека собеса по Java

Какие существуют состояния потока? Thread может находиться в одном из следующих состояний (Thread.State): 1️⃣ NEW — поток создан, но еще не запущен. 2️⃣ RUNNABLE — поток готов к выполнению, но может ожидать процессорное время. 3️⃣ BLOCKED — поток ждет освобождения монитора для входа в synchronized блок. 4️⃣ WAITING — поток ожидает сигнал без тайм-аута. 5️⃣ TIMED_WAITING — поток ожидает, но с ограничением по времени. 6️⃣ TERMINATED — поток завершил выполнение. 🐸 Библиотека собеса по Java

Что такое сигнатура метода в Java? Сигнатура метода — это его уникальная идентификация в рамках класса, включающая имя метода и список параметров (их порядок и типы). Возвращаемый тип и модификаторы доступа не входят в сигнатуру. Именно благодаря сигнатуре JVM определяет, какие методы можно перегружать (overloading). ⚠️ Два метода с одинаковой сигнатурой в одном классе не могут существовать. 🐸 Библиотека собеса по Java

Что собой представляет Сага? Сага — это паттерн управления распределенными транзакциями, применяемый в микросервисной архитектуре. Он позволяет разбить большую транзакцию на последовательность локальных шагов, каждый из которых выполняется независимо и имеет свой компенсирующий шаг на случай ошибки. 🔹 Реализации 1. Оркестровая — централизованный координатор управляет шагами 2. Хореографическая — шаги взаимодействуют напрямую, реагируя на события друг друга 🔹 Использование 1. Разработка микросервисов 2. Разработка распределенных систем 3. Разработка приложения с бизнес-процессами с долгоживущими транзакциями 🐸 Библиотека собеса по Java

Как избежать Memory Leak? Основные причины утечек памяти — это длительно живущие ссылки, которые мешают сборщику мусора освободить ненужные объекты. Чаще всего это происходит из-за неправильного использования статических коллекций, кешей или слушателей, которые не удаляются после использования. Также стоит следить за ресурсами вроде файлов, соединений с БД и потоков, гарантируя их закрытие через try-with-resources. Отладить проблему помогают профилировщики памяти, такие как VisualVM или Eclipse MAT, анализирующие heap dump и выявляющие утечки. 💬 С какой незаметной утечкой вы сталкивались? 🐸 Библиотека собеса по Java

🎉 Поздравляем с 8 марта Сегодня отмечаем вклад девушек-разработчиков, аналитиков, тестировщиков, тимлидов и всех, кто влюблё
🎉 Поздравляем с 8 марта Сегодня отмечаем вклад девушек-разработчиков, аналитиков, тестировщиков, тимлидов и всех, кто влюблён в код. Без вас IT не было бы таким, каким мы его знаем. С праздником, коллеги 💐 Женщины оставили огромный след в истории IT. Если вам кажется, что программирование — это исключительно «мужская территория», взгляните, вот лишь несколько легендарных женщин: 🔹 Ада Лавлейс — автор первой компьютерной программы ещё в 19 веке. 🔹 Грейс Хоппер — создала первый компилятор и популяризировала термин «баг». 🔹 Барбара Лисков — её принцип Liskov Substitution является основой ООП, в том числе в Java. 🔹 Эдит Кларк — первая женщина-инженер, внесшая вклад в вычислительные методы в энергетике. 🔹 Маргарет Гамильтон — разработала софт для посадки «Аполлона-11» на Луну. А это только малая часть. В статье собраны ещё больше вдохновляющих историй. 🔗 Подробнее в статье 🐸 Библиотека джависта

⚙️ Как работает API
Proglib рассказывает базу в формате рилса

🤝 💼 IT-конференции: как сходить на мероприятие и извлечь из него максимум пользы 🚀 IT-конференции — это не только про кофе
🤝 💼 IT-конференции: как сходить на мероприятие и извлечь из него максимум пользы 🚀 IT-конференции — это не только про кофе-брейки и бесплатные стикеры. Это шанс завести полезные знакомства, узнать инсайдерскую информацию и найти новые карьерные возможности. Но для этого нужно не просто прийти, а правильно подготовиться и ловить важные моменты. Как извлечь из мероприятия максимум пользы? Как сделать так, чтобы оно дало не только эмоции, но и реальные бонусы для вашей карьеры? 🔗 Подробнее в статье 🐸 Библиотека джависта

Что происходит, если в Spring Bean с @Scope("prototype") внедрить другой Bean с @Scope("singleton")? В prototype-Bean будет всегда один и тот же экземпляр singleton-Bean, так как Singleton создаётся один раз при запуске контекста Spring и переиспользуется во всех зависимостях.

В чём разница между Comparator и Comparable? ▪️ Comparable используется для естественного порядка объектов. Класс, реализующий Comparable, должен переопределять метод compareTo(T o), который определяет порядок сортировки. ▪️ Comparator применяется, когда требуется несколько способов сортировки или невозможно изменить код сравниваемого класса. Он реализует метод compare(T o1, T o2). 📌 Главные отличия — Comparable встраивается в сам класс, Comparator – это отдельный класс. — Comparable задаёт естественный порядок, Comparator позволяет кастомизировать сортировку.

Что такое Serial Garbage Collector? Serial GC — это однопоточный сборщик мусора, работающий по принципу "Stop-the-World". Он останавливает выполнение всех потоков во время сборки мусора и использует копирующий алгоритм для молодых поколений (Young Gen) и компактирующий алгоритм для старших (Old Gen). 🔹 Как работает 1️⃣ В молодом поколении (Minor GC) используется копирующая стратегия: выжившие объекты перемещаются из Eden в Survivor, а из Survivor в Old Gen. 2️⃣ В старом поколении (Major GC / Full GC) выполняется уплотнение памяти для уменьшения фрагментации. 3️⃣ Так как GC работает в одном потоке, во время сборки остановка приложения неизбежна. 🔹 Когда использоватьВ одноядерных системах или при ограниченных ресурсах, где многопоточный GC создаст больше нагрузки. — В маленьких JVM (до 1-2 ГБ памяти), где G1 или Parallel GC будут избыточны. — В приложениях без жестких требований к паузам, например, в небольших утилитах или CLI-инструментах.

Какие проблемы могут возникнуть при использовании synchronized, и как их решать? 1️⃣ Блокировки (Blocking) — Потоки, ожидающие освобождения блокировки, простаивают, что снижает производительность. Решение: использовать ReentrantLock, который позволяет гибко управлять блокировками, включая таймауты и прерывания. 2️⃣ Взаимная блокировка (Deadlock) — Возникает, когда два потока блокируют друг друга, ожидая освобождения ресурсов. — Решение: явный порядок блокировки, использование tryLock() с таймаутом 3️⃣ Отсутствие гибкости — Synchronized не дает возможности проверки состояния блокировки. — Решение: Использовать Lock, который позволяет проверить, занята ли блокировка (isLocked()) и настроить приоритет выполнения. 4️⃣ Проблема ложного пробуждения (Spurious Wakeup) — Поток может быть пробужден без явного вызова notify(). — Решение: всегда использовать while, а не if при ожидании wait().

👀 Задача: Разработка высоконагруженного сервиса кеширования (middle+) В компании возникла необходимость повысить производите
+1
👀 Задача: Разработка высоконагруженного сервиса кеширования (middle+) В компании возникла необходимость повысить производительность системы за счёт внедрения распределённого кеша. Ваша задача — спроектировать и реализовать высоконагруженный сервис кеширования, обеспечивающий быструю и надёжную работу в условиях интенсивного использования. ▪️ Условия: 1. Высокая доступность: сервис должен быть устойчив к сбоям и обеспечивать непрерывную работу. 2. Масштабируемость: возможность горизонтального масштабирования для обработки увеличивающегося объёма данных. 3. Консистентность данных: обеспечение согласованности данных между узлами кеша. 4. Управление устареванием: реализация механизма автоматического удаления устаревших данных из кеша. 💡 Ключевые моменты: — Выбор технологии: определение подходящего решения для распределённого кеширования (например, Redis, Memcached или собственная реализация). — Репликация и шардирование: обеспечение надёжности и производительности через распределение данных и их дублирование. — Алгоритмы замещения: выбор и реализация стратегий удаления устаревших или редко используемых данных (например, LRU, LFU). ✔️ Решение: Использовать Redis в режиме кластеризации для обеспечения распределённого хранения данных. Настроить репликацию для повышения отказоустойчивости и реализовать механизм шардирования для равномерного распределения нагрузки. Применить алгоритм LRU (Least Recently Used) для автоматического удаления устаревших данных. Внедрить системы мониторинга (например, Prometheus) и логирования для оперативного отслеживания состояния кеша и быстрого реагирования на возможные проблемы. Реализация на картинке 👆🏻