我正在研究在我正在编写的一些java代码中使用一致的哈希算法.番石榴哈希库有一个consistentHash(HashCode, int)方法,但文档相当缺乏.我最初的希望是,我可以使用consistentHash()简单的会话亲和性来有效地在一组后端服务器上分配负载.
有没有人有一个如何使用这种方法的现实世界的例子?特别是我关心的是管理从目标范围中移除铲斗.
例如:
@Test
public void testConsistentHash() {
List<String> servers = Lists.newArrayList("server1", "server2", "server3", "server4", "server5");
int bucket = Hashing.consistentHash(Hashing.md5().hashString("someId"), servers.size());
System.out.println("First time routed to: " + servers.get(bucket));
// one of the back end servers is removed from the (middle of the) pool
servers.remove(1);
bucket = Hashing.consistentHash(Hashing.md5().hashString("blah"), servers.size());
System.out.println("Second time routed to: " + servers.get(bucket));
}
Run Code Online (Sandbox Code Playgroud)
导致输出:
First time routed to: server4 Second time routed to: server5
我想要的是在清除列表中较早的服务器之后将该标识符("someId")映射到同一服务器.所以在上面的示例中,删除后我想我想要桶0映射到"server1",桶1映射到"server3",桶2映射到"server4",桶3映射到"server5".
我是否应该维护一个单独的(比列表更复杂)数据结构来管理存储桶删除和添加?我想我可能已经设想了一个更复杂的Hashing API,可以在为我添加和删除特定存储桶后管理重新映射.
注意: …
我有一个由Objects填充的ArrayList.
我调用的对象类Article有两个字段;
public class Article {
private int codeArt;
private String desArt;
public Article(int aInt, String string) {
this.desArt = string;
this.codeArt = aInt;
}
public int getCodeArt() {return codeArt; }
public void setCodeArt(int codeArt) {this.codeArt = codeArt;}
public String getDesArt() {return desArt;}
public void setDesArt(String desArt) { this.desArt = desArt;}
}
Run Code Online (Sandbox Code Playgroud)
我想使用该desArt字段过滤我的List ,对于测试我使用了字符串"test".
我使用谷歌的Guava,它允许我过滤ArrayList.
这是我试过的代码:
private List<gestionstock.Article> listArticles = new ArrayList<>();
//Here the I've filled my ArrayList
private List<gestionstock.Article> filteredList filteredList = Lists.newArrayList(Collections2.filter(listArticles, Predicates.containsPattern("test")));
Run Code Online (Sandbox Code Playgroud)
但是这段代码不起作用.
静态初始化可修改地图的最佳方法是什么?我发现只
ImmutableMap.of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5)
Run Code Online (Sandbox Code Playgroud)
但是这种方式创建了不可变映射并包含固定的参数列表.
我有两个在其他线程上完成的ListenableFutures.每个未来都是不同的类型,我希望在它们完整时使用它们的两个结果.
有没有一种优雅的方式来处理这个使用番石榴?
我为一个名为ASN.1的文件格式编写了一个解析器,它使用Guice TypeLiteral.getFieldType(Field)将通用字段转换为特定的Java类型,因此我可以构造正确的类型(类似于Jackson或GSON数据绑定).但由于我已经依赖Guava并且它似乎有一个新的TypeLiteral替代品,我想改为使用TypeToken.根据Guave TypeToken文档:
TypeToken类似于Guice的TypeLiteral类,但有一个重要的区别:它支持非实现类型,如T,List<T>甚至List<? extends Number>; 而TypeLiteral不是.TypeToken也是可序列化的,并提供了许多额外的实用方法.
你能用一个字段的具体类型TypeToken吗?换句话说,我怎样才能在番石榴中做到以下几点?
import org.junit.Test;
import com.google.inject.TypeLiteral;
public class FieldTypeTest {
public static class A<T> {
T a;
}
public static class B {
A<String> b;
}
@Test
public void testTypeToken() throws SecurityException, NoSuchFieldException {
TypeLiteral<?> reifiedA = TypeLiteral.get(B.class).getFieldType(B.class.getDeclaredField("b"));
assertEquals(String.class, reifiedA.getFieldType(reifiedA.getRawType().getDeclaredField("a")).getRawType());
}
}
Run Code Online (Sandbox Code Playgroud) 是什么区别Futures.addCallBack(),并Futures.transform()在谷歌番石榴并发.
根据文件:
Futures.addCallBack():
addCallback(ListenableFuture<V> future, FutureCallback<? super V> callback)在Future的计算完成时,或者如果计算已经完成,立即注册单独的成功和失败回调.
Futures.transform():
transform(ListenableFuture<I> input, AsyncFunction<? super I,? extends O> function)返回一个新的ListenableFuture,其结果是从给定Future的结果异步派生的.
根据我的理解,addCallback()将在异步处理完成时注册成功或失败回调.在这种情况下,我们可以根据成功或失败条件处理输出(例如:日志记录,流量控制等.).并且transform()只返回异步对象.那么差异只是Callback?
AsyncFunction和Functionin有transform(ListenableFuture<I> input, Function/AsyncFunction <? super I,? extends O> function)什么区别?(AsyncFunction仅用于嵌套Futures.transform()?)我尝试了什么:
我尝试编写如下代码,这是否是一个好习惯.
public ListenableFuture<MyObject> doSomething() {
logger.info( "Entered in dosomething() Method." );
ListeningExecutorService executor =
MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(50));
ListenableFuture<MyObject> myAsyncObject =
calculator.calculateSomething(input);
//internally calculator.calculateSomething() have multiple asynchronous
// calls …Run Code Online (Sandbox Code Playgroud) private class Node
{
Item name;
Node next;
public void deleteObject()
{
this = null;
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以删除类中的对象?我试图在上面做,但它给出了一个错误,左侧应该是一个变量. Node是内在阶级.谢谢.
编辑:
var1并且var2引用了这个类的对象,当我var1通过执行删除时var1 = null,我希望它var2也会被删除.
我正在尝试动态地创建节点之间的关系.我遇到的问题是我无法使用变量来指定关系类型.
例如,我有数据:
{
nodes: [
{
"name":"Node1"
},
...
],
relationships: [
{
"sourceNode": "Node1",
"destinationNode": "Node2",
"relationshipType": "FRIEND"
},
...
]
}
Run Code Online (Sandbox Code Playgroud)
假设已创建所有节点.
我现在想要在类型的节点之间创建关系relationshipType.
我试着这样做:
WITH {json} AS document
UNWIND document.relationships AS relationship
MATCH (pdt:Node {name: relationship.sourceNode})
MATCH (cdt:Node {name: relationship.destinationNode})
CREATE (pdt)-[r:relationship.relationshipType]->(cdt)
RETURN pdt.name,type(r),cdt.name
Run Code Online (Sandbox Code Playgroud)
然而它很糟糕,[r:relationship.relationshipType]因为它期待一个明确的类型[r:CHILD].
是否可以使用变量来设置关系类型?
private Connection conn = DriverManager.getConnection(URL, info);
try {
String sql = "INSERT INTO \"STUD1582251\".\"ACCOUNTS\" VALUES USERNAME=?, PASSWORD=?, PORTFOLIONAME=?";
PreparedStatement stm = conn.prepareStatement(sql);
stm.setString(1, user.getUsername());
stm.setString(2, user.getPassword());
stm.setString(3, user.getPortfolioName());
System.out.println(sql);
stm.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
例外
SELECT username FROM"STUD1582251"."ACCOUNTS"WHERE username =?插入"STUD1582251"."帐户"值USERNAME =?,PASSWORD = ?, PORTFOLIONAME =?java.sql.SQLSyntaxErrorException:ORA-00933:SQL命令未正确结束
我知道这个问题之前已被问过几次,但答案并没有解决我的问题.我正在尝试执行此查询:
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM
'file:///C:/Users/Zona5/Documents/Neo4j/checkIntel/import/personaldata.csv' AS line1
MERGE (a:Address1 {address_name1:line1.address1})
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误:Cannot merge node using null property value for address_name1.
其他人建议使用:
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM
'file:///C:/Users/Zona5/Documents/Neo4j/checkIntel/import/personaldata.csv' AS line1
MERGE (a:Address1)
ON CREATE SET a.address_name1=line1.address1
ON MATCH SET a.address_name1=line1.address1
Run Code Online (Sandbox Code Playgroud)
但是,如果节点具有多个属性,则此解决方案有效.就我而言,它只有address_name1财产.
有没有办法解决这个问题,比如在查询MERGE或其他解决方案之前用查询中的单词替换空值?
谁能帮我...!我只想为图像设置拐角半径,并且图像也必须适合AspectFit比例尺。
如果我给scaleToFill模式,我可以使用下面的代码及其工作正常。但是图像被拉伸了。
self.productImg.layer.cornerRadius = 7
self.productImg.clipsToBounds = true
Run Code Online (Sandbox Code Playgroud)
但是,将比例尺给AspectFit时,如下图所示。
显示的绿色是图像视图,在该图像中图像设置为AspectFit。
实际形象
提供AspectFit模式时的图像
我需要图像,因为它实际上是给定的,并且还必须具有拐角半径。因此,请任何人给我解决方案以解决此问题。
提前致谢...!
java ×8
guava ×6
cypher ×2
neo4j ×2
arraylist ×1
asynchronous ×1
class ×1
concurrency ×1
cornerradius ×1
csv ×1
filtering ×1
future ×1
image ×1
ios ×1
null ×1
oracle ×1
sql ×1
swift ×1
uiimageview ×1