面試問一些冒泡排序有用么?
今天去面試,問數組的排序方式, 我知道有很多排序方式,冒泡最基本的,快排,分治法排序,還有一些排序方式,可能只知道一些名字或者概念。我當時用JAVA本身的一些排序類直接實現了。然後面試官讓用冒泡排序,並說出用了幾個for幾個if。我很不解,我知道怎麼做,遍歷然後一個個比較。再顛倒一下順序。我沒反映過來要用幾個for幾個if,然後他又提醒了我用幾個for幾個if。我後來就直接說先一個循環然後...基本上將代碼能寫出來。我很疑惑,這樣子面試的需求是什麼?為了考察什麼,很多面試都會去考冒泡排序,並要很熟練的輸出么冒泡排序的思想和代碼。這樣有意義么?
唔……怎麼說呢……
假設你吐槽對方明明面個搭API的崗位卻讓你實現個紅黑樹之類,那是真挺值得吐槽的,畢竟真用不上,並且略複雜。
但是啊,面任何一個需要編程的崗位,稍帶上一個實現一下冒泡排序/交換排序/插入排序這種任何一本數據結構或者演算法教科書排序章節里所介紹的第一個最簡單最樸素最擬人且總共不過幾行的演算法實現一點也不過分。這不是像寫個平衡樹那種代碼量大還略有些複雜程度的演算法,而是基礎級的演算法101,甚至可以說是編程101,僅次於Hello World的那種,大體上是學過騎自行車放著十幾年不騎照樣不會忘一樣的東西。
這樣的問題,對於真是計算機專業/軟工專業畢業的本科生甚至好一點的專科生而言都是理所當然會寫的東西,寫出來不至於加分,但這個都寫不出來,那麼簡歷上的一些東西其實是存疑的。畢竟這年頭三個月的培訓班也會教你怎麼裝修簡歷不是?面試中問工作中不會用到的問題,都沒啥意義,只能說實在不知道考什麼了才考這些。
雖然各種排序演算法是基礎,但絕大部分人真的不會在實際工作中去實現這些排序演算法,行業里,對應屆生往往考這些問題,因為如果應屆生沒有實際工作經驗,也只好考這些。
我在這個Live https://www.zhihu.com/lives/873973775413170176 里詳細介紹了怎樣做好面試官。
當然,題主遇到這樣的面試官也很無奈,過當題主將來自己成為面試官的時候,記得要考察更有意義的問題。首先理解你覺得這種面試太古板的心情……
但是,冒泡背後是對循環嵌套的熟練運用,快排和歸併背後是二分法,堆排背後是完全二叉樹,這幾種排序方法是這些基本概念的基礎應用,確實需要熟稔於心。面試官想要的答案並不是怎麼調用Java封裝好的排序方法,因為沒有人想招只會調api的程序員。這些跳脫出語言窠臼的問題才是更本質更重要的,就像考核動畫師的素描功底。
當然,說了這麼多,其實面試還是更注重項目經驗吧。
正則有用嗎?
平衡樹有用嗎?演算法分析O(n)有用嗎?觀察者模式有什麼缺點?你看了以上問題,以為我是在炫茴字有幾種寫法嗎?那我告訴你,以上問題都在我職業生涯遇到過,這些本身也不是什麼高深前沿研究。
你知道書到用時方恨少的恨怎麼寫嗎?我現在天天寫。你要不來寫寫?
當然也有Sb的面招題,比如網易的*++a+b。但我在四家上過班的及數量更多的parter公司,都沒遇到過考這種實踐絕對不會用(不應該,該禁止用)的題的。我看到樓上有不止一個人說用不上,wtf?冒泡排序不是很大概率使用的嗎?好奇你們在一般數據少時怎樣排序的…
不是沒有用,而是用不上。這個本來就是擇優錄取吧,就像少林招一個掃地的,有十個人會掃地,但有一個會乾坤大挪移,那會乾坤大挪移的就可能被錄取了,雖然最後還是掃地。
沒讓你手寫就不錯了。問幾個for估計想問時間複雜度吧。手寫已經成型具體演算法的,都沒意義,給個場景讓分析應用,才有意義。上次面,讓手寫快排,我就艹了,那是不是還手寫紅黑樹?手寫KMP?自己實現個正則引擎?要求無止境了。
基礎問題很難說有沒有意義。工作中用不到不代表不需要掌握。類似問題就像問學高數有意義嗎?英語一定要過4級有意義嗎?等等。。。
推薦閱讀:
※[無領導小組討論]被搶總結髮言,請問大家如何評價?
※有沒有一場面試改變了你?
※求職者如何巧妙回答此問:你對我們公司有什麼問題嗎?
※為什麼面試新媒體,面試官都要問該如何漲粉?
※如何解決應聘者嫌薪資低的問題?