蚂蚁金服校招一面有感

昨天晚上经历了蚂蚁金服校招一面,在面试开始前面试官打电话来说,到时候会给我发两道题,进行在线编程测试,当时其实是很慌的,因为我对自己笔试没有信心,算法是我学的最差的东西。

拿到题以后,还好,第一道题是求链表的回环节点,第二道题是手写Java单例模式。第一道题普普通通,用了容器类的contains()方法。第二道题常规写法如下

public class singleMod{

    public static Connection connection;
    
    public static Connection getConnection(){
    	if(connection==null){
                connection = new Connection();
                return connection;
            }
        }else{
        	return connection;
        }
    }
}

写完以后面试官问我,“你有没有想过,这样写会出什么问题?”,面试官这样一说,我就想到了,啊!并发情况下不能保持connection的单例了!于是我当时就提出了这个问题,并补充道,“那么我们这里可以用一个同步代码块来控制这一段代码,使得同一时间只有一个线程访问这段代码。”更新了代码以后,面试官表示满意,接下来进行一些基础问题的考察。

首先讲了一下目前实习做的项目中有应用到的技术;

然后考察了一些计算机网络的知识,主要是三次握手和四次挥手;

接下来是linux系统,问我有没有用过什么linux命令,我回答了平时查看构建脚本的远程debug端口的命令和查看tomcat的日志的命令;之后问了下进程和线程的区别,常规答法,没有亮点。

然后是使用数据库索引有什么好处,首先提了一下数据库索引的类型,然后就索引对查询的优化做了个简单的介绍,大概就是会有专门的二叉树存储索引字段对应的记录这样,再然后讲了下当进行当前读时,使用索引可以方便innodb加行锁,不用索引因为会对全部的聚集索引加锁所以使用的是表锁;数据库相关之后还问了数据库隔离级别的问题,常规答法,扩展了一下可重复读在innodb引擎下,因为会加间隙锁,所以防止了幻读的问题;

由于我的简历中有提到过自己阅读过《深入了解Java虚拟机》,所以面试官又问我对JVM中的内存模型是否了解,大致讲了下JVM中的内存结构,然后问了下堆栈的异同,这一块当时记得不是太清楚了,所以只回答了堆是线程共享的,栈是线程私有的;这一块之后问了下是否了解垃圾收集算法,比如CMS算法,由于记不清了不太敢乱说,所以只提了下JVM中对于垃圾收集是分代收集的,新生代采用复制算法,老年代采用标记-清除算法;

接下来考察了容器类的知识,面试官问我对hashmap的了解。我这边分了三块进行回答,一块是获取键值对,一块是放入键值对,最后一块是获取null键。常规hash()和equals()方法,以及发生hash冲突时的处理。这里顺便扩展了一下放入时可能产生hash扩容的问题,顺便同concurrentHashMap的扩容算法进行了一下对比。系统的阅读过源码的话,回答上来都不难;

再讲了下Spring的特性AOP和IOC,我回答了实现主要使用的方法,没有深入回答,之后面试官问我IOC有什么好处,我说一个是将bean交给Spring容器管理,开发不用关心具体细节。二一个是spring容器中的bean都是单例的(虽然这样说我也不知道这样单例有什么好处。。。)。

最后问了下我觉得还有什么补充的,我提了下自己之前由于好奇redis是如何实现分布式锁的,所以自己去了解的过程。都讲完了以后,由于我在今年三月的时候投过一次阿里的新零售事业部,当时一面的时候直接挂掉了,而且可能面试评价不是很好,所以面试官问了一下我当时是什么情况,解释了一下以后,面试官表示我的学习能力很强。

之后我问了下面试官对我的面试评价,大致是能看出我不是只去背原理,而是自己去了解了的,并且学习能力比较强,一面直接通过,之后会联系我进行二面。

 

总的来说,这次蚂蚁金服的面试体验比较好,考察较为全面,在面试过程中我能看出面试官更重视的是一个探索的过程,而不是结果,所以通过自己探索获得的知识能更加得到面试官的认可。在这一方面,不得不提到算法的最大作用是对我们思维的形成,今天在刷题的时候,看到一道求折半查找的平均次数的题,有一道解析是,直接利用log2N来计算得到答案,而其他解答都是将折半查找画为一个平衡二叉树的结构之后进行计算,这时不禁感慨,如果直接使用log2N来计算,就会错过这个抽象的过程。在我目前的实习过程中,我的主管也经常对我说,给我们的需求一般时间都会比较宽裕,主要是为了让我们在做完需求后可以有时间进行一个思考或是优化,思维的形成是无尽的财富,是不能与普通的死记硬背获得的道理相比对的。因此平时要多思考,多优化,灵活应变才能变得更优秀。

你可能感兴趣的:(面经)