小编Vit*_*liy的帖子

Java泛型澄清

在那里,我虽然理解了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.

  1. 为什么我收到错误?
  2. 我很乐意参考一篇描述这种java泛型陷阱的文章.

谢谢!

java generics

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

使用 commitWithin 的 Solr 性能没有意义

我正在运行一个非常简单的性能实验,我将 2000 个文档发布到我的应用程序中。谁将它们持久化到关系数据库并将它们发送到 Solr 进行索引(同步,在同一请求中)。

我正在测试 3 个用例:

  1. 根本没有索引 - 大约 45 秒发布 2000 个文档
  2. 包括索引 - 每次添加后提交。约 8 分钟 (!) 发布和索引 2000 个文档
  3. 包括索引 - commitWithin 1ms ~55 秒 (!) 发布和索引 2000 个文档

第三个结果没有任何意义,我希望行为类似于第 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)

performance solr commit solrj

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

仅从Jetty的响应标头中删除版本号

此答案解释了如何使用HttpConfiguration.setSendServerVersion(false)完全删除服务器版本标头.

有没有办法保留标题,只删除版本

我正在使用Jetty 9.

jetty embedded-jetty

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

不允许在java 8中使用扩展方法的站点注入的设计考虑是什么?

所以我们有默认方法,也被称为防御方法和'虚拟扩展方法'.

虽然我很欣赏默认方法的巨大价值(在某些方面甚至比它们的C#对应物更强大)但我想知道什么是允许扩展现有接口而不访问其源代码的决定.

在他的一个答案中, Brian Goetz提到默认方法是为了方便和界面演变而设计的.因此,如果我们编写一个接口,我们可以在那里填充我们通常必须放在一个单独的类中的各种实用方法.那么为什么不加倍努力并允许它不受我们控制的接口?

java extension-methods api-design java-8 default-method

4
推荐指数
2
解决办法
275
查看次数

哪里可以找到Java 9模块描述符引用?

似乎模块系统最新状态有点过时,因为它仍然提到"需要公开"而不是"需要传递".

哪里可以找到模块系统的最新规格?

java java-platform-module-system java-9

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

Spark 作业折叠成一个分区,但我不明白为什么

我正在尝试调整一个火花工作。

我正在使用数据块来运行它,在某些时候我看到了这张图片:

在此处输入图片说明

请注意,在第 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)

apache-spark databricks

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

隐式与显式StringBuilder.ToString()cethod调用

我刚刚编写了一个小单元测试,其中我使用了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()方法的显式调用之间有什么区别?或者/这些括号(<>)代表什么?

c# stringbuilder unit-testing tostring implicit-conversion

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