Published on

ARTS 第22周

Authors

Algorithm

package org.nocoder.leetcode.solution;

/**
 * 136. Single Number
 * Given a non-empty array of integers, every element appears twice except for one. Find that single one.
 *
 * Note:
 *
 * Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
 *
 * Example 1:
 *
 * Input: [2,2,1]
 * Output: 1
 * Example 2:
 *
 * Input: [4,1,2,1,2]
 * Output: 4
 *
 * @author yangjinlong
 * @date 2018-12-06
 */
public class SingleNumber {
    public static int singleNumber(int[] nums) {
        int result = 0;
        for(int i : nums) {
            result ^= i;
        }
        return result;
    }

    public static void main(String[] args) {
        int[] arr1 = new int[]{2,2,1};
        int[] arr2 = new int[]{4,1,2,1,2};
        System.out.println(singleNumber(arr1));
        System.out.println(singleNumber(arr2));
    }
}

Review

Announcing Stack Overflow for Teams

you can ask questions that will only be visible to members of your team, company, or organization.

既可以面向团队提问,又可以面向世界提问

Tip

Spring Cloud Ribbon 负载均衡重试机制

1、升级 Spring Cloud 版本

Camden-SR2 开始,Spring Cloud 整合了 Spring Retry 来增强 RestTemplate 的重试能力,通过简单的配置即可实现服务访问重试策略。我们项目中的 Spring Cloud 版本选择从 Brixton.RELEASE 升级至 Camden-SR3

pom.xml 中,将 spring-cloud-dependenciesversion 修改为 Camden.SR3

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Camden.SR3</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2、增加配置文件

# 开启重试机制,默认是false
spring.cloud.loadbalancer.retry.enabled=true
# 对所有操作请求都进行重试
ribbon.OkToRetryOnAllOperations=true

Ribbon 负载均衡重试配置文件说明

# 开启重试机制,默认是false
spring.cloud.loadbalancer.retry.enabled=true

# 请求连接的超时时间
ribbon.ConnectTimeout=250

# 请求处理的超时时间,使用SimpleClientHttpRequestFactory时,不用配置
ribbon.ReadTimeout=1000

# 对所有操作请求都进行重试
ribbon.OkToRetryOnAllOperations=true

# 切换实例的重试次数,默认为1,可使用默认值
ribbon.MaxAutoRetriesNextServer=2

# 对当前实例的重试次数,默认为1,可使用默认值
ribbon.MaxAutoRetries=1

RestTemplate 默认使用的是 ClientHttpRequestFactorySimpleClientHttpRequestFactory, 此时 ribbon.ConnectTimeoutribbon.ReadTimeout 这两个参数配置是不生效的。

SimpleClientHttpRequestFactory

如需设置 connectTimeout,需要手动创建 SimpleClientHttpRequestFactory 实例,注入 RestTemplate 构造方法中。

@Bean
    @LoadBalanced
    RestTemplate restTemplate() {
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setConnectTimeout(250);
        RestTemplate restTemplate = new RestTemplate(factory);
        //自定义响应错误处理
        restTemplate.setErrorHandler(new LibraryResponseErrorHandler());
        return restTemplate;
    }

另一种实现,把 ribbon.httpclient.enabled 设置为 trueRestTemplateClientHttpRequestFactory 就会使用 RibbonClientHttpRequestFactory,此时 ribbon.ConnectTimeoutribbon.ReadTimeout 这两个参数配置会生效(注: SpringCloud 版本:Camden.SR3)。

Share

twitter上看到一个好玩的东西

ByteScout SQL Trainer