在那里,我虽然理解了Java泛型,但在我尝试编写以下代码之前:
class A{}
class B{
A a;
<T extends A> T getA(){
return a; // does not compile
}
}
Run Code Online (Sandbox Code Playgroud)
我收到一个编译错误,说类型不兼容:需要T,找到A.
谢谢!
我正在运行一个非常简单的性能实验,我将 2000 个文档发布到我的应用程序中。谁将它们持久化到关系数据库并将它们发送到 Solr 进行索引(同步,在同一请求中)。
我正在测试 3 个用例:
第三个结果没有任何意义,我希望行为类似于第 2 点中的行为。起初我认为文档没有真正提交,但我实际上可以通过在实验期间执行一些查询来看到它们被添加(通过 solr Web UI)。
我担心我错过了一些非常重要的东西。每次添加后提交是否有可能将性能降低 400 倍?!
我用于第 2 点的代码:
SolrInputDocument = // get doc
SolrServer solrConnection = // get connection
solrConnection.add(doc);
solrConnection.commit();
Run Code Online (Sandbox Code Playgroud)
作为第 3 点的代码:
SolrInputDocument = // get doc
SolrServer solrConnection = // get connection
solrConnection.add(doc, 1); // According to API documentation …
Run Code Online (Sandbox Code Playgroud) 所以我们有默认方法,也被称为防御方法和'虚拟扩展方法'.
虽然我很欣赏默认方法的巨大价值(在某些方面甚至比它们的C#对应物更强大)但我想知道什么是允许扩展现有接口而不访问其源代码的决定.
在他的一个答案中, Brian Goetz提到默认方法是为了方便和界面演变而设计的.因此,如果我们编写一个接口,我们可以在那里填充我们通常必须放在一个单独的类中的各种实用方法.那么为什么不加倍努力并允许它不受我们控制的接口?
我正在尝试调整一个火花工作。
我正在使用数据块来运行它,在某些时候我看到了这张图片:
请注意,在第 12 阶段,我只有一个分区——这意味着没有并行性。我怎样才能推断出这种情况的原因?可以肯定的是,我的代码中没有任何“重新分区(1)”。
添加(稍微混淆的)代码:
spark.read(cid, location).createOrReplaceTempView("some_parquets")
parquets = spark.profile_paqrquet_df(cid)
parquets.where("year = 2018 and month = 5 and day = 18 and sm_device_source = 'js'"
.createOrReplaceTempView("parquets")
# join between two dataframes.
spark.sql(
"""
SELECT {fields}
FROM some_parquets
WHERE some_parquets.a = 'js'
AND some_parquets.b = 'normal'
AND date_f >= to_date('2018-05-01')
AND date_f < to_date('2018-05-05')
limit {limit}
""".format(limit=1000000, fields=",".join(fields))
).createOrReplaceTempView("some_parquets")
join_result = spark.sql(
"""
SELECT
parquets.some_field,
struct(some_parquets.*) as some_parquets
FROM some_parquets
LEFT ANTI JOIN some_ids ON some_parquets.sid = some_ids.sid
LEFT OUTER …
Run Code Online (Sandbox Code Playgroud) 我刚刚编写了一个小单元测试,其中我使用了StringBuilder.
var stringBuilder = new StringBuilder();
stringBuilder.Append("Foo");
Assert.AreEqual(stringBuilder, "Foo");
Run Code Online (Sandbox Code Playgroud)
此测试将失败.
Expected: <Foo>
But was: "Foo"
Run Code Online (Sandbox Code Playgroud)
但是,如果我将Assert更改为
Assert.AreEqual(stringBuilder.ToString(), "Foo");
Run Code Online (Sandbox Code Playgroud)
测试将通过.
那么隐式调用和ToString()方法的显式调用之间有什么区别?或者/这些括号(<>)代表什么?
java ×3
apache-spark ×1
api-design ×1
c# ×1
commit ×1
databricks ×1
generics ×1
java-8 ×1
java-9 ×1
java-platform-module-system ×1
jetty ×1
performance ×1
solr ×1
solrj ×1
tostring ×1
unit-testing ×1