阿里一面------大厂的面试一定不要放弃,会有意外的收获!

一、面试前

3-21投递的简历,参加了3-27号阿里的笔试 ,只有两个算法题,只完成了第一个题的百分之60,心态炸了,第二题根本没写,根本没想过能进面试。笔试题也忘记了。。。。。。今天上午在撸铁,突然,就很突然收到了面试电话,和我约一个面试的时间。(本意是想拒绝的,因为压根觉得没希望能进,但是想着还是学习一下)本来要约到下周的,但是他说面试要截止了只能今天。好吧,本来我也没报什么希望,就约到了下午的三点。
阿里一面------大厂的面试一定不要放弃,会有意外的收获!_第1张图片

二、面试题问题

1、按照传统先自我介绍一下吧。
答:您好,我是。。。。。。(声音完全没有第一次参加面试的颤抖与紧张)

2、说一下你的项目吧。(卧槽,上来就聊项目)
答:我校第一款校园门户微信小程序《指尖移通》。涵盖了全校师生的基本需求,例如查课表、查成绩、告白墙、电表查询等。。。(吹了一下,哈哈)

3、在开发中你所扮演的角色?以及项目是怎么设计的?(最喜欢这样的主观题了)
答:后端开发人员,编写接口。项目采用前后端完全分离、分模块开发的形式,每个功能对应一个模块。整个项目由设计、前端、后端 三部分完成。

4、接口有没有做什么验证?(没想起来其他的验证。。。。我的)
答:根据学生的学号或老师的工号生成对应的sfm和jym,在请求接口时通过sfm和jym来获取身份标识。

5、gc算法了解吗 ?有哪些?(答得比较完整,毕竟准备了很多次了,感觉背都背会了)
答:
标记-清除算法:该算法分为标记和清除两个阶段。标记就是把所有活动对象都做上标记的阶段;清除就是将没有做上标记的对象进行回收的阶段。

复制算法:就是将内存空间按容量分成两块。当这一块内存用完的时候,就将还存活着的对象复制到另外一块上面,然后把已经使用过的这一块一次清理掉。这样使得每次都是对半块内存进行内存回收。内存分配时就不用考虑内存碎片等复杂情况,只要移动堆顶的指针,按顺序分配内存即可,实现简单,运行高效。

标记-整理算法:标记-压缩算法适合用于存活对象较多的场合,如老年代。它在标记-清除算法的基础上做了一些优化。和标记-清除算法一样,标记-压缩算法也首先需要从根节点开始,对所有可达对象做一次标记;但之后,它并不简单的清理未标记的对象,而是将所有的存活对象压缩到内存的一端;之后,清理边界外所有的空间。

分代收集算法:这种算法,根据对象的存活周期的不同将内存划分成几块,新生代和老年代,这样就可以根据各个年代的特点采用最适当的收集算法。可以用抓重点的思路来理解这个算法。新生代对象朝生夕死,对象数量多,只要重点扫描这个区域,那么就可以大大提高垃圾收集的效率。另外老年代对象存储久,无需经常扫描老年代,避免扫描导致的开销。

6、说一下永久代是什么?(卧槽,我之前研究过的,全忘了。。。。。。只记得好像是被取消了)

答:hotspot的方法区存放在永久代中,因此方法区被人们称为永久代。永久代的垃圾回收主要包括类型的卸载和废弃常量池的回收。当没有对象引用一个常量的时候,该常量即可以被回收。而类型的卸载更加复杂。必须满足一下三点,该类型的所有实例都被回收了,该类型的ClassLoader被回收了,该类型对应的java.lang.Class没有在任何地方被引用,在任何地方都无法通过反射来实例化一个对象

7、HashMap的底层实现的数据结构是什么?(没有答很多,等他来问。哈哈)
答:Java7中的HashMap(数组+链表),Java8中的HashMap(数组+链表+红黑树)

8、什么时候转化成红黑树?为什么要这样做?(答的比较完整)
答:当链表的元素大于等于8时就会转换为红黑树。当链表的元素大于等于8时,查询效率降低了,这个时候就要变成红黑树了(但也不一定就要转化成红黑树,在源码中其实是可以看到的,还有一个判断的条件就是数组的容量小于默认值64,这时就会扩容)。当红黑树只有六个节点了,查询的效率还算可以,但是插入效率提高了,这时就要变成链表了。

9、HashMap什么时候进行扩容?(开始答的是,当数组的元素超过了初始值的时候就会扩容,面试官提醒了负载因子,就改成以下的答案了)
答:当hashmap中的元素个数超过数组大小*loadFactor时,就会进行数组扩容,

10、HashCode有什么作用(只想到了在HashMap中是作为数组的下标。)
答:(其他方面没思路)
11、为什么提倡数组大小是 2 的幂次方?(答得比较模糊,面试官没有继续问了)
答: 因为只有大小是 2 的幂次方时,才能使 hash 值 % n(数组大小) == (n-1) & hash 公式成立。

12 、说一下Spring的Bean装配(还好前几天看了Spring的底层。)
答:1.在XML中进行显示配置
2.使用Java代码进行显示配置
3.隐式的bean发现机制和自动装配

13、@Service和@Component的区别(只知道他们都是Spring管理bean的组件)
答:(没思路)

14、我现在有一个接口,下面有5个实现类,实现类全都都加有@Component注解,Spring在管理的 时候肯定会报错,怎么样改进一下?(没思路)
答:。。。。。。

补:怎样理解java是解释性语言?(太基础了,但是我不会。。。。。。)
答:java是解释型的语言,因为虽然java也需要编译,编译成.class文件,但是并不是机器可以识别的语言,而是字节码,最终还是需要 jvm的解释,才能在各个平台执行,这同时也是java跨平台的原因。所以说java是解释性语言。

15、提问环节:给我一些学习上的建议(面试官人很好,给我提了建议和学习方法,还鼓励我大四再次投递阿里。。。。。。)
答:要多去了解一下一些数据结构,以及框架的优秀思想。(很常规,但是很耐心的给我讲了十分钟的建议,还是有一点点感动。)让我分两步去准备:一个是Java基础,另一个是多去实战,在使用框架的时候多去想原因,“为什么”很重要。

三、总结

没有拒绝这次面试是一个正确的决定,尤其是面试官给我讲了10分钟的学习技巧和建议,感觉赚到了,刚才看了一下官网的状态还是处于面试中,不过自己表现的只能说比上次面试腾讯的好了很多,但是自我感觉应该达不到阿里的水平,只能说期待一下二面吧,如果没有二面的话也应该不会失落了,因为这次真的学到了很多。尤其是面试官说的:软件开发一定不会是一次开发永久使用的。学习也是一样的道理,不能为了面试去学习某一个东西,或者是背面试题,这将毫无意义,其实也是在浪费时间,当你真正学习一个东西的时候,一定是为了以后的使用而去学习。回想起我之前学习一些框架,只是单纯的会使用,具体的原理还没有真正的了解过。从某方面讲:这其实也是一种应付吧。接下来该做个计划好好安排一下了。。。。。。话说面试官还让我大四毕业继续投递阿里(哈哈。。。。。。我哪来的勇气!)。

你可能感兴趣的:(面试专栏)