小编Mik*_*els的帖子

如何防止虚假高分出现在全球高分榜上?

假设您正在设计一款能够追踪高分的PC游戏.除了保持本地分数之外,还设置了全局高分服务器,该服务器通过因特网访问该游戏.玩家应该能够在完成游戏后或之后从当地的高分榜中将他们的高分提交到全球高分榜.这一定是一个普遍的问题; 现代游戏机上的街机游戏通常具有这样的全球高分列表.

我的问题归结为:你怎么能阻止某人提交虚假的高分?或者,换句话说,全球高分服务器如何确保提交的分数真的是通过游戏运行产生的?

我越是想到这个,我就越认为它可能是一个无法解决的问题.

您通常要做的是验证源自某个源的消息是否使源对该消息进行数字签名.在这种情况下你当然可以这样做,但真正的问题是玩家通过拥有软件也拥有软件的私钥.无论它有多么模糊,它都可以进行逆向工程,甚至只是从内存中取出.

另一种选择是将玩家游戏的重放发送到高分服务器,这将快速运行重放并验证提交的分数是否与重放的结果相匹配.这并没有解决问题,但如果你还必须制作一个"证明"它的非常复杂的重播,它肯定会使得伪造高分更难.

这是一个有解决方案的问题,还是真的无法解决?家庭游戏控制台开发人员是否使用技术来防止这种攻击,或者他们只是依靠控制台来防止未经授权的代码运行?

security networking

12
推荐指数
3
解决办法
1854
查看次数

作为正常开发过程的一部分,从VCS中永久删除版本是否有意义?

我们在工作场所使用ClearCase.当代码合并到主(主干)分支时,我们标准流程的一部分是完全根除开发和集成分支上的所有版本.因为这会消除与这些版本一起发布的所有签入注释,我们的源文件必须有一个冗长的序言注释,用于标识每个更改.

有几次,我指出这否定了使用版本控制系统的一个基本原因,并指出通过删除版本,无法看到谁最初在某事上工作,何时引入问题等等.新版本已经学会了不打扰输入签到评论,因为它无论如何都会被删除.

我所听到的删除旧版本的理由通常只是归结为"感觉良好"的原因.我更有经验的同事觉得删除这些旧分支会使文件的版本树"更清晰".他们声称,一旦将这些旧版本合并到我们的主干上,就没有理由保留它们.他们还担心其他开发人员会在他们的视图配置规范中意外地保留这些过时的分支.最后,他们认为删除这些分支可以节省CM服务器上的磁盘空间.

我对此有不好的感觉,或者是否有其他开发商店以这种方式成功运营?如果你还认为这是一个坏主意,你会提供哪些其他支持保留旧版本的论据?如果您已成功使用此类流程,您会观察到哪些好处?


编辑澄清:以前版本的主干始终保留.它是最初创建或修改的东西被删除的分支.

version-control clearcase

10
推荐指数
1
解决办法
466
查看次数

片段的内容是否在主机插件外可见?

我之前从未使用插件片段.我认为通过在片段中创建一个新类并在片段的清单中导出包含它的包,我可以从另一个已经依赖于主机插件的插件访问该类.但是,我似乎无法做到这一点.除了主机插件之外,任何插件是否都可以看到片段的内容?如果是这样的话,我有什么特别的事情可以做到这一点吗?

eclipse-plugin eclipse-rcp eclipse-fragment

6
推荐指数
1
解决办法
1105
查看次数

如何在同一行显示两个打印语句的输出?

我有2个单独的打印声明:

打印"123"

打印"456"

如何使这两个打印语句出现在同一行?注意我需要使用2个打印语句

输出:

123456

python

6
推荐指数
3
解决办法
2559
查看次数

如何在Tomcat中为多个错误代码使用相同的错误页面?

我正在尝试从tomcat servlet发送纯文本错误消息,以便应用程序可以将响应呈现给用户.

我的web.xml中有以下内容:

<error-page>
    <error-code>409</error-code>
    <location>/string_error.jsp</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)

string_error.jsp如下:

${requestScope['javax.servlet.error.message']}
Run Code Online (Sandbox Code Playgroud)

这成功地为我提供了409响应的纯文本错误消息.但是,我想对400/500范围内的任何错误使用同一页面,而无需<error-page>为每个错误手动指定新块.我<error-code>*</error-code>本以为会做到这一点,但事实并非如此.Tomcat是否提供了执行此操作的机制?

javascript java jsp tomcat

4
推荐指数
1
解决办法
3785
查看次数

引用Java中匿名内部类中的封闭类的非final字段

在Java中,我知道可以这样做:

public class Greeter {
    public void greetEventually() {
        final String greeting = "Hello!";
        Job j = new Job() {
            public void run() {
                System.out.println(greeting);
            }
        };
        j.schedule();
    }
}
Run Code Online (Sandbox Code Playgroud)

这将Job在将来的某个时刻执行匿名.这是有效的,因为允许匿名类引用封闭范围中的最终变量.

我不确定的是以下情况:

public class Greeter {
    private String greeting;

    // ... Other methods that might mutate greeting ...

    public void greetEventually() {
        Job j = new Job() {
            public void run() {
                System.out.println(greeting);
            }
        };
        j.schedule();
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我的匿名Job是指封闭类的非final字段.作业运行时,我是否会看到greeting创建作业时的字段值,或者执行作业时的值?我想我知道答案,但我认为这是一个有趣的问题,起初它让我和几个同事再次猜测自己几分钟.

java closures anonymous-types anonymous-class

3
推荐指数
1
解决办法
443
查看次数

如何在会话之间存储Eclipse插件状态?

我正在研究Eclipse插件.该插件每次在本地保存工作时都会提醒用户将其工作保存在中央存储库中.

但是,一旦用户成功将他的工作保存在中央存储库中10次,他将不再被提醒保存他的工作.

这在单个会话中很有效.也就是说,当用户开始在工作区中工作并启用插件时.

但是,如果用户在将工作保存到中央存储库9次后退出工作区,他将继续被提醒10次,即从头开始,下次他打开工作区时.

我想知道,如果可以增加计数器并将其存储在内存中,以便插件按预期工作.

java eclipse eclipse-plugin

3
推荐指数
1
解决办法
1421
查看次数

运行最多n个Java线程

我有一个CPU密集型应用程序,可以用Java编写.该应用程序由几个独立运行的作业(线程)组成.

如果我一次启动所有线程,系统将被重载.我怎么能一次启动最多n个线程,当一个线程完成然后启动一个新线程?通过限制一次运行的线程数,我打算让其他一些处理器/内核可用于其他任务.

谢谢

java multithreading

2
推荐指数
2
解决办法
492
查看次数