2017年小米春招内推面试面经

首先,我感到很讶异的是,在我投完简历一天后(2017年2月 23日),小米的工作人员就打电话给我,并且敲定了电话面试的日期(2017年2月27日)。当时我还在家里享受着寒假呢,这也许是来自东北某末流985的优势吧2333。

在等待面试的这几天中,我感到非常惶恐,毕竟我始终没有料到小米会这么早让我面试(宝宝的内心是崩溃的,我还没准备好!)于是乎我开始恶补Java知识(我面的是Java后端开发)以及牛客网上刷<<剑指offer>>编程题。PS:强烈建议大家去牛客网上刷题哦,很有用!

面试当天,我既紧张又期待,抱着试一试的心态,终于等来了面试官的电话。他让我准备好一台电脑(用来现场撸代码),然后让我打开一个指定的网址。由于我当时还在实验室里,于是我专门找了一个人少的地方进行面试,生怕吵到同学(其实是怕出丑)。


首先开始一面。一上来,还是依旧自我介绍,说实话,我原先并没有准备这个环节,所以讲的非常仓促,没有条理(我自己都不知道在讲什么 ,大概是 自己的基本信息以及学习过的编程语言)。下面我整理一下面试官问的问题:

1、说说你对java的认识?
2、对java了解哪些?
3、说说java集合类?

ANSWER:

友情链接:java集合解析

友情链接:java集合类

友情链接:集合详解

4、说说Java多线程的内容?(同步机制等)

其中第三个问题,他又延伸开来,问了我:

①TreeMap与HashMap区别?实现原理?

②List的实现原理?

③ArrayList初始化的默认长度?ArrayList的长度是固定的吗?其实现的原理是什么?

ArrayList的底层是由一个Object[]数组构成的, 而这个Object[]数组,默认的长度是10 。

ArrayList al = new ArrayList();  

如果直接打印al.size()当然是0,size()方法,因为10指的是“逻辑”长度。 所谓“逻辑”长度,是指内存已存在的“实际元素的长度” 而“空元素不被计算“;即:当你利用add()方法,向ArrayList内添加一个“元素”时, 逻辑长度就增加1位。 而剩下的9个空元素不被计算。

2017年小米春招内推面试面经_第1张图片

下面是ArrayList的部分源代码:

 public ArrayList()  
  {  
    this(10);  
  }  

java自动增加ArrayList大小的思路是:向ArrayList添加对象时,原对象数目加1如果大于原底层数组的长度,则以适当长度新建一个原数组的拷贝,并修改原数组,指向这个新建数组。原数组自动抛弃(java垃圾回收机制自动回收)。size则在向数组添加对象,自增1。

友情链接: 常用容器制定初始化容量


第四个问题,他也有延伸开来,问了我:

①synchronize关键字的相关内容;

②volatile关键字的相关内容;

问完这些问题,就开始了最为残忍的现场撸代码环节:(首先问了我对于排序算法了解吗?)

友情链接:关于排序算法的理解(一)

1、二分查找

/**
 * Created by HuangQinJian on 2017/2/27.
 */
public class main {
    public static int sort(int da[], int a) {
        int len = da.length;
        int left = 0, right = len - 1;
        int mid = 0;
        while (left <= right) {
            mid = (left + right) / 2;
            if (a < da[mid]) {
                right = mid - 1;
            } else if (a > da[mid]) {
                left = mid + 1;
            } else {
                return mid;
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        int a[] = {1, 2, 6, 87, 456, 899};
        int result = sort(a, 899);
        System.out.println(result);
    }
}

2、冒泡排序

3、快速排序(算法复杂度)

4、给一个无序数组int[] nums 和一个整数 target,在这个数组中找到两个数 ,使得这个两个数的和等于target,找到这个数组中所有的满足这样条件的数。

附上现场截屏图片:(图中代码请忽略,应该有错)

2017年小米春招内推面试面经_第2张图片

代码写完以后,面试官跟我说一面到此结束,待会会由他的同事对我进行二面。

然后,此时我的内心是奔溃的,竟然还有二面!竟然这么快就二面了!

大概过了半小时后(煎熬的等待),又一个电话打来,说是对我进行二面(讲道理,我此时没有那么紧张)。开始照样是自我介绍,还是无厘头的自我介绍,不过跟第一次的自我介绍讲的内容完全不同,不要问我是怎么做到的,我自己也不知道!

然后,他的第一个问题问的是关于我项目的一些内容,这我就不详细介绍了,毕竟每个人的项目经历都是不一样的。(不过,我想说,项目经历很重要!!大概是关于Spring+SpringMVC+Mybatis的)

接着,他就开始问我一些关于数据库方面的问题:

1、对于数据库事务的了解?---------数据库事务的四大特性以及事务的隔离级别

2、介绍一下数据库范式?---------关于SQL数据库中的范式

3、重载与重写的区别?---------重载、重写(覆盖)的区别实例分析

4、数据库优化?---------SQL 优化经验总结34条

最后,终于机会反转,他问我有什么想问的问题,我大概问了几个问题(关于技术以及一些琐碎的东西)。最后的最后,他让我等通知,我估计是黄了。

漏了一点,他还我问了我能实习多久(感觉他很在意这个),刚开始还问我有没有实习经历(我也很绝望啊,我才大三啊,我哪来的实习机会!)

你可能感兴趣的:(2017年小米春招内推面试面经)