2018校招面试随笔

  今年4月底入职当前互联网公司,有幸参加了公司2018校招,负责某java岗初试的一面或者二面(初试一轮或者两轮看情况的)。第一次参与校招,持续两天,今天刚忙完,晚上躺在床上竟有点睡不着,想反思下这两天的操作,文笔不佳,想到啥写点啥。

  连续的面试下来,感觉被考验的既是校招生,也是自己。来面试的不乏名校高材生,更有竞赛高手,年级排名靠前的学霸,感觉多数是完胜当年刚毕业时的自己。

  由于很多学生并不会java,自己给面试者准备的内容一是操作系统、计算机网络、算法与数据结构、http相关随机发问;二是简历上的项目深挖(但是感觉对于学生的python和c++项目大多数最终还是面试效果不太理想,需要提升自己的技能覆盖面);三就是最后的编程题;

  在最后的编程题上,主要准备了三道不同的题目,看心情随机问。其一是回文算法,比较简单,但答上来后会升级,升级后寻找当前字符串的最长回文子串,不要求实现给出思路就行;其二是寻找两个字符串的最大公共子串;其三是自创的兔子问题改编版:初始有一对成年兔子,成年兔子每3个月会生一对兔子(一开始说成年当月不生,后来干脆统一成年当月也生),小兔子需要4个月成年,成年兔子1年后死亡,求n个月后兔子对数。

  总的来说在内容一、二上的面试感觉自己做的还可以,但在编程题的面试过程中,还是有很多需要改进的敌方(睡不着的主要原因,觉得是不是有点对某些好学生不公平?)。

  其一是对于回文算法的升级版,前两个编程题都是反复挑选的网上的题,因此也是有看过网上能找到的各种实现。答案其实多重多样,但在第一天上午的面试中,有一个同学在升级难度后最终没找到思路,最后请求我给出见解,略微遗憾的是,当时我一下子也忘了怎么弄了,遂把前一个学生的解答思路回复给他(把字符串反转,然后就变成了题2,可以有新的思路了),但其实也并没有为该同学解答困惑。

  其二是对于求最大公共子串问题,没有适当准备给面试者的提示,陷入当面试同学请求提示时感觉提示了就毫无难度了,不提示又不太好的尴尬境地(最坏的结果是换题,换题非常不好,印象很深的一妹子被我换题后问懵了,感觉跟自己没准备好这题的提示有一定的关系)

  第三题自创的题,自己准备了一套面向对象的解法,但由于多数同学不会java,最终也没有同学按照我的思路来。不过也得到了各种千奇百怪的答案,各有特色,现场无法逐一验证, 很多答案在现场沟通中暂时没发现漏洞。(ps:所有的同学都忽略了兔子会死亡的设定,选择性忽略?)

  下面是自创兔子问题的答案,不是最优解但感觉思路明朗。  

/**
* 根据设定,4岁成年,age=4,在4,7,10,13岁时会产生新的兔子,age=16时会死亡
*/
@Data
class Rabbit {
public static List<Rabbit> rabbits = new ArrayList<>(); //兔子池
public static int month = 12; //目标月

private int age = 0;

public Rabbit(int age) {
this.age = age;
}

public void grow() {
this.age++;
if (age >= 4 && age < 16) {
breed();
}
if (age == 16) {
die();
}
}

private void breed() {
if (this.age % 3 == 1) {
rabbits.add(new Rabbit(0));
}
}

private void die() {
rabbits.remove(this);
}

public static void main(String args[]) {
Rabbit rab = new Rabbit(4);
rabbits.add(rab);
for (int i = 1; i <= month; i++) {
new ArrayList<>(rabbits).forEach(j -> j.grow());
System.out.println("第" + i + "月 ,当前兔子年龄:" + rabbits.stream().map(k -> Integer.toString(k.getAge())).reduce((u, v) -> u + "," + v).get());
}
System.out.print(rabbits.size());
}
}

  

猜你喜欢

转载自www.cnblogs.com/caizhiqin/p/9638346.html