Мой друг был приглашен на собеседование для разработчика Java для реализации программы, которая получает задачи, которые являются в основном объектами, которые имеют «делать», метод и поле времени, которое представляет секунды (например, целое число). Программа должна выполнить метод «делать» задачи - через X секунд с момента поступления этой задачи в программу (где X - это время, определенное в этом объекте задачи как поле времени).реализовать «задачу на основе» программы на Java без использования часов
например, если программа получила задание, которое имеет метод «делать», который печатает «привет, я задача» и имеет поле времени, которое равно 20, а затем через 20 минут после того, как эта задача будет получена в программа - сообщение «привет, я задача» будет напечатано в консоли.
вы не можете использовать часы или таймеры, но у вас есть какой-то «сборщик планировщика», который запускается каждую секунду и может проверять состояние каждой из задач и выполнять их, если необходимо.
Я думал, что хорошим решением будет то, что планировщик вычитает один из каждого «заданного времени», и если это время будет равно 0, тогда планировщик выполнит его и удалит из списка задач. проблема заключается в том, что в случае длинного списка задач это может занять много времени и до тех пор, пока планировщик не завершит все задачи - время не будет точным.
Из того, что я понял, это вопрос моделирования, поэтому он может быть связан с некоторым шаблоном проектирования или чем-то подобным.
есть ли у кого-нибудь идеи, что будет хорошо необязательно решение этой проблемы? Спасибо, ребята ...
Не уверен, что это стоит ответа, поэтому я прокомментирую. Если вы ищете шаблон, это, вероятно, шаблон наблюдателя. Задачами могут быть наблюдатели планировщика (наблюдаемые), при каждом уведомлении() вы вызываете обновление задач(), и задача увидит, что его личное время достигло 0, а затем запускает сообщение –
Создайте свой собственный часы из «планировщика», с более высоким циклом для проверки каждой задачи. Удерживайте низкоуровневые задачи до минимума. Лучше установить время активации каждой задачи, когда оно загружено, а не обслуживать счетчик таймера. Таким образом, если есть какое-то отставание в обслуживании, вы не потеряете время. Затем не проверяйте на '==' время активации, установите флажок '<=' –
. Я бы ввел задачу в список, в котором каждый элемент также содержит количество секунд до его запуска по сравнению с предыдущим задача. Планировщику необходимо обновить оставшиеся секунды первой задачи в списке. Когда он достигает нуля (или ниже), задача может выполняться и выходить из списка. Вставка задач должна быть отсортирована. Если задача вставляется куда угодно, но в конце, оставшиеся секунды следующей задачи должны быть обновлены соответственно. –