1. 程式人生 > >2018校招面試隨筆

2018校招面試隨筆

  今年4月底入職當前網際網路公司,有幸參加了公司2018校招,負責某java崗初試的一面或者二面(初試一輪或者兩輪看情況的)。第一次參與校招,持續兩天,今天剛忙完,晚上躺在床上竟有點睡不著,想反思下這兩天的操作,文筆不佳,想到啥寫點啥。

  連續的面試下來,感覺被考驗的既是校招生,也是自己。來面試的不乏名校高材生,更有競賽高手,年級排名靠前的學霸,感覺多數是完勝當年剛畢業時的自己。

  由於很多學生並不會java,自己給面試者準備的內容一是作業系統、計算機網路、演算法與資料結構、http相關隨機發問;二是簡歷上的專案深挖(但是感覺對於學生的python和c++專案大多數最終還是面試效果不太理想,需要提升自己的技能覆蓋面);三就是最後的程式設計題;

  在最後的程式設計題上,主要準備了三道不同的題目,看心情隨機問。其一是迴文演算法,比較簡單,但答上來後會升級,升級後尋找當前字串的最長迴文子串,不要求實現給出思路就行;其二是尋找兩個字串的最大公共子串;其三是自創的兔子問題改編版:初始有一對成年兔子,成年兔子每3個月會生一對兔子(一開始說成年當月不生,後來乾脆統一成年當月也生),小兔子需要4個月成年,成年兔子1年後死亡,求n個月後兔子對數。

  總的來說在內容一、二上的面試感覺自己做的還可以,但在程式設計題的面試過程中,還是有很多需要改進的敵方(睡不著的主要原因,覺得是不是有點對某些好學生不公平?)。

  其一是對於迴文演算法的升級版,前兩個程式設計題都是反覆挑選的網上的題,因此也是有看過網上能找到的各種實現。答案其實多重多樣,但在第一天上午的面試中,有一個同學在升級難度後最終沒找到思路,最後請求我給出見解,略微遺憾的是,當時我一下子也忘了怎麼弄了,遂把前一個學生的解答思路回覆給他(把字串反轉,然後就變成了題2,可以有新的思路了),但其實也並沒有為該同學解答困惑。

  其二是對於求最大公共子串問題,沒有適當準備給面試者的提示,陷入當面試同學請求提示時感覺提示了就毫無難度了,不提示又不太好的尷尬境地(最壞的結果是換題,換題非常不好,音響很深的一妹子被我換題後問懵了,感覺跟自己沒準備好這題的提示有一定的關係)

  第三題自創的題,自己準備了一套面向物件的解法,但由於多數同學不會java,最終也沒有同學按照我的思路來。不過也得到了各種千奇百怪的答案,各有特色,現場無法逐一驗證, 很多答案在現場溝通中暫時沒發現漏洞。(ps:所有的同學都忽略了兔子會死亡的設定,選擇性忽略?)

  下面是自創兔子問題的答案,不是最優解但感覺思路明朗。  

/** * 根據設定,4歲成年,age=4,在4,7,10,13歲時會產生新的兔子,age=16時會死亡 */@Dataclass 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());    }}