Библиотека собеса по Java | вопросы с собеседований
Kanalga Telegram’da o‘tish
Вопросы с собеседований по Java и ответы на них. По рекламе: @proglib_adv Учиться у нас: clc.to/3wECtA Для обратной связи: @proglibrary_feeedback_bot
Ko'proq ko'rsatish6 463
Obunachilar
+124 soatlar
-47 kunlar
-1430 kunlar
Postlar arxiv
❓ В чём разница между методами submit() и execute() в ExecutorService?
И submit(), и execute() используются для запуска задач в пуле потоков, но между ними есть важные отличия:
— execute(Runnable) запускает переданную задачу асинхронно, но не возвращает никакого результата. Если во время выполнения возникнет исключение, оно не передаётся явно обратно.
— submit(Runnable/Callable) также запускает задачу асинхронно, но возвращает объект типа Future. С помощью этого объекта можно получить результат задачи (future.get()), проверить статус её выполнения (future.isDone()), явно обработать исключение, если оно произошло во время выполнения задачи.
🐸 Библиотека собеса по Java
❓ В чём разница между методами submit() и execute() в ExecutorService?
И submit(), и execute() используются для запуска задач в пуле потоков, но между ними есть важные отличия:
— execute(Runnable) запускает переданную задачу асинхронно, но не возвращает никакого результата. Если во время выполнения возникнет исключение, оно не передаётся явно обратно.
— submit(Runnable/Callable) также запускает задачу асинхронно, но возвращает объект типа Future. С помощью этого объекта можно получить результат задачи (future.get()), проверить статус её выполнения (future.isDone()), явно обработать исключение, если оно произошло во время выполнения задачи.
❓ Как работает @Transactional и какие подводные камни?
@Transactional говорит Spring обернуть метод в транзакцию. Если всё прошло — делается commit, иначе rollback.
🔹 Особенности:
— Работает только при вызове метода извне, т.к. Spring создаёт прокси.
— Не откатывает по checked exceptions по умолчанию.
— Не работает на private и final методах.
🐸 Библиотека собеса по Java
❓ Чем отличается @RequestParam от @PathVariable?
▪️ @RequestParam — извлекает значение из query-параметров URL, например:
/users?id=5
▪️ @PathVariable — извлекает из части пути, например: /users/5
🐸 Библиотека собеса по Java❓ В чём разница между @Component, @Service и @Repository в Spring?
Все три аннотации делают класс Spring-бином, но различаются по семантике:
— @Component: базовая аннотация, универсальный бин без конкретной роли.
— @Service: указывает, что класс содержит бизнес-логику. Используется для читаемости и логической группировки.
— @Repository: помечает DAO-слой (доступ к данным). Плюс Spring автоматически оборачивает методы в блок try-catch для DataAccessException.
⚠️ Разница не в функциональности, а в намерении разработчика. Spring их обрабатывает по-разному только для @Repository (например, при работе с базой данных).
🐸 Библиотека собеса по Java
❓ В чём разница между IO и NIO?
🔹 IO (Input/Output)
— Потоково-ориентированный подход (stream-oriented).
— Блокирующий ввод-вывод (thread блокируется, пока операция не завершится).
— Не поддерживает неблокирующие операции.
— Нет встроенных средств буферизации, требует ручной реализации.
— Подходит для простых задач, небольших файлов и данных.
🔹 NIO (New Input/Output)
— Буферно-ориентированный подход (buffer-oriented).
— Поддерживает неблокирующий ввод-вывод (non-blocking).
— Позволяет работать с каналами (channels), буферами (buffers), селекторами (selectors).
— Эффективен при работе с большим количеством одновременных подключений и крупными данными.
— Производительность выше за счёт асинхронности и сокращения потоков.
🐸 Библиотека собеса по Java
❓ Что такое JIT-компилятор?
JIT (Just-In-Time) компилятор — это компонент JVM, который компилирует байт-код в машинный код непосредственно во время выполнения программы, а не до старта приложения. Его задача — улучшить производительность, оптимизируя код, исходя из реальных условий работы программы.
JIT компилирует только те части кода, которые реально исполняются, и может применять различные оптимизации для ускорения работы приложения. Это позволяет сочетать гибкость интерпретируемого байт-кода и производительность нативного кода.
🐸 Библиотека собеса по Java
💬 Обратная связь
Ежемесячный опрос по грейдам. Проверим, стало ли среди нас больше милордов синьоров.
Ваш грейд:
🔥 — Senior
👍🏼 — Middle
❤️ — Junior
😁 — Ещё учусь
🐸 Библиотека собеса по Java
❓ Что такое сервлеты?
Сервлеты — это Java-классы, которые обрабатывают HTTP-запросы и формируют HTTP-ответы на стороне сервера. Они работают внутри сервлет-контейнера (например, Tomcat), расширяя функциональность веб-сервера. Обычно используются для создания динамического контента, например, генерации HTML на лету или обработки форм.
Сервлет реализует интерфейс javax.servlet.Servlet (чаще через HttpServlet) и переопределяет методы вроде doGet(), doPost(). Их жизненный цикл включает три ключевых этапа: инициализация (init() ), обработка запроса (service()/doX() ), уничтожение (destroy() ).
🐸 Библиотека собеса по Java
❓ Что такое Spring Core?
Spring Core — это основа всего фреймворка Spring. Он предоставляет механизм Inversion of Control (IoC) и Dependency Injection (DI), позволяя создавать гибкие, легко тестируемые и слабо связанные компоненты.
Вместо того чтобы объект сам создавал свои зависимости (например, через new), Spring сам внедряет нужные зависимости во время выполнения.
🔹 Компоненты
— ApplicationContext: основной контейнер Spring, где хранятся все бины.
— BeanFactory: облегчённый контейнер, из которого вырос ApplicationContext.
— Конфигурация бинов: XML, Java-класс (@Configuration), аннотации (@Component, @Autowired).
🐸 Библиотека собеса по Java
Зимний режим OFF. Весна начинается с апгрейда.
Если чувствуешь, что за зиму навыки подзастыли — пора их разморозить.
📦 Включили весеннюю распродажу: скидка –35% на курсы до конца марта.
Выбирай направление и выходи из спячки:
— Алгоритмы и структуры данных — чтобы собеседования в Яндекс, Ozon и другие были как уровень easy
— Математика для Data Science — для тех, кто не хочет просто «жать на кнопки», а понимать, что под капотом
— Архитектуры и шаблоны — если хочется мыслить как senior и прокачать системное мышление
— Python, Frontend, основы IT — для тех, кто стартует путь в разработке
👾 Proglib Academy — это как старая добрая 8-битная игра, но вместо врагов — практические задачи и собеседования.
Мы просто упаковали сложное обучение в пиксельную обёртку, чтобы тебе было чуть веселее прокачиваться.
🧠 Отогревай мозги, прокачивай скиллы и хватай свой power-up до конца марта.
👉 Выбрать курс
❓ Что такое принципы SOLID?
SOLID — это аббревиатура из пяти принципов объектно-ориентированного дизайна, предложенных Робертом Мартином, которые помогают делать код гибким, расширяемым и легко поддерживаемым.
S — Single Responsibility Principle
Класс должен иметь только одну причину для изменения, то есть одну зону ответственности.
O — Open/Closed Principle
Классы должны быть открыты для расширения, но закрыты для изменения. Расширяйте поведение через наследование или композицию, не изменяя уже написанный код.
L — Liskov Substitution Principle
Подтипы должны заменять базовый тип без нарушения логики. Везде, где ожидается базовый класс, должен корректно работать и его наследник.
I — Interface Segregation Principle
Много специализированных интерфейсов лучше одного общего. Клиенты не должны зависеть от интерфейсов, которые они не используют.
D — Dependency Inversion Principle
Зависимости должны быть от абстракций, а не от конкретных реализаций. Модули верхнего уровня не должны зависеть от модулей нижнего уровня — оба должны зависеть от абстракций.
🐸 Библиотека собеса по Java
🔍Тестовое собеседование на Middle Java-разработчика завтра
26 марта(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
📂 Илья Аров, старший разработчик в Т1, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Илья будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Илье
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqwRjebJ
❓ В чём разница между Heap и Stack?
Stack — это область памяти, где хранятся примитивные типы данных и ссылки на объекты, а также контекст выполнения методов (фреймы). Он работает по принципу LIFO (последний зашёл — первый вышел), быстро выделяет и освобождает память, но объём ограничен. Живёт до конца выполнения потока.
Heap — это область памяти, где хранятся все объекты. Примитивные поля объектов тоже попадают в Heap, но только как часть самого объекта. Управляется сборщиком мусора (GC), доступ к данным медленнее, чем в Stack, но размер больше. Объекты в heap живут, пока на них есть ссылки.
🐸 Библиотека собеса по Java
❓ Что такое AOP?
AOP (Aspect-Oriented Programming) — это парадигма программирования, позволяющая вынести повторяющийся функционал (например, логирование, безопасность, транзакции) в отдельные модули, называемые аспектами, и "вшить" их в бизнес-логику без изменения её кода.
AOP позволяет разделить технический и бизнес-код, избавляя от дублирования и улучшая читаемость.
🔹 Ключевые термины:
— Join Point: точка в выполнении программы (например, вызов метода).
— Advice: код, который выполняется на Join Point (например, до/после метода).
— Pointcut: выражение, определяющее, где именно применять Advice.
— Aspect: класс, содержащий Advice и Pointcut.
— Weaving: процесс внедрения аспектов в код.
🐸 Библиотека собеса по Java
💬 Как оставлять комментарии в чате нашего канала
В нашем чате работает бот Shieldy — он защищает от спама, запрашивая у новых участников решение простой капчи.
⚠️ Проблема, с которой сталкиваются многие: вы нажимаете под постом «Прокомментировать», пишете что-то, а потом получаете бан и не можете писать комментарии.
❓Почему так: Shieldy отправляет капчу в сам чат, а не в комментарии под конкретный пост. Из-за этого капчу можно не увидеть, не отправить ответ на нее, и бот автоматически заблокирует вас.
✅ Как присоединиться к чату, чтобы бот вас не забанил
— Зайдите в описание канала с телефона и нажмите кнопку Discuss / Чат
— Нажмите Join / Присоединиться
— Сразу обратите внимание на сообщение от бота Shieldy
— Решите простой пример и отправьте ответ в чат
После этого бот отправит приветственное сообщение и вы сможете оставлять комментарии. Эту проверку нужно пройти только один раз при вступлении в чат.
❗️ Если вас все-таки забанили
— Это временная блокировка на несколько минут
— Подождите и попробуйте зайти позже, бот снова отправит вам капчу
Админы канала никак не могут ускорить процесс, бот автоматически снимает с вас блокировку через пару минут. Мы понимаем, что эта система неидеальна, и ищем более удобное решение.
👾 Спасибо, что активно участвуете в обсуждении наших постов!
❓ Параметры передаются по ссылке или по значению?
В Java всё передаётся по значению. Но важно понимать: если это объект, то по значению передаётся ссылка на объект, а не сам объект.
Это значит, что внутри метода вы можете изменять поля объекта, но не можете заменить сам объект — новая ссылка не повлияет на оригинал.
🐸 Библиотека собеса по Java
💬 Обратная связь
Какие вопросы публиковать больше?
👍🏼 — Классика с собесов, чтобы точно набить руку на ближайший
🤔 — Вопросы, которые не встречаются в каждой статье вида "N вопросов для собеса"
🔥 — Больше практики, а то одна теория
❓ sleep() vs wait()?
Thread.sleep(ms) — усыпляет поток на указанное время, не освобождая монитор. После паузы поток продолжает выполнение. Используется для временной задержки.
wait() — освобождает монитор и переводит поток в состояние ожидания, пока другой поток не вызовет notify() или notifyAll(). Используется для координации потоков в синхронизированных блоках.
Главное отличие: sleep() просто ставит поток на паузу, wait() передает управление другим потокам, освобождая ресурс.
🐸 Библиотека собеса по Java
❓ Что означает ключевое слово native?
Ключевое слово native указывает, что метод реализован на языке, отличном от Java (обычно C или C++). Такие методы используются для работы с нативными библиотеками через JNI (Java Native Interface).
Вызов native-методов позволяет взаимодействовать с системными API, работать с железом и оптимизировать производительность, но несет риски, такие как потеря переносимости и потенциальные утечки памяти.
🐸 Библиотека собеса по Java
