我见过很多次这样的代码:
List<String> list = new ArrayList<String>();
为什么人们采用ArrayList(和其他类)的父代替生成对象的类型?
这会降低性能吗?或者为什么有人这样做?
我有兴趣实现Rabin-Karp算法来搜索维基上所述的子字符串:http://en.wikipedia.org/wiki/Rabin-Karp_string_search_algorithm.不是为了完成家庭作业,而是为了自身利益.我已经实现了Rabin-Karp算法(如下所示)并且它可以工作.但是,性能真的非常糟糕!我知道我的哈希函数是基本的.但是,似乎对strstr()的简单调用总是胜过我的函数rabin_karp().我可以理解为什么 - 哈希函数比简单的char-by-char比较每个循环做更多的工作.我在这里错过了什么?Rabin-Karp算法应该比调用strstr()更快吗?何时最好使用Rabin-Karp算法?因此,我的自身利益.我甚至实现了算法吗?
size_t hash(char* str, size_t i)
{
size_t h = 0;
size_t magic_exp = 1;
// if (str != NULL)
{
while (i-- != 0)
{
magic_exp *= 101;
h += magic_exp + *str;
++str;
}
}
return h;
}
char* rabin_karp(char* s, char* find)
{
char* p = NULL;
if (s != NULL && find != NULL)
{
size_t n = strlen(s);
size_t m = strlen(find);
if (n > m)
{
size_t hfind …Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的Check类,它具有阻塞waitForCondition()方法。此方法被阻止。我想为此方法创建一些单元测试。首先,该方法应在满足条件时返回。其次,该方法应在被中断时返回。
在内部,Check该类具有ArrayBlockingQueueand调用其take()方法,所以我的测试实际上是关于正确编码条件的逻辑(应该如此)。在应用程序中,Check该类的数据由另一个线程通过InputData方法提供。该InputData方法对传入的数据执行逻辑,并在满足条件时将虚拟对象放置在ArrayBlockingQueue中。这应该导致waitForCondition()返回。
因此,我的第一个想法是我可以InputData通过模拟来测试,并检查是否满足条件时将虚拟对象添加到队列中。这将需要更改类的设计,因为队列是私有数据成员(除非可以模拟私有数据)。InputData满足条件时,与其直接添加到队列中,不如调用可能被嘲笑的东西。
但是waitForCondition(),如果InputData功能正常,则存在检查方法本身的问题。它实际上是简单的代码:
try {
myArrayBlockingQueue.take();
return true;
} catch (InterruptedException ex) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
所以我想知道是否值得想象的麻烦:一个测试创建一个带有的另一个线程Check,调用waitForCondition(),然后在完成后返回结果。也许,使用执行器服务。模糊部分是如何同步assertTrue(...)。我发现这篇关于异步测试的文章似乎可以解决问题。
问题摘要:
InputData()吗?waitForCondition()时间InputData()吗?waitForCondition()直接测试更好?我目前正在使用mongodb,我发现查询性能非常差(可能需要几秒钟).方案如下:
我有一个结构文件:
{_id:"xxx", userId:"yyy", a:1 ,b:2, counter:1}
Run Code Online (Sandbox Code Playgroud)
在测试中:
"userId" value could be {1..200,000}
"a" values could be {1..30}
"b" values could be {1}
Run Code Online (Sandbox Code Playgroud)
因此,我的最大尺寸集合将为6,000,000.目前,为此集合定义了两个索引: default _id and useId
业务逻辑查询所有用户条目,然后通过递增计数器来更新一个(查询更新由"_id"写入).此外,如果这是一个新实体,则有一个插入查询.
我在ubuntu上使用mongo 1.8.2和8g ram运行
我有一个主辅助复制(所有mongo运行本地磁盘存储和一个子网与tomcat服务器).当然所有读取都会进入辅助节点并写入主节点.我没有测试分片,因为我认为6,000,000不是一个巨大的收藏,不是吗?
另外,我运行jmetter测试,一次使用不同的userIds生成500个线程请求.
当我运行mongostat时,我看到%锁定非常高(大约70%),大约5-10分钟的加载后,我看到qw(写入队列)是500(作为我打开的连接的数量)当我停止服务器需要mongo大约10-20分钟来完成所有排队的任务
我也运行了db.serverStatus()并解释,结果看起来很好.当我运行db.currentOp()时,我看到等待'write'锁的查询我无法将currentOp的输出文件完全分析,因为我从命令行执行了查询,只有窗口缓冲区尺寸.但是从那里我看到了许多等待写锁的更新(通过_id).
我会感激任何想法.
还有一件事:因为每个查询可能会带来30个文档,我认为可能有不同的moddeling如下:
{_id:"xxx", userId:"123", bs: [{b:1, cs[{c:1, cnt:1}, {c:2, cnt:1}}, {{b:2 cs: [{c:1, cnt:1}]}}]
Run Code Online (Sandbox Code Playgroud)
但是当我尝试这种建模时,我无法增加计数器,我只是没有找到正确的方法来做到这一点.我可以做插入和推芽无法更新以下查询:
db.coll.update({userId:"123", "bs.b":1, "bs.cs.c":1}, {"bs.cs.cnt" : {$inc : 1})
Run Code Online (Sandbox Code Playgroud)
我在查询中有关于非法"点"的错误
我现在很累.等待一些好主意
非常感谢
Julia
架构:
{
name: String,
available: Boolean,
for: String
}
Run Code Online (Sandbox Code Playgroud)
有"一个":
{
name: "a",
available: true,
for: ["b", "c"]
}
Run Code Online (Sandbox Code Playgroud)
和"b":
{
name: "b",
available: true,
for: ["a", "b]
}
Run Code Online (Sandbox Code Playgroud)
如果我更新a.available = false,我应该同时更新b.available = false.我怎么能更新两个文件,并确保在更新"a"和"b"之间没有其他进程/线程获得"b".
我有一大堆文件,如:
{ loc: [10.32, 24.34], relevance: 0.434 }
Run Code Online (Sandbox Code Playgroud)
并希望能够有效地执行以下查询:
{ "loc": {"$geoWithin":{"$box":[[-103,10.1],[-80.43,30.232]]}} }
Run Code Online (Sandbox Code Playgroud)
随意的盒子.
添加2d索引loc使得这非常快速和有效.但是,我现在也想获得最相关的文件:
.sort({ relevance: -1 })
Run Code Online (Sandbox Code Playgroud)
这导致一切都被抓到了(在任何特定的盒子里都会有大量的结果,而我只需要前10名左右).
任何建议或帮助非常感谢!!
我有一个BasicDBObject调试时似乎持有:
{ "_id" : { "p_key" : { "$date" : "2012-02-02T00:00:00Z"} , "d_key" : 222} , "t_key" : 10195 , "w_key" : 4 , "f_key" : { "$date" : "2012-02-02T00:00:00Z"}}
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试:
dbObject.get("_id.d_key"));
Run Code Online (Sandbox Code Playgroud)
我得到一个空指针异常.
对我在这里做错了什么的想法?
我试图获得d_key内部的价值_id.
如何在Java中为变量分配2个字节?我知道我可以这样做:
byte val = 2; // this is one byte with 0000 0010
Run Code Online (Sandbox Code Playgroud)
但我需要为val分配2个字节.我怎样才能做到这一点?
我们正在讨论如何在MongoDB中存储日期.我仍然是Mongo的新手,所以当我在文档中看到以下内容时(http://api.mongodb.org/perl/MongoDB/DataTypes.html#Dates)我想知道:
警告:创建DateTime对象非常慢.考虑将日期保存为数字,并在需要时将数字转换为DateTimes.单个DateTime字段可以使反序列化速度降低10倍.
如果我们只是存储它们并让它们对商店中的对象进行查询,这是一回事,但似乎如果我们对这些字段进行过滤或排序则是另一个.问题是从数字到DateTime来回转换.欢迎任何关于性能考虑的想法.谢谢.
如何在IOS中将GMT转换为IST?我有代码可以给我时间GMT.但我想将其转换为相应的本地时区并在我的应用程序中使用它.我怎样才能做到这一点 ?提前致谢.
我是java新手,想要使用jsoup java库.我下载了jar文件,并将其包含在我的项目中.接下来,我想在他们的页面上运行一个简单的例子
String html = "<html><head><title>First parse</title></head>"
+ "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);
Run Code Online (Sandbox Code Playgroud)
在第二行我得到错误:
Type mismatch: cannot convert from org.jsoup.nodes.Document to
javax.swing.text.Document
Run Code Online (Sandbox Code Playgroud)
并提供:
将'cast'添加到文档或更改类型(org.jsoup.nodes.Document doc = Jsoup.parse(html);)
问题是什么?我忘了做某事吗?
java ×5
mongodb ×5
performance ×2
algorithm ×1
arraylist ×1
c# ×1
c++ ×1
datetime ×1
eclipse ×1
ios ×1
iphone ×1
list ×1
mongodb-java ×1
objective-c ×1
rabin-karp ×1
string ×1
transactions ×1
unit-testing ×1
xcode ×1