首先,阿里的面试官都很nice,每次结束电话都会说谢谢,问到你不会的问题,也会让你别急,会给你提示,面试体验很好。
第一次,上午十点电话去洗手间了,没接到,有点方。
下午3点,阿里电话一面,应该是个技术小哥,跟我聊了很多乱七八糟的,中间我可能有点紧张,说话语速有点快,小哥让我不要急,说我的知识面已经很广,不要怕。之后我就很冷静nice的跟小哥聊天了。
小哥上来问了项目经验,此处略过。之后问了两个简单的算法,数组逆序(直接两个指针一头一尾交换,还有栈,先入后出,然后我说栈不好,占用空间大),第二个是找到一个数组中K个最大的数,我说建一个K个数组的小顶堆,然后发现比最小值大的,就更新堆,复杂度为(nlogk).
然后小哥问我什么课程学的比较好,我说密码学,然后小哥让我解释一下SSL原理,哭,我真的不知道,我就知道他是用来访问网站加密的,然后给小哥介绍了一下RSA,AES。还算记得吧。
小哥问我还有什么学的好,我说数学,小哥愣了,后来跟我聊了一下算法,动态规划的思想,我说就是分阶段的求解,后一阶段依赖前一阶段的解。大概就是这样吧。可能还要细一点,现在我要答得话,可能会跟贪婪算法作对比,列一下两个算法的不同应用场景。下次再问我什么学的好,我就说数据库还有设计模式,当初怎么没想到。
小哥还问了spring,IOC和AOP的原理,已经应用,以及实现(AOP实现可能答得不太好,动态代理JDK反射,以及过滤器)
之后问我java垃圾回收(这个有些地方记得有些模糊,内存不够的时候垃圾回收,其实确切的来讲是这样 Eden space 完成内存分配,当Eden满了,再创建对象。会因为申请不到空间,除法Minor GC.进行 (Eden+S0或者Eden+S1)新生代垃圾回收,Minor GC时,Eden Space不能被回收的对象被放入到空的survivor(S0或者S1,Eden肯定会被清空),另一个Survivor里不能被GC的也会放入这个,必须保证有个Survivor为空。step3 如果survivor满了,则这些对象会被copy到old区,或者survivor没有满,但是有些对象足够被放到old space,当old space满了的时候,进行full GC.
问我项目中遇到的问题,有一个内存泄露,内存泄漏就是有一个长期存活的对象持有短命对象的引用,导致短命对象无法被释放。还有些性能优化。
晚上8:00阿里二面,技术大哥,直接问并发编程。syntronized 内部实现,我说加锁(还有些别的东西,暂时未整理)。
Runnable 和 Thread的区别,一个是类一个是接口,还有(当时并不知道)Runnable可以方便的进行资源共享,thread并不能,thread实现了runnable接口
相关资料参考http://developer.51cto.com/art/201203/321042.htm
run()和 statr()的区别 我觉得还有更详细专业的答法http://www.cnblogs.com/linjiqin/archive/2011/04/10/2011272.html
问了设计模式 单例模式 与装饰者模式
问了重写和重载 返回值不一样 算不算重载
问了hashmap的实现
两天后 阿里三面:
自我介绍
项目经验
spring
抽象类与接口的区别
Java垃圾回收
列一个我读过的书单吧:
Java编程思想 细读
Java核心技术 扫过其中几章
数据结构与算法分析-java语言描述 细读 手写代码实现
effective Java 读了1/2 关于java常用知识点的思考 目前正在看
深入理解java虚拟机 重点看了内存回收 以及类加载
java并发编程 看了一些章节 目前正在看
算法设计与分析基础
算法导论 看了一些章节
编程珠玑 主要是讲编程思想
深入理解计算机网络 看了其中几章TCP-UDP HTTP
大话设计模式 21种设计模式 有些东西讲的不是很清楚
heard First设计模式 常用的13种设计模式 讲解清晰
heard First sevelet &JSP 读了1/2了解了一些基本的东西
程序员面试宝典 感觉是三本书里面 看着最顺眼的
剑指offer 很多例子用C++实现 看着不爽
编程之美 很多游戏题 想法很有意思