小编Ban*_*ore的帖子

什么时候流优先于传统循环以获得最佳性能?流是否利用分支预测?

我刚刚阅读了有关Branch-Prediction的内容,并想尝试使用Java 8 Streams.

然而,Streams的性能总是比传统的循环更差.

int totalSize = 32768;
int filterValue = 1280;
int[] array = new int[totalSize];
Random rnd = new Random(0);
int loopCount = 10000;

for (int i = 0; i < totalSize; i++) {
    // array[i] = rnd.nextInt() % 2560; // Unsorted Data
    array[i] = i; // Sorted Data
}

long start = System.nanoTime();
long sum = 0;
for (int j = 0; j < loopCount; j++) {
    for (int c = 0; c < totalSize; …
Run Code Online (Sandbox Code Playgroud)

java performance java-8 branch-prediction java-stream

43
推荐指数
5
解决办法
5878
查看次数

Golang多个字段具有相同的json标签名称

如何将 JSON 解组为包含 2 个包含相同 JSON 标签名称 ( ) 的字段 (UserName和)的结构?Namename

package main

import (
    "encoding/json"
    "fmt"
)

type User struct {
    UserName string `json:"name,omitempty"`
    Name     string `json:"name,omitempty"`
}

func main() {
    data := []byte(`
                {
                    "name":"kishore"
                }
            `)
    user := &User{}
    err := json.Unmarshal(data, &user)
    if err != nil {
        panic(err)
    }
    fmt.Printf("value of user : %+v\n", user)
}
Run Code Online (Sandbox Code Playgroud)

实际输出: value of user : &{UserName: Name:}

预期输出: value of user : &{UserName:kishore Name:kishore}

如何获取UserName …

json struct go

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

Jersey 中是否有类似于 Spring 的 HandlerInterceptor 的拦截器

我需要 Jersey 2.x 中的拦截器,它提供对请求、响应和与 Web 服务路径匹配的方法的引用。

类似于Spring 的HandlerInterceptor的东西。

要求:

  1. 需要在类上使用注释- 执行以下检查,仅当需要被 jersey 调用的相应方法未使用自定义注释进行注释时。
  2. 请求- 获取/设置属性并获取会话对象以验证用户。
  3. 响应- 重新定向调用,以防任何验证在调用相应的方法之前都失败。

Spring等效代码:

public class WebServiceInterceptor implements HandlerInterceptor {
     @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        try {
            SkipWebServiceIntercept skipWebService = handler.getClass().getAnnotation(SkipWebServiceIntercept.class);

            if (skipWebService != null) {
                return Boolean.TRUE;
            }

            ...

            if(securityFails)
            {
                if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
                    response.setCharacterEncoding("utf-8");
                    response.setContentType("application/json");
                    PrintWriter out = response.getWriter();
                    String json;
                    ...
                    out.println(json);
                    return Boolean.FALSE;
                }
                else {
                    response.sendRedirect(redirectUrl);
                }
            }
            else …
Run Code Online (Sandbox Code Playgroud)

spring filter interceptor servlet-filters jersey-2.0

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

为什么Java8中的最小粒度定义为8192,以便从Parallel Sort切换到Arrays.sort,而不管数据类型如何

我正在阅读Java 8中引入的并行排序的概念.根据文档.

如果指定数组的长度小于最小粒度,则使用适当的Arrays.sort方法对其进行排序.

但是规范没有规定这个最低限度.
当我查找代码时,java.util.Arrays它被定义为

private static final int MIN_ARRAY_SORT_GRAN = 1 << 13; 
Run Code Online (Sandbox Code Playgroud)

即,数组中的8192个

根据这里提供的解释.我理解为什么值被硬编码为8192.

它的设计考虑了当前的CPU架构.默认情况下启用
-XX:+UseCompressedOops选项,任何RAM少于32GB的系统都将使用32位(4字节)指针.现在,对于数据部分,L1 Cache大小为32KB,我们可以将32KB/4Bytes = 8KB的数据一次传递给CPU进行计算.这相当于一次处理8192个字节的数据.

因此,对于正在对字节数组进行排序的函数,这是parallelSort(byte[])有意义的.您可以将最小并行排序限制保持为8192个值(每个值=字节数组的1个字节).

但如果你考虑 public static void parallelSort(int[] a)

整数变量为4Bytes(32位).理想情况下,8192字节,我们可以同时在CPU缓存中存储8192/4 = 2048个数字. 因此,在这种情况下,最小粒度假设为2048.

为什么所有parallelSort函数都使用Java(包括byte [],int [],long []等),使用8192作为默认min.为了执行并行排序所需的值的数量?
它应该根据传递给parallelSort函数的类型而有所不同吗?

java arrays sorting java-8

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

如何确保节俭对象向后兼容?

我们目前正在使用节俭来开发我们的微服务。当我最近遇到以下问题时。

假设下面是摘要对象的节约合同,并且有一个API可使用传递的摘要对象来获取和更新摘要。

版本-1.0

struct Summary {
    1: required string summaryId,
    2: required i32 summaryCost
}

Summary getSummary(1: string summaryId);

void updateSummary(1: Summary summary);
Run Code Online (Sandbox Code Playgroud)

现在,假设有5个服务正在使用此1.0摘要协议。
在下一发行版中,我们添加另一个对象,该对象称为summaryvalue列表

所以新合同看起来像

版本-2.0

struct Summary {
    1: required string summaryId,
    2: required i32 summaryCost,
    3: optional list<i32> summaryValues
}

Summary getSummary(1: string summaryId);

void updateSummary(1: Summary summary);
Run Code Online (Sandbox Code Playgroud)
  1. 因此,当填充以下列表时,我们将保存值summaryValuesaganist 的列表summaryId
  2. 当客户端发送此列表时,null我们将删除为该“ summaryId”保存的现有值。

现在的问题发生时正在使用其他服务较旧的节俭合同(版本1.0版)尝试致电getSummary和updateSummary。
旧客户通过调用updateSummary的意图是为设置另一个值summaryCost。但是,由于此客户端不包含对象,summaryValues因此它将带有summaryValues …

java thrift microservices

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

在意外 AWS RDS binlog 删除后恢复 Debezium MySQL 连接器

当 Debezium 作为 kafka 连接中的源运行时,如果目标 MySQL DB(Amazon RDS 实例)上一段时间内没有发生更新,那么一段时间后我会遇到以下错误。

[2018-04-25 21:30:14,526] INFO Step 0: Get all known binlogs from MySQL (io.debezium.connector.mysql.MySqlConnectorTask:310)
[2018-04-25 21:30:14,536] INFO Connector requires binlog file 'mysql-bin-changelog.002640', but MySQL only has mysql-bin-changelog.002663, mysql-bin-changelog.002664, mysql-bin-changelog.002665 (io.debezium.connector.mysql.MySqlConnectorTask:323)
[2018-04-25 21:30:14,536] INFO MySQL has the binlog file 'mysql-bin-changelog.002640' required by the connector (io.debezium.connector.mysql.MySqlConnectorTask:325)
[2018-04-25 21:30:14,536] INFO Stopping MySQL connector task (io.debezium.connector.mysql.MySqlConnectorTask:239)
[2018-04-25 21:30:14,536] INFO WorkerSourceTask{id=swiggy-connector-0} Committing offsets (org.apache.kafka.connect.runtime.WorkerSourceTask:328)
[2018-04-25 21:30:14,536] INFO WorkerSourceTask{id=swiggy-connector-0} flushing 0 outstanding messages for offset commit (org.apache.kafka.connect.runtime.WorkerSourceTask:345)
[2018-04-25 21:30:14,536] …
Run Code Online (Sandbox Code Playgroud)

mysql amazon-rds apache-kafka-connect debezium

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

java ProcessBuilder运行的shell脚本已挂起

我正在尝试使用ProcessBuilder运行Shell脚本。该脚本可以运行,但是不能在Java代码之后运行。错误流不会输出消息。我正在centOS 6.9计算机上运行它。请在下面找到我的代码。

public static ArrayList<String> runCommand(ArrayList<String> command)throws IOException {

        ProcessBuilder processBuilder = new ProcessBuilder();
        processBuilder.command(command);
        Process process = processBuilder.start();
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));

        ArrayList<String> commandOutput = new ArrayList<>();
        String str;
        while((str = reader.readLine()) != null) {
            commandOutput.add(str);
        }

        StringBuilder errorBuilder = new StringBuilder();
        while((str = errorReader.readLine()) != null) {
            errorBuilder.append(str);
        }

        String errorMessage = errorBuilder.toString();
        if(!errorMessage.equals("")) {
            String message = LOG_TAG + ",[runCommand] error:" + errorMessage;
            System.out.println(message);
        }

        reader.close();
        errorReader.close();
        process.destroy();

        return …
Run Code Online (Sandbox Code Playgroud)

java

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

JavaScript换行问题

在此片段中,'FirstText'写入时,将跳过第一行的其余部分.然后'SecText'写在第二行:

<pre>
 <script>
  function text(){
  document.write("FirstText \n SecText");
  }
  text();
 </script>
</pre>
Run Code Online (Sandbox Code Playgroud)

但是当我setInterval()在这个函数上使用时,单词会彼此相邻写入(不会跳过行).

有什么建议?

javascript setinterval

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

将参数传递给 Guice 中的构造函数,无需修改 Interface/Impl 类

我想在 Guice 中将接口与 Impl 绑定时传递构造函数参数。

有几个解决方案,但我没有对这些接口/Impl 的代码访问权限。它们是由其他团队开发的,我已将它们包含在我的项目中。

  1. @Named/@Assisted - 两者都需要更改 Impl 的源代码(构造函数)以包含这些注释。(我无权访问此代码)
  2. Implement Provider - 通过加载所需的参数返回该 Impl 的实例。这有效。但问题是我有 200 多个这样的现有 DI,并且我必须编写 200 多个提供程序。

目前我们正在使用 Spring DI,并且正在迁移到 Guice。所以我需要定义类似的东西

<bean name="clientWrapper" class="com.wrapper.client.ClientWrapper">
    <constructor-arg index="0" value="${server.ip}" />
    <constructor-arg index="1" value="${server.port}" />
</bean>
Run Code Online (Sandbox Code Playgroud)

在吉斯。但传递那些构造函数参数。

bind(IClientWrapper.class).to(ClientWrapper.class);
Run Code Online (Sandbox Code Playgroud)

如何在不使用 Provider 的情况下实现这一目标?

java spring dependency-injection guice

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

当存在“should”、“must”和“must_not”子句时,Elastic Search“should”子句无法按预期工作

我已将此处提供的数据加载到弹性搜索中。

现在我正在尝试查询帐户。

  1. 年龄必须为 38 岁。
  2. 状态不应该是“ID”。
  3. 地址应包含以下任一内容:(这不起作用)
    • 文本“车道”或
    • 完整文本《磨坊大道》

请求:POST - http://localhost:9200/bank/account/_search?pretty

{
  "query": {
    "bool": {
      "should": [
        { "match": { "address": "lane" } },
        { "match_phrase": { "address": "mill avenue" } }
      ],
      "must": [
        { "match": { "age": "38" } }
      ],
      "must_not": [
        { "match": { "state": "ID" } }
      ]
    }
  },
  "from": 0,
  "size": 1,
  "_source": ["account_number", "balance", "firstname", "lastname", "age", "email", "address", "state"],
  "sort": [
    { "account_number": "asc" },
    { …
Run Code Online (Sandbox Code Playgroud)

elasticsearch

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