我的HTML 5应用程序的用户可以在表单中输入他的名字,此名称将显示在其他地方.更具体地说,它将成为innerHTML一些HTML元素.
问题是,如果您在表单中输入有效的HTML标记,即可以使用某种HTML注入,则可以利用此功能.
用户名只存储并显示在客户端,因此最终用户自己是唯一受影响的人,但它仍然很草率.
在将它innerHTML放入Dojo 中的元素之前,有没有办法逃避字符串?我猜Dojo在某一点确实有这样的函数(dojo.string.escape())但它在版本1.7中不存在.
谢谢.
假设我有一个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) 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) 我有一个单例Spring bean,它java.util.concurrent.Callable在运行时创建了几个任务(并行)来并行完成它的工作.现在,Callable它们被定义为单例bean中的内部类,而单例bean只是通过实例化它们来创建它们new Task(in),其中in是仅在运行时知道的参数.
现在我想将内部Task类提取到常规顶级类,因为我想让Task的call()方法成为事务性的,所以我需要它成为一个Spring bean.
我想我需要为我的单例提供某种Tasks 的工厂,但是任务必须是原型Spring bean,它将运行时值作为构造函数参数.我怎么能做到这一点?
我有一个(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是否有更漂亮的内置方法将字符串解析成数值?
谢谢!
我的数据库模型有用户和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
为什么此查询有效(尽管有重复的行):
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.有任何想法吗?
谢谢!
这更像是一个理论问题.如果我有一个c没有排序的任意集合,我java.util.Iterator通过调用c.iterator()两次得到两个,那么两个迭代器都必须以c相同的顺序返回元素吗?
我的意思是,在实践中他们可能永远都会,但他们是否被迫通过合同这样做?
谢谢,Jan
我有一个应用程序必须将大约1300万行大约10个平均长度的字符串插入到嵌入式HSQLDB中.我一直在调整东西(批量大小,单线程/多线程,缓存/非缓存表,MVCC事务,log_size/no日志,常规调用checkpoint,......),16核仍然需要7个小时,12 GB机器.
我之所以选择HSQLDB是因为我认为如果我把所有这些核心都用得很好,我可能会有很大的性能提升,但我真的开始怀疑我的决定.
有谁能告诉我银弹?
我的持久层基本上使用Neo4jClient来访问Neo4j 1.9.4数据库.更具体地说,要创建我IGraphClient#Create()在Neo4jClient的CRUD API中使用的节点并查询图形,我使用Neo4jClient的Cypher支持.
一切都很好,直到我的一个朋友指出,对于每个查询,我基本上做了两个HTTP请求:
对于读取操作,我做了显而易见的事情并将索引查找移动到我的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请求,对吗?
我的问题:
此外,Neo4jClient的文档可以更新,因为坦白说,它很差.我确实认识到Readify还提供商业支持,以便解释事情.
谢谢!
java ×6
concurrency ×2
cypher ×2
neo4j ×2
spring ×2
api ×1
bulkinsert ×1
collections ×1
contract ×1
dojo ×1
escaping ×1
executor ×1
hsqldb ×1
innerhtml ×1
iterator ×1
javascript ×1
merge ×1
mutable ×1
neo4jclient ×1
parameters ×1
performance ×1
prototype ×1
spring-el ×1