今天南港科學園區的雷技資訊科技面試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 finally
加return
的問題,但我覺得這考題沒什麼意思,因為第一個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語法。
第五題,請從以下選擇符合ArrayList
和LinkedList
的特性(有些選項我忘了)。
- a:搜尋比較快
- b:新增刪除比較快
- c:執行緒安全
- d:占用較多的記憶體空間
簡單來說就是考ArrayList
和LinkedList
的差異。
第六題:請寫出你在工作上用過的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 則留言:
感謝分享
感受到滿滿的辛酸。。。。。
您這樣這麼樂於分享技術及經驗, 都被評價對程式沒熱情, 真是無言
@Louis 只能說運氣也是一種實力。不過日後也多少慶幸當初沒上,反而有別的路可以去。
常常看你部落格的萌新PG 感謝分享經驗
張貼留言