Библиотека собеса по Java | вопросы с собеседований
6.28K subscribers
374 photos
6 videos
337 links
Вопросы с собеседований по Java и ответы на них.

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

Учиться у нас: https://proglib.io/w/08c603b6

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Зачем нужен Docker?

Docker нужен для контейнеризации приложений, что позволяет запускать их в изолированных средах — контейнерах. Это делает процесс разработки, тестирования и развертывания приложений проще и более предсказуемым.

Основные преимущества Docker:

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

— Портативность: контейнеры одинаково работают как на локальной машине, так и на сервере или в облаке. Это устраняет проблему "на моем компьютере работает".

— Легкость в развертывании: контейнеры запускаются быстро, что упрощает CI/CD процессы и автоматизацию развертывания.

— Управление зависимостями: все нужные для приложения зависимости находятся в одном контейнере, что предотвращает конфликты версий.

— Масштабируемость: Docker позволяет легко масштабировать приложение, добавляя или убирая контейнеры, что особенно полезно для микросервисных архитектур.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2👏2
Почему Java считается платформонезависимым языком?

Потому что скомпилированный байт-код исполняется на JVM (Java Virtual Machine), а не напрямую на операционной системе. JVM реализуется под разные платформы, и именно она берёт на себя взаимодействие с ОС. В результате один и тот же .class файл можно запустить на любой системе, где установлена соответствующая JVM.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥21
Зачем в JVM нужен JIT-компилятор?

JIT (Just-In-Time) компилятор нужен для повышения производительности программ. Он компилирует байт-код в нативный машинный код во время выполнения, чтобы избежать повторной интерпретации часто вызываемых участков кода.

Дополнительно JIT оптимизирует код на основе анализа профиля исполнения (inlining, loop unrolling, dead code elimination и пр.), что невозможно сделать при обычной интерпретации.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍102🔥1👾1
Чем @Bean отличается от @Component в Spring?

▪️ @Component вешается над классомSpring сам создаёт его экземпляр через сканирование пакетов (@ComponentScan).

▪️ @Bean ставится над методом в @Configurationвы сами создаёте объект внутри метода и возвращаете его.

@Bean полезен, когда:

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

Оба способа регистрируют бин в ApplicationContext, разница только в том, кто и как создаёт объект.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍143🔥1
Внедрение зависимостей через конструктор vs @Autowired на поле?

Внедрение через конструктор предпочтительнее — оно гарантирует, что объект не будет создан без необходимых зависимостей, и делает класс проще для тестирования. При использовании @Autowired на поле Spring внедряет зависимость уже после создания объекта, что может привести к созданию частично инициализированных бинов.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤‍🔥2🔥2
В чём разница между IO и NIO?

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

NIO (New IO) был введён в JDK 1.4 для улучшения производительности, предлагая неблокирующие каналы и буферы, а также поддержку асинхронных операций, что позволяет эффективно работать с большими объёмами данных или многими соединениями одновременно.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍115🔥2
Чем отличается аутентификация от авторизации?

Аутентификация — это процесс проверки подлинности пользователя. Он заключается в подтверждении, что пользователь — это именно тот, за кого себя выдаёт, с помощью таких данных, как логин и пароль, биометрия или двухфакторная аутентификация.

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

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍142🔥2
💬 Обратная связь

Ваше мнение по контенту:

🔥 — Всё супер
👍🏼 — Нормально
😁 — Есть предложения по улучшению (в комменты)

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥50👍16😁2
Что такое Spring Bean и как Spring управляет его жизненным циклом?

Spring Bean — это объект, управляемый контейнером Spring, который создается, конфигурируется и управляется через инверсию управления (IoC). Bean может быть зарегистрирован в контейнере через XML-конфигурацию, аннотации или Java-конфигурацию.

Жизненный цикл Spring Bean включает несколько этапов:

🔹 Создание: когда приложение запускается, Spring контейнер создает экземпляры всех бинов, которые были объявлены в конфигурации.

🔹 Инъекция зависимостей: после создания Spring выполняет инъекцию зависимостей в бин, если это указано в конфигурации.

🔹 Инициализация: если бин имеет метод инициализации (например, с аннотацией @PostConstruct или через конфигурацию init-method), этот метод будет вызван после того, как все зависимости будут инжектированы.

🔹 Использование: бин доступен для использования в приложении.

🔹 Завершение (уничтожение): когда контейнер Spring завершает свою работу или бин больше не нужен, Spring вызывает метод разрушения (например, с аннотацией @PreDestroy или через конфигурацию destroy-method), если такой метод был задан.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍102🔥1
🚀 Главная ошибка новичка в ML — строить звездолёт вместо велосипеда

Многие сразу хотят свою Midjourney, но в итоге получают только выгорание.

Успех начинается с «велосипеда»: научитесь предсказывать цены или классифицировать отзывы. Освойте базу, а уже потом стройте «звездолёты».

Наш курс «ML для старта в Data Science» — это и есть тот самый правильный старт от простого к сложному.

👉 Начните правильно

Берёте курс «ML для старта» до конца недели — Python в подарок.

А 21 августа пройдет бесплатный вебинар с Марией Жаровой: узнаете, какие проекты качают скилл, а какие качают ваши нервы.

А какой самый сложный проект вы брались делать в самом начале? 🫢
Что такое volatile и когда его стоит использовать?

volatile — это модификатор переменной, который гарантирует:

▪️ Видимость изменений между потоками
▪️ Запрет кэширования в регистре потока

Использовать стоит, когда:

▪️ Есть несколько потоков, которые читают/пишут одну переменную.
▪️ Нет сложных операций над этой переменной (например, инкрементов, которые требуют атомарности).

volatile не обеспечивает атомарности, поэтому для операций «чтение-модификация-запись» нужны синхронизация или атомарные типы (AtomicInteger, AtomicReference и т.п.).

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍4🔥1
Что такое переопределение метода?

Переопределение метода (method overriding) — это определение в подклассе метода с такой же сигнатурой, как у метода в родительском классе, с целью изменить или дополнить его поведение.

Основные моменты:

Метод родителя должен быть доступен для переопределения (не private и не final).
Используется аннотация @Override для явного указания намерения.
При переопределении учитываются правила ковариантного возвращаемого типа (можно вернуть более специфичный тип).
Динамическое связывание (runtime polymorphism) обеспечивает вызов версии метода из реального типа объекта, а не по ссылке.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62🔥1
😎 Вы просили — мы сделали. Самый долгожданный анонс этого лета!

Мы открываем набор на второй поток курса «AI-агенты для DS-специалистов»!

На курсе мы учим главному навыку 2025 года: не просто «болтать» с LLM, а строить из них рабочие системы с помощью Ollama, RAG, LangChain и crew.ai.

📆 Старт потока — 15 сентября.

💸 Цена 49 000 ₽ действует только в эти выходные — до 17 августа. С понедельника будет дороже.

👉 Занять место
💬 Обратная связь

Ежемесячный опрос по грейдам. Проверим, выросло ли число senior'ов.
Ваш грейд:

🔥 — Senior
👍🏼 — Middle
❤️ — Junior
😁 — Ещё учусь

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
😁35👍30🔥2220
Для чего нужно ключевое слово default?

default используется в интерфейсах для объявления метода с реализацией по умолчанию. Это позволяет интерфейсам эволюционировать, не нарушая совместимость с уже существующими реализациями.

В switch-операторах default определяет блок кода, который выполняется, если не совпал ни один case.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍102🔥1
🔥 Последняя неделя, чтобы забрать курс по AI-агентам по старой цене!

Пока вы тестируете Copilot, другие уже учатся строить AI-агентов, которые реально работают на бизнес. Хватит отставать!

Наш курс — это концентрат практики по LangChain и RAG. Улучшенная версия, доработанная по отзывам первого потока.

📆 Старт — 15 сентября.

💸 Цена 49 000 ₽ — только до 24 августа.

👉 Зафиксировать цену
В чём разница между Statement и PreparedStatement?

— Statement используется для выполнения простых SQL-запросов без параметров. Он формирует запрос как строку и каждый раз компилирует его заново, что может быть медленно и небезопасно.

— PreparedStatement предварительно компилируется базой данных и позволяет задавать параметры через плейсхолдеры. Что повышает производительность при многократном выполнении одного запроса и защищает от SQL-инъекций (данные не конкатенируются со строкой запроса, а подставляются корректно).

Поэтому в реальных проектах почти всегда используют PreparedStatement.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍6🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
☝️ Один мудрый тимлид дал двум своим разработчикам по «таланту» — мощной, но своенравной LLM.

Первый разработчик испугался её «галлюцинаций». Он запер модель в песочнице, не давая ей доступа к свежим данным. На вопросы модель отвечала красиво, но часто придумывала факты, то есть врала. Он просто «закопал» свой талант, боясь им пользоваться.

Второй же разработчик не побоялся. Он построил для своей LLM систему RAG — дал ей «лопату и карту», чтобы находить сокровища в базе знаний компании. Его AI-агент отвечал точно по делу, ссылаясь на реальные документы. Он заставил свой «талант» работать и приносить пользу.

Мощь LLM раскрывается не в ней самой, а в системах, которые вы строите вокруг неё.


Именно такие системы мы и будем строить на втором потоке нашего курса «AI-агенты для DS-специалистов». Мы не просто поговорим о RAG, а соберём полный пайплайн с оценкой качества, чтобы ваш агент не врал.

Представьте, что вы сможете начать изучать эту сложную и востребованную тему уже 15 сентября, а не ждать официального старта в октябре. У вас будет фора в 3 недели, чтобы спокойно разобраться в векторных базах и подходе «LLM as a Judge».

💸 Цена 49.000 ₽ действует последние 4 дня — до 24 августа.

👉 Начать строить RAG раньше других
Что такое класс, объект и интерфейс?

🔹 Класс — это шаблон (описание), в котором определяются поля (состояние) и методы (поведение). Он задаёт структуру и логику, но сам по себе не выполняется.

🔹 Объект — это экземпляр класса, конкретная реализация с выделенной памятью и собственными значениями полей.

🔹 Интерфейс — это контракт: набор методов без реализации (с Java 8 могут быть default и static методы), который определяет, что класс должен уметь делать, но не как именно.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥1🎉1
This media is not supported in your browser
VIEW IN TELEGRAM
📅 Сегодня в 19:00 МСК — бесплатный вебинар с Марией Жаровой.

Тема: «Введение в ML: как спрогнозировать стоимость недвижимости».

🔹 Разберём задачу прогноза стоимости недвижимости.
🔹 Покажем пошагово, как собрать первую модель.
🔹 Получите готовые скрипты для старта.

Не зайдёшь — будешь ещё год делать вид, что понимаешь графики в чужих презентациях.

👉 Регистрируйтесь