ch
Feedback
Java Interview Tasks

Java Interview Tasks

前往频道在 Telegram

Реальные вопросы и задачи с собеседований. Оригинальный авторский контент. Актуальный материал. Уровень вопросов от junior до supersenior. Автор канала - @alexzelentsov По рекламе: @alexzelentsov

显示更多
4 900
订阅者
+624 小时
+757 天
+19030 天
帖子存档
Что произойдет при выполнении следующего кода на Java?
Что произойдет при выполнении следующего кода на Java?

Оцените код по 10-ти бальной системе (10 - наилучший код в истории человечества)
Anonymous voting

photo content

🔍 Ответ на задачу про сравнение строк в Java Давайте разберемся, что напечатает приведённый код! 🚀
String a = "ab";
String b = "a" + "b";
String c = "a";
String d = c + "b";

System.out.println(a == b);
System.out.println(a == d);
System.out.println(a.equals(d));
Этот код выводит на экран: true — В первом сравнении (a == b), оба операнда являются строковыми литералами, и компилятор оптимизирует их, так что они указывают на один и тот же объект в строковом пуле. false — Во втором сравнении (a == d), d создается путем конкатенации на этапе выполнения, из-за чего она не будет указывать на тот же объект в строковом пуле, что и a. true — В третьем сравнении (a.equals(d)), метод equals сравнивает содержимое строк, а не их ссылки, потому этот результат будет true, так как содержимое одинаково. Интересно, правда? 😄 Не забудьте, что использование оператора == для сравнения строк может привести к неожиданным результатам. Для проверки эквивалентности строк на уровне содержимого всегда используйте equals. ✅ Ставьте лайк, подписывайтесь на канал и оставляйте комментарии! 💬👉 #Java #StringComparison #ИзучаемJava #java_interview_tasks

#реклама Друзья , топ-10 списков устаревают уже через неделю. Где найти актуальные имена и контакты тех, кто сейчас определяе
#реклама Друзья , топ-10 списков устаревают уже через неделю. Где найти актуальные имена и контакты тех, кто сейчас определяет развитие Искусственного Интеллекта? 🤔 Правильный ответ : Папка "AI Pulse" в закрепе канала. Здесь постоянное обновление ключевых игроков. Это не Wikipedia. Это твой личный шорт-лист для погружения в реальный мир AI. 👉 Убедись, что подписан – папка уже доступна

Друзья, нужна ваша поддержка! 🙌 Если контент вам нравится, проголосуйте за канал! Ваш голос очень важен, и он поможет каналу расти и продолжать делиться интересными задачами и полезными материалами. Пройдите по ссылке и отдайте свой голос за канал: https://t.me/boost/java_interview_tasks 🌟🌟🌟 Ваша поддержка — это мой самый сильный стимул становиться лучше. Большое спасибо каждому, кто уже подписался и активно участвует в жизни нашего канала! 💪❤️

Что напечатает код?👆👆👆
Anonymous voting

Что напечатает код?
Что напечатает код?

Яндекс создаёт продукты и сервисы для миллионов пользователей. Нейросетевой поиск, умные устройства, машинный перевод — задач
Яндекс создаёт продукты и сервисы для миллионов пользователей. Нейросетевой поиск, умные устройства, машинный перевод — задачи, где нет готовых решений. Поэтому нам нужны сильные бэкенд-разработчики! Если у вас от 5 лет опыта на C++, Python, Java или Go — участвуйте в Мультитреке. Как это работает • Подаёте заявку до 18 августа • Проходите технические секции 23 и 24 августа • Получаете офер 24 августа После найма мы предложим поработать в трёх командах несколько недель. Будет время погрузиться в работу, прочувствовать атмосферу и выбрать проект, который вам больше подходит. Узнайте подробности и оставьте заявку.

#реклама Смотрю сейчас на каналы с которыми мы объединились в папку и понимаю какой крутой контент у них. Очень разносторонние эксперты, советую тебе пойти их почитать. Если что, вот ссылка на экспертов еще раз: https://t.me/addlist/UhAsAWNh4E1mNTM6

Как тебе не проспать очередной год? Оглянуться не успеешь, а август уже будет подходить к концу. Это значит, что до выполнения твоих целей осталось всего 6 месяцев! Предлагаю включиться в работу прямо сейчас! Для этого мы собрались с экспертами из разных сфер и приготовили все необходимые материалы для прорыва в 2025 году! Тебе осталось просто изучить все и применить. Мы собрали пошаговые инструкции, связки, разборы, гайды и полезные инструкции в отдельных каналах. Для того, чтобы забрать все полезные материалы, нажми СЮДА и добавь себе в папку. В течение 1-3 дней каждый эксперт поделится в своем канале полезными материалами, поэтому подписывайся и внимательно следи. УСЛОВИЕ ПОЛУЧЕНИЯ ОДНО 🚀Жмите на этот текст и добавляй себе папку Такую информацию обычно дают на платных курсах или в закрытых сообществах. Мы поделимся ей просто так. 👉🏻Забрать весь материал можно по этой ссылке: https://t.me/addlist/UhAsAWNh4E1mNTM6 Главное, следи за каналами, которые появятся в папке. Там постоянно выходят новые связки и алгоритмы, которых еще нет на рынке.

Наверняка эта задачка входит в число хрестоматийных и встречается на собеседованиях по #Java, но поскольку я по ним не хожу, пришлось убить часок на разбирательство с ней. Поделюсь с вами; вдруг кто-то тоже встретит. 🎓 Дано Ванильный пул потоков на голом JDK (аналоги из класса Executors не подходят):
var threadPool = new ThreadPoolExecutor(
  corePoolSize,  // 3
  maxPoolSize,  // 30
  keepAliveTime,  // 60
  TimeUnit.SECONDS,
  new LinkedBlockingQueue<>(maxQueueLength), // 100
  Executors.defaultThreadFactory(),
  new DiscardPolicy());  // could also be a logging implementation
И некий метод, который сначала просто напихивает задачки в этот пул:
List<Future> futures = new ArrayList<>();
futures.add(threadPool.submit(task));
, потом идёт по своим делам, а когда заканчивает с ними, проверяет готовность задачек и, если надо, дожидается завершения каждой, чтобы продолжить работу дальше:
for (Future future : futures) {
  try {
    future.get();
  }
  catch (Exception e) {
    log.error("Failed to get task result from future", e);
  }
}
🔍 Найти Какого _🙊_ в некоторых случаях метод намертво зависает на вызове future.get()? При этом в дампе потоков нет никаких следов задач, которые бы зависли/зациклились/заблокированы. 🔑 Решение Вариант 1. Добавить таймаут в метод future.get(). Да, это решит проблему, но не даст понять, почему она появилась. Вариант 2. Извернуться как-нибудь так, чтобы прийти к вызову вида CompletableFuture.allOf(c1, c2, c3).join(). Наверняка так можно (не проверял), но выглядит избыточно сложно, должно же работать и так. Вариант 3. Обернуть вызов future.get() вот в такое условие:
    if (future.isDone()) {
      future.get();
    }
Казалось бы, смысла в нём нет, ведь если задача не завершена (isDone() == false), то мы просто дождёмся её завершения при вызове get(). Но нет. Когда мы имеем дело с ThreadPoolExecutor, то при вызове submit() он в качестве имплементации Future возвращает экземпляр FutureTask, у которого метод isDone() выглядит так:
    public boolean isDone() {
        return state != NEW;
    }
, то есть "сделанной" считается любая не новая задача (в том числе когда она ещё в работе). А метод FutureTask.get() устроен так:
    public V get() throws InterruptedException, ExecutionException {
        int s = state;
        if (s <= COMPLETING)
            s = awaitDone(false, 0L);
        return report(s);
    }
, то есть ожидание наступит для любого состояния, предшествующего завершению, в том числе для вышеупомянутого NEW (на самом деле только для NEW и COMPLETING). Но если бы задача, на которой завис наш поток, была в состоянии COMPLETING, мы наверняка увидели бы соответствующий ей поток в дампе, а раз его нет, значит, она в NEW. А как она могла оказаться NEW, если все задачи вроде как были переданы пулу на исполнение? Видимо, он её не взял. А почему не взял? Правильно — из-за переполнения очереди, ведь она ограничена (new LinkedBlockingQueue<>(maxQueueLength)). А почему тогда это не привело к ошибкам и прерыванию всего процесса? Верно, из-за с виду безобидной new DiscardPolicy(), которая просто дропает не влезшие задачки (и логирует их, как было в нашем случае). ✅ Вся цепочка кратко: — не влезающие в очередь задачи молча отбрасываются политикой пула, оставляя им статус NEW; — видя этот статус, метод future.get() впадает в бесконечное ожидание; — исключить ожидание можно добавлением проверки на NEW в виде вызова future.isDone(). ⚠️ Если очередь будет большой, а задачи — долгоиграющими, можно нарваться на случай, когда задача уже в очереди и имеет шанс быть выполненной, но цикл с вызовом get() её не подождёт. В этом случае решение должно быть другим. Мораль: пишите однопоточные приложения🤪

Вот такую задачу с собеседования нашел: Что думаете?)

Как вам такое?)
Как вам такое?)

🔍 Ответ на задачу про логические операторы Давайте разберем работу логических операторов в данном коде на Java. У нас есть три логические переменные: a, b, и c, со значениями true, false, и false соответственно. В условии if используется комбинация операторов (логическое "ИЛИ") и && (логическое "И"). Стоит помнить, что оператор && имеет более высокий приоритет, чем оператор . Поэтому выражение b && c будет вычислено первым. Но поскольку b равно false, а c также false, это выражение дает в результате false. Далее, выражение a false будет всегда истинным, так как a равно true. Следовательно, полное условие в if равно true, и будет выполнена первая ветка блока: 1 Когда дело касается вложенных логических операторов в условных выражениях, расстановка скобок может значительно упростить понимание кода и избежать путаницы. В данном случае, добавим скобки для ясности:
boolean a = true;
boolean b = false;
boolean c = false;

if (a  (b && c)) {
    System.out.println("1");
} else {
    System.out.println("2");
} 
Скобки вокруг выражения (b && c) четко определяют, что это будет вычислено в первую очередь. Это не только делает код более понятным, но и исключает возможность неправильной интерпретации, особенно если у вас большой и сложный условный оператор. Используйте скобки в логических выражениях, чтобы код был читаемым как для вас, так и для вашей команды! Рекомендуется всегда группировать логические операции скобками, если существует вероятность появления неоднозначности. ✍️ Научитесь писать чистый и понятный код! Поддержите эту идею, поставив лайк, подписывайтесь на канал и оставляйте комментарии с вашими мыслями об использовании скобок в коде. #java #logicaloperators #boolean #clean_code #java_interview_tasks

#реклама Уважаемые коллеги, представляю базу авторитетных каналов по направлению : Искусственный интеллект Что полезного для
#реклама Уважаемые коллеги, представляю базу авторитетных каналов по направлению : Искусственный интеллект Что полезного для вас? ✅самые свежие инструменты; ✅бесплатные курсы от гуру экспертов; ✅разборы кейсов; ✅Ии в повседневной жизни и бизнесе Забирай и используй

Что напечатает код?
Anonymous voting

Что напечатает код?
Что напечатает код?

VIP доступ к будущему, которое уже наступило: новая папка «IT & Технологии»! 💻 Мы собрали лучшие IT-каналы – это прямой доступ к актуальным новостям, трендам и экспертизе в мире технологий. Только самое ценное, без воды! 🌟 🔹 Техно-тренды: AI, Cybersecurity, Cloud и др. 🔹 Карьера: Найди работу мечты в IT. 🔹 Практика: Советы от профи. 🔹 Инструменты: Для эффективной работы. Один клик – и ты в IT-будущем! 🔥 👉 ЗАБРАТЬ ПАПКУ СЕБЕ

🔍 Ответ на задачу про вывод элементов списка Тут есть одна особенность: индекс увеличивается до получения элемента из списка благодаря ++index. При таком подходе, цикл начинает с индексом 1, а значит будет выбирать имена начиная с "Боря", а "Аня" будет пропущена. Значение index будет увеличено на 1, после чего произойдет проверка условия index < names.size(), и условие будет истинным до тех пор, пока индекс не станет равен размеру списка. Таким образом, в результате выполнение кода мы увидим такой вывод на консоли: Боря Вова А дальше будет эксепшен, так как следующего индекса в массиве уже нет. 🥳 Надеюсь, этот разбор был полезен! Не забудьте лайкнуть пост, подписаться на канал и оставить комментарий, если у вас есть вопросы или дополнения! #java #coding #++i #java_interview_tasks