我在java采访中被问到一个与java无关的问题,它基于逻辑。 我得到了一个场景::假设您必须完全将站点下载到本地驱动器,但站点内容随时间而变化。要更新,我们必须一次又一次地下载它的内容更改。并且假设有一个命令告诉我们每次网站内容的百分比变化。我们可以通过它来计算网站的每小时百分比变化。我们给出了%变化的最佳值,当达到时我们应该下载内容。我们必须计算适当的时间,之后我们将检查要下载的网站。这次我们的实际百分比变化应该最接近所需的值。就好像我们正在让线程睡觉(x)。 "" X =? ""要计算x,我们必须定义与内容中%变化的关系。因为每次变化百分比也不同。从上午9点到上午10点,%变化为10%,但从上午10点到上午11点变为50%。因此平均变化将是30%,根据这个平均变化百分比,睡眠时间也应该变化,以便它对于性能来说是最佳的。如果当前的变化率较小(根据先前变化的平均值计算),那么时间应该增加。如果变化率很高,则应降低下载时间。为此,我们必须定义平均值之间的关系。 %变化和睡眠时间。 简单地说:我们必须根据命令计算的实际百分比变化和%变化的期望值来预测下一次迭代的休眠时间。这样睡觉后计算的时间。下次我们的百分比变化将最接近期望值。
答案 0 :(得分:1)
我认为我们不需要将睡眠时间与下载平均值关联起来。我们可以有两个线程。一个线程可以下载内容,另一个线程可以检查自上次通知发送之后的特定时间的百分比变化。下载线程可以等待,计算百分比变化的线程可以在每小时后计算当前变化多少。如果是100%,它可以通知下载线程。执行计算的线程可以在检查当前百分比与上次的百分比变化之间休眠60分钟。然后,它可以计算从发送最后一个通知的时间开始的当前百分比变化(这意味着在通知它时也将清除计数器或保留百分比变化当前状态的任何内容,相对于发送最后一个通知的时间)。
我可能已经回答了这个问题。