小编Han*_*etz的帖子

如何处理缓存未命中:NotFoundException,contains()或`if(null == result)`?

也许这有点学术性,但如果我实现缓存来加速应用程序,我应该如何最好地处理缓存未命中?(在我的例子中,语言将是Java,但也许答案可能更普遍.)

抛出异常:

ResultType res;
try {
    res = Cache.resLookup(someKey);
} catch (NotFoundException e) {
    res = Cache.resInsert(someKey, SlowDataSource.resLookup(someKey));
}
Run Code Online (Sandbox Code Playgroud)

提取之前询问:

ResultType res;
if (Cache.contains(someKey) {
    res = Cache.resLookup(someKey);
} else {
    res = Cache.resInsert(someKey, SlowDataSource.resLookup(someKey));
}
Run Code Online (Sandbox Code Playgroud)

返回null:

ResultType res;
res = Cache.resLookup(someKey);
if (null == res) {
    res = Cache.resInsert(someKey, SlowDataSource.resLookup(someKey));
}
Run Code Online (Sandbox Code Playgroud)

抛出异常似乎是错误的,毕竟这不是错误.让Cache查找contains()然后再次检索数据似乎很浪费,特别是每次都会发生这种情况.null当然,检查要求null永远不会是有效的结果......

java coding-style

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

如何在Java中访问私有类成员?

我有数据模型类,包含私有字段,这些字段是只读的(通过getter函数).这些字段由我的JPA持久性提供程序(eclipselink)在正常操作期间使用数据库的内容设置.对于单元测试,我想将它们设置为来自持久层的模型的伪值.我怎样才能做到这一点?无论如何,eclipselink如何设置这些值?

简化示例:

@Entity
class MyEntity
{
    @Id
    private Integer _ix;

    public Integer ixGet()
    {
        return this._ix;
    }
}
Run Code Online (Sandbox Code Playgroud)

java unit-testing jpa private mocking

4
推荐指数
3
解决办法
2万
查看次数

如何压缩大量类似的双打?

我想在内存中存储数十亿(10 ^ 9)的双精度浮点数并节省空间.这些值按数千个有序集合(它们是时间序列)进行分组,在一个集合中,我知道值之间的差异通常不大(与其绝对值相比).而且,彼此越接近,差异相对小的概率越高.

完美契合将是delta编码,其仅存储每个值与其前任的差异.但是,我想随机访问数据的子集,所以我不能依赖于按顺序完成整个集合.因此,我使用增量到一个集合范围的基线,产生增量,我预计它将在绝对值的10%到50%之间(大部分时间).

我考虑过以下方法:

  • 将较小的值除以较大的值,得到一个介于0和1之间的值,该值可以存储为某个固定精度的整数加一位,用于记住哪个数除以哪个.这是相当简单的并且产生令人满意的压缩,但不是无损方法,因此仅是次要选择.
  • 对这两个值的IEEE 754二进制64编码表示进行异或,并在指数的开头和尾数加上不同的剩余比特存储长的零延伸的长度.在这里我很不确定如何判断压缩,虽然我认为在大多数情况下它应该是好的.

有没有标准的方法来做到这一点?我上面的方法可能有什么问题?您自己看过或使用过哪些其他解决方案?

compression

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

如何将两个long作为Java中的unsigned进行比较?

我将无符号64位数的位模式存储在long变量中,并希望计算无符号范围内两个数字之间的距离.因为Java解释long为二进制补码有符号整数,所以我不能这样做a - b,如下例所示:

// on the unsigned range, these numbers would be adjacent
long a = 0x7fffffffffffffffL;
long b = 0x8000000000000000L;

// but as two's complement (or any representation that 
// stores the sign in the first bit), they aren't
assert b - a == 1;
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?

java math bit-manipulation

4
推荐指数
3
解决办法
5029
查看次数

如何备份MySQL数据库?

备份数百万条目的数据库时,我需要考虑什么?我可以使用任何工具(可能与MySQL服务器捆绑在一起)吗?

mysql database backup database-backups

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

关闭JS后,AJAX应用如何正常降级的策略是什么?

我应该遵循哪些一般准则来优雅地降级基于JS的Web应用程序?有这样的指导方针吗?是否有任何公开网页可以说明好/坏的例子?有什么共同的陷阱吗?

javascript

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

除了舍入数字之外,round()还做了什么?

我只是"修复"以下几行PHP中的错误:

        $value = 1091.09; // the failing test case
        $prop = sprintf('%013d', $value * 100);
Run Code Online (Sandbox Code Playgroud)

通过添加这些行:

        $cents = $value * 100; // $cents is now 109109
        $cents = round($cents, 2); // $cents is still 109109
        $prop = sprintf('%013d', $cents);
Run Code Online (Sandbox Code Playgroud)

前一个块的结果是"0000000109108",而第二个块的结果"0000000109109"是正确的.

请注意,我添加了两行,以便能够分别查看调试器中的每个步骤.如果我跳过第一行,它也有效,因此写道:

        $cents = round($value * 100, 2); // $cents is now 109109
        $prop = sprintf('%013d', $cents);
Run Code Online (Sandbox Code Playgroud)

因此,显然,该round()函数会对值进行某些操作,使其以不同的方式工作sprintf().它是什么?

如果这是一种恰当的语言,我可能会通过查看数据类型来了解.在这里,我甚至都不知道它们是什么.

php floating-point arithmetic-expressions

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

有没有 CGI 的替代品(我真的需要一个)吗?

我正在设计一个应用程序,它将包含 3-4 个作为独立进程运行并由合适的 IPC 链接的服务。该系统将有一个网络界面,我想使用那里的任何网络服务器。

应该在某个 URL 下访问 Web 界面,该 URL 允许同一 Web 服务器上的其他 URL 做完全不同的事情。我打算使用该 URL 下方的路径来指定 Web 界面应该做什么。它具有供网络上的其他应用程序使用以及供人类在浏览器中进行交互的设施。

袖手旁观,我的工作如下:

  • 使网络服务器为它收到的每个请求启动一个 CGI 进程(如 Apache 中的 SetHandler)
  • 让 CGI 连接到 IPC
  • 让它从后端服务获得它需要的任何东西
  • 让 CGI 根据服务的回答返回 HTML/XML 和任何 HTTP 状态

现在,我真正想要的是避免前两个步骤,或者如果我不能,避免第二个步骤,因为我担心我会在不必要的开销上浪费性能(来自其他应用程序的请求可能很频繁) )。

例如,PHP 可以打开到 MySQL 数据库的持久连接,该连接在脚本运行时存活下来并且下次不需要重新创建,尽管我不知道他们实际上是如何做到的。此外,据我所知,Apache 模块在服务器启动时加载一次,因此这可能会删除第一步,但会将我与 Apache 联系起来。

那么,将特定 URL 的处理程序挂接到不同网络服务器的好方法是什么?我不想处理 HTTP,否则我可能只是在第二台服务器上使用代理设置,但这似乎是在重新发明轮子。如果您认为 CGI 很好,并且有处理类似结构的大量请求的示例,请告诉我。

cgi ipc

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

我的Flex应用程序中的"int main()"在哪里?

嗯,当然不是字面意思,但是:

我是Flex的新手,我正在试图找出在我的应用程序启动时将我想要运行的代码放在哪里.在我的示例中,我在标记中定义了树控件,并且我有AS代码,可以从本地文件或Web服务填充它.如何将一个绑定到另一个,以便在创建控件时运行代码?

我在文档中找到的示例都使用事件处理程序,即它们在控件的开始标记中放入'creationComplete ="myInitFunction(evt)"'.这意味着我会写一个初始化东西的小胶水功能.

现在,正如我所理解的那样,Markup在内部真正转换为AS类.那么我不能只定义一个由引擎实例化的类并将我的启动代码放在构造函数中吗?也许甚至可以扩展Tree类?

编辑:

几个月后,我更加明智.在尝试滥用扩展组件类的构造函数之后,我不得不了解Flex并不期望构造函数做很多事情 - 当然不会从网络上加载数据.

"Programming Flex 3"中的组件生命周期解释非常有用.现在,我的构造函数都是空的,我正在覆盖生命周期方法,例如createChildren很多东西,并且将事件用于任何涉及延迟或依赖于外部因素的事件,尤其是网络内容.

例如,我creationComplete用来启动一个异步网络请求(使用HTTPService),当返回有ResultEvent和FaultEvent处理程序时,ResultEvent更新我控件的数据绑定数据模型.这看似非常灵活,效果很好.

apache-flex

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

任何SQL数据库:什么时候更好地获取整个表而不是查询特定的行?

我有一个包含10k到100k行的表,我需要多达1到2千行的不同集合,但通常要少得多.我希望这些查询尽可能快,我想知道哪种方法通常更聪明:

  1. 总是使用一直不同的WHERE子句来查询我需要的行.
  2. 将整个表加载到我的应用程序内存中的缓存中并在那里搜索,定期同步缓存
  3. 总是查询整个表(没有WHERE子句),让SQL服务器处理缓存(它始终是相同的查询,以便它可以缓存结果)并根据需要过滤输出

我现在想要了解特定的数据库引擎.

sql database

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