也许这有点学术性,但如果我实现缓存来加速应用程序,我应该如何最好地处理缓存未命中?(在我的例子中,语言将是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永远不会是有效的结果......
我有数据模型类,包含私有字段,这些字段是只读的(通过getter函数).这些字段由我的JPA持久性提供程序(eclipselink)在正常操作期间使用数据库的内容设置.对于单元测试,我想将它们设置为来自持久层的模型的伪值.我怎样才能做到这一点?无论如何,eclipselink如何设置这些值?
简化示例:
@Entity
class MyEntity
{
@Id
private Integer _ix;
public Integer ixGet()
{
return this._ix;
}
}
Run Code Online (Sandbox Code Playgroud) 我想在内存中存储数十亿(10 ^ 9)的双精度浮点数并节省空间.这些值按数千个有序集合(它们是时间序列)进行分组,在一个集合中,我知道值之间的差异通常不大(与其绝对值相比).而且,彼此越接近,差异相对小的概率越高.
完美契合将是delta编码,其仅存储每个值与其前任的差异.但是,我想随机访问数据的子集,所以我不能依赖于按顺序完成整个集合.因此,我使用增量到一个集合范围的基线,产生增量,我预计它将在绝对值的10%到50%之间(大部分时间).
我考虑过以下方法:
有没有标准的方法来做到这一点?我上面的方法可能有什么问题?您自己看过或使用过哪些其他解决方案?
我将无符号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)
这样做的正确方法是什么?
备份数百万条目的数据库时,我需要考虑什么?我可以使用任何工具(可能与MySQL服务器捆绑在一起)吗?
我应该遵循哪些一般准则来优雅地降级基于JS的Web应用程序?有这样的指导方针吗?是否有任何公开网页可以说明好/坏的例子?有什么共同的陷阱吗?
我只是"修复"以下几行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().它是什么?
如果这是一种恰当的语言,我可能会通过查看数据类型来了解.在这里,我甚至都不知道它们是什么.
我正在设计一个应用程序,它将包含 3-4 个作为独立进程运行并由合适的 IPC 链接的服务。该系统将有一个网络界面,我想使用那里的任何网络服务器。
应该在某个 URL 下访问 Web 界面,该 URL 允许同一 Web 服务器上的其他 URL 做完全不同的事情。我打算使用该 URL 下方的路径来指定 Web 界面应该做什么。它具有供网络上的其他应用程序使用以及供人类在浏览器中进行交互的设施。
袖手旁观,我的工作如下:
现在,我真正想要的是避免前两个步骤,或者如果我不能,避免第二个步骤,因为我担心我会在不必要的开销上浪费性能(来自其他应用程序的请求可能很频繁) )。
例如,PHP 可以打开到 MySQL 数据库的持久连接,该连接在脚本运行时存活下来并且下次不需要重新创建,尽管我不知道他们实际上是如何做到的。此外,据我所知,Apache 模块在服务器启动时加载一次,因此这可能会删除第一步,但会将我与 Apache 联系起来。
那么,将特定 URL 的处理程序挂接到不同网络服务器的好方法是什么?我不想处理 HTTP,否则我可能只是在第二台服务器上使用代理设置,但这似乎是在重新发明轮子。如果您认为 CGI 很好,并且有处理类似结构的大量请求的示例,请告诉我。
嗯,当然不是字面意思,但是:
我是Flex的新手,我正在试图找出在我的应用程序启动时将我想要运行的代码放在哪里.在我的示例中,我在标记中定义了树控件,并且我有AS代码,可以从本地文件或Web服务填充它.如何将一个绑定到另一个,以便在创建控件时运行代码?
我在文档中找到的示例都使用事件处理程序,即它们在控件的开始标记中放入'creationComplete ="myInitFunction(evt)"'.这意味着我会写一个初始化东西的小胶水功能.
现在,正如我所理解的那样,Markup在内部真正转换为AS类.那么我不能只定义一个由引擎实例化的类并将我的启动代码放在构造函数中吗?也许甚至可以扩展Tree类?
编辑:
几个月后,我更加明智.在尝试滥用扩展组件类的构造函数之后,我不得不了解Flex并不期望构造函数做很多事情 - 当然不会从网络上加载数据.
"Programming Flex 3"中的组件生命周期解释非常有用.现在,我的构造函数都是空的,我正在覆盖生命周期方法,例如createChildren很多东西,并且将事件用于任何涉及延迟或依赖于外部因素的事件,尤其是网络内容.
例如,我creationComplete用来启动一个异步网络请求(使用HTTPService),当返回有ResultEvent和FaultEvent处理程序时,ResultEvent更新我控件的数据绑定数据模型.这看似非常灵活,效果很好.
我有一个包含10k到100k行的表,我需要多达1到2千行的不同集合,但通常要少得多.我希望这些查询尽可能快,我想知道哪种方法通常更聪明:
我现在想要了解特定的数据库引擎.
java ×3
database ×2
apache-flex ×1
backup ×1
cgi ×1
coding-style ×1
compression ×1
ipc ×1
javascript ×1
jpa ×1
math ×1
mocking ×1
mysql ×1
php ×1
private ×1
sql ×1
unit-testing ×1