題:
阻止編碼問題的“單線”答案
sevensevens
2018-06-29 22:03:38 UTC
view on stackexchange narkive permalink

在面試中,我通常會與Fizz-Buzz交流。我們的招聘人員顯然已經抓住了這一點,並告訴每個候選人都要研究這個問題。

這導致許多人為解決方案記住了數以萬計的一線。問題-他們幾乎永遠都不會正確選擇一線。如果您花15分​​鐘來重做單線Fizz-Buzz答案,那麼我知道您可能不是該職位的合適人選。

問題是有些人記住單線確實可以在面試過程中,但單行代碼無法編譯/運行,所以我使它們失敗了。大多數候選人似乎都不聽。我說過

請確保您可以在完成後向我解釋。這不是一個棘手的問題,如果您使用的語言功能不是我非常熟悉的,我將輸入您的程序並運行它。如果它沒有運行,那麼我將不能給您任何榮譽。一個簡單的解決方案比一個不起作用的“聰明”解決方案要好。

這似乎沒有幫助,我也不想只說出來。 “通過這個問題的每個人都使用if語句和模數。”有沒有人找到避免“聰明”解決方案的好方法?

問題:很少有人能夠通過Fizz-Buzz。我認為部分問題是人們試圖脫穎而出,成為聰明的候選人。一些Fizz-Buzz失敗最終證明了對SQL和基本編程概念(如繼承)的良好命令。如果他們只是以簡單的方式完成的話,他們可能已經通過了Fizz-Buzz。無論是好是壞,Fizz-Buzz對我來說都是一個試金石,如果您不通過,我們將不會僱用您。

編輯:如果您在Fizz-Buzz上花費20分鐘,就不會繼續前進。如果您花5筆錢編寫一個單線,我不知道它是否有效,直到我嘗試運行它。因為有些候選人在回答這個問題後表現更好,所以我猶豫要縮短面試時間,就像我要徹底解決失敗一樣。

編輯2 問我是否運行Fizz-Buzz的每個副本,包括for / if / modulus的副本。如果控制流程顯然正確,則我不會運行它。

單線的問題從來沒有直觀地看出單線應該做什麼。例如,一個人決定編寫Fizz-Buzz的LINQ版本(對於Java開發人員來說是這樣),然後繼續探討LINQ如何創建集合,然後從中選擇。我從來沒有一個單線候選人清楚地解釋每個命令的作用。

我要尋找的答案類型是

這是為(或while)循環,從1到100。接下來,我計算x / 3和x / 5的餘數並將答案存儲在此處。然後,我決定是否/是否確定應該打印什麼。

儘管存在上述問題,我仍然大量使用Fizz-Buzz的原因

  1. 即使這個問題非常受歡迎,我們中的少數候選人也花了20分鐘以上的時間(有時是整個面試)來弄錯了。如果您不能在5到10分鐘內創建這個非常簡單的程序,那麼我就不想僱用您。

  2. 每個簡單的問題都有一個內線,而我從經驗中得知,即使聽起來很簡單的問題也可能非常棘手。我不想自己做,因為我可能會無意中創建一個非常棘手的問題,需要花費5分鐘以上的時間才能解決。

  3. 使用單線告訴我關於您的信息。使用工作描述中一種語言以外的一種語言會告訴我很多關於您的信息。我的問題與可能被錯誤對待的人有關。

  4. 記住for / if / if else版本和Fizz-嗡嗡聲是一個非常受歡迎的問題。我試著說假裝我是您見過的最愚蠢的開發人員。您需要能夠向我解釋答案-候選人開始談論Perl regex的酷炫程度(對於Java開發人員而言)。

  5. ol>
評論不作進一步討論;此對話已[移至聊天](https://chat.stackexchange.com/rooms/79595/discussion-on-question-by-sevensevens-discouraging-one-liner-answers-for-codin)。
請澄清您的問題。1.您是讓候選人空頭運行代碼還是編寫單元測試?2.您是否已確定白板Fizz-Buzz必須成為面試的一部分,還是願意接受其他選擇,例如在REPL或IDE上進行Fizz-Buzz或其他一系列初學者練習?
“很少有人能通過Fizz-Buzz。我認為問題的部分原因是人們試圖脫穎而出,成為聰明的候選人。”我說那是一件好事。聰明是可維護性的敵人。
@Andy“聰明是可維護性的敵人”-這是Fizz-Buzz成為我面試對象之一的原因之一。我討厭在代碼中看到一線。
我認為這個問題很清楚:OP希望自己也吃蛋糕。正確的答案是他做不到,他將不得不決定要保留多少和要吃多少。
大量的人失敗不是一件好事嗎?無論您的面試技巧如何,您都會遇到無法實際編程的人。
不幸的是,您的問題似乎並不少見。從網上看,似乎最簡單的if-elseif-elseif-else解決方案也是人們在5至10分鐘內完成的最稀有也是最困難的解決方案。話雖如此,最好是淘汰這些人,而不是試圖告訴他們做正確的事,並可能僱用一個真正糟糕的程序員。
十 答案:
Peter
2018-06-29 22:11:00 UTC
view on stackexchange narkive permalink

解決方案與教師在需要避免欺騙上學期考試時使用的解決方案相同:將測試隨機化。

發明一個類似的問題(或者更好的是,一個問題組,因此可能對每個候選人都有細微的差別),並看著他們思考。

...例如,FozzBazz測試,您將“ fozz”替換為4的倍數,將“ bazz”替換為6的倍數,並將“ fozzbazz”替換為24的倍數。阻止死記硬背的最佳方法。
@HopelessN00b 12點呢?
@user1717828我想測試的一部分是看候選人是否注意到這一點。
@HopelessN00b很好,因為任何甚至沒有資格的軟件開發人員都不會有問題,但是任何“研究”原始問題的人都會更改數字並產生無效的代碼。
@HopelessN00b這真是太好了–我什至會去*不*更改測試的名稱,而是混合來自“標準” FizzBuzz的要求。坦率地說,為通過工作面試而背書的人不是我個人想要雇用的人。
-1
gnasher729
2018-06-30 00:04:16 UTC
view on stackexchange narkive permalink

我有點困惑。任何向人們介紹此測試的招聘人員都無法完成工作。需要這個建議並“研究”這個“問題”的人可能會遇到第一個障礙,但卻沒有絲毫機會被錄用。這只是在浪費大家的時間。該測試是關於站立一隻腳時要數到十的難度。

只需提出一個不同的問題。那將是針對面試官的meta-fizzbuzz測試:如果您找不到可以在五分鐘內代替fizzbuzz使用的測試,那麼您就不應該採訪人。

PS。如果我採訪了人們以清潔一幢高層建築上的窗戶,我可能會要求他們單腿站立時計數到十,即使這對於那些有耳部感染,眩暈,肢體殘疾或總體平衡問題的人來說是歧視性的。

非常重要的一點是,這個問題指出招聘人員正在放棄這些問題(也可以在glassdoor之類的網站上)
像Glassdoor這樣的網站似乎比健談的招聘者更有可能。也容易確認
“這個測試是關於站立一隻腿時要數到十的難度。”對於耳部感染,眩暈,肢體殘疾或總體平衡問題的患者,這種表徵似乎具有過分的歧視性。實際上,這與計算100一樣困難,用“ fizz”替換3的倍數,用“ buzz”替換5的倍數,並用“ fizzbuzz”替換15的倍數。當然,fizzbuzz測試的時間不應長到100。
@HopelessN00b如果這項工作是用於清潔高層建築上的窗戶,我會認為歧視具有一般平衡問題的人是“非常好的事情”。
您顯然誤解了@HopelessN00b。工作在高空工作→歧視身體上的殘疾,這將使其變得危險。Job正在使用代碼→區分無法使用代碼的人。gnasher729通過使用“類比”來“比較”這兩種情況。
是的,但是如果我正在僱用洗窗器,並且有人來接受采訪並解決Fizz Buzz,他們就是“被雇用!”
@DawoodibnKareem是的,當他們在每第3個窗口上塗抹蘇打水,在第5個窗口上塗抹蜜蜂並在第15個窗口上塗抹生氣,粘稠的蜜蜂時,您沒有其他人要責備。
Kallmanation
2018-06-30 02:15:53 UTC
view on stackexchange narkive permalink

正如大家已經說過的那樣,您應該考慮更改您的開場白。

但是無論您選擇什麼,您都可能已經意識到了這一點:

有沒有好的問題,只有好的後續行動。但是跟進問題不是不重要的。

您能否將Woof的答案擴展為7的倍數?
解決方案的優點是什麼?
缺點是什麼? ?如果這成為每秒分發數百萬行結果的企業解決方案,會有什麼不同的考慮?您可以製定的聲明。


不要勸阻一支班輪。提出跟進問題,使一個襯板無法承受。

無論是高年級還是低年級,都可以為經典的FizzBu​​zz提供一線解決方案,但是只有最優秀的人才可以適應不斷變化的需求環境,並且始終,連續,輕鬆地調整他們的代碼。

Nat Bowman
2018-06-29 23:57:25 UTC
view on stackexchange narkive permalink

如果可能的話,我建議您不要使用該招聘人員,因為他們正在積極破壞您的工作流程(因為這可以使他們賺到更多的錢)。從長遠來看。
如果不可能的話,追求其他答案可能是您最好的選擇,但它們都是解決實際問題的解決方案。

如果他們不被錄用,這並不能使他們賺更多錢。
+1似乎真正的問題是招聘人員只生產低質量的候選人。找到一個更好的招聘者。
ivanivan
2018-06-30 03:01:24 UTC
view on stackexchange narkive permalink

每隔幾年,我都會為面試工作申請一份工作……我的最後一個(去年,中級Java開發人員職位)他們要求我實施Fizzbuzz,並且我做了很長的路要走,明確易於遵循和維護的版本。面試委員會的開發人員立即問我為什麼不編寫更簡潔的代碼,並且我解釋說我們不再使用帶有16k RAM的8位CPU,如果不需要的話,最後一個時鐘週期都不需要壓縮代碼。是因為他們不會使用Java,所以編寫清晰易懂的易於維護的代碼比編寫複雜的傑作要好,因為傑作可以使程序每次運行節省3個時鐘週期。

所以用一根襯紙作為過濾器。當您詢問時,不要只問“進行嘶嘶聲”。取而代之的是讓他們寫一份由Judy從賬目掌握的VBA版本的fizzbuzz,或者使用其他一些輕微的指示,即重要的部分不是在編寫令人印象深刻的代碼,而是在編寫其他人將很容易編寫的代碼能夠稍後理解和修改/修復/維護。而且,如果他們給您一個班輪,那可能表明他們不是您想要的人...。

或者,如果您想僱用一個能夠理解並保持充實的人,內襯超級卷積代碼庫,給他們一個內襯實現,請'em對其進行分解,並使其便於Judy維護,然後再次將其重新實現為一個內襯。答案說,與招聘者斷絕業務關係。

自從這次採訪以來,我不會給出任何期望的代碼。我希望任何體面的軟件開發人員會提出一些問題,以使規範100%清晰,然後鍵入幾分鐘,直到產生出多於12條完全可讀的代碼行,除了一些可能的輸入錯誤之外,它們都能正確解決問題。
完全是@gnasher729。這就是為什麼您可以使用一個襯管的表示形式作為過濾器的原因:)
這是一個很好的答案。面試官應該尋找的是編寫可維護代碼的人員,而不是編寫神秘的一線代碼的人員。
Kai
2018-06-29 23:51:04 UTC
view on stackexchange narkive permalink

嘶嘶聲是這樣一個標準的淘汰問題,一個體面的應聘者應該已經準備好回答它,而不必接受教練的訓練或不需要記住答案,因此確定應聘者是否顯然在記住一個聰明的答案是我的一部分。測試。

但是,我不建議縮短採訪時間。即使候選人似乎不太可能是一個好的候選人,還是值得尊重的對待他們,並給予他們您分配的全部時間。口耳相傳,你想吸引好的候選人。如果與您進行面試的人有不好的經歷並與其他開發人員討論,您就不會這樣做。

如果您繼續面試,發現他們看起來像是一個不錯的開發人員,並且可能在過度準備方面做出了錯誤的判斷,則可以跟進有關他們對代碼可讀性與嘗試價值的看法的問題變得聰明,並問他們如何優化他們對嘶嘶聲的回答,最大化簡單性和可讀性,而不是試圖將它們塞成一行。

“但是,我不建議您縮短採訪時間”-最初是FizzBuzz的重點;減少浪費在毫無意義的採訪上的時間。如果爭論不做,我建議您更清楚地表明FizzBuzz的初衷(作為廉價過濾器)不是您所建議的。
當您知道此人不適合自己時,我不會感到面試太短。我沒有立即結束並尖叫“ YOU FAILED”,我切換到一兩個軟球問題,並在10-15分鐘後結束。
我想可能有禮貌地做到這一點,但我也一直很粗魯地接受它,並且很容易像在他們身上尖叫“ YOU FAILED”一樣。
Gaius
2018-06-30 13:31:55 UTC
view on stackexchange narkive permalink

您已成為 Goodhart法則的受害者,但請考慮:正如候選人記住了您的問題的答案一樣,也記住了Spolsky所寫的面試問題大約一次。因此,這不完全是候選人或招聘人員的錯。如今,面試已經開始,每個人都扮演著閱讀過時尚博客和 Cracking The Coding Interview 之類的角色,這意味著這不是對技術技能的考驗,而是參與其中的一部分。文化。

我建議的解決方案是自己編寫一段原始代碼,以實現一個簡單的功能(例如10到20行),但有一些缺陷,然後請候選人對其進行調試。您可以隨時隨地輕鬆地生產新產品,而招聘人員所能做的就是簡短的候選人,擅長調試,而這正是您想要的。

Bob Jarvis - Reinstate Monica
2018-07-01 02:38:36 UTC
view on stackexchange narkive permalink

很少有人通過Fizz-Buzz

FizzBu​​zz進行救援。恭喜你

記住Imran Ghory在他的原始帖子中所說的話

有時,您遇到一個看起來像是一個可靠的程序員的開發人員。他們知道他們的理論,他們知道他們的語言。他們可以就編程進行合理的對話。 但是一旦涉及到實際生成代碼,他們似乎就無法很好地完成工作。(強調我的意思)

就像一個英國人一樣說,“是的,有摩擦”。有人會說一場好遊戲。但是當涉及到產生有用的東西時-甚至沒有復雜的東西!-他們都會吹牛。他們失敗了。他們做不到!為什麼?好吧,用芭比娃娃的話來解釋:“編程很困難!”。這就是FizzBu​​zz的全部目的-將程序員與說話者分開。

誰在乎?這不是為什麼失敗的原因,而是他們失敗的問題。告訴我-您是希望代碼不會運行的“聰明人”,還是想要知道您編寫的內容行之有效的人,即使這不是最酷的解決方案?當然,您需要後者。為什麼選擇後者?因為(正如矮個子幾乎對那個黑衣男人說的那樣),“你不是一個大傻瓜”。其他人,那些試圖變得聰明並最終成為丑角的人,並不是他們想要的人,無論他們會說什麼遊戲。您希望真正坐下來做點事情的人-FizzBu​​zz證明了自己的價值,即使您不喜歡結果。

多年來,人們(非開發人員)向我重複了“程序員不是代碼”。而且,從棘手的人力資源,代碼,代碼審查和y的角度來看,這確實很棒,但從程序員和與他一起工作的人的角度來看,這都是完全錯誤的。程序員非常非常地由他/她編寫的代碼定義。藝術家的定義是什麼?答案-他們的工作!作者的定義是什麼?答案-他們的工作!程序員的定義是什麼?答案-他們的工作!程序員的最終產品是什麼?碼!就他們的工作而言,編程人員就是準則;代碼就是程序!學習,生活,熱愛它!

問題是有些人記住面試過程中的一線表現還可以,但是一線不能編譯/運行,所以我失敗了。

對你有好處。您在做正確的事。

但是我認為,在這篇文章中,您犯了一個基本的面試錯誤。面對明顯的問題,例如無法為一個非常簡單的編程問題編寫可行的解決方案,您正在為這些問題找藉口。那裡有很多剪切粘貼的“開發人員”。那裡有很多Google-fu優秀的“開發人員”。但是,所謂的“開發人員”,他們無法為FizzBu​​zz提供可行的解決方案,並且當您告訴他們使其正常工作而不是吐出錯誤記憶的單線代碼時,他們也無法清晰地聽。正如某人幾乎說過的,很久以前,在一個遙遠的星系中,“這些不是您要找的開發人員……”。

就像那個尖尖的耳朵的傢伙說的那樣,“長壽而繁榮”。

EDIT

為了克服這一麻煩,“招聘人員正在向候選人介紹FizzBu​​zz”事情,您應該開發一個簡單的開發任務的家族,任何開發人員都應該能夠在兩分鐘或更短的時間內完成編寫。下面是一些示例:

  1. 稍微改變FizzBu​​zz。 “經典FizzBu​​zz”將Fizz打印為3均分的數字,將Buzz打印為5均分的數字。因此將其更改為7和11。還是四九點。或將其反轉-在五個上嘶嘶響,在三個上嗡嗡響。
  2. 更改名稱和輸出。將其命名為FoosBall或類似的名稱。
  3. “打印所有從1到200的偶數”。
  4. “打印所有1到357之間可被7整除的偶數”。
  5. ol>

    為此主題開發其他變體。記住,您不會給他們任何棘手的東西。您不是在告訴他們編寫 SELECT 語句,該語句以一系列行的形式返回斐波那契數列的值。我認為那太過分了!您正在嘗試給他們一個簡單的編程任務,以查看他們是否可以做到。過濾掉想要的蜂,您無需做任何復雜的事情!這就是FizzBu​​zz的重點。

    而且...確保您拿走了他們的手機。有些“開發人員”如果沒有手機就無法編碼。我無法想像為什麼...:-|

    引用韋恩的話:“聚會,加斯!”

不要拿走他們的電話。和他們呆在房間裡。我認為,離開是無禮的。如果您想節省時間,請在面談不充分或不夠快時縮短面試時間。至少,這是我的個人觀點,其他人可能會不同意。
無論哪種方式-確保候選人沒有機會谷歌搜索答案。
+1這是唯一真正強調FizzBuzz核心思想的答案;刪除實際上無法編寫代碼的候選人;很快。除此之外,任何其他事情都開始使使用它作為測試的原因變得混亂。
Stephan Branczyk
2018-06-30 00:45:50 UTC
view on stackexchange narkive permalink

先做簡單的事情。

然後,用困難的方法做。

這兩種方法的相對優點和缺點是什麼?

(感謝aschepler的建議)第三個問題)

這就是您要尋找的答案。

不幸的是,一旦招聘人員了解了這些新問題,您就可以回到第一個平方。這沒有辦法。

放開自己的完美主義。您無法每次都針對相同的相同問題設置完美的實驗。即使沒有招聘人員,也無法保證所有回答您所有問題的候選人都沒有朋友在他之前接受面試並把所有問題都交給他。

您將需要多個問題,然後稍微旋轉/改變它們。

如果您要尋求兩種不同的解決方案,那麼候選人對下一個提示的回應可能比這些解決方案實際要重要的多:兩種方法的相對優點和缺點是什麼?
指責招聘人員試圖使應聘者符合客戶的要求,就像在指責廚師調味菜“恰到好處”一樣。這些年來,我認識很多招聘人員。有些更好,有些更糟。有些人是絕對的schlock-monster,他們甚至不告訴您就重寫您的簡歷。(“我知道*什麼* ??哇-我不知道我知道!!)我曾與之共事的那些人認為這是“輕鬆的演出”。他們所有人都很關心如何安排候選人,因為他們想獲得報酬!哇!金錢實際上是一種激勵因素!Whoodathunkit?!?
-1
@BobJarvis,點。的確,我對招聘人員有些苛刻。我剛剛刪除了那部分。感謝您的反饋。
@StephanBranczyk-實際上,我認為您關於招聘人員在招聘過程中可能是非值得信賴的合作夥伴的評論是完全正確的!也許我有點過分了:-(
Acccumulation
2018-06-30 02:58:38 UTC
view on stackexchange narkive permalink

如果您希望考生將重點放在結果上,而不是“好的代碼”上,那麼您應該清楚地表明,您不會看代碼。遞給他們一台筆記本電腦,告訴他們他們要將程序保存為文本文件,並且您無需查看即可從命令行運行它。

如果您查看代碼,不可避免的結果是人們將針對“我認為會打動面試官的代碼”而不是根據規範執行的代碼進行優化。在某些方面,提出一個簡單的問題會使此事變得更加困難。如果在面試中被問到如何在給定的運行時間限制下找到前十億個素數,那麼我可以通過各種節省時間的策略來展示聰明之處。如果要求我做FizzBu​​zz,我唯一能表現出聰明才智的方法就是打Code Golf。

您可以通過強調只是想得到一個答案,而不是在尋找任何優化方法,來減少(但不能消除)這種現象。如果應聘者清楚這是一個初步問題,也可以提供幫助。還會有其他問題讓他們表現出精通,現在您只是在要求能力。您可以做的其他事情是嘗試著眼於可讀性。告訴應聘者想像一下,非程序員將要閱讀代碼,而您希望他們一眼就能看到代碼的作用。

一個要問的問題是為什麼這是一個問題。您是否認為會有一些人會被錄用,但由於這種現象而失敗了?

在面試中打Code Golf並不聰明。
我會爭辯說,生成非程序員可以讀懂的代碼。我在面試中尋找的一件事是寫可維護代碼的人,而不是覺得有必要展示自己的聰明之處的人
如果將FizzBuzz交給了您,重點並不是要顯示您有多聰明,很酷或沒有打高爾夫。重點是證明您可以使其工作。正如OP所說:“ ...如果您使用的語言功能不是我非常熟悉的,我將輸入您的程序並運行它”。因此,求職者要聰明才能“增加風險”。他們通過直截了當降低了風險,這就像“真實”編程一樣。至少根據我的經驗,您的里程可能會有所不同,稅項,頭銜和其他選項可能有所不同。:-)


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 4.0許可。
Loading...