没想到阿里校招如此之早,虽然早已进入复习备战状态,但还是感觉有些措手不及。。。找了个在蚂蚁金服做HR的同学帮忙了内推,然后在最近的几天匆匆忙忙地复习JAVA(之前都把精力放在了数据结构、算法等基础上了)。上周五投递的简历,这周四就接到了面试电话,面试GG声音很有磁性,也比较温柔。。。一开始是自我介绍,妈的,好紧张,可能是好久没面试了,感觉中气不足。自我介绍犹如叙说自传,废话讲了一大推,看来最好还是事先准备好一段台词。然后问了参加过哪些社团活动,还是因为紧张竟然把电脑医院的经历给漏说了。。不过这些都是次要的,感觉只是”前戏“,是面试官了解你并帮助你进入技术面试状态的一种方式,无须太介意自己说的怎么样。
好了,转入正题。以下是面试官的几个问题,知识面还是涉及蛮广的,有JAVA、数据库、http方面的知识、前端以及linux。接下来一一阐述并且总结。
1、Object类中的方法有哪些,它们各自的作用是什么?
回答:我当时说了equals(),hashcode(),finalize(),clone(),然后说了它们各自的作用。对于clone()方法我当时提到了默认是浅层复制,然后面试官随即就问到深层复制和浅层复制的区别。我回答浅层复制的话原对象和被克隆对象的引用属性共用一个对象,而深层复制时引用变量类型的属性也会被复制一份。然后他继续问到clone的应用场景,这个问题没答上来。接着他让我用伪代码写一下如果一个对象覆盖equals方法,该怎么写?我边在草稿纸上写边和他说,中间有一步出现了差错,if(o instanceof Student)这一步我说成了强制转换,囧。。。如果不是Student类型的对象会抛出ClassCastException异常的呀,哎。。幸好其他的都是说对的。
纠错:说了这四个方法,从数量来说尚可,但竟然把最基础的toString()和getClass()方法给忘了,还是因为太紧张的缘故吧。
toString():重写该方法可以对对象进行自定义的格式输出。默认输出是类名@hashcode值;
getClass():获取该对象的类类型。
wait():如果对象调用了wait方法,那么持有该对象的线程会把该对象的控制权交出去,然后处于等待状态。
notify():如果对象调用了notify()方法就会通知某个正在等待该对象的控制权的线程可以继续运行,但必须等待当前线程执行完sychronized中的代码块。
notifyAll():如果对象调用了notifyAll()方法就会通知所有正在等待该对象的控制权的线程可以继续运行,但必须等待当前线程执行完sychronized中的代码块。
2、谈谈对事务的理解。
根据事务的原则来谈对事务的理解,然后举了一个A账户给B账户转账的例子来解释。
3、Spring中的事务管理有哪两种?
我只知道AOP有事务管理的功能。。。
4、接下来是有关数据库锁的一个问题:在分布式服务器群中,有两台服务器对共享数据库的同一条数据进行并发修改,如果解决同步问题。
这个问题完全不会。最后的答案是可以在该表中增加一个字段,A服务器操作时,将该字段的值改为正在修改的标记,则B服务器去操作时,查询该字段的值,判断是否有其他服务器正在修改该行数据,如果有则等待,否则可以去修改该行数据。这里的两台服务器好比是线程,而字段好比是线程锁。学习了,呵呵。。。
5、考察hashmap。
说了关于hashmap的理解,自己说的都是很多JAVA面试题中常考的哪些知识点,比如实现原理啊,是否线程安全等,这些都没问题。但后面他继续问hashmap两种迭代的方式,各自的时间复杂度是多少?