快手社招

电商

一面

项目

定时任务捞账单如何保证,多个机器一起捞不会重复。

代码

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. 反转1-n
  2. 反转1-k
  3. 反转k-n
赞赏