电商
一面
项目
定时任务捞账单如何保证,多个机器一起捞不会重复。
代码
LRU,要求O(1)实现。
我想法是HashMap+优先队列但put还是要O(N)找。
挂
商业化
一面
基础知识
float为什么有精度损失,存金额用什么,BigDecimal为什么没有精度损失。
Java里面i++是否线程安全,加个synchronized能不能解决。
select a from table where c >0 and b !=1 and d = 2;
如何设计索引?
数据库的事务隔离级别。可重复读下,如果a事务运行时,b事务update i为i+1并提交,a事务也update i为i+1并提交,最后i是多少。
Threadlocal如何防止内存泄漏
项目
比对些啥
如何实现切流
代码
轮转数组
给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
输入: nums = [1,2,3,4,5,6,7], k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右轮转 1 步: [7,1,2,3,4,5,6]
向右轮转 2 步: [6,7,1,2,3,4,5]
向右轮转 3 步: [5,6,7,1,2,3,4]
class Main {
public static void reverse(int[] a, int s, int e) {
for (int i = s, j = e; i < j; i++, j--) {
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
public static void main(String[] args) {
System.out.println("Hello, World!");
int[] nums = {1,2,3,4,5,6,7};
int k = 3;
int n = 7;
reverse(nums, 0, n - 1);
reverse(nums, 0, k - 1);
reverse(nums, k, n - 1);
// 不在乎空间复杂度可以这么写
// int[] ans = new int[n];
// for (int i = 0; i < n; i++) {
// ans[(i+k)%n] = nums[i];
// }
for (int i = 0; i < n; i++) {
System.out.println(nums[i]);
}
}
}
不新开空间的话,如此操作:
- 反转1-n
- 反转1-k
- 反转k-n