面试问题:开发一个可以显示试用期在30天后过期而无需外部存储的应用程序

时间:2010-04-29 01:48:40

标签: algorithm

我在一个论坛中看到了这个问题,该论坛是关于如何开发一个应用程序,可以跟踪安装日期并显示试用期在使用30天后到期。唯一的限制是不使用任何类型的外部存储。

问题:如何实现这一目标?

感谢
巴拉

- 编辑
我认为很容易弄清楚插入问题的地方。无论如何,我会清楚地写出这个问题。 “外部存储”意味着不要使用任何类型的存储,如文件,注册表,网络或任何东西。你只有你的程序。

5 个答案:

答案 0 :(得分:5)

使用包含该程序的文件的文件修改日期作为安装日期。

答案 1 :(得分:1)

我喜欢Doug Currie关于文件修改日期的想法。但是如果应用程序是从网上下载的,那么每天午夜都会重新链接包含新过期日期的新初始化数据。那天下载的任何二进制文件都会在给定的日期到期。

如果您愿意,请使用私钥对日期进行签名,以免被黑客攻击。在应用程序中包含公钥并解密日期。如果没有正确签名,哈斯塔拉维斯塔,宝贝。

答案 2 :(得分:0)

如果你根本不能使用任何外部存储(甚至不是配置文件或类似的东西),你需要将它编码到应用程序本身,以便应用程序的主要方法(或某些方法)检查​​当前日期小于某个到期日。部分安装程序实际上可以动态编译该代码,然后将其设置为安装日期。重新安装应用程序很容易就会失败,但是再次说,没有外部存储也是不现实的。

答案 3 :(得分:0)

我认为通常这样做的唯一方法是让你的应用程序在一个单独的进程中生成一些东西,该进程将继续运行并跟踪日期/时间,即使主应用程序已关闭。重新启动后,它将连接到正在运行的进程,以查看试用期是否已过期。

当然,只有当计算机从未重新启动并且用户从未追捕过您的衍生进程并将其杀死时,这才有效,这是不太可能的。如果您的应用程序没有与相关的IO相关(文件系统,注册表,网络上的某些内容等),那么简单的重新启动将消除您已经完成的任何操作。

所以,总结一下:这不太可能。

答案 4 :(得分:0)

我不知道这是否可行,因为我所做的大部分工作都是嵌入式系统,我甚至不需要触摸操作系统。但是以下是可能的吗?

编译程序时,在末尾留下一些额外的空间(例如,8个字节),全部设置为0.运行应用程序时,它会获取这些字节,如果它们全部为0,则将它们替换为当前时间(这是我不确定的部分。操作系统是否允许你这样做?如果没有,可能会有一些使用多个进程的解决办法。)否则,如果时差大于30天,它会通知试用期结束的用户。

当然,该方法很容易重置系统时钟。