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

手写快速排序

/**

* 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

System.out.print(array[i]+"\t");

}

}

/**

* 快速排序方法

* @param jykArray 需要快排的数组

* @param low 基准数

* @param high

*/

private static void quickSort(int[] jykArray, int low, int high) {

int i, j, temp,t;

// 递归调用的退出条件

if (low > high) {

return;

}

// 下标

i = low;

j = high;

// 基准位

temp = jykArray[low];

while (i < j) {

// 从右往左(如果基准位 < array[j],则哨兵j左移)

while (temp<=jykArray[j] && i

j--;

}

// 从左往右(如果基准位 > array[i],则哨兵i左移)

while (temp>=jykArray[i] && i

i++;

}

// i与j满足条件,开始交换

if (i < j) {

t = jykArray[i];

jykArray[i] = jykArray[j];

jykArray[j] = t;

}

}

// 将基准位与i=j所在的位置上的数字交换

jykArray[low] = jykArray[i];

jykArray[i] = temp;

// 递归调用左右两部分

quickSort(jykArray, low, j-1);

quickSort(jykArray, j+1, high);

}

}

被测系统的架构

逻辑架构:

取分期业务作为例子

前端交互:

现金分期、账单分期、单笔分期、自动分期

业务中台:

资金往来系统、支付平台、核心授权、核心账户、账户分期

基础服务:

分期表、卡片表、账户表等

物理架构:

接入层:

网关

业务服务层:

许多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常量池

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

静态常量池 存在于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() {}

}

自动装箱和拆箱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值