Herkes olmayan tüm iyi FizzBuzz tipi sorunuz FizzBuzz sorunu?
Biriyle röportaj yapıyorum ve FB nispeten iyi tanınıyor ve ezberlemesi o kadar zor değil, bu yüzden fikir arayışındaki ilk durağım yeni bağımlılığım SO.
Herkes olmayan tüm iyi FizzBuzz tipi sorunuz FizzBuzz sorunu?
Biriyle röportaj yapıyorum ve FB nispeten iyi tanınıyor ve ezberlemesi o kadar zor değil, bu yüzden fikir arayışındaki ilk durağım yeni bağımlılığım SO.
Yanıtlar:
Adayları ayıklamak için kullanılan nispeten basit programlama problemlerinin küçük bir listesini gördüm, tıpkı FizzBuzz gibi. Artan zorluk sırasına göre gördüğüm sorunlardan bazıları şunlardır:
Bunlar Java içindi ve standart kitaplıkları kullanabilirsiniz, böylece bazıları son derece kolay olabilir (6 gibi). Ama FizzBuzz gibi çalışıyorlar. Programlama hakkında bir fikriniz varsa, en hızlı şekilde yapabilmelisiniz. Dili iyi bilmeseniz bile, en azından bir şeyin nasıl yapılacağının arkasındaki fikri verebilmelisiniz.
Bu testi kullanarak önceki patronlarımdan biri, her şeyi oldukça çabuk bitiren insanlardan, çok çabuk yapabilenlere, yarım saat sonra tek bir tanesine cevap veremeyen bir adama kadar her şeyi gördü.
Ayrıca şunu da belirtmeliyim: Bu görevler verilirken insanların bilgisayarını kullanmalarına izin verdi. Bunlar özellikle onlar o talimatı verilmiştir olabilir Google ve benzerleri kullanılmaktadır.
Belki bu, sorunuzu doğrudan yanıtlamaz, ancak başka bir sorunla karşılaşmanız gerektiğinden emin değilim. "Ezberlemesi kolay" olmasının yanı sıra, FizzBuzz sorusu sadece "kolay" ve asıl mesele bu. Görüştüğünüz kişi, FizzBuzz'ın "tanınmış" olduğu kişiler sınıfındaysa, o zaman FizzBuzz tipi bir sorunun filtrelemeyeceği kişiler sınıfındadır. Bu, onları hemen işe aldığınız anlamına gelmez, ancak bu onların içinden geçip röportajın etine geçebilmeleri gerektiği anlamına gelir.
Başka bir deyişle, Coding Horror'ı okumak için zaman ayıran herkes daha fazla röportaj yapmaya değer. Sadece çözümü hızlı bir şekilde yazmalarını sağlayın, kısaca tartışın (örneğin, Bunu nasıl test edersiniz?) Ve sonra bir sonraki soruya geçin. Ve makalenin dediği gibi, "Kaç adayın en basit programlama görevlerini yerine getirememesi gerçekten şaşırtıcı."
Euler Projesi'nin ilk dönemlerinden herhangi biri muhtemelen iyi olurdu.
Örneğin:
Sorun 25
Fibonacci dizisi, tekrarlama ilişkisi ile tanımlanır:
Fn = Fn−1 + Fn−2, where F1 = 1 and F2 = 1.
Dolayısıyla ilk 12 dönem şöyle olacaktır:
F1 = 1 F2 = 1 F3 = 2 F4 = 3 F5 = 5 F6 = 8 F7 = 13 F8 = 21 F9 = 34 F10 = 55 F11 = 89 F12 = 144
12. terim, F12, üç basamak içeren ilk terimdir.
1000 basamak içeren Fibonacci dizisindeki ilk terimin dizini nedir?
Bir dizgeyi kontrol etmenin palindrom olup olmadığını oldukça basit olduğunu buldum ve iyi bir ot olabilir.
scalar(reverse 'foo') == 'foo'
.
Modulo operatörünü içermeyen bir FizzBuzz sorusu istedim. Özellikle modulo operatörünün pek sık gelmediği web geliştiricileriyle röportaj yaptığım için. Ve düzenli olarak karşılaştığınız bir şey değilse, ihtiyacınız olan birkaç kez aradığınız şeylerden biridir.
(Kabul edilirse, bu ideal olarak yol boyunca bir matematik dersinde karşılaşmış olmanız gereken bir kavramdır, ancak bu farklı bir konudur.)
Yani, bulduğum şey, hayal ürünü olmadan, Tersine Üçler olarak adlandırdığım şeydi . Talimat:
1 ile 200 arasında 3'ün her bir katını ters sırada yazdıran bir program yazın .
Normal sırayla yapmak kolaydır: 200'ü aşan bir sayıya ulaşana kadar döngü indeksini 3 ile çarpın, sonra çıkın. Sonra kaç tane yinelemenin sonlandırılacağı konusunda endişelenmenize gerek yok, sadece çok yüksek olan ilk değere ulaşana kadar devam edin.
Ama geriye gidersek, nereden başlayacağınızı bilmelisiniz. Bazıları sezgisel olarak 198'in (3 * 66) 3'ün en yüksek katı olduğunu ve bu nedenle 66 kodlu kodun döngüye girdiğini anlayabilir. Diğerleri, bu sayıyı bulmak için matematiksel bir işlem (tamsayı bölümü veya 200 ve 3'ün kayan nokta bölümü üzerinde bir kat ()) kullanabilir ve bunu yaparken daha genel olarak uygulanabilir bir şey sağlayabilir.
Esasen, FizzBuzz ile aynı türden bir problemdir (değerler arasında döngü yapmak ve bunları bir bükülme ile yazdırmak). Bu, modulo işlemi kadar (nispeten) ezoterik bir şey kullanmayan, çözülmesi gereken bir problemdir.
print [x for x in xrange(3, 200, 3)][::-1]
10 saniyede yapılabilecek, ancak kelimenin tam anlamıyla hiçbir şeyi programlayamayanları ortadan kaldıracak gerçekten süper basit bir şey için şunu deneyin:
Sor: bana göster (kağıt üzerinde ama beyaz tahta üzerinde daha iyi) iki değişkenin değerlerini nasıl değiştireceğinizi.
Bu benim fikrim değildi, ama orijinal FizzBuzz sorusuyla ilgili bir blog gönderisinde Jacob adlı biri tarafından bir yorumda yayınlandı .
Jacob şöyle devam ediyor:
Eğer yapmazlarsa başlangıç üçüncü değişkeni oluşturma ile, hemen hemen yazma o kişi kapalı olabilir. Sadece bu soruyla (kuşkusuz bu noktada taranmamış) başvuru sahiplerinin üçte birini yarıya indirebileceğimi öğrendim.
Orijinal blog gönderisinde, üçüncü bir değişken gerektirmeden (ekleme / çıkarma, xor vb.) Ve tabii ki, bunu destekleyen bir dil kullanıyorsanız, bu değişken değişimini gerçekleştirmenin yolları hakkında başka ilginç bir tartışma var. tek bir ifadede / işlemde o kadar iyi bir test olmayabilir.
Benim fikrim olmasa da, en basit programları bile yazan biri tarafından yaklaşık 10 saniye içinde cevaplanabilecek (ve cevaplanması gereken) çok zarif, basit, kolay bir soru olduğu için bunu buraya göndermek istedim. Aynı zamanda, modülo operatörü gibi, oldukça iyi programcı olan pek çok insanın aşina olmadığı (kendi deneyimlerimden bildiğim), görünüşte belirsiz operatörlerin kullanılmasını da gerektirmez.
Fibonacci, bir dizgeyi ters çevirmek, bir baytta ayarlanan bit sayısını saymak diğer yaygın olanlardır. Project Euler ayrıca büyük bir artan zorluk koleksiyonuna sahiptir.
Belirli bir sayının faktörlerini döndürmek için bir uygulama yazmalarını isteyin. Kısa sürede yapmak kolay ve başarılı olmak zordur. Kısa bir süre içinde onların tarzlarını ve problemler üzerinden nasıl düşündüklerini görebilirsiniz.
Bir C / C ++ röportajıysa, kişinin işaretçileri bildiğinden emin olun.
Genel - basit algoritma ([tek / çift] bağlantılı liste). Her durumda eklemenin karmaşıklığını sorun (başlangıçta, sonunda optimizasyonlar ...)?
(Genel) Yalnızca 3 * N / 2 karşılaştırmayla bir diziden (N boyutunda) min ve max'ı nasıl bulursunuz?
C / C ++: Birden çok "strcat" i bir arabelleğe nasıl optimize edersiniz?
C ++ FAQ Lite'dan 6.14'e bakın:
Nasıl olur: Birden çok değeri saklamak için tek bir tam sayı kullanmak istiyorum. Bunun nasıl işe yarayacağını açıklayın.
Bit maskeleri ve işlemleri hakkında bir fikirleri yoksa, muhtemelen diğer sorunları çözemezler.
Adaylarımdan , seçtikleri herhangi bir sözde dilde belirli bir sayının faktöriyelini hesaplamak için bir program oluşturmalarını istedim . Çözülmesi oldukça kolay bir sorundur ve özyineleme ile ilgili doğal takip sorularına (bu sıklıkla sorulabilir) iyi bir katkı sağlar.