很简单,什么是尾部调用优化?更具体地说,任何人都可以显示一些可以应用的小代码片段,而不是在哪里,并解释为什么?
language-agnostic algorithm recursion tail-recursion tail-call-optimization
如何找出用户在任何给定点移动的垂直滚动条的百分比?
当用户向下滚动页面时,很容易捕获"onscroll"事件,但是如何在该事件中找出它们滚动了多远?在这种情况下,特别是百分比是重要的.我并不特别担心IE6的解决方案.
是否有任何主要框架(Dojo,jQuery,Prototype,Mootools)以简单的跨浏览器兼容方式公开它?
干杯,
Martin Fowler 在这里为定期任务的调度定义了一个优雅的对象模型,它非常好地映射到OO代码.但是,将此映射到关系数据库模式以实现持久性是很棘手的.
任何人都可以建议一个模式+ SQL组合来封装他描述的所有功能,特别是在第11页的图像中.相交和联合是相当明显的 - 复杂性在于表示'时态表达式',它采用可变参数并且必须被解释不同的,然后将它们组合成'时间集'.
需要说明的是,有很多方法可以表示关系数据库中重复事件的概念.我希望大家输入的是如何映射这个特定的模型.
一些可能的选择:
序列化参数列表并将结果存储在varchar()中不是解决方案,因为该方法会阻止基于集合的查询:)
CouchDB,版本0.10.0,使用本机erlang视图.
我有一个简单的表格文件:
{
"_id": "user-1",
"_rev": "1-9ccf63b66b62d15d75daa211c5a7fb0d",
"type": "user",
"identifiers": [
"ABC",
"DEF",
"123"
],
"username": "monkey",
"name": "Monkey Man"
}
Run Code Online (Sandbox Code Playgroud)
和一个基本的JavaScript设计文档:
{
"_id": "_design/user",
"_rev": "1-94bd8a0dbce5e2efd699d17acea1db0b",
"language": "javascript",
"views": {
"find_by_identifier": {
"map": "function(doc) {
if (doc.type == 'user') {
doc.identifiers.forEach(function(identifier) {
emit(identifier, {\"username\":doc.username,\"name\":doc.name});
});
}
}"
}
}
}
Run Code Online (Sandbox Code Playgroud)
发出的:
{"total_rows":3,"offset":0,"rows":[
{"id":"user-1","key":"ABC","value":{"username":"monkey","name":"Monkey Man"}},
{"id":"user-1","key":"DEF","value":{"username":"monkey","name":"Monkey Man"}},
{"id":"user-1","key":"123","value":{"username":"monkey","name":"Monkey Man"}}
]}
Run Code Online (Sandbox Code Playgroud)
我正在研究构建一个执行相同操作的Erlang视图.迄今为止的最佳尝试是:
%% Map Function
fun({Doc}) ->
case proplists:get_value(<<"type">>, Doc) of
undefined ->
ok;
Type ->
Identifiers = proplists:get_value(<<"identifiers">>, Doc),
ID …Run Code Online (Sandbox Code Playgroud) 我们目前正在考虑将Postgres更改为CouchDB以用于使用情况监控应用程序.一些数字:
大约2000个连接,每5分钟轮询一次,每天大约600,000个新行.在Postgres中,我们存储这些数据,按日分区:
t_usage {service_id,timestamp,data_in,data_out}
t_usage_20100101继承t_usage.
t_usage_20100102继承了t_usage.等等
我们使用乐观存储过程来编写数据,该过程假设分区存在并在必要时创建它.我们可以很快插入.
为了读取数据,我们的用例按重要性和当前性能顺序排列:
*单一服务,单日使用:良好的性能
*多种服务,月使用:性能不佳
*单一服务,月使用:性能不佳
*多种服务,多个月:性能非常差
*多项服务,单日:良好的表现
这是有道理的,因为分区已经优化了几天,这是迄今为止我们最重要的用例.但是,我们正在研究改进二级要求的方法.
我们经常需要按小时参数化查询,例如,仅在上午8点到下午6点之间给出结果,因此汇总表的用途有限.(这些参数的变化频率足以创建多个数据汇总表,这是令人望而却步的).
在此背景下,第一个问题是:CouchDB是否适合这些数据?如果是,在给定上述用例的情况下,您将如何在CouchDB文档中对数据进行最佳建模?到目前为止,我已经整理了一些选项,我们正在进行基准测试(_id,_rev除外):
{
service_id:555
day:20100101
usage: {1265248762: {in:584,out:11342}, 1265249062: {in:94,out:1242}}
}
Run Code Online (Sandbox Code Playgroud)
每月大约有60,000份新文件.大多数新数据都是对现有文档的更新,而不是新文档.
(这里,使用中的对象键入轮询的时间戳,以及字节输入和字节输出的值).
{
service_id:555
month:201001
usage: {1265248762: {in:584,out:11342}, 1265249062: {in:94,out:1242}}
}
Run Code Online (Sandbox Code Playgroud)
每月大约2,000份新文件.适度更新现有文档.
{
service_id:555
timestamp:1265248762
in:584
out:11342
}
{
service_id:555
timestamp:1265249062
in:94
out:1242
}
Run Code Online (Sandbox Code Playgroud)
每月大约15,000,000份新文件.所有数据都是新文档的插入.插入速度更快,但我对数百万份文档在一年或两年后的效率有疑问.文件IO似乎太高了(虽然我是第一个承认我不完全理解它的机制).
我试图以面向文档的方式解决这个问题,虽然打破RDMS的习惯很困难:)事实上,你只能对视图进行最低限度的参数设置让我有点担忧.那就是说,上面哪一个最合适呢?是否有其他格式我没有考虑哪种格式会更好?
提前致谢,
杰米.
考虑具有以下成员的Redis排序集:
ZADD mySortedSet 11 "A"
ZADD mySortedSet 21 "B"
ZADD mySortedSet 32 "C"
ZADD mySortedSet 46 "D"
ZADD mySortedSet 53 "E"
ZADD mySortedSet 68 "F"
ZADD mySortedSet 72 "G"
ZADD mySortedSet 82 "H"
ZADD mySortedSet 94 "I"
ZADD mySortedSet 104 "J"
ZADD mySortedSet 113 "K"
Run Code Online (Sandbox Code Playgroud)
如果我想以相反的顺序进行分页,从任意切片开始,我可以从这开始:
// Returns G, F, E, as expected.
ZREVRANGEBYSCORE mySortedSet 72 (46
Run Code Online (Sandbox Code Playgroud)
现在,只知道我的上限是46,我可以得到集合中的前3个项目,D,C和B,而不知道下限:
ZREVRANGEBYSCORE mySortedSet 46 -inf LIMIT 0, 3
Run Code Online (Sandbox Code Playgroud)
我的问题是,我怎么能按顺序得到集合中的下3个项目,J,I和H,只知道上限为72?
// Good start, returns K, J, I, H
ZREVRANGEBYSCORE mySortedSet +inf (72
// Returns …Run Code Online (Sandbox Code Playgroud) 我想用可交换的哈希函数定义一个哈希表.哈希函数将获取指向哈希表的指针和要进行哈希处理的键,返回一个如下所示的int:
typedef int (hash_function_t) (hashtable *, int);
Run Code Online (Sandbox Code Playgroud)
哈希表存储指向将用于散列键的函数的指针:
typedef struct ht {
size_t size;
...
hash_function_t *hash_function;
} hashtable;
Run Code Online (Sandbox Code Playgroud)
不幸的是,这会创建循环引用.
我需要指向哈希函数定义中哈希表的指针,因此我可以对哈希表大小做一个模数,因此它不会超过桶的最大数量.我需要哈希表中的哈希函数,这样我就不必在整个地方传递哈希函数指针.
我意识到这将导致代码如下:
*ht->hash_function (ht, key)
Run Code Online (Sandbox Code Playgroud)
这有点奇怪,但我很好.
以任何顺序放置typedef都不起作用.我是否必须在哈希表中使用长定义,然后再使用typedef,还是有更好的方法?
这些都是直接C,没有C++.ANSI C解决方案首选!
我正在使用oauth访问google提供的不同服务.我能够为每个服务生成令牌.但我想生成单个令牌来使用谷歌的多个服务.谁能告诉我这方面的解决方案?
我有一个这样的对象:
const routes = {
home: { path: '/', page: 'home' },
profile: { path: '/profile', page: 'users/profile' }
}
Run Code Online (Sandbox Code Playgroud)
我想从中定义派生类型,如下所示:
type RouteName = keyof typeof routes,它会创建类似的类型"home" | "profile"。
但是,我不能这样做:
for (let name in routes) {
router.add({ name, ...routes[name]})
}
Run Code Online (Sandbox Code Playgroud)
因为编译器抱怨routes[name]隐式类型any:
Element implicitly has an 'any' type because type '{ home: { path: string; page: string; }; profile: { path: string; page: string; };' has no index signature.
Run Code Online (Sandbox Code Playgroud)
如果我将路由的定义修改为:
interface RouteDefinition {
path: …Run Code Online (Sandbox Code Playgroud) couchdb ×2
algorithm ×1
c ×1
erlang ×1
google-api ×1
javascript ×1
mapped-types ×1
oauth ×1
orm ×1
pagination ×1
recurrence ×1
recursion ×1
redis ×1
scheduling ×1
scroll ×1
sortedset ×1
sql ×1
struct ×1
tuples ×1
types ×1
typescript ×1