阿里巴巴面试研发工程师面试经历(转载)

原文链接:点击打开链接


总的来说还是非常有收获的,请各路大神不要鄙视我。

0. 开场白:本次校招的要求是………… ,三项中没有明显的短板,并且满足两项才可以。

1. Q: Java容器类
    A: 有4个接口继承Conllection接口:List, Queue, Set, Map;
        List中有ArrayList, Vector, LinkedList
        Set中有HashSet
        Map中HashMap, HashTable, ConcurrentTable

2. Q: 读过HashMap的源代码吗? 具体是怎么实现的.
    A: 数组 + 链表; 冲突时会把插入项插入在链表的第一个位置; 关于LoadFactor和reHash……

3. Q: 用Collection中的类实现LRU算法
    A: 我提出了一个用类似于队列的数组的算法. 即把用过的块放到数组的尾部.
    Q: 嗯~ 可以.

4. Q: 写个小代码, 把数组[1, 2, 3, 4, 5, 6]用递归逆序一下
    A: 脑子秀逗了, 然后各种错 T^T(不要鄙视我)

5. Q: 编程中用过树不?
    A: 用过.
    Q: 怎么用的?
    A: 语塞…… 对哦? 我怎么用的? 二叉查找树算不算? Orz
    Q: 知道B树不?
    A: 知道, B+树用于数据库索引.
    Q: 嗯~ 那等下问数据库的时候再问你好了.

6. Q: 知道Java内存模型不?
    A: 嗯~ 知道... Java内存分为方法区、堆、Java栈、本地方法栈还有PC……;堆又分为YG,OG和PG;YG又分为Eden、S0和S1。
    Q: 嗯~ 很好…… 那知道GC的工作原理不?
    A: 嗯……有一个Copy算法:………………;GC有串行GC,并行GC,还有CMS和G1.
    Q: 那他的回收策略是什么?
    A: 从根对象查找有没有对该对象的引用, 没有就回收; 引用分为四种类型, ……, 如果……, 则……

7. Q: 说说Object中的方法
    A: sleep(), notify(), notifyAll(), toString(), hashCode(), equals()

开始放大招:Orz

8. Q: sleep(500), wait(500), wait()这三句话有什么区别?
    A: 不知道. 我知道sleep方法和wait方法的区别: …………
    Q: 嗯~ 是的. 那你知道sleep()方法线程处于什么状态, wait()之后线程又处于什么状态吗?
    A: 不知道欸~ 我猜猜………… 一通乱猜…………
    Q: 那你知道他们被唤醒后又处于什么状态吗?
    A: Orz.

9. Q: 有线程A, B和C, 他们全部执行完之后才能做下一件事. 这个应该如何实现?(线程同步问题)
    A: 我说说我之前的实现: 开一个大小为3的布尔数组, 然后你们懂的...
    Q: 有更好的方法吗?
    A: Orz. 不知道欸.
    Q: 你知道ConcurrentHashMap中有一个log.condiction吗?
    A: 不知道.

10. Q: 进程和线程有什么区别?
      A: 进程是资源拥有的最小单位; 线程是操作系统调度的最小单位.
      Q: 一个进程挂了, 会影响其他进程吗?
      A: 不影响吧? 不过如果他们有父子关系是不是会影响?
      Q: (不鸟我继续问) 一个进程中的线程挂了会不会影响这个进程?
      A: 不会吧? 其他线程应该会继续被调度吧? 不过如果调度到挂掉的线程进程是不是也会挂掉?
      Q: 嗯~ 这叫做僵尸进程.

11. Q: 再出一个题: 有10亿的int数据, 给你1GB内存, 如何排序呢?
      A: 分区~! 用位运算算出高6位, 分64个区, 分区后的数值保存在文件. 然后对每个文件再排序.
      Q: 那你说说文件上的内容应该用什么排序方法呢?
      A: 呃~ 我觉得nlogn的排序应该都可以吧?
      Q: 比如说?
      A: 归并排序?
      Q: 为什么用归并排序?
      A: 我觉得都可以啊~ 就随便说了一个
      Q: (提醒我说) 归并排序需要额外空间~ 然后我分区的时候是卡着1GB内存分配的, 所以显然不能用归并.
      Q: 那还有什么排序方法呢?
      A: 那就快排好了.
      Q: (又提醒我) 快排的时候递归也需要空间, 所以快排也不行. 如果你这样分区, 排序只能用堆排, 因为堆排的空间复杂度是O(1).

OK, 被彻底地玩弄于股掌之间. 事实证明, 智商是硬伤.

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