首先,我感到很讶异的是,在我投完简历一天后(2017年2月 23日),小米的工作人员就打电话给我,并且敲定了电话面试的日期(2017年2月27日)。当时我还在家里享受着寒假呢,这也许是来自东北某末流985的优势吧2333。 在等待面试的这几天中,我感到非常惶恐,毕竟我始终没有料到小米会这么早让我面试(宝宝的内心是崩溃的,我还没准备好!)于是乎我开始恶补Java知识(我面的是Java后端开发)以及牛客网上刷<<剑指offer>>编程题。PS:强烈建议大家去牛客网上刷题哦,很有用! 面试当天,我既紧张又期待,抱着试一试的心态,终于等来了面试官的电话。他让我准备好一台电脑(用来现场撸代码),然后让我打开一个指定的网址。由于我当时还在实验室里,于是我专门找了一个人少的地方进行面试,生怕吵到同学(其实是怕出丑)。 首先开始一面。一上来,还是依旧自我介绍,说实话,我原先并没有准备这个环节,所以讲的非常仓促,没有条理(我自己都不知道在讲什么 ,大概是 自己的基本信息以及学习过的编程语言)。下面我整理一下面试官问的问题: 1、说说你对java的认识? ANSWER: 友情链接:java集合解析 友情链接:java集合类 友情链接:集合详解 4、说说Java多线程的内容?(同步机制等) 其中第三个问题,他又延伸开来,问了我: ①TreeMap与HashMap区别?实现原理? ②List的实现原理? ③ArrayList初始化的默认长度?ArrayList的长度是固定的吗?其实现的原理是什么? ArrayList的底层是由一个Object[]数组构成的, 而这个Object[]数组,默认的长度是10 。
如果直接打印al.size()当然是0,size()方法,因为10指的是“逻辑”长度。 所谓“逻辑”长度,是指内存已存在的“实际元素的长度” 而“空元素不被计算“;即:当你利用add()方法,向ArrayList内添加一个“元素”时, 逻辑长度就增加1位。 而剩下的9个空元素不被计算。 下面是ArrayList的部分源代码:
java自动增加ArrayList大小的思路是:向ArrayList添加对象时,原对象数目加1如果大于原底层数组的长度,则以适当长度新建一个原数组的拷贝,并修改原数组,指向这个新建数组。原数组自动抛弃(java垃圾回收机制自动回收)。size则在向数组添加对象,自增1。 友情链接: 常用容器制定初始化容量 第四个问题,他也有延伸开来,问了我: ①synchronize关键字的相关内容; 问完这些问题,就开始了最为残忍的现场撸代码环节:(首先问了我对于排序算法了解吗?) 友情链接:关于排序算法的理解(一) 1、二分查找
2、冒泡排序 3、快速排序(算法复杂度) 4、给一个无序数组int[] nums 和一个整数 target,在这个数组中找到两个数 ,使得这个两个数的和等于target,找到这个数组中所有的满足这样条件的数。 附上现场截屏图片:(图中代码请忽略,应该有错) 代码写完以后,面试官跟我说一面到此结束,待会会由他的同事对我进行二面。 然后,此时我的内心是奔溃的,竟然还有二面!竟然这么快就二面了! 大概过了半小时后(煎熬的等待),又一个电话打来,说是对我进行二面(讲道理,我此时没有那么紧张)。开始照样是自我介绍,还是无厘头的自我介绍,不过跟第一次的自我介绍讲的内容完全不同,不要问我是怎么做到的,我自己也不知道! 然后,他的第一个问题问的是关于我项目的一些内容,这我就不详细介绍了,毕竟每个人的项目经历都是不一样的。(不过,我想说,项目经历很重要!!大概是关于 Spring+SpringMVC+Mybatis的) 关于面试中问到的SSM框架的工作原理: Spring SpringMVC Mybatis SSM框架的Web程序主要用到了三个技术: Spring:用到了注解和自动装配,就是Spring的两个精髓IOC(反向控制)和 AOP(面向切面编程)。 要完成一个功能: 1、先写实体类entity,定义对象的属性,(可以参照数据库中表的字段来设置,数据库的设计应该在所有编码开始之前)。 接着,他就开始问我一些关于数据库方面的问题: 1、对于数据库事务的了解?———数据库事务的四大特性以及事务的隔离级别 2、介绍一下数据库范式?———关于SQL数据库中的范式 3、重载与重写的区别?———重载、重写(覆盖)的区别实例分析 4、数据库优化?———SQL 优化经验总结34条 最后,终于机会反转,他问我有什么想问的问题,我大概问了几个问题(关于技术以及一些琐碎的东西)。最后的最后,他让我等通知,我估计是黄了。 漏了一点,他还我问了我能实习多久(感觉他很在意这个),刚开始还问我有没有实习经历(我也很绝望啊,我才大三啊,我哪来的实习机会!) |
|