支付宝面试总结(2009.10.12)

10号晚上的宣讲+笔试,笔试笔得一般,程序题做错了,没想到用递归,还有记得做错的是一道网络题,问会话层(Session)是OSI里的第几层,我忘了展示层(Presentation),于是选了第六层光荣的错了。
11号一早通知9点面试,我起床洗漱吃早饭,然后又接到一个电话说是12号早上9点,于是只好上床继续睡觉。
面试前打印了几份简历,进去咖啡馆之后填了表格就开始面了。中间省略过程数百字。。。直接开始总结几个答的不好的问题,因为一面就挂了。
Spring的事务有几种方式?
题目到现在也不是很明白,我觉得大概的解答应该是声明式事务处理的几种方式(1.0时代的parentTemplate、2.0时代的AOP代理和@Transational),另外加上编程式事务处理,直接上TransactionTemplate和PlatformTransactionManager。
Spring Bean加载有几种方式?
我回答了启动时加载,现在看来有点答非所问。加载bean默认为即时加载,另外也可以设置延迟加载。加载可以为单例、每次一个实例、request、session、global-session。
Spring Bean有几个设置属性?
我只想起来scope,应该想起来auto-wire, init-method, destroy-method一时都忘了。另外还有lazy-init,  factory-bean, factory-method。
Collections.sort()对参数的要求?
这个是最不应该答错的题目。我只想起来sort的集合必须实现List接口,却忘了最重要的sort的对象必须实现Comparable接口。
描述一个LRU的HashMap。
这题一开始楞没听明白,老想着HashMap不是链式连接冲突的entry的么,怎么会size不够。磨叽了半天,搞了一个堆出来计数,面试官也不满意。
后来想想其实用个链表把Entry链接起来就可以了,正好在网上搜到了使用LinkedHashMap实现LRU Cache的做法,在这里描述一下内部实现:

  1. 扩展HashMap.Entry,使Entry间使用双链表连起来;
  2. get的时候,把该Entry移到链表的尾部;
  3. put的时候,把Entry放到链表的头部;
  4. 如果规模超标,则把链表头部的Entry抛弃;

项目里使用的设计模式。
我拿了资源安排里,封装两种安排算法到两个实现同一个接口的类的例子,说这是策略模式,面试官有些不认同。后来回头想想,项目里还有其他的模式:

  • Singleton,Facade自不必说;
  • Strategy有一个更好的例子,使用PROBE的A、B、C、D四种方法进行时间和规模的估算。另外还有两个Factory来负责生成相应的计算方法实例。
  • Decorator模式,封装了MultiTenantSessionFactory,持有一个SessionFactory对象,也实现了SessionFactory接口。

大概就想起来这些问题。一开始的自我介绍忘记介绍做过的项目了,这可能是悲剧的来源吧。

3 thoughts on “支付宝面试总结(2009.10.12)”

  1. Collections.sort() << 就这么问的话,既然没指定是那个版本的重载,那list里的东西也不是一定要实现Comparable接口嘛,只要提供个Comparator进去就好了。

Leave a Reply

Your email address will not be published. Required fields are marked *