天天看点

2017秋招-技术岗-亚马逊-海外购-全栈开发(2轮面试)前言第一轮第二轮面试反馈总结

Title Content
时间 2017-07-31 10:00
地点 北京市朝阳区东四环中路56号楼远洋国际中心26层
部门 海外购
岗位 全栈开发
性质 暑期实习,可转正

前言

本来是通过师兄走秋招内推,该部门多出两个暑期intern,所以帮忙推了下。

面试当天,照常跑步,到8:20左右从宿舍出发,特别怕迟到,一路上很赶,最后提前30分钟到达。

后来被HR带到10层去面试。

第一轮

Title Content
时间 10:00-11:00
面试官 男性

Q1

问题 实现LRU,即实现缓存
面试官先讲了缓存的概念
缓存处理主要是新的替换旧的
我设计了类的数据定义和接口
面试官让我只实现添加和返回缓存实例的接口
添加是给定key-value
返回实例是给key
我的做法是通过HashMap缓存数据,再维护一个List维护数据的进入时
间。大体没问题,一些细节、异常处理疏忽了,他说其实这些地方才是经常
考核的。
           

Q2

问题 讲一个你的项目
讲了自己的一个偏向后台框架设计的项目,讲到一些框架的时候,会问为什
么用它不用别的,分析下就好。
这一部门基本上是我自己讲,面试官的反馈挺少的
           

第二轮

Title Content
时间 11:00-12:00
面试官 男性

Q1

问题 将二叉搜索树变成双向链表,不需要额外空间,改变指针就好
这题我的思路从inorder遍历出发,在面试官的提示下写了递归法,原理
没想清楚,但是似乎是对的,但是处理出来的是单链表,之后需要遍历一遍
改成双向就好
           

思路:

(1)定义函数helper,含义是返回包含node的双向链表

(2)每次递归,求得node的左右两边子树得到的双向链表,并返回左右子树的双向链表的尾部节点

(3)分左右子树为空、不空各种情况下,将左边、parent、右边组合成新的双向链表的策略进行组合

class Node{
    public int val;
    public int left=null;
    public int right=null;
    public Node(int val){
        this.val = val;
    }
}
public class Sollution{

    void sove(Node root){

    }

    Node helper(Node node){
        if(node==null)
            return null;

        Node leftEnd = helper(node.left);
        Node rightEnd = helper(node.right);

        if(leftEnd==null && rightEnd==null){
            node.right=node;
            return node;
        }

        if(leftEnd==null && rightEnd!=null){
            Node rightStart = rightEnd.right;
            node.right=rightStart;
            right.left=node;
            rightEnd.right=node;
            return rightEnd;
        }

        if(leftEnd!=null && rightEnd==null){
            Node leftStart = leftEnd.right;
            leftEnd.right = node;
            node.left=leftEnd;
            node.right=leftStart;
            return node;
        }

        if(leftEnd!=null && rightEnd!=null){
            Node leftStart = leftEnd.right;
            Node rightStart = rightEnd.right;
            node.left=leftEnd;
            node.right=rightStart;
            leftEnd.right=node;
            rightStart.left=node;
            rightEnd.right=leftStart;
            return rightEnd;
        }

    }

}
           

Q2

问题 将阿拉伯数字转换成中文读法,例如“12”,转换成“十二”
我只考虑了不含0的,亿以下的转换。经过面试官提点才发现这个问题。这
就是我失败的地方。
           

面试反馈

Failed

总结

其实面试官出的题都挺简单的,但是就是在那种封闭、时间限制的环境中,很多细节觉得没必要(其实往往是考核的,也是你比别人更优秀的地方,简单的大家都会做,做好细节才能突出自己)。同时思维比较局限,有遗漏case的情况,这是致命的。

下此面试一定要注意细节!!!

继续阅读