ARTS 第32周:有序数组的平方算法、Readme驱动开发、Docker编码问题与开源项目选择

#coding#arts
目录

Algorithm

package org.nocoder.leetcode.solution;

/**
 * 977. Squares of a Sorted Array
 * <p>
 * Given an array of integers A sorted in non-decreasing order,
 * return an array of the squares of each number, also in sorted non-decreasing order.
 * <p>
 * Example 1:
 * <p>
 * Input: [-4,-1,0,3,10]
 * Output: [0,1,9,16,100]
 * Example 2:
 * <p>
 * Input: [-7,-3,2,3,11]
 * Output: [4,9,9,49,121]
 * <p>
 * <p>
 * Note:
 * <p>
 * 1 <= A.length <= 10000
 * -10000 <= A[i] <= 10000
 * A is sorted in non-decreasing order.
 *
 * @author yangjinlong
 */
public class SquaresOfASortedArray {

    public static void main(String[] args) {
        int[] arr = new int[]{-4, -1, 0, 3, 10};
        sortedSquares(arr);
    }

    public static int[] sortedSquares(int[] A) {
        int[] arr = powArray(A);
        sort(arr, 0, arr.length - 1);
        return arr;
    }

    private static int[] powArray(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (int) Math.pow(arr[i], 2);
        }
        return arr;
    }

    private static void sort(int[] arr, int head, int tail) {
        if (head >= tail || arr == null || arr.length <= 1) {
            return;
        }
        int i = head, j = tail, pivot = arr[(head + tail) / 2];
        while (i <= j) {
            while (arr[i] < pivot) {
                ++i;
            }
            while (arr[j] > pivot) {
                --j;
            }
            if (i < j) {
                int t = arr[i];
                arr[i] = arr[j];
                arr[j] = t;
                ++i;
                --j;
            } else if (i == j) {
                ++i;
            }
        }
        sort(arr, head, j);
        sort(arr, i, tail);
    }

}

Review

Readme Driven Development

RDD 开发的几个优势

Tip

Docker 容器中centos的编码问题

前几天项目中有个微信提现的BUG,微信端返回“持卡人姓名不正确”,检查了接口调用方式,参数以及种种检查和测试之后,发现同样的代码本地是可以调通的,只有 docker 环境下会出问题,于是把问题定位偏向了编码问题,开始 code review,发现了这样一行代码estr = RSAUtil.encrypt(data.getBytes(), pub, 2048, 11, rsa);,问题基本定位到了,data 是个String,在调用data.getBytes() 方法是并未指定字符集,在开发的本地环境,编码环境已经设置为UTF-8,所以可以编码不会有问题,但是在测试环境上,Docker 的镜像内包含了一个centos,Dockerfile中并未指定系统的字符集,默认为POSIX,所以在data.getBytes() 的时候,会使用POSIX来编码,于是就乱码了。

解决办法有两种:

1、修改代码,指定字符集 data.getBytes("UTF-8")

2、在Dockerfile中添加一行ENV LANG C.UTF-8指定系统的默认字符集

Share

开源项目的选择和使用

项目中经常会使用开源的项目或者库,选择和使用开源项目,我们要关注哪些重要的点,我主要参考了再谈开源项目:如何选择、使用以及二次开发?这边文章,整理了一张图,把几个关键的点记录下来。

开源项目的选择和使用


评论区