一个小时后 returns 的函数代码 - 面试问题
Code for a function that just returns after an hour -interview question
我在网上看到这个问题是在面试的时候:
假设你有这个代码:
void myFunction(){
int time = clcTime();
while (clcTime()-time!=3600);
}
当 clcTime()
是 return 自今天 00:00 以来经过的秒数的方法。
(1)。查找此代码段的作用。
(2).一些 QA 测试人员说这段代码在特定情况下失败。那是什么情况?您如何解决该问题?
(3).另一位 QA 测试员表示这段代码在白天运行良好,但当他入睡时 - 出了点问题。可能是什么问题以及如何解决?
我的尝试:
对于(1),我认为这个函数只是假设 运行 循环一个小时。
对于 (3),我认为问题是当一天中的当前小时在 [23:00:00,23:59:59]
范围内时 time
变量获取其值。那是因为在那种情况下,time
的值将在 [23*3600,23*3600 + 3599]
范围内,而 clcTime()
不能 return 范围内的匹配值 [24*3600, 24*3600 + 3599]
.所以在那种情况下,我们知道条件 'clcTime()-time' 永远不会得到 3600 的值,我们将得到一个无限循环。
我的解决方案是将 while
行替换为以下行:
int measure = clcTime() - time;
int measureModulo = measure % 3600;
while (measure==0 || measureModulo!=0){
measure = clcTime() - time;
measureModulo = measure % 3600;
}
我仍然遇到的唯一问题是我无法弄清楚 (2) - 我没有发现此代码有任何其他问题。
你知道这段代码还有什么问题吗?
另外,如果我在 (1) 和 (3) 中写的错误,请随时纠正我。
此代码和您的修复程序的另一个问题是它会检查 clcTime()
以获得 完全匹配的 值。如果系统繁忙并且循环没有到达 运行 超过一秒,那么它将错过匹配的秒并继续等待至少一个小时。
还会出现用户更改系统时钟或系统时区、夏令时生效或失效、时钟自动调整闰秒等问题
我在网上看到这个问题是在面试的时候:
假设你有这个代码:
void myFunction(){
int time = clcTime();
while (clcTime()-time!=3600);
}
当 clcTime()
是 return 自今天 00:00 以来经过的秒数的方法。
(1)。查找此代码段的作用。
(2).一些 QA 测试人员说这段代码在特定情况下失败。那是什么情况?您如何解决该问题?
(3).另一位 QA 测试员表示这段代码在白天运行良好,但当他入睡时 - 出了点问题。可能是什么问题以及如何解决?
我的尝试:
对于(1),我认为这个函数只是假设 运行 循环一个小时。
对于 (3),我认为问题是当一天中的当前小时在 [23:00:00,23:59:59]
范围内时 time
变量获取其值。那是因为在那种情况下,time
的值将在 [23*3600,23*3600 + 3599]
范围内,而 clcTime()
不能 return 范围内的匹配值 [24*3600, 24*3600 + 3599]
.所以在那种情况下,我们知道条件 'clcTime()-time' 永远不会得到 3600 的值,我们将得到一个无限循环。
我的解决方案是将 while
行替换为以下行:
int measure = clcTime() - time;
int measureModulo = measure % 3600;
while (measure==0 || measureModulo!=0){
measure = clcTime() - time;
measureModulo = measure % 3600;
}
我仍然遇到的唯一问题是我无法弄清楚 (2) - 我没有发现此代码有任何其他问题。
你知道这段代码还有什么问题吗?
另外,如果我在 (1) 和 (3) 中写的错误,请随时纠正我。
此代码和您的修复程序的另一个问题是它会检查 clcTime()
以获得 完全匹配的 值。如果系统繁忙并且循环没有到达 运行 超过一秒,那么它将错过匹配的秒并继续等待至少一个小时。
还会出现用户更改系统时钟或系统时区、夏令时生效或失效、时钟自动调整闰秒等问题