先是自我介绍
介绍了实习的项目
问项目相关:
- 你们的项目是重构了之前的项目,那有做什么优化?
- 在上线的时候怎么做老服务跟新服务的区分
问mysql
- 问聚簇索引跟非聚簇索引的区别?回表是什么情况?什么时候会回表?非聚簇索引一定会回表吗?索引什么时候会失效?你知道自增id有时候有影响吗?
- 三个log binlog、undolog、redolog的区别
- 快速读跟当前读的区别?
- 数据库集群怎么主从同步?
问redis
- 项目里有没有用到过redis?
- redis有几种集群?
- redis的一致性问题?
算法题
一个数组 nums 和一个目标值 k ,计算数组中和为 k 的连续子数组的个数
nums = [1,2,3], k = 3, result = 2
nums非递增,有正有负
解答
import java.util.*;
public class SubarraySumEqualsK {
public static int subarraySumEqualsK(int[] nums, int k) {
int count = 0;
int sum = 0;
Map<Integer, Integer> prefixSumMap = new HashMap<>();
prefixSumMap.put(0, 1); // 初始化为1,因为空子数组的和为0
for (int i = 0; i < nums.length; i++) {
sum += nums[i]; // 计算当前的前缀和
if (prefixSumMap.containsKey(sum - k)) {
count += prefixSumMap.get(sum - k);
}
// 将当前的前缀和存入映射表,如果之前没有出现过
prefixSumMap.put(sum, prefixSumMap.getOrDefault(sum, 0) + 1);
}
return count;
}
public static void main(String[] args) {
int[] nums = {1, -1, 1, 2, 3};
int k = 3;
int result = subarraySumEqualsK(nums, k);
System.out.println("Number of subarrays with sum " + k + " is: " + result);
}
}