Başarısız bir görüşme kodlama alıştırması cevabını vermeli miyim?

Bir üst düzey görüşme adayına sahip olmak, FizzBuzz sorusu nu geçersiz kılar 1 2 .
Demek istediğim, gerçekten, tamamen, tamamen başarısız, hatta yakın değil. Hatta hakkında düşünmek için koçluk yaptım Bir döngü kullanarak 3 ve 5 özel durumlar olarak düşünmeye değer gerçekten idi.

Patladı.

Sadece QA amaçları için aynı takım sorusunu üç takım arkadaşına verdim; 5 dakika verdi; ve sonra sahte kodlarını toplamak için geri geldi. Hepsi onu çivilenmiş ve daha önce soruyu görmemişti. İki numara hile yaptı ...

Farklı bir mantık egzersizinde, aday, kullanmayı seçtiği dilde mevcut olan bazı özelliklerin anlaşıldığını gösterdi (C #). Yani, bir kod satırı hiç içermiyormuş gibi değil. Ama mantığı hala korkuyor.

Sorum şu, ona mantık sorularının cevabını vermemem gerekip gerekmediğidir.

Onları havaya uçurduğunu ve röportajda daha sonra kabul ettiğini biliyordu. Öte yandan, asla cevabı veya görmeyi beklediğimi sormadı.

Kodlama egzersizleri başarısızlık için adaylar ayarlamak için kullanılabilir biliyorum (yine, yukarıdan ikinci bağlantıya bakın). Ve ben gerçekten de sorunun özünü yanıtlamak için ona yardım etmeye çalıştım. Ancak bu, üst düzey bir adaydı ve Fizz-Buzz, açık bir şekilde, mülakat jürileri için muhasebe yaptıktan sonra bile gülünç derecede kolay.

Ona problemi çözmenin bir yolunu göstermeliydim diye hissettim, böylece en azından deneyimden öğrenebilsin. Ama yine de sormadı.

Bu durumu çözmenin doğru yolu nedir?


1 Tamam, bu gerçek FizzBuzz sorusunun bağlantısı değil, ama FizzBuzz etrafında iyi bir P.SE tartışması ve bunun çeşitli yönlerine bağlantılar.

2 To help clarify, this is the nuance of Fizz-Buzz I asked and it's from Project Euler's first problem. Substitute printing Fizz | Buzz for summing the numbers and you have the same fundamental question.
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. Write a function that finds the sum of all the multiples of 3 or 5 below 1000.

3 This question attracted more attention than I had expected, and I appreciate all of the replies. Some of the later answers have really gotten to the core of my question, so I'll allow the community to review and up-vote before assigning "the" answer.

4 I selected "the" answer based upon community votes at that point in time. And I think Yannis' answer is appropriate for interviews with newer devs. I think the collective response focusing on the lack of asking for the answer is spot-on as well.

14
Bu çoklu katmanlar problemi, fizz-buzz ile aynı değildir. Bir fizz-buzz benzeri bir çözüm kullanabilirsiniz, ancak 3'ün katlarını toplamak için döngü yapmanın en kolay yolu, daha sonra 5'in katlarını eklemek için döngü yapın, daha sonra döngülerin katlarını çıkarmak için tekrar dönün. 15 ilk iki döngüye iki kere saydın. Bir zeki yaklaşımı, kurtulmak için üçgen sayıları kullanır. Her döngü, üçgensel bir sayının birden çok (3, 5 veya 15) verdiğinden, bütün olarak döngü yapar.
katma yazar Ken Gentle, kaynak
Onları gevşet ve gününla devam et. Benim bildiğim kadarıyla, "üst düzey" de FizzBuzz başarısız, bilinçli ve kötü niyetli zamanımı harcıyor.
katma yazar Brad Wilson, kaynak
Bir takım lideri olan @ 0A0D, iyi bir geliştirici olmaktan farklı bir tür becerisidir. Kötü geliştiriciler olan takım liderlerini de gördüm.
katma yazar hao, kaynak
@JoelEtherton, şaşırma! Ekrana katılmaya ve adaylarla röportaj yapmaya başlayana kadar "200 başvuru sahibinin 199'u kodlayamaz" diye düşünmüştüm. (İddia edilen) yılların deneyimi sadece önemli değil. İş unvanları önemli değil. Çoğu başvuru sahipleri, gerçekten de biliyorlar, bilmeseler de inanmazlar.
katma yazar Fred Riding, kaynak
@Telastyn ilk telefonumun ekran sorularımdan biri "C # içindeki yapı ve sınıf anahtar sözcüklerini kullanmanın arasındaki fark nedir?" Buna cevap veremeyen ve telefon ekranını geçemeyen bir adayla karşılaşmadım.
katma yazar herbrandson, kaynak
Son zamanlarda bölgemdeki bazı pozisyonlar için röportaj yaptım ve kod gerektirenler bana kendi "FizzBuzz" -ish testlerini geçebilecek üst düzey adaylar bulmakta zorluk çektiklerini söylediler. Her durumda benim tepkim "ciddi olamazsın" idi. Görünüşe göre çok yakın olan ve hatta yakın olmayan üst düzey seviyedeki masumlar var.
katma yazar Joel Etherton, kaynak
@Telastyn: Görünüşe göre benim bölgemdeki sorun çok iyi bir oyundan bahsedebiliyor olması ve referans materyalleri üzerinde çalıştığı için tanımlamalar yapabilmesi, ancak problem çözme, mantıksal uygulama, algoritma tasarımı söz konusu olduğunda sadece deneyime sahip değiller. .
katma yazar Joel Etherton, kaynak
Bir takımı yönetene kadar birisini bir daha düşünmem. Sadece 30 yıldır yazılım programcısı olduğunuz için sizi kıdemli yapmaz. Sadece 30 yıldır iş yapan biri ya da size bu konuda iyilik yapmanıza gerek yok.
katma yazar kingchris, kaynak
@Kyralessa: Evet, bu farklı bir yetenek ama kendinizi kemerinizin altındaki yıl sayısına bağlı olarak kendiniz aramak isteyemezsiniz. Ya iyi bir geliştirici ve lider veya 2. bir uzman geliştirici olmalısınız.
katma yazar kingchris, kaynak
Görüşmeden çıkıp cevap verdikleri her soruyu cevaplandırabilirler. Bu yüzden onlara cevabı vererek ulaşamayacağı bir şey vermezsiniz, ancak cevaba verdikleri yanıtta bunlardan bir şeyler öğrenebilirsiniz. . Üst düzeydeki fizzbuzz başarısızlığı bile önemli değil, becerilerini ya da açık yalanlarını değerlendirmek için çok uzaktalar, bunun herhangi bir fark yarattığını bilmiyorum.
katma yazar Jimmy Hoffa, kaynak
@ Telastyn Gah, bundan nefret ediyorum. Kod tabanımızın çoğunu yazan adam, referans yerine değer eşitliğini kontrol etmek için özel sınıflarımızdaki tüm == ve! = Operatörlerini geçersiz kılar. Bu çok acı. (Düzenle: 'yanlış kişiye atıldı]
katma yazar KChaloux, kaynak
@ Steve314 - yaklaşımı testi temizlemiş olurdu; Tam olarak kodlanmamış olsa bile. Üçgen sayılara referans için sahne.
katma yazar GlenH7, kaynak
@JoelEtherton - Burada aynı şey. Gittiğim her yerde telefon ekranları için zorladım. C# kullanarak bir Kıdemli olmak için başvuruyorsanız ve bize bir değer türü ile referans tipi arasındaki farkı söyleyemiyorsanız, bir röportajda bulunmuyorsunuz demektir.
katma yazar Telastyn, kaynak
@JoelEtherton - Evet, bu adamlardan da bol var ama program tasarımını test etmek için en azından röportaj yapmaya değer. Teknik olmayan bir kişi temel telefon ekranını verebilir.
katma yazar Telastyn, kaynak

9 cevap

Görüşmelerimin çoğu, staj pozisyonu arayan öğrencilerle ve daha sık olarak basit (?) Alıştırmalar yapmadıklarından daha sıktı. Hatalarını anlatmak için kolay ve arkadaşça bir yol istedim ve ortaya koyduğum şey oldukça basitti: alıştırmaları kendim çözdüm ve kendileriyle bittikten sonra onlara çözümlerimi gösterdim.

Aynı problemi çözmek için farklı yaklaşımlarımızı karşılaştırarak başlamış olan adaylarla son derece ilginç ve açıklayıcı tartışmalar yaptım. Bir süre sonra, sadece hangi adayın okula gittiğini (bazı "profesörler" ... moronlar) kontrol ederek bazı hataları bekledim. Ve, bir adayın herhangi bir çözüm üretemediği birkaç durumda, bir dahaki sefere onları bir daha vermiştim.

15
katma
@YannisRizos Bu muhtemelen iyi bir yaklaşımdır; Her zaman, kişinin görüşme durumlarında iyi yapmadığı veya işlerinde modulo işleminden kaçındığı her zaman bir şans vardır (her ne kadar bu, en azından iyi söyleyemese de). Tecrübemde, çok sayıda başvuru sahibi, üst düzey pozisyonlar için bile basit bir döngü (istedikleri herhangi bir dilde) yazmaları istendiğinde çok şaşırıyor. Şimdi , haklı göstermeyi tamamen imkansız buluyorum.
katma yazar Torrey, kaynak
@RitwikG Dürüst olmak gerekirse, eğer aday bir programlama pozisyonu için röportaj yapıyorsa ve fizzbuzz ile baş edemiyorsa, muhtemelen ... gülüyordum (hey, ben bir iyi görüşmeci olduğumu söylemedim;). Birkaç ay önce, birkaç günlüğünü kaybettiğimi söyledikten sonra, bir aşırı önemsiz olan bir şey oldu. [A href = "http://en.wikipedia.org/wiki/Off-by- kodumda one_error "rel =" nofollow noreferrer "> OBOE . Hepimiz kapalı anlarımız var, ve ben adayı bir alıştırma yapmaktan alıkoyamazdım, muhtemelen bir sonrakine çabucak giderim. Bir sonraki aşamada başarısız olsaydı, onlara zamanlarından dolayı teşekkür eder ve devam ederim.
katma yazar yannis, kaynak
Mantıklı; Son zamanlarda yeni bir iş arıyordum ve ankete katılanların çoğunun, sorularına yanlış cevaplar verdiğimde (ya da "cevaplardan biraz" çıkmışken) aynı şeyi yaptığını gördüm. Bu gerçekten iyi bir uygulamadır. Çoğunlukla adayı açar (mesela) ve röportajı her iki taraftan da daha çekici hale getirir. Ama elbette, C ++ 'da şablonlar, RAII ve çoklu okuma konuları tartışılıyordu. Soru, fizzbuzz'ı çözemeyen bir kişiye ne diyorsunuz?
katma yazar Chani, kaynak
Bu da sürece iyi bir bakış açısı. Aday anlaşılır bir şekilde gergindi ve bunun için bir miktar karşılık vermeye istekliydim. Sonunda bir çözüm girişiminden bahsetmeye başladığında, sadece sarsılmış ve özlediği sınır koşullarını yarattı.
katma yazar GlenH7, kaynak

Cevap Verme

Adayın sormak için yeterince ilgilenmediği takdirde, nefesimi boşa harcamam ama @Yannis_Rizos cevap daha iyi.

Görüşmeler oldukça hızlı tempolu. Bir röportajdan sonra günler boyunca genellikle bir şeyler aradığımı biliyorum.

FizzBuzz Classic'i Kodlayamayan Kişiler

Büyük bir yapışma noktasının% operatörün farkında olduğunu hayal ediyorum. Birinin (myInt/3) == (myDouble/3.0) ile karşılaştırabileceğini, ancak belki de bir röportajın stresiyle karşılaştırabileceğini umuyoruz ... Yine de, FizzBuzz Classic, kaba kuvvet yaklaşımı zorlar. çözmek için en kolay algoritma kategorisine koyarak. Bir ipucu olarak, insanlara sadece "Fizz" kodunu yarı-kredi için kodlamalarını denediniz mi ve daha sonra bir geliştirme olarak "Buzz" ekleyebilir misiniz?

Bence soruna verilen en büyük cevap, iyi adaylar bulmak çok zor.

Genel Mülakat Soruları

Çoğu zaman adayların heyecanlandıkları son programlama projesini tanımlamaları için daha kolay ve daha üretken buldum. Bu soruyla% 100 başarı elde ettim, bu da bir programlama projesi hakkında can sıkıcı bir şekilde konuşan ve onunla ilgili teknik soruları yanıtlayabilen insanların çok iyi işe almadıkları ve yapamayanlar olduğunu anlamışlardır. Bu, adayı rahatlatmanın ve açık uçlu tartışmayı teşvik etmenin güzel yan etkilerine sahiptir. Bu soru ile aday, size en uygun olanı söyleyecektir.

Belki de bir düşünce kuruluşu algoritmasında sorular da gereklidir, ancak onları “favori proje” sorusu lehine terk ettim.

FizzBuzz'ın Sum (Son)

Görüşme sorgunuz FizzBuzz'a eşdeğer değil:

3'ün katları olan 10'un altındaki tüm doğal sayıları listelersek veya   5, 3, 5, 6 ve 9 elde ederiz. Bu katların toplamı 23'tür.   1000'in altında 3 veya 5'in tüm katları toplayan işlev.

FizzBuzz Classic, n yinelemelerini (her sayıyı veya Fizz/Buzz'ı yazdırmak için) uygulamanızı zorladığında, sorununuzu n /5 + olarak yapabilirsiniz. /3 + n /15 yineleme, hatta yineleme yok - doğrudan bir sabit nokta hesaplaması mümkündür. Aşağıdaki program bu üç yöntemi karşılaştırmaktadır:

public static void main(String[] args) {
  long n = Long.valueOf(args[0]).longValue();
  long sum = 0;
  long ms = System.currentTimeMillis();
 //Brute force method  Performance: cn
  for (long i = 1; i <= n; i++) {
    if ((i % 3) == 0) { sum += i;
    } else if ((i % 5) == 0) { sum += i; }
  }
  System.out.print("Brute force sum:    " + sum);
  System.out.println(" time: " + (System.currentTimeMillis() - ms));
  ms = System.currentTimeMillis();

 //Second solution: iterate through only numbers we are
 //interested in.  Performance: c * (n/3 + n/5 + n/15)
 //We counted multiples of 15 twice, so subtract one of them
  sum = countSum(n, 3) + countSum(n, 5) - countSum(n, 15);
  System.out.print("Only multiples sum: " + sum);
  System.out.println(" time: " + (System.currentTimeMillis() - ms));
  ms = System.currentTimeMillis();

 //Third solution: Use high school algebra.  Performance: c
  sum = sumSeries(n, 3) + sumSeries(n, 5) - sumSeries(n, 15);
  System.out.print("Sum of series:      " + sum);
  System.out.println(" time: " + (System.currentTimeMillis() - ms));
}

// Iteravely sum all multiples of skip
private static long countSum(long n, long skip) {
  long skipTotal = skip;
  long grandTotal = 0;
  while (skipTotal <= n) {
    grandTotal += skipTotal; skipTotal += skip;
  }
  return grandTotal;
}

// Thanks to @Caleb for pointing this out!  High school algebra
// tells us that the sum of a series is: (n * (a1 + an))/2
// where a1 is the first term and an is the nth term.  E.g. The
// sum of a series of 3 is: (n/3 * (3 + n - (n % 3)))/2
// Since we are thinking about performance here, we'll shift
// right one instead of dividing by 2 for style points.  ;-D
private static long sumSeries(long n, long skip) {
  return (n/skip * (skip + n - (n % skip))) >> 1;
}

Output (sum of FizzBuzz < 1000):

$JDK_HOME/bin/java FizzBuzzNot 999
Brute force sum:    233168 time: 0
Only multiples sum: 233168 time: 0
Sum of series:      233168 time: 0

Performans karşılaştırması için daha büyük bir n:

$JDK_HOME/bin/java FizzBuzzNot 1000000000
Brute force sum:    233333334166666668 time: 4744
Only multiples sum: 233333334166666668 time: 818
Sum of series:      233333334166666668 time: 0

Bunu konu dışı olarak reddedenlere not alın

Bu soruna bir çözüm sunma noktası, FizzBuzz'ın Sum'a verilen kaba kuvvet çözümünün FizzBuzz Classic'e benzer olmasına karşın, Sum sorununa daha iyi çözümlerin mevcut olduğunu ve bunun temel olarak farklı bir sorun olduğunu göstermektir. Bir serinin toplamı için uygun formülü hatırlamıyorsanız FizzBuzz toplamı son derece zordur veya 3 veya 5'e kadar adım attığının farkına varmaz.

Bir dizinin toplamı için bir formül elde ederseniz, diziyi yarıya bölerek, bir yarısını ters çevirerek ve eşleştirerek, sizi (n + 1) (n/2) alırsınız, bu da sizi gerçekten dağınık bir yola sokabilir. Tamsayı bölme ve kesilmiş kalanlar söz konusu olduğunda. Bu formülün (n (a1 + an))/2 versiyonu, n'nin tüm değerleri için basit bir cevap için kesinlikle kritiktir.

15
katma
Bu tek bir iterasyon olmadan yapılabilir. kodumu başka bir cevaba göndereceğim
katma yazar user66237, kaynak
Bu doğrudan hesaplanabilir (Ruby): t = {| i | (i * (i + 1))/2}; fizzbuzz = {| n | 3 * t ((n-1)/3) + 5 * t ((n-1)/5)}
katma yazar miguel.de.icaza, kaynak
Bir probleminiz olmasının bir nedeni, iki kez sayılar (15 ile bölünebilen) saymanızdır. Örnek bir program için bkz. ideone.com/clone/oNWrhJ
katma yazar pihentagy, kaynak
Bu dizinin modulo = 0 olduğu göz önüne alındığında, bir dizi toplamı arıyorsanız, n/2 * (m + nm) formülü kullanılabilir. Burada m = modulo sayısı ve n = serideki eleman sayısı (kat (x/m)) Bundan sonra kolay, S (3) + S (5) - S (3 * 5) [böylece bazı rakamlar iki kere sayılmayın].
katma yazar pihentagy, kaynak
@ GlenH7 Evet, yorumumu sildim çünkü buzzkill. Glen, AT ALL: D (Ayrıca, ben tamamen kodlanmış ve kendi çözüm önce birkaç dakika önce denedim) sorusuna cevap vermese bile onun analiz için sahne hak ediyor.
katma yazar Mike McAllister, kaynak
@DHall Heh heh, doğru! Glen'in cevabı çok fazla konu dışı, ancak tüm programcıların bu dayanılmaz dürtünün güzel bir örneğidir :)
katma yazar Mike McAllister, kaynak
Bu problemin çözümü, hem 5 hem de 3 katları olan sayıları iki katına çıkarmak mı gerekiyor?
katma yazar David G., kaynak
@GlenPeterson Ardışık tamsayıları nasıl toplayacağınızı biliyor musunuz 1..n? İlk ve son, ikinci ve ikinci son, vb. Reklamları yaparsınız. Bunu yazınız ve her bir çiftin (n + 1) eşit olduğunu göreceksiniz. N sayısı bir arada olduğundan ve her bir çift 2 sayı kullandığı için, toplam (n + 1) (n/2) 'dir. Kevin Cline'ın çözümü (ve benimki) aynı fikri kullanır, sadece sadece 3. veya 5. tamsayıları saymakla çarpılır. Örneğin, 1 ile 20 arasında 3 katının toplamı (3 + 18) (20/3)/2 = 21 * 6/2 = 63'tür.
katma yazar Caleb, kaynak
Fuzzbuzz2'nin daha zor olduğunu söylüyorsun, ama aynı zamanda hedef takımlarını da biraz değiştirmişsin.
katma yazar whatsisname, kaynak
katma yazar Eduardo Tavares, kaynak
Eğer cevaba koyduğunuz çaba için yapabileceğim bir artı 1 olurdum. OTOH, Wiki statüsüne bastı, bu yüzden iyi olacağını bilmiyorum. Gelecek okuyucular için not: Bu yanıttaki yorumların birçoğu, yorumları revizeleriyle kendi zaman damgalarına göre hizalamadıkça mantıklı olmaz.
katma yazar GlenH7, kaynak
@GlenPeterson - Daha ilginç sorularımız var. Ama daha verimli bir çözüm bulmak için bir saat öldürdüğünüz gerçeği bir tür hediye oldu.
katma yazar GlenH7, kaynak

Ona sorunu çözmenin bir yolunu göstermeliydim   En azından deneyimden öğrenebileceğini söyledi. Ama yine de yapmadı.   Sor. Bu durumu halletmenin doğru yolu nedir?

Ne röportajın ne olduğu umurumda değil, hatta bir "FizzBuzz" -sevel soru veya gelişmiş bir soru olsa bile. Bir adayı bir soruyu çözmesini isteyin ve yapamazlar, ama sizden doğru cevabı size sormaktan çekinmeyin , o zaman sizin zamanınıza değmezler. Dünyada nasıl bu kadar entelektüel tembel olursun?!?

Ve bir programcı gibi kokuşmuş olsanız ve bir işe girmeye çalışıyorsanız bile, en azından şimdi doğru cevabı almak için o kadar pragmatik olmazsınız, böylece bir sonraki görüşme için bunu biliyorsunuz?

Öyleyse hayır, cevabını "vermemelisiniz", fakat adayın başarısız olduktan sonra doğru cevabı duymakta ısrar etmesini beklemelisiniz . Yapmazlarsa, kitabımdaki kocaman bir kırmızı bayrak.

Birisi FizzBuzz'ı genç seviyesinde Dev röportajında ​​kullandıysa, modulus operatörünü hatırlayamadılar ve sadece o olmadan harekete geçemediler, ama sonra doğru cevabı açıkladıktan sonra yeniden yapmayla ilgili tüm tutkulu olduklarını, ya da en azından seninle doğru koddan konuşuyorsun, o zaman bunu doğru cevaplamak kadar iyi.

8
katma
Şimdi, eğer bu kişi görüşme yaparken matematik ve karmaşık algoritmalar yapmasını gerektiriyorsa, bu iyi ... FizzBuzz uzakta. Bununla birlikte, "üst düzey" geliştirici pozisyonları için "Müşteriden gereksinimleri topla, bir veri tabanından veri toplayan ve veriyi bir veri tabanına kaydeden bir web sitesi hazırla" gibi bir şeyden daha fazlası olmadı. FizzBuzz gibi sorular sordular, çünkü birisi onlara önemli olduğunu söyledi. Onunla sinirlendiğim yer burası. İşe aldığınız pozisyonla ilgili soruları sorun, THINK'in birisini üst düzey bir geliştirici yaptığını değil.
katma yazar djpowell, kaynak
@Graham: Katılıyorum. Bu durumda anahtarın "kıdemli dev" adayının FizzBuzz yapamadığı anlamına gelmeyeceğini, bunun da GlenH7'yi tatmin edecek kadar çalışmaya başlayabileceğini söyleyebilirim. Sanırım sadece bir CS derecesi için üniversiteden geçen çok fazla insanın alanı domine etmeye başladığı ve "temeller" in benim gibi öğrettiği bir geliştiricinin benim gibi kullanılmadığı şeyler olduğu beni rahatsız ediyor. Programlama on yıl. Bu gerçekten "iş geliştiricileri" (CRUD uygulamaları yapan milletler) ve "alt seviye" devreleri arasında bir ayrım yapmamız gerektiğini düşünüyor
katma yazar djpowell, kaynak
@ GlenH7 - İşte FizzBuzz ile her zaman bir sorunum var nedeni bu. Matematikte kötüyüm. Birkaç yıl önce FizzBuzz'ın tüm "vızıltı" haline gelmesine kadar Modül operatörünü tanımıyordum. FizzBuzz'ı tamamlama konusunda hiçbir fikrim yoktu ama 10 yıldan fazla bir süredir programlama yapıyorum. Tüm kariyerimde kesinlikle hiçbir şey onun gibi bir şeyi kullanmak zorunda kalmamıştı. Modülü öğrendiğimde, 5 dakika içinde FizzBuzz'ın nasıl yapılacağını anladım, fakat bunu yapmama yeteneğim gerçekten KORKU yaptığımı söylemiyordu, ama ne yapacağımı zaten biliyordum. (bir sonraki yorumda devam ediyor ...)
katma yazar djpowell, kaynak
FizzBuzz hakkında gerçekten fikir sahibi oldum ... ama bu doğru cevap. Eğer aday cevap istemezse, onlara vermeyin.
katma yazar djpowell, kaynak
Programcılardaki insanlar modulus operatörü “ileri matematik” veya “kendi işlerinde gerekli değil” düşünürken üzücü bir gün. Sıradaki: "Bölme veya çarpmayı bilmek zorunda değilim, onları web uygulamasında hiç kullanmadım".
katma yazar Mike McAllister, kaynak
“Yani hayır, cevabı“ vermemelisiniz ”, ancak adayın, başarısız olduktan sonra doğru cevabı duymakta ısrar etmesini beklemelisiniz. Yapmazlarsa, kitabımdaki kocaman bir kırmızı bayrak. Bakın, "Zamanımın tam saygısızlığı yoksa, kocaman bir kırmızı bayrak" diye okudum. Bazı insanlar, başkalarının zamanını boşa harcamadığınızı düşünür. Ben sormayacağım çünkü bir röportaj için oradaydım, metodolojileri öğrenmemek için. Bu yanlış mı? Olabilir. Ama diğer insanlara ve zamanlarına saygı duymanın kırmızı bir bayrak olduğunu öğrenmek için? İlgili.
katma yazar chryss, kaynak
@ 0A0D, FizzBuzz'da yer alan "matematik", verilen bir değişkenin 3 ve/veya 5 ile bölünebilir olup olmadığını kontrol etmektir. Bu matematik seviyesi, yazdığınız hemen hemen her uygulamada mevcuttur. Aynı tür projeleri sadece üst üste uygulayan "iş devleri" bile, bu matematik seviyesini kullanmaktadır. GlenH7, FizzBuzz içinde özyineleme beni etkileyecek veya beni korkutmak emin değilim .... Kesinlikle tehlikeli overkill gibi görünüyor.
katma yazar Graham, kaynak
FizzBuzz, modül operatörünü gerektirmez. Sadece bir int 3 veya 5 ile eşit bölünebilir olup olmadığını kontrol etmek ve görmek için kod gerektirir. Bu, çift ve onlu değerlerle sonuçlara bakarak döküm tarafından yapılabilir. Son zamanlarda kullandığım bir durumu hatırlayamadığım için belirli bir dilde modül operatörünü bilmediğim için bir programcıya hata yapmam, ama düşünmeye bile çalışmamam için bir dev hatası olabilir. sorun bir şekilde.
katma yazar Graham, kaynak
"Başkalarının zamanını boşa harca" dediğin şey, "yeteneğini göstermek" olarak adlandırıyorum. Bir görüşme yapmak için nadiren bir görüşme yapmak benim için bir etken olmuştur. Beni emmediğine inandırmak için bir saatin var, ne göstermek istiyorsun? Eğer reçel doluysa, belki de evet, cevapsız bir soru üzerine uğraşmayın, fakat eğer 2-5min'lik bir yedeğiniz varsa, doğru cevabı görmeyi istemek, “vazgeçme” nin tersine, SOME tür merakı gösterir. Bu, bir soruya cevap vermedikten sonra cevabı istemeyen kişileri nasıl görüyordum.
katma yazar Graham, kaynak
@Graham: Sanırım. Ben bazı WSDL ve diğer GWT şeyler üzerinde çalışıyorum .. matematik yok :) Ama ben matematiksel çalışma yaptığım zaman, matematik üzerinde ağır .. bu yüzden hepsi bağlıdır.
katma yazar kingchris, kaynak
@ GlenH7: Eğer iş matematik gerektiriyorsa, bunun için test edin. Aksi takdirde, aradığınız becerileri test eden bir problem verin. Ben sadece bir yabancıya bakıyorum ama eğer hiç bir zaman adama haksız bir test verdiyseniz Bu şeylere pratik bir programcı olarak maruz kalmıştır, o zaman onun gerçekten onun hatası değildir.
katma yazar kingchris, kaynak
@ JamesP.Wright: Bu, son zamanlarda Matematik ve Bilim'de bir arka planı olacak bilgisayar bilimcileri ve yazılım mühendisleri tarafından programlamaya hâkim oldu, bu yüzden bu tür şeylere maruz kalacaklar. Referans için, bu şekilde modulo uygulayabilirsiniz: x - ((x/n) * n)
katma yazar kingchris, kaynak
Niye ya? Cevabı daha sonra sadece Google’a gönderebilirsiniz. FizzBuzz oldukça popüler. Birisi modül bölüşümü bilmiyorsa dürüstçe endişeliyim.
katma yazar kingchris, kaynak
@ JamesP.Wright - FWIW, ben de kendi kendini öğreten programcı ile iyiyim. Esasen, mühendisim arka planım resmi programlamayla örtüşmediğinden öyleymişim. Adayın çözümü, özyineleme ve cevapsız sınır koşullarını kullanmaya çalıştı. Bu hataya çok önem verdim ve mantığında hatayı görmedi.
katma yazar GlenH7, kaynak
@ JamesP.Wright - tam açıklama, ben (şimdi) bir Mühendislik firması için çalışıyorum. Yani, evet, Matematik ve karmaşık algoritmalar önemlidir önemli. Graham'ın işaret ettiği gibi, modül kullanmadan çözmenin başka yolları da var ve bu girişimler için tam kredi verecektim. Heck, bütün katları olan bir dizi bile yapabilirdi ve buna karşı kontrol etti. Benim problemim işe yarayan bir yaklaşımla yaklaşmaya bile yaklaşamamasıydı, bu yüzden ne yapmam gerektiğini sordum ya da sonradan adayı anlattım.
katma yazar GlenH7, kaynak
@ JamesP.Wright - Bir dereceye kadar katılıyorum ve röportaja girerken, bunu kodlama sorusu olarak kullanmaktan utanıyordum. Gülünç bir şekilde kolay olması için varsayımdı, ve hatta bu soruyu fazla okumaması için bir uyarı ile başladım. Ben de kolay olması gereken bir takip vardı ve daha sonra onun daha yüksek düzeydeki geliştirme/tasarım becerilerini göstermesine izin verecek bir üçüncüsü vardı. Üçüncü soruya hiç ulaşamadık.
katma yazar GlenH7, kaynak
Modül operatörü yerine bir şey bulmaya çalıştığı için ona kredi verirdim, ama o noktaya bile gelmedi. Bence cevabını sormamasına odaklanarak iyi bir noktaya sahipsin. Gözleminiz görüşme sırasında ortaya çıkan diğer zorluklarla aynı doğrultuda.
katma yazar GlenH7, kaynak

Ön görüşme sırasında görüşmeci ile telefonda konuşurken fizzbuzz yazdım. Bu, herkesin haberi olmasa bile, bir dönem ders çalışmasından sonra ancak "kıdemli" statüsünü kazandıktan sonra bir araya gelebilmeniz gerekir.

Bunu yapamamanın bir kurtarma işlemi gerçekten yok. Bu durumda, yoldan çıkmanız gereken gerekli sıkıntılardan biri.

Ön ekran olarak yayınlamanın mantıklı olduğunu söyleyebilirim, böylece bir röportaj için onları siteye getirerek herkesin zamanını harcamazsınız.

4
katma
Bu senaryoda çit yok. Eğer onun "örnek kodu" güçlü bir bilgi gösteriyorsa ve fizzbuzz kodunu kodlayamazsa, örneği dışarı çekin ve ayrıntılarını sorun. Eğer onu destekleyemezse, favori hatımın zamanı geldi "hala gözden geçirecek bazı adaylarımız var, size geri döneceğiz."
katma yazar herbrandson, kaynak
@Graham - Orada da vardı. Geçtiğimiz yıl kısa süreli bir proje için bazı röportajlar yaptım (onlar için kısa vadeli; hala aynı proje üzerinde çalışıyorum, işte böyle gidiyor). İşe alım firmamız onları “önceden taradı” ve görüşmelerimin formalite olacağından emindi. Microsoft sertifikalı bir dersten “WPF'nin A-B-C'sı” gibi bir şey sorduğumda, doğru cevabı çekinmeden verdim. Beyaz tahtada FizzBuzz benzeri bir problemin kabuğunu kurduğumda, bazı basit "birim testleri" de bunların geçmesini bekledim ve kuru bir silme işaretçisi verdim, boş bakışlarım var.
katma yazar KeithS, kaynak
Sağlanan örnek kod bir görüşmede gösterilen bilgiyle eşleşmediğinde, beynim hemen örnek koddan şüphelenir.
katma yazar Graham, kaynak
Evet Mike'a katılıyorum. Bir zamanlar orta seviye C# adayı için bir röportaj ekibindeydim. Tüm doğru buzzwords ve kod örnekleri sağlandı, ancak aday 1. soruda başarısız oldu: "Bize C# içinde HelloWorld göster".
katma yazar Graham, kaynak
@ 0A0D Ne yazık ki bu tür bir esnekliğe izin veren bir yerde hiç çalışmadım. Eğer ilan edilen pozisyon tam zamanlı bir konser olsaydı, bu kişiye sunabileceğimiz ALL.
katma yazar Graham, kaynak
@Graham: 6 ay boyunca onu geçici olarak kirala ..
katma yazar kingchris, kaynak
@Graham: İlginç .. no-brainer gibi görünüyor. Genelde hiçbir faydası olmaz. İşverenim, onu çitlerde olan insanlar için bir seçenek olarak sunuyor.
katma yazar kingchris, kaynak
Ön ekran için, sağlanan bazı örnek kod için sormuştum. Bu kodun C# dil özelliklerini geliştirmesi için bir ara vardı, bu yüzden mantık sorularını sadece bir veya iki dakika içinde uçurmasını bekledim.
katma yazar GlenH7, kaynak

Hatta bir döngü kullanmayı düşünmek için ona koçluk yaptım ve o 3   ve 5 özel vaka olarak düşünmeye değerdi.

FizzBuzz-ish sorunuzun "doğru" cevabının ne olduğunu bilmek 'i bilmek ilginç olacaktır. Oturduğum yerden, sorudaki mektuba yazılan iyi bir şey (C):

int f(void) {
   //sum the multiples of 3 and of 5 and subtract multiples of 15 so we don't count them twice
    return ((1000/3)/2)*(999+3) + ((1000/5)/2)*(995+5) - ((1000/15)/2)*(990+15);
}

Daha iyi bir tane olabilir:

Neden doğrudan hesaplayabildiğinizde bunu yapmak için bir program yazmalısınız?

Buradaki nokta, bir kediyi cildi taramak için birden fazla yolun bulunması ve söz konusu adayın hemen döngülerinin döngülerine ve mod operatörlerinin yazmasına başlamamasıdır. Aptal olduğu anlamına geliyor. Adayın ne bildiğini bilmek istiyorsanız, tartış sorun - ne düşündüğünü öğrenin. Eğer sıkışmış ya da kafası karışmışsa, nerede ve neden olduğunu bulun. Seni hiç düşünmediğin bir yaklaşıma yönlendirebilir.

Sorum şu, ona mantık sorularının cevabını vermemem gerekip gerekmediğidir.

Görüşmeci olarak adayı bir derse öğretmek için senin yerin değil . Kod yazmayı gerçekten bilmiyorlarsa, ne kadar bilmediklerine bakarak onları utandırmaya gerek yoktur. Eğer sormak için yeterince ilgileniyorlarsa, o zaman her şeyden paylaşmak için çekinmeyin. Aksi halde, röportajı tamamlayın, zamanları için teşekkür edin ve bir sonraki adaya geçin.

4
katma
@ user1172763 Konu budur - FizzBuzz'dan farklı olarak, OP'nin görüşme sorusu tek bir hesaplama ile cevaplanabilir. Bu nedenle, eğer adayın bir döngü yazıp yazamayacağını görmekse, bu kötü bir seçimdir. Bir adayın soruyu belirli (ve onaylanmamış) bir nedenle sorduğuna dair varsayım üzerinde daha yavaş, çok daha ayrıntılı bir çözüm seçmesini bekleyemezsiniz. Gerçekten de, görüşmeci adayın tamamen gereksiz olduğunu fark edip edemeyeceğini görmek için kolayca bir "hile" sorusu olabilir. Fikrini okumak adayın sorumluluğu değildir.
katma yazar Caleb, kaynak
Eğer görüşmeci olsaydınız ve bana bu tür bir cevap verdiyseniz, sizi cebir öğretmenlerine ihtiyaç duyan bir okul bölgesine yönlendirirdim. FizzBuzz, programlama ile ilgili temel bilgileri göstermektir, böylece görüşmeci sizi diğer temel olarak iyi programcılardan ayıracak sorulara geçebilir. Cevaplarınız zekidir, ama döngüsel, modüler aritmetik, vb. Anladığınıza dair bir görüşme yapmazlar. Görüşme bittiğinde, cebir bilen kişilerin programlamayı (yanlış) da bildiği veya sadece elinizi sallayacağı varsayımı altında ilerler. ve devam et (daha büyük olasılıkla).
katma yazar user1172763, kaynak
Son paragrafınızda katı cevap için +1. Ve iyi bir noktaya yükseltin, "cevap" yerine "bir" cevap vermeliydim. Bu sorunu çözmek için birkaç yol var. sorunu tartışın 'a gelince, bu eleman görüşme sırasında diğer sorularla geldi. Ne yazık ki, aday ... ... cevap vermekten daha azdı. Özgün soruya bu yönü eklemedim, çünkü gerçekten “iyi bir öznel” için PERS yönergeleri içinde kalmaya çalışıyorum.
katma yazar GlenH7, kaynak
"adayı bir derse öğretecek bir yer değil" - katılmıyorum. İyi bir programcı her zaman öğreniyor. Dersinize yeni bir şeyler öğrenmek için minnettar davranarak karşılık verirlerse, iyi bir programcı olduklarının bir işareti. Eğer dersini bitirirse, muhtemelen büyük bir programcıdır.
katma yazar DEH, kaynak

Ona, problemi çözmenin bir yolunu göstermeliydim diye hissettim, böylece en azından deneyimden öğrenebilsin. Ama yine de sormadı. Bu durumu halletmenin doğru yolu nedir?

Gördüğüm şekilde, halledilecek bir durum yok. Başvurusunu reddettiğinizi varsayarsak, adayın (görünürdeki) ilgisizliği, kendinizi ilgilendiren bir şey değildir.

Gerçekten de yapsa sorsa bile, ona bir açıklama vermeyeceksiniz. İK temsilcilerinizle bu konu hakkında konuştuysanız, adaylarla daha fazla tartışma yapılmasının yasal nedenlerden ötürü tavsiye edilemeyeceği konusunda olabilir.


Ayrıca, FizzBuzz sorununun sizden nasıl istendiğine bağlı olarak farklı “en iyi” cevaplara sahip olduğuna dikkat edin. "En basit" çözümü ve "en verimli" çözümü soruyorsanız, en iyi cevaplar tamamen farklıdır. Ve bu, soruyu sorduğunuz şekilde belirsiz olsaydınız, haksız yere kararınızı renklendirebilir. (Öte yandan, iyi/deneyimli bir aday, kod yazmaya başlamadan önce bunu açıklığa kavuşturmak için öngörüde bulunacaktı ...)

2
katma

Sorunuza cevap vermek için, hayır cevabını vermeyeceğim. Eğer kişi daha iyi bir yazılım mühendisi olmak istiyorsa, cevabı bulacaklardır. Onlara cevap verirsen, onları bu fırsattan kurtarıyorsun.

Daha alakalı olan soru, kendinizi kıdemli bir geliştirici olarak ne zaman arayabilir? Bu kuruluşlar ve ülkeler arasında değişir. Örneğin, birlikte çalıştığım bir firma Yazılım Mühendisleri olarak 5 yıllık tecrübesini yaşlı olarak kabul etti. Deneyimin kalitesine, sadece uzunluğa vurgu yapılmadı.

Tüm Yazılım Mühendislerini kendi dilleri ne olursa olsun kategorize edecek bir standart elde edinceye kadar, kendi becerilerinin düzeyine karar veren kişi ile birlikte kalıyoruz. Ve en kıdemli yetenek sınavında başarısız olan "Üst Düzey Mühendisler" ini duymaya devam edeceğiz.

Birkaç hafta önce sorulan soruya "Kendiniz ne zaman aramalısınız? Bir Kıdemli Geliştirici ". Ayrıca bir blog yazdı konu.

2
katma
@ André bağlantısı güncellendi.
katma yazar Martin Plante, kaynak
Blog bağlantınızı gözden geçirir misiniz?
katma yazar André, kaynak

Doğru cevabı almak bu testin önemli bir parçası değildir. Ölçtüğünüz şey, birilerinin problem çözme yaklaşımı, soruyla nasıl etkileştikleri, yol boyunca ortaya çıkan yaratıcı ya da ilginç herhangi bir şey; bu tür şeyler. Yanlış cevap alsalar bile, bu kriterler tarafından hala geçerli olabilirler.

Tamam, mod operatörünün affedilemez olduğunu bilmiyorum ve bu adayı verdiğim metrikler hala bir yazım hatası gibi görünüyor, ancak bu adayın doğru cevabını vermenin hiç bir şey olmayacağına inanmıyorum. yarar.

Bu, buradan kendi kişisel fikrinize geliyor. Adayın gelecekteki görüşmelerde daha iyi olmasına yardımcı olmak amacıyla görüşme geri bildirimi vermek istiyor musunuz (ve gelecekteki görüşmecilerin daha önce yaşadıklarınızdan muzdarip olmamaları için)? Eğer öyleyse, geri bildiriminizi yukarıda özetlediğim terimlerle ifade edin: onlara sadece doğru cevabı değil, cevaba ulaşmak için nasıl çalıştıklarını önemli bir faktör olduğunu söyleyin.

2
katma
cevabına varmak için nasıl çalıştıklarına dair yorum yapmak için +1 kritik bir faktördür. Kullanılacak bir modüler operatör beklerken, bunun nedeni sadece I çözdüm. Ben göze çarpan sınır koşulu hataları oluşturmadan sorunu çözen başka bir yaklaşımı görmeye çok açıktım (özyineleme ile ilgili yaklaşımım hakkındaki çeşitli yorumlarıma bakın ....).
katma yazar GlenH7, kaynak

“Problem” iniz, empatik bir insan olduğudur, bu yüzden birisinin mücadeleyi bir sorununla mücadelesini izlemek zor olacaktır (bu, kullanılabilirlik çalışmalarını yürütürseniz de bir problemdir). Görüşmeci olarak görev yapan bir bakış açısıyla, görüşme yapan kişiye programlamayı veya problem çözmeyi ya da sorduğunuz bir sorunun çözümünü öğretmekle herhangi bir şekilde yükümlülüğünüz yoktur.

Bir görüşmeci ile görüştüğünüzde, doğru cevabı alabilmeleri için öyle değildir. Bu, problemi gerçekten çözüp çözemeyeceğini ya da bir ya da iki hataya ya da yanlış anlamaya neden olup olmadıklarını görebilirsiniz.

Bu yüzden bir görüşmeyi çözümden sonra vermek istiyorsanız, bunu tamamen kendiniz yapıyorsunuz. Genel olarak, görüşmeyi yapan kişinin başka bir problemi deneyimlemesine izin vermek için bu süreyi kullanmayı tercih ederim. Ancak FizzBuzz'a cevap veremeyen bir "kıdemli" programcı muhtemelen listeden çıkar. Çözüm vermeye karar verirseniz, röportajın kendinden daha iyi olduğunu düşünerek kendinizi kandırmayacağınızdan emin olun (eğer kendinizi düşünürseniz, "sorunu çözemedi, ama açıkladığımda bunu iyi anladı", sonra tehlikeli bir yoldasın).

Ve evet, başından geçen bir görüşmeci oldum ve bir röportaj problemini çözmek için ilk denemeyi bile yapamadım. Bu sadece o alanda bir iş peşinde koşmak için çok daha fazla şey öğrenmek zorunda olduğum anlamına geliyordu.

2
katma