想象一下路径"/ root/child1/child2/child3"
想象一下,在zookeeper中,可能存在其中一部分,比如"/ root/child1"
在zookeeper中没有"mkdir -p"的等价物; 此外,如果任何一个操作失败,ZooKeeper.multi()将失败,因此"make path"无法真正融入多次调用.此外,你可以让其他一些客户尝试制作相同的路径......
这就是我为创建路径而想出的.我想知道是否值得检查一个部件是否存在,以保存exists()调用的往返.
//String[] pathParts new String[] { "root", "child1", "child2", "child3" };
public void savePath(String[] pathParts) {
if (zooKeeper.exists(pathString, false) != null) return;
StringBuilder path = new StringBuilder();
for (String pathElement : pathParts) {
path.append(UNIX_FILE_SEPARATOR).append(pathElement);
String pathString = path.toString();
try {
//bother with the exists call or not?
if (zooKeeper.exists(pathString, false) == null) {
zooKeeper.create(pathString, null, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
}
} catch (KeeperException e) {
if (e.code() != KeeperException.Code.NODEEXISTS)
throw e;
}
}
} …Run Code Online (Sandbox Code Playgroud) 有哪些选项,最好是Java?
我见过将XPath扩展到对象的JXPath.还有别的事吗?
编辑:通过树查询语言,我的意思是一种语言,可以创建与组织到树中的对象(通过任何属性)匹配的表达式.
Edit2:示例:
假设我有一个这些对象的树:
public interface Node {
String getName();
int getValue();
String getSomeOtherAttribute();
List<Node> getChildren();
Node getParent();
}
Run Code Online (Sandbox Code Playgroud)
现在想象一下这些的层次结构.我正在寻找的是可以查询此树中的实例的东西.例如"给我所有名称为"bar"的节点实例,值小于100,父级为"foo",父级父级为"joe".所有这些都用一种简洁的语言表达.
正如我所说,JXPath是一种选择.寻找他人.我还没找到.
顺便说一句,我认为JXPath查询看起来像"// joe/foo/bar [@value <100]"(或类似的东西)
someroot
|
joe
/ | \
c d foo
/ \
f bar,99
Run Code Online (Sandbox Code Playgroud) 我有一个像这样的项目设置:
parent
|_____project-a
|_____project-b
Run Code Online (Sandbox Code Playgroud)
我想在类测试项目-B的文件夹中的项目-A的测试文件夹来解决类.
实际上,我想从主文件夹和测试文件夹中访问两个类.
这可能吗?
谢谢
锁定的特殊功能,哪一个,如果哪一个,更昂贵?我在这方面找不到任何基准.
对于不需要特殊功能的情况,Lock有什么优势吗?
谢谢.
我希望懒洋洋地创建一些东西并将结果缓存为优化.下面的代码是安全有效的,还是有更好的方法来做到这一点?这里需要比较和设置循环吗?
...
AtomicReference<V> fCachedValue = new AtomicReference<>();
public V getLazy() {
V result = fCachedValue.get();
if (result == null) {
result = costlyIdempotentOperation();
fCachedValue.set(result);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
编辑:我的示例中设置的值来自expensiveIdempotentOperation(),无论什么线程调用它,它总是相同的.
我正在寻找一种有效的分位数算法,该算法允许样本值随着时间的推移而“更新”或替换。
假设我有 items 的值1-n。我想将这些放入一个可以有效存储它们的分位数算法中。但是然后说在将来的某个时候, for 的值item-i会增加。我想删除原始值item-i并将其替换为更新后的值。特定用例适用于样本值随时间增加的流系统。
我见过的最接近这样的东西是t-Digest 数据结构。它有效地存储样本值。它唯一缺乏的是删除和替换样本值的能力。
我还查看了Apache Quantiles Datasketch - 它遇到了同样的问题 - 无法删除和替换样本。
编辑:更多地考虑这一点,不一定需要删除旧值并插入增加的值。如果存在只能更新值的约束,则可能有一种方法可以更轻松地重新计算内部状态。
因此,已经有一种方法可以在IntelliJ(v11)中生成类的实现,但它非常简单.
它将创建一个具有满足接口所需的所有方法的类.这些方法为空,并在适当的位置返回null.
我正在寻找的是一个插件或将从界面生成bean的东西.如果生成器在接口中看到方法getXXXX或setXXX(或isXXX),它将创建该类型的成员并分别在实现的类中获取或返回该成员.
所以我试图创建写入时复制映射,它使用读取端的原子引用计数尝试来锁定.
有些事情不太对劲.我看到一些引用过度增加,有些引用下降,所以某些东西不是真正的原子.在我的测试中,我有10个读取器线程循环100次,每次执行get()和1个写入器线程执行100次写入.
它在作者中陷入困境,因为有些引用永远不会降到零,即使它们应该也是如此.
我正在尝试使用本博客解释的128位DCAS技术.
这有什么明显的错误或是否有更简单的方法来调试它而不是在调试器中使用它?
typedef std::unordered_map<std::string, std::string> StringMap;
static const int zero = 0; //provides an l-value for asm code
class NonBlockingReadMapCAS {
public:
class OctaWordMapWrapper {
public:
StringMap* fStringMap;
//std::atomic<int> fCounter;
int64_t fCounter;
OctaWordMapWrapper(OctaWordMapWrapper* copy) : fStringMap(new StringMap(*copy->fStringMap)), fCounter(0) { }
OctaWordMapWrapper() : fStringMap(new StringMap), fCounter(0) { }
~OctaWordMapWrapper() {
delete fStringMap;
}
/**
* Does a compare and swap on an octa-word - in this case, our two adjacent class members fStringMap
* pointer and …Run Code Online (Sandbox Code Playgroud) 我能看到如何做到这一点的唯一方法是尝试访问它并捕获抛出的异常(如果它不存在).
bool exists()
{
using namespace boost::interprocess;
try
{
managed_shared_memory segment(open_only, kSharedMemorySegmentName);
return segment.check_sanity();
}
catch (const std::exception &ex) {
std::cout << "managed_shared_memory ex: " << ex.what();
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
请注意,这不是关于让apache接受入站SSL连接的问题.
我有一个需要进行出站SSL连接的apache模块.当它尝试时,它会收到此错误:
Failed to send events: The OpenSSL library reported an error: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed:s3_clnt.c:1269:
这表明apache正在使用的SSL库不知道我的模块尝试连接的服务器的(有效)证书.
我运行的ubuntu系统上的CA证书很好,知道这个下游证书,openssl s_client告诉我一切正常.
如何告诉Apache2使用ubuntu的系统CA证书使出站连接有效?
更新 - 我做了一个strace -e open httpd -X,看看它试图从哪里加载证书.我看到apache打开libssl.so,但后来我甚至没有看到它试图打开通常的ssl.cnf或任何证书文件.
snipped useless strace output
update2:至于我是如何创建https请求的 - 我是从我的自定义apache模块中发出请求的.我的模块.so是用Rust编写的,所以连接代码基本上看起来像:
在mod_mine.so中:
use hyper::Client;
use hyper_tls::HttpsConnector;
use tokio_core::reactor::Core;
let mut core = Core::new()?;
let handle = core.handle();
let client = Client::configure()
.connector(HttpsConnector::new(4, &handle)?)
.build(&handle);
//actually a POST, but this gets the same error
let request = client.get("https://saas.mycompany.io".parse()?);
let result = core.run(request)?;
... //process …Run Code Online (Sandbox Code Playgroud) java ×7
concurrency ×3
c++ ×2
apache ×1
atomic ×1
boost ×1
data-science ×1
hadoop ×1
https ×1
interface ×1
javabeans ×1
maven ×1
maven-2 ×1
maven-3 ×1
quantile ×1
ssl ×1
statistics ×1
tree ×1
ubuntu ×1
unit-testing ×1