這可能是歷史上最簡單的一道 java 面試題了,最簡單的一道Java面試題,卻讓很多大牛踩了坑
整理了最新2020整理收集的一線互聯網公司面試真題(都整理成檔案),有很多干貨,包含微服務、netty,spring,執行緒,spring cloud等詳細講解,也有詳細的學習規劃圖,面試題整理等,我感覺在面試這塊講的非常清楚:獲取面試資料只需:點擊、點擊這里領取!!! 暗號:CSDN
簡單的Java面試題目
題目很簡單,完成代碼,判斷一個整數是否是奇數:
public boolean isOdd(int i)
相信相當數量的人都已經在準備吐槽了,只要看過《編程珠璣》的人都知道這道題的答案和其中極為簡單的道理,不過別著急罵街,不管你信不信,這道筆試題我拿到的答案好多都長這樣:
public boolean isOdd(int i) { if (i % 2 == 1) { System.out.println("是奇數"); } else { System.out.println("是偶數"); }}
然后編譯一下,發現錯誤了,撓撓頭,頂多改成這樣:
public boolean isOdd(int i) { if (i % 2 == 1) { return true; } else { return false; }}
好吧,我承認我在篩選簡歷的能力可能有一些問題,不過不管你信不信,好多大廠作業了幾年的程式員,都會寫出如上風格的代碼,
于是我繼續進行引導:
我:“這個函式的定義要求回傳一個什么型別的值?”
候選人看了看題干:“布爾型別,”
我:“那么,你 if 后面的括號里面的運算式的值是一個什么型別的?”
引導到這一步的時候,依然有高達兩成的候選人選擇了放棄,表示他們不知道,好吧,我真的不知道你們來面試這個職位的信心何在,不過大部分人想了想,還會回答出正確答案:
候選人:“也是布爾型別,”
我:“然后呢?”
有少量候選人雖然沒說出來,但是我能看出來他們覺得這只是一個巧合,并不知道怎么進行下一步,不過,大多數人想了想之后,還是會優化成如下代碼:
public boolean isOdd(int i) { return i % 2 == 1;}
終于過了第一關了,進行第二關的引導:
我:“那我傳進來一個 - 1 呢?”
將近一半的人在想了想之后會嘴硬地表示他們從小被教導只有自然數才有奇數偶數之分,負數沒有奇偶這一說,剩余的人接受了這個設定,想了一會兒,改成這樣:
public boolean isOdd(int i) { return i % 2 == 1 || i % 2 == -1;}
并且在提示之后優化成這樣:
public boolean isOdd(int i) { return i % 2 != 0;}
好吧,這是迄今為止第一個能通過編譯且完全滿足了需求的代碼實作了,說實話,一開始就寫成這樣的人,如果沒有其他什么明顯的缺點的話,我這里基本就能通過了,我承認我的要求比較低,但是來面試的人能直接寫出這樣的真的不太多,粗略地估計的話,大概占一到兩成吧,
但是這里還沒完呢,還有最重要的第三關呢:
我:“有更好的辦法嗎?”
候選人:“?”
我:“我覺得取模操作比較慢,有更快的解決方案嗎?”
除了少數人能自己想想就想出來了之外,絕大部分(毫不夸張)候選人表示沒有或者不知道,于是進行下一步提示:
我:“奇數和偶數轉換成二進制有什么區別?”
相當一部分候選人表示自己不懂什么叫二進制和位運算,有的還表示 java 不是 c 語言,不用研究這些,就跟很多評論會吐槽我在裝逼一樣,少部分候選人想了想,會怯怯地回答,
候選人:“奇數最后一位是 1,偶數最后一位是 0,”
我:“然后呢?”
這里很奇怪的點是,大部分能聊到這里來的候選人會想起來移位操作,我真的不知道是為什么,雖然這道題確實可以有這種操作:
public boolean isOdd(int i) { return i >> 1 << 1 != i;}
但是這根本不是重點好吧!!!
總之,無論如何,能在第三關的各種引導之后,能寫出下面這個結果來的人,真的不多,能一開始沒有任何引導的就寫出來的人,至今只見過兩個,一個我去哪兒都帶著,一個拒了我的 offer,
public boolean isOdd(int i) { return (i & 1) == 1;}
別以為這就完了!終極 boss 來了:
我:“這樣是不是比上面取模運算要快?”
候選人:“那當然了,位運算肯定快啊,”
我:“但是我們實際代碼測驗過,發現上面的按位與操作和取模操作,實際運行的時間是差不多的,為什么呢?”
候選人心里 mmp:“鬧了半天你這是在逗我玩啊???”
然而真正能回答出原因來的人,面試程序中我沒見過,可能是大牛都看不上我所在的公司吧,只有在某公司的時候,一個同事想了想,給出了我正確答案,難道是我經歷的公司都太 low 了么……
文末總結
那些大廠問來問去,還是那些換湯不換藥的問題,
整理了最新2020整理收集的一線互聯網公司面試真題(都整理成檔案),有很多干貨,包含微服務、netty,spring,執行緒,spring cloud等詳細講解,也有詳細的學習規劃圖,面試題整理等,我感覺在面試這塊講的非常清楚:獲取面試資料只需:點擊、點擊這里領取!!! 暗號:CSDN

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/229252.html
標籤:其他
