網頁

2019/1/31

2019 雷技資訊面試

今天南港科學園區的雷技資訊科技面試JAVA Engineer / Java 工程師(4萬 至 6萬5仟元)

雷技資訊科技位在南港科學園區的E棟5樓,要上去必須先到A棟的櫃台換證才可以刷電梯的卡。

面試前先寫一份3頁試題,題目皆為英文,以下列出我有印象的部分。

第一題,請寫出以下的印出結果。

public static void main(String[] args) {
        
    String s1 = "java";
    String s2 = "java";

    String s3 = new String("java");

    System.out.println(s1 == s2);      // true
    System.out.println(s1 == s3);      // false
    System.out.println(s1.equals(s3)); // true

}

這題要考的是String Pool及Java字串比較的概念。


第二題,請寫出以下的印出結果。

public class Main {

    public static void main(String[] args) {
        
        Integer i = 0;
        String s = "hello";
        
        MyClass myClass = new MyClass();
        
        add(i);
        add(myClass);
        
        System.out.println(i);              // 0
        System.out.println(s);              // hello
        System.out.println(myClass.getI()); // 3

    }
    
    static void add (Integer i) {
        i += 3;
    }
    
    static void add (String s) {
        s += "world";
    }
    
    static void add (MyClass myClass) {
        int i = myClass.getI();
        myClass.setI(i += 3);
    }
}

class MyClass {
    Integer i = 0;
    public Integer getI() {
        return i;
    }

    public void setI(Integer i) {
        this.i = i;
    }
    
}

這題原本只有Integer的部分,MyClass的部分是我在這邊自己另外加的。筆試時我想Integer也是個物件,我答3,所以我答錯了。

Java的原始型別的包裹類別(Wrapper class)都是Immutable的,因此對內容的操作其實都是另外new一個新的實例而不會影響到舊的內容。


第三題,請寫出以下的印出結果。

public static void main(String[] args) {
        
    System.out.println(modify(true)); // true

}

static boolean modify(boolean flag) {

    try {
        if (flag) {
            throw new RuntimeException("error");
        }
    } catch (Exception e) {
        flag = false;
        return flag;
    } finally {
        flag = true;
        return flag; // warning:finally block does not complete normally
    }

}

蠻多家的筆試都會考try catch finallyreturn的問題,但我覺得這考題沒什麼意思,因為第一個finally block中寫return會有warning,再來實務上根本不會這樣寫。更機車題目的會搭配System.exit()一起考。


第四題,寫出印出結果

public static void main(String[] args) {

    String[] names = { "McDonald's", "Yun.Ma", "Samuel.L.Jackson" };

    String s = Arrays.stream(names)
            .max(Comparator.comparing(e -> e.toString().length()))
            .map(e -> e.toUpperCase()).get();
    
    System.out.println(s); // SAMUEL.L.JACKSON
}

這題考的是Java 8 lambda語法。


第五題,請從以下選擇符合ArrayListLinkedList的特性(有些選項我忘了)。

  • a:搜尋比較快
  • b:新增刪除比較快
  • c:執行緒安全
  • d:占用較多的記憶體空間

簡單來說就是考ArrayListLinkedList的差異。


第六題:請寫出你在工作上用過的Design Pattern

這題我就列了一些我部落格中曾經寫過的pattern,但事實上在工作上真的沒有什麼機會用到。


第七題:請實作Singleton class

這題我憑印象寫,我錯在缺了static關鍵字及把應private的建構子寫成public,還有取得實例的static getter 。

public class Singleton {
    
    private static Singleton singleton;
    
    private Singleton() {
        
    }
    
    public  static Singleton getInstance() {
        if (singleton != null) {
            return singleton;
        } 
        singleton = new Singleton();
        return singleton;
    }

}

第八題,會給你看一份PM寄來的英文信,請用中文寫出信中大意。這題要考的是英文閱讀能力。

信中大意是說PM從客戶那收到了最近電子報(newsletter)都會收到很多假email的訂閱,所以要求加入captcha的功能及form key(我也不知道這啥)。


第九題,承上題,題目會以英文列出要回覆客人幾項要點,請用英文寫一份回覆信。這題是考英文的撰寫能力。

大意是說無法利用內建的captcha,但可以用Google的,並需要客人註冊google帳號。可以提供form key的功能並先部屬在dev的環境。


筆試完接著面試,面試官有兩位,一是Quantum專案的team leader吧,另一位不曉得,或許是PM或資深工程師。主要都是由team leader提問。

面試的問題和筆試相比就是要有點經歷才會,包括針對筆試中回答的pattern進行解釋,工作應用的例子。多執行緒的問題,解釋什麼是synchronize。是否有資料庫schema設計的經驗? 什麼是正規化Singleton類別在多執行緒中可能碰到的問題,該如何解決?資料庫lock機制。AP層用什麼框架存取資料庫。前端的部分有寫過嗎?有CI/CD的經驗嗎? 你聽過Base64 encode嗎,64代表什麼意思?(64這問題讓我印象深刻,從此之後我都愛拿這題目去電人(娛樂大家),很多資深都被考倒(包含其他家的面試官))演算法資料結構你知道嗎?有用過AWS嗎?,自己個人有沒有什麼專案? 你未來三個月在程式上有什麼目標。

感覺他們要找對程式非常熱情的人,他認為我不夠熱情,他說:「我在你身上看不出對程式的熱情」,我解釋說我花比較多時間在寫部落格,但他重複說了好幾次。Anyway,當然我實務上經驗確實是很少,例如我在"工作中"從沒寫過多執行緒,沒有做過SQL tuning,沒做過performance tuning,也沒設定過CI/CD之類的,根本dead lock。



最後面試完人資來說今天就到結束了,no feedback,應該是無聲卡。

應徵前,建議先寫個小專案,部屬到AWS上,CI/CD jenkins,github都建好,面試的時候直接demo,這樣應該才是他們要的人(passion)(我猜就算會以上pay也不到6萬,因為104上的價錢是4萬到6萬5千元,那意思就是4萬的意思。)

還有面試確實是要特別準備的,就像準備考試一樣,因為總是會考些工作上不一定會用,但考試會考的東西。

過完年再來面試幾家。


參考:

5 則留言:

  1. 感受到滿滿的辛酸。。。。。

    回覆刪除
  2. 您這樣這麼樂於分享技術及經驗, 都被評價對程式沒熱情, 真是無言

    回覆刪除
  3. @Louis 只能說運氣也是一種實力。不過日後也多少慶幸當初沒上,反而有別的路可以去。

    回覆刪除
  4. 常常看你部落格的萌新PG 感謝分享經驗

    回覆刪除