测试开发岗面试问题-技术类

手写快速排序

/**
 * date: 2021-01-09 00:05
 *
 * @author Yuankui Jing
 * @since JDK 1.8
 */
public class QuickSort {
    public static void main(String[] args) {
        int[] array = {1,5,7,9,2,567,346,7,46};
        quickSort(array, 0, array.length-1);
        
        for (int i=0; i high) {
            return;
        }

        // 下标
        i = low;
        j = high;
        // 基准位
        temp = jykArray[low];


        while (i < j) {
            // 从右往左(如果基准位 < array[j],则哨兵j左移)
            while (temp<=jykArray[j] && i array[i],则哨兵i左移)
            while (temp>=jykArray[i] && i

被测系统的架构

逻辑架构:
取分期业务作为例子
前端交互:
现金分期、账单分期、单笔分期、自动分期
业务中台:
资金往来系统、支付平台、核心授权、核心账户、账户分期
基础服务:
分期表、卡片表、账户表等

物理架构:
接入层:
网关
业务服务层:
许多SpringBoot工程,以微服务的形式,部署在OpenShift上,一个工程大概3个Pod
还有SpringBatch工程,基本为晚上跑批
数据存储层:
GoldenDB(分布式MySQL)
Redis

Java基本数据类型各占多少字节

类型 字节数
byte 1
short 2
int 4
long 8
boolean 1
char 2
float 4
double 8

Java常量池

参考https://blog.csdn.net/qq_41376740/article/details/80338158

大体可以分为:静态常量池,运行时常量池。

  • 静态常量池 存在于class文件中,比如经常使用的javap -verbose中,常量池总是在最前面把?
  • 运行时常量池呢,就是在class文件被加载进了内存之后,常量池保存在了方法区中,通常说的常量池 值的是运行时常量池。所以呢,讨论的都是运行时常量池

字符串常量池
Java中String类,是有字符串常量池的,在方法区中。

String s1 = "Hello";
    String s2 = "Hello";
    String s3 = "Hel" + "lo";
    String s4 = "Hel" + new String("lo");
    String s5 = new String("Hello");
    String s6 = s5.intern();
    String s7 = "H";
    String s8 = "ello";
    String s9 = s7 + s8;

    System.out.println(s1 == s2);  // true
    System.out.println(s1 == s3);  // true
    System.out.println(s1 == s4);  // false
    System.out.println(s1 == s9);  // false
    System.out.println(s4 == s5);  // false
    System.out.println(s1 == s6);  // true

包装类的常量池技术(缓存)
自动装箱和自动拆箱,自动装箱常见的就是valueOf这个方法,自动拆箱就是intValue方法。
除了两个包装类Long和Double 没有实现这个缓存技术,其它的包装类均实现了它。

分析:我们可以看到从-128~127的数全部被自动加入到了常量池里面,意味着这个段的数使用的常量值的地址都是一样的。

public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
    return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
private static class IntegerCache {
static final int low = -128;
static final int high;
static final Integer cache[];

static {
    // high value may be configured by property
    int h = 127;
    String integerCacheHighPropValue =
        VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
    if (integerCacheHighPropValue != null) {
        try {
            int i = parseInt(integerCacheHighPropValue);
            i = Math.max(i, 127);
            // Maximum array size is Integer.MAX_VALUE
            h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
        } catch( NumberFormatException nfe) {
            // If the property cannot be parsed into an int, ignore it.
        }
    }
    high = h;

    cache = new Integer[(high - low) + 1];
    int j = low;
    for(int k = 0; k < cache.length; k++)
        cache[k] = new Integer(j++);

    // range [-128, 127] must be interned (JLS7 5.1.7)
    assert IntegerCache.high >= 127;
}

private IntegerCache() {}
}

自动装箱和拆箱

你可能感兴趣的:(测试开发岗面试问题-技术类)