小米Java面试题,一面二面面经分享

KLQ 2020-04-15 17:21:50 java常见问答 7030

下面给大家分享一个小伙伴2020年的小米Java面试过程,内容具体为一面好二面的面试题,包含部分面试者的回答。

一面:

首先做了自我介绍,之后就是直接进入面试题部分了。

面试题:

1、数据库索引 b+树特点是什么?

2、还有一些就是面经里面都经常出现的问题,都是非常基础的,这里就不多说了

3、算法

leetcode 402 移掉K位数字使数字最大

代码:

public static String removeKdigits(String num, int k)
{
    LinkedList < Character > stack = new LinkedList < > ();
    for (char digit: num.toCharArray())
    {
        while (stack.size() > 0 && k > 0 && stack.peekLast() > digit)
        {
            stack.removeLast();
            k--;
        }
        stack.addLast(digit);
    }
    for (int i = 0; i < k; i++)
    {
        stack.removeLast();
    }
    StringBuilder sb = new StringBuilder();
    boolean loadZero = true;
    for (Character c: stack)
    {
        if (loadZero && c == '0') continue;
        sb.append(c);
    }
    return sb.length() == 0 ? "" : sb.toString();
}

二面:

首先自我介绍,后来和面试官谈了一下,面试官问我为什么学JAVA之后就正式进入面试题部分了。

面试题:

1、String 、StringBuilder、StringBuffer的区别String是否线程安全?

2、wait()和sleep的区别是什么?

答:wait有参数和无参数

3、被final修饰的特点是什么?

4、接口和抽象类的区别是什么?(除了这个之外,面试官还继续向下问了,问的非常的仔细)

5、synchorized和lock的区别是什么?

一、synchronized是java内置关键字,在jvm层面,Lock是个java类;

二、synchronized不能够判断是否获取锁的状态,Lock能够判断是否获取到锁;

三、synchronized会自动释放锁(a 线程执行完同步代码会释放锁 ;b 线程执行过程中发生异常会释放锁),Lock需在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁;

四、用synchronized关键字的两个线程1和线程2,当前线程1获得锁,线程2线程等待。当线程1阻塞,线程2则会一直等待下去,而Lock锁就不一定会等待下去,假如尝试获取不到锁,线程可以不用一直等待就结束了;

五、synchronized的锁可重入、不可中断、非公平,而Lock锁可重入、可判断、可公平(两者都可以)

六、Lock锁适合大量同步的代码的同步问题,synchronized锁适合代码少量的同步问题。

6、算法 数组

{2,0,4,0,0,6,0,0} 把0 全部挪在后面其他数字挪到前面 ,并且保证非0数字的相对顺序不变。

代码:

public int[] swapZeroToRight(int[] arr)
{
    int i = 0, j;
    while (i < arr.length && arr[i] != 0) i++;
    j = i + 1;
    while (j < arr.length)
    {
        if (arr[j] != 0)
        {
            int temp = arr[i];
            arr[i++] = arr[j];
            arr[j++] = temp;
        }
        else
        {
            j++;
        }
    }
    return arr;
}

以上小米Java面试题大家都了解了吗?有一些都是很常见的就没有一一例举了,更多经典的小米Java面试题和面经,可以继续关注本站了解。