logo头像

分享技术,品味人生

记一次全英文面试记录

有幸得到一次民营优秀公司的全英文面试,虽然全程打脸,老脸都快收不住了,不过收获挺大,主要有这么几点:

  • 美式管理风格,轻松、扁平化管理、都用英文花名,部门少,几乎没有墙,薪酬福利高,不打卡,各种合影,塑造家庭感觉。
  • 面试分四轮,可惜挂在第二轮,分别是HR面,机试、技术面、老总面
    • HR面,整体跟审犯人似的,估计也是专业使然吧。
    • 机试内容,下文会讲到

关于机试

分为上机2题,笔试题一页,流程分析画ER图,奈何E文还不够火候,时间只有30分钟,这里就介绍下上机题。

机试题1

求两个集合的交集,需要用java8的api,集合主要是放数字,放代码了~

class Page1{
    public Collection<Integer> compareList(Collection<Integer> c1, Collection<Integer> c2) throws Exception {
        List<Integer> collect = c1.stream().filter(c11 -> c2.contains(c11)).collect(Collectors.toList());
        if(collect.size()==0)
            throw new RuntimeException("没有匹配的数据");
        return collect;
    }

}

@Test
void testPage1() {
    try {
        Assertions.assertEquals(new Page1().compareList(Arrays.asList(1,2,3),Arrays.asList(3,4,5)),Arrays.asList(3));
        Assertions.assertEquals(new Page1().compareList(Arrays.asList(2,3,5),Arrays.asList(3,4,5)),Arrays.asList(3,5));
        Assertions.assertEquals(new Page1().compareList(Arrays.asList(2,3,5),Arrays.asList(6,7,8)),Arrays.asList());
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

小结:这里卡住了,有两点:

  • 遗忘了元素可以直接跟集合做比对得出布尔值,刚好作为stream的filter判断。
  • 另一点是要求空集要抛出异常,对于自定义异常也遗忘,非常不应该啊。

机试题2

输入若干纸牌,需找到最大的纸牌

class Page2{
    //2AKQJ109876543
    //黑桃(spade)、红桃(heart)、梅花(club)、方块(dianmond), 如梅花5, 5 club
    // 1: ace,
    //2~10
    //11:Jack
    //12:Queen
    //13:king
    //color joker,black joker
    public String getMaxCard(Collection<String> porkCards) throws Exception {
        List<String> collect = porkCards.stream().sorted(new Comparator<String>() {
            List<String> cardOrderList = Arrays.asList("color", "black", "2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");
            List<String> cardColorList = Arrays.asList("joker", "spade", "heart", "club", "diamond");

            @Override
            public int compare(String o1, String o2) {
                String[] card1 = o1.split(" ");
                String[] card2 = o2.split(" ");
                return cardOrderList.indexOf(card1[0]) - cardOrderList.indexOf(card2[0]);
            }
        }).sorted(new Comparator<String>() {
            List<String> cardColorList = Arrays.asList("joker", "spade", "heart", "club", "diamond");

            @Override
            public int compare(String o1, String o2) {
                String[] card1 = o1.split(" ");
                String[] card2 = o2.split(" ");
                return cardColorList.indexOf(card1[0]) - cardColorList.indexOf(card2[0]);
            }
        }).collect(Collectors.toList());

        if(collect.size()==0)
            throw new RuntimeException("没有匹配的数据");
        return collect.get(0);
    }
}

@Test
void testPage2() {
    try {
        Assertions.assertEquals(new Page2().getMaxCard(Arrays.asList("3 black","4 heart", "5 diamond")),"5 diamond");
        Assertions.assertEquals(new Page2().getMaxCard(Arrays.asList("3 black","5 black", "5 diamond")),"5 black");
        Assertions.assertEquals(new Page2().getMaxCard(Arrays.asList("3 black","color joker", "5 diamond")),"color joker");
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

小结:这里的比较器算法是自己构思的空间换时间,不懂是否有更优,要点如下:

  • 牌组顺序2AKQJ109876543,另外还需要区分花色,黑桃、红桃、梅花、方块
  • 卡牌是两组字符用空格隔开,所以做成两组对比,先比较数字,再比较花色。

补充笔试

里面提到了一点,枚举的默认打印是什么,比如

enum color{
    red
}

System.out.println(color.red);
// red

絮叨

参加工作至今,经历过外包、甲方、私企,面试一路顺风顺水,基本都是内推,这是技术强度最大的一次,真的是拼刺刀啊。

基础不扎实,怪不得别人~

机试的时候,面试官报一台笔记本坐对面,还以为忙于工作,后面才发现,他跟网管似的,可以看到我的桌面,也可以控制。。。压力巨大

这是个不错的体验,期待再次冲锋、蜕变吧!

评论系统未开启,无法评论!