小编Cam*_*ron的帖子

Castle Windsor - 如何根据构造函数参数解析组件

说我有这样的组件

public class MyComponent
{
    public MyComponent(string name)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

我基本上希望在解析它时提供的构造函数参数作为组件标识符的一部分.如果您从未使用该组参数解决它,它将实例化一个新参数.

换句话说,我想以某种方式修改以下测试以成功:

IWindsorContainer container = new WindsorContainer();
container.Register(Component.For<MyComponent>());
MyComponent a1 = container.Resolve<MyComponent>(new { name = "a" });
MyComponent a2 = container.Resolve<MyComponent>(new { name = "a" });
MyComponent b = container.Resolve<MyComponent>(new { name = "b" });

Assert.AreSame(a1, a2);
Assert.AreNotSame(a1, b);
Run Code Online (Sandbox Code Playgroud)

目前它失败了,因为它将使用name = a进行实例化,然后为所有将来的name = a和name = b返回相同的对象.

谢谢!

castle-windsor ioc-container

9
推荐指数
1
解决办法
8888
查看次数

SQL Server日志:"发生了无效的浮点运算" - 即使输入在范围内

我收到错误消息

Msg 3623, Level 16, State 1, Line 25
An invalid floating point operation occurred.
Run Code Online (Sandbox Code Playgroud)

从SQL Server 11.0.2100(在AWS RDS实例上)进行以下查询:

SELECT SUM(LOG(col + 1)) FROM MyTable;
Run Code Online (Sandbox Code Playgroud)

col的所有值都在-0.1和0.1的范围内.

如果我从查询中删除SUM,它运行正常,这意味着LOG的输入是正确的:

SELECT LOG(col + 1) FROM MyTable;
Run Code Online (Sandbox Code Playgroud)

另外,如果我选择上面的临时表,然后对临时表中的值进行SUM,这也可以正常工作,这意味着SUM没有任何问题:

SELECT LOG(col + 1) thelog INTO #x FROM MyTable;
SELECT SUM(thelog) FROM #x;
DROP TABLE #x;
Run Code Online (Sandbox Code Playgroud)

只有当我一起运行SUM和LOG时才会出现问题.

为什么会这样?是否有可能SQL Server以某种方式将+1重新排列在LOG之外,以便LOG输入超出范围?

注意:在查询中放置一个CASE WHEN col> -1也可以修复它,但这不应该是必需的,因为col + 1的所有值都在范围内.我想知道这可能是什么原因......

sql sql-server

8
推荐指数
1
解决办法
2万
查看次数

clock_gettime(CLOCK_MONOTONIC,..)偶尔会跳回来

可能重复:
Linux clock_gettime(CLOCK_MONOTONIC)奇怪的非单调行为

在遇到Erlang崩溃的一些问题之后,我编写了一个程序,它反复调用clock_gettime(CLOCK_MONOTONIC,&ts)并检查它是否会倒退,不幸的是它有时会倒退.

这是我正在使用的测试程序:

#include <time.h>
#include <stdio.h>
#include <stdlib.h>

int main() {
    struct timespec ts_start;
    struct timespec ts_end;
    int i;

    clock_gettime(CLOCK_MONOTONIC, &ts_start);
    clock_gettime(CLOCK_MONOTONIC, &ts_end);

    for(i = 0; i<10000000; i++) {
            if(ts_end.tv_sec <= ts_start.tv_sec
               && ts_end.tv_nsec < ts_start.tv_nsec) {
                    printf("ERROR!\n");
                    return 1;
            }


            ts_start.tv_sec = ts_end.tv_sec;
            ts_start.tv_nsec = ts_end.tv_nsec;
            clock_gettime(CLOCK_MONOTONIC, &ts_end);
    }

    printf("OK\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在我的Hyper-V VM(内核2.6.18-238.12.1.e15,已尝试其他)上,它偶尔会输出ERROR,但在物理机器上它总是输出OK.

知道为什么CLOCK_MONOTONIC不会单调吗?

linux hyper-v clock virtual-machine

5
推荐指数
0
解决办法
745
查看次数

使用DynamoDB上以指定文本开头的列检索所有项目

我在DynamoDB中有一个表:

Id: int, hash key
Name: string
Run Code Online (Sandbox Code Playgroud)

(还有更多列,但我省略了它们)

通常我只是通过他们的Id拉出并更新项目,这个架构可以正常工作.

但是,其中一个要求是根据名称生成一个自动完成下拉框.我希望能够在此DynamoDB表中查询以查询字符串开头的Name列的所有项目.

解决这个问题的SQL方法是在Name上添加一个索引,然后编写一个像SELECT Id FROM table WHERE Name LIKE'query %'这样的查询,但我无法弄清楚这种方法是否支持DynamoDB.

我考虑了几种方法来解决这个问题:

  1. 扫描表格.这是最简单的选择,但效率最低.这张表中的数据比我经常扫描的数据要多一些.
  2. 扫描+将其缓存在内存中.但后来我不得不担心缓存失效等问题.
  3. 使Name成为一个范围键,它支持查询的starts_with函数.但是,我仍然需要扫描表,因为我想检索每个哈希键的结果,所以这不起作用.
  4. 创建一个全局二级索引,并仅使用范围键进行查询.这似乎也不可行.我可以有一个静态值的列,并使用它作为GSI的哈希键,但这似乎是一个非常丑陋的黑客.
  5. 使用像CloudSearch这样的全文搜索引擎,但这对我的用例来说似乎有点过分.

这个问题有一个简单的解决方案吗?

amazon-dynamodb

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