小编Jan*_*sch的帖子

Dojo Toolkit:如何转义HTML字符串?

我的HTML 5应用程序的用户可以在表单中输入他的名字,此名称将显示在其他地方.更具体地说,它将成为innerHTML一些HTML元素.

问题是,如果您在表单中输入有效的HTML标记,即可以使用某种HTML注入,则可以利用此功能.

用户名只存储并显示在客户端,因此最终用户自己是唯一受影响的人,但它仍然很草率.

在将它innerHTML放入Dojo 中的元素之前,有没有办法逃避字符串?我猜Dojo在某一点确实有这样的函数(dojo.string.escape())但它在版本1.7中不存在.

谢谢.

javascript dojo escaping innerhtml

13
推荐指数
2
解决办法
7411
查看次数

AtomicReference到可变对象和可见性

假设我有一个AtomicReference对象列表:

AtomicReference<List<?>> batch = new AtomicReference<List<Object>>(new ArrayList<Object>());
Run Code Online (Sandbox Code Playgroud)

线程A将元素添加到此列表:batch.get().add(o);

稍后,线程B获取列表,例如,将其存储在DB中:insertBatch(batch.get());

在写入(线程A)和读取(线程B)时,是否必须执行其他同步以确保线程B按照A离开的方式查看列表,或者由AtomicReference处理?

换句话说:如果我有一个可变对象的AtomicReference,并且一个线程更改了该对象,其他线程是否会立即看到此更改?

编辑:

也许一些示例代码是有序的:

public void process(Reader in) throws IOException {
    List<Future<AtomicReference<List<Object>>>> tasks = new ArrayList<Future<AtomicReference<List<Object>>>>();
    ExecutorService exec = Executors.newFixedThreadPool(4);

    for (int i = 0; i < 4; ++i) {
        tasks.add(exec.submit(new Callable<AtomicReference<List<Object>>>() {
            @Override public AtomicReference<List<Object>> call() throws IOException {

                final AtomicReference<List<Object>> batch = new AtomicReference<List<Object>>(new ArrayList<Object>(batchSize));

                Processor.this.parser.parse(in, new Parser.Handler() {
                    @Override public void onNewObject(Object event) {
                            batch.get().add(event);

                            if (batch.get().size() >= batchSize) {
                                dao.insertBatch(batch.getAndSet(new …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading mutable atomicreference

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

实践中的Java并发:BoundedExecutor中的竞争条件?

BoundedExecutorJava Concurrency in Practice一书中的实现有些奇怪.

当有足够的线程在Executor中排队或运行时,它应该通过阻止提交线程来限制任务提交给Executor.

这是实现(在catch子句中添加缺少的rethrow之后):

public class BoundedExecutor {
    private final Executor exec;
    private final Semaphore semaphore;

    public BoundedExecutor(Executor exec, int bound) {
        this.exec = exec;
        this.semaphore = new Semaphore(bound);
    }

    public void submitTask(final Runnable command) throws InterruptedException, RejectedExecutionException {
        semaphore.acquire();

        try {
            exec.execute(new Runnable() {
                @Override public void run() {
                    try {
                        command.run();
                    } finally {
                        semaphore.release();
                    }
                }
            });
        } catch (RejectedExecutionException e) {
            semaphore.release();
            throw e;
        }
    }
Run Code Online (Sandbox Code Playgroud)

当我BoundedExecutor用a Executors.newCachedThreadPool()和4的实例化实例化时,我希望缓存的线程池实例化的线程数永远不会超过4.但实际上,它确实如此.我已经得到了这个小测试程序来创建多达11个线程:

public static …
Run Code Online (Sandbox Code Playgroud)

java concurrency race-condition executor

8
推荐指数
3
解决办法
1511
查看次数

Spring:如何实例化一个采用运行时参数的Spring bean?

我有一个单例Spring bean,它java.util.concurrent.Callable在运行时创建了几个任务(并行)来并行完成它的工作.现在,Callable它们被定义为单例bean中的内部类,而单例bean只是通过实例化它们来创建它们new Task(in),其中in是仅在运行时知道的参数.

现在我想将内部Task类提取到常规顶级类,因为我想让Task的call()方法成为事务性的,所以我需要它成为一个Spring bean.

我想我需要为我的单例提供某种Tasks 的工厂,但是任务必须是原型Spring bean,它将运行时值作为构造函数参数.我怎么能做到这一点?

java parameters spring prototype

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

Spring表达式语言(SpEL):将String解析为int

我有一个(String显然)属性表示在几分钟内,我想转换为int之前我做一些算术并将其注入我的Spring bean.现在我有这个SpEL表达式:

#{T(java.lang.Integer).parseInt(myProperties['MIN_TIME']) * 60 * 1000}
Run Code Online (Sandbox Code Playgroud)

哪里myProperties是一个简单的java.util.Properties豆.

并不是说我对这个表达式特别恼火,但是:SpEL是否有更漂亮的内置方法将字符串解析成数值?

谢谢!

java spring spring-el

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

Neo4j:MERGE创建重复的节点

我的数据库模型有用户和MAC地址.用户可以拥有多个MAC地址,但MAC只能属于一个用户.如果某个用户设置了他的MAC并且MAC已经链接到另一个用户,则删除现有关系并在新所有者和该MAC之间创建新关系.换句话说,MAC在用户之间移动.

这是我用于分配MAC地址的Cypher查询的特定实例:

MATCH (new:User { Id: 2 })
MERGE (mac:MacAddress { Value: "D857EFEF1CF6" })
WITH new, mac
OPTIONAL MATCH ()-[oldr:MAC_ADDRESS]->(mac)
DELETE oldr
MERGE (new)-[:MAC_ADDRESS]->(mac)
Run Code Online (Sandbox Code Playgroud)

查询在我的测试中运行正常,但在生产中,由于某些奇怪的原因,它有时会创建重复的MacAddress节点(以及用户和每个节点之间的新关系).也就是说,特定用户可以具有多个MacAddress具有相同节点的节点Value.

我可以说它们是不同的节点,因为它们具有不同的节点ID.我也确定Values完全相同,因为我可以collect(distinct mac.Value)对它们进行操作,结果是一个带有一个元素的集合.上面的查询是代码中唯一创建MacAddress节点的查询.

我正在使用Neo4j 2.1.2.这里发生了什么?

谢谢,Jan

merge neo4j cypher

7
推荐指数
2
解决办法
2192
查看次数

返回DISTINCT时,Neo4j Cypher查询:"未知标识符"

为什么此查询有效(尽管有重复的行):

START user=node(1197)
MATCH (user)-[:WROTE_REVIEW]->()-[:EVALUATES]->(post)
RETURN post.Id, post.Image, post.Description
ORDER BY post.CreationTime DESC;
Run Code Online (Sandbox Code Playgroud)

而这个没有(它返回错误Unknown identifier 'post'):

START user=node(1197)
MATCH (user)-[:WROTE_REVIEW]->()-[:EVALUATES]->(post)
RETURN DISTINCT post.Id, post.Image, post.Description
ORDER BY post.CreationTime DESC;
Run Code Online (Sandbox Code Playgroud)

唯一的区别是DISTINCT关键字.

我找到了使用a的解决方法,WITH但在我看来,我不应该这样做.

我正在使用Neo4j 2.0.0-M05.有任何想法吗?

谢谢!

neo4j cypher

5
推荐指数
1
解决办法
405
查看次数

两个java.util.Iterators到同一个集合:他们必须以相同的顺序返回元素吗?

这更像是一个理论问题.如果我有一个c没有排序的任意集合,我java.util.Iterator通过调用c.iterator()两次得到两个,那么两个迭代器都必须以c相同的顺序返回元素吗?

我的意思是,在实践中他们可能永远都会,但他们是否被迫通过合同这样做?

谢谢,Jan

java api collections iterator contract

4
推荐指数
1
解决办法
934
查看次数

HyperSQL(HSQLDB):大量的插入性能

我有一个应用程序必须将大约1300万行大约10个平均长度的字符串插入到嵌入式HSQLDB中.我一直在调整东西(批量大小,单线程/多线程,缓存/非缓存表,MVCC事务,log_size/no日志,常规调用checkpoint,......),16核仍然需要7个小时,12 GB机器.

我之所以选择HSQLDB是因为我认为如果我把所有这些核心都用得很好,我可能会有很大的性能提升,但我真的开始怀疑我的决定.

有谁能告诉我银弹?

java performance bulkinsert hsqldb

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

Neo4jClient:对CRUD API的疑虑

我的持久层基本上使用Neo4jClient来访问Neo4j 1.9.4数据库.更具体地说,要创建我IGraphClient#Create()在Neo4jClient的CRUD API中使用的节点并查询图形,我使用Neo4jClient的Cypher支持.

一切都很好,直到我的一个朋友指出,对于每个查询,我基本上做了两个HTTP请求:

  • 一个请求通过节点的唯一ID(而不是其节点ID,但SnowMaker生成的唯一ID)从旧索引获取节点引用
  • 一个Cypher查询,从该节点引用开始,执行实际工作.

对于读取操作,我做了显而易见的事情并将索引查找移动到我的Start()调用中,即:

GraphClient.Cypher
    .Start(new { user = Node.ByIndexLookup("User", "Id", userId) })
    // ... the rest of the query ...
Run Code Online (Sandbox Code Playgroud)

另一方面,对于创建操作,我认为这实际上是不可能的.我的意思是:该Create()方法采用POCO,几个关系实例和几个索引条目,以便在一个事务/ HTTP请求中创建节点,其关系及其索引条目.问题是您传递给关系实例的节点引用:它们来自哪里?从以前的HTTP请求,对吗?

我的问题:

  1. 我是否可以使用CRUD API通过其ID查找节点A,从POCO创建节点B,在A和B之间创建关系并在一个请求中将B的ID添加到旧索引?
  2. 如果没有,有什么替代方案?CRUD API是否被认为是遗留代码,我们是否应该采用基于Cypher的Ne​​o4j 2.0方法?
  3. 这种基于Cypher的方法是否意味着我们失去了创建操作的POCO到节点的转换?那非常方便.

此外,Neo4jClient的文档可以更新,因为坦白说,它很差.我确实认识到Readify还提供商业支持,以便解释事情.

谢谢!

neo4jclient

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