记一次全英文面试记录
有幸得到一次民营优秀公司的全英文面试,虽然全程打脸,老脸都快收不住了,不过收获挺大,主要有这么几点:
- 美式管理风格,轻松、扁平化管理、都用英文花名,部门少,几乎没有墙,薪酬福利高,不打卡,各种合影,塑造家庭感觉。
- 面试分四轮,可惜挂在第二轮,分别是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
絮叨
参加工作至今,经历过外包、甲方、私企,面试一路顺风顺水,基本都是内推,这是技术强度最大的一次,真的是拼刺刀啊。
基础不扎实,怪不得别人~
机试的时候,面试官报一台笔记本坐对面,还以为忙于工作,后面才发现,他跟网管似的,可以看到我的桌面,也可以控制。。。压力巨大
这是个不错的体验,期待再次冲锋、蜕变吧!
评论系统未开启,无法评论!