En sevdiğiniz beyaz tahta röportaj probleminiz nedir? [kapalı]


52

Başlığın dediği gibi, en sevdiğiniz beyaz tahta röportaj probleminiz nedir ve neden sizin için etkili olduğunu kanıtladı?

Junior, kıdemli, Java, C, Javascript, PHP, SQL, sözde kod, vb.


4
Nefret ettiğim bir sorun Einstein'ın Yapbozuydu. stanford.edu/~laurik/fsmbook/examples/Einstein'sPuzzle.html 30 dakika içinde yapamam. Ama sonra kızgınım ve bunu buldum: games.flowix.com/en/index.html Bu yüzden ortalama olarak 20 dakikada 6 x 6 x 6 daha zor bir problemi çözdüm . Sanırım şimdi 5 dakikada 5 x 5 x 5 kaldırabilirim. Ne aptal bulmaca olursa olsun işveren bana atar - Onları hatırlayacağım ve bir dahaki sefere aslayacağım. Çok fazla iyi bulmaca var.
Meslek

20
@Job: Hiçbiri bir çalışanın işte nasıl bir performans göstereceğine dair hiçbir şey söyleyemez. Tabii ki, tüm çalışma zamanınızı fiili işler yapmak yerine bu tür bulmacaları çözmek için harcıyorsanız.
Robert Harvey,

1
@Robert Harvey, bulmaca çözmekten başka bir şekilde para kazandıran bir işte olduğunuzu mu kastediyorsunuz? Hiç bir fikrim yoktu ...;) Bu bulmaca yine de eğlenceli. Yan not olarak, kullanılmış gerçek IQ testleri için çalıştığım bir şirket , taramalarında ilk adım olarak kullanıldı . En iyi adayları ayırmak için basit tahta soruları bulmak istiyorum, sadece onları taramak için değil.
Nicole

4
@Renesis: Bir geliştirici olarak, bir bulmacayı çözmenin problem çözme ve analiz becerilerini nasıl tanımladığını görebiliyorum, ancak geliştiricilerin de bu çözümü koda nasıl dönüştüreceklerini bilmeleri gerekiyor. Bir bulmacayı çözmek, bu uygulamanın sadece yarısını gösterir. Bir Rubix küpünü çözmek ve bir Rubix küpünü çözmek için bir algoritma yazmak arasındaki fark budur.
Robert Harvey,

@Robert Harvey Katılıyorum, özellikle sadece problemleri düşünmek yerine kodlama problemleri arıyorum.
Nicole,

Yanıtlar:


22

Adaydan, günlük işlerimde karşılaştığım bir soruna bir çözüm tasarlamasını rica ediyorum . Bunu yaparken, ben ve aday arasında bir diyalog oluşturmaya çalışıyorum. Yaptığı tasarım hakkında daha önce hiç düşünmemiş olduğum gibi konuşmaya çalışıyorum.

Değerlendirmeye çalıştığım, birbirimizi anlayabilmemiz ve bir karışıklık olmadan teknik bir sorun hakkında konuşabilmemiz.

Somut örnek

(Java masaüstü geliştiricisi için)

Bir web tarayıcısının gezinme geçmişini işlemek için bir API tasarlayın (önceki sayfa, sonraki sayfa, önceki 10 sayfayı listeler) ve bu uygulamanın birçok bölümünde tekrar kullanılabilir (burada uygulamamızda somut örnekler vereceğim). Ardından, bir uygulama hazırlayın.

Bunu sevdim, çünkü yeterince basit, göstermesi kolay, adım adım çözülebilir (her şeyi bozmadan ek davranışlar ekleyebilir), son vakalar ve hata yönetimi hakkında konuşmayı sağlar ve ayrıca veriler hakkında konuşmayı sağlar yapıları.


40

Bunu, adaylarla röportaj yaparken ve orada işi olmayanları filtrelendiğinde son derece aydınlatıcı buldum. Bu, Fizz Buzz’ın karmaşıklığına benzer, ancak veritabanı becerilerine odaklanır.

Assuming the following basic  table structure
Documents (DocID, DocDate)
Keywords (KeyWordID, KeyWord)
DocumentKeywords (DocID,KeywordID)

Write a query to return the following:
Part 1: Documents with a DocDate after 4/1/1995  
Part 2: Documents that contain the keyword "Blue"  
Part 3: Documents that contain the either the keyword "Blue" or "Yellow"
Part 4: Documents that contain the both the keywords "Blue" and "Yellow"

İstedikleri herhangi bir SQL değişkenine yazmalarına izin veriyorum ve küçük sözdizimi problemlerinde çok seçici değilim. Temelde temel ilişkisel DB kavramlarını anladıklarını bilmek istiyorum.

Çoğu aday, hiç sorun yaşamadan 3. bölümden geçebilir. 4. bölüme verilecek cevabın sadece operatörü OR'dan AND'e ve nerede cümlesiyle değiştirmek olduğunu düşündüğünüze şaşıracaksınız.


2
Ah, konuyu w / 4 olarak görüyorum. Kişisel belgeler yalnızca satıra bir anahtar kelime var, yani hem "Mavi" ve "Sarı" eşit bir hücre olamaz musluklar bilerek bilir
glasnt

8
Posta ile gönder Bir röportajda kendimi (4) düşerken görebilirim. @Job: Görüşme yapan kişi olarak , adaydan soruyu açıklamasını isterim, bununla nasıl başa çıkacağını görmek için problemine rastlar. (Bu genellikle size ilk denemede sorularınızı
aktaran

3
@Renesis, bunun gerçekten derin kazma olduğundan emin değilim. Bu, birinin temel SQL sorgulama becerilerine sahip olup olmadığını öğrenmek için oldukça iyi görünüyor. Aslında bugünlerde kaç geliştiricinin bu temel becerilere sahip olduğu konusunda şok oldum.
Mark Freedman

2
@ jk01, belki de bu konuda eski bir okul tutumum var, ancak IMO çok yönlü bir geliştiricinin kod yoluyla erişmemek, ancak en azından sorguları deneyerek etki alanını anlamak için bazı DB bilgilerine sahip olması gerekir. Bu olmadan, bir geliştirici oldukça önemli bir kör noktaya sahiptir. Aynı zamanda sistem desteği ve sorun giderme için son derece kullanışlıdır. Soyutlama, gelişmeyi basitleştirmeye ve verimliliği artırmaya yardımcı olmak için iyidir, ancak bu çok sık soyutlandığından dolayı yapılan çok fazla varsayımda bulundum. Devam edebilirdim, ama bu başka bir yerde olduğundan emin olduğum başka bir tartışma olabilir;)
Mark Freedman

4
@ back2dos - Bak, cevap veremediğin için kırılma. Bunu kolaylaştıran birçok başka teknoloji olabilir, ancak çok sayıda SQL veritabanı kullanıyoruz ve kullandığımız teknolojileri nasıl kullanacaklarını bilen insanları işe alıyorum, neden röportaj sorularıma cevap vermek zorunda olmadıkları için mazeret vermiyorlar. .
JohnFx

20

"Beyaz tahtada benim için üzerinde çalıştığınız son projenin tasarımını çizin, bana herhangi bir hassas detay vermeden."


Tasarımı nasıl tanımlarsınız? Bir sınıf diyagramı mı arıyorsunuz? Başka bir UML diyagramı? Katmanların temel taslakları?
sadece

1
Onlara balon sesi diyorum. ;) Sadece iplikler çizin, isimler koyun ve bunları adlandırılmış oklarla bağlayın. Başvurusunu umursamıyorum ama anladığı gerçeğini umursuyorum.
Uberto

5
+1. Daha önce bir işi olan insanlar için bu kesinlikle yapabileceğiniz en iyi şeylerden biri. Projenin nasıl yapılandırıldığını açıklayabilirlerse, zaten çoktan değer. Neden bu şekilde yapılandırıldığına ya da bazı şeylerin nasıl daha iyi yapılabileceğine dair bir fikirleri varsa, bu gerçekten çok büyük bir artı.
back2dos

3
Adalet: Önemlisi, görüşülen kişinin bilgileri karşısında almasıdır. Çok az önemi var. UML'yi gerçekten tanıyan, bir şeyi açıklayamayan ve karmaşık sistemleri birkaç dalgalı çizgiyle açıklayabilen insanlarla tanıştım.
back2dos

2
Herhangi birinin hassas bir detayı açıklamadan bir projenin tasarımını çizmesi nasıl mümkün olabilir?
Nemanja Trifunovic

14

Uygulamak strcpy, strcmpve arkadaşları.


4
Adaylardan uygulama yapmasını istiyorum atoi().
Chrisaycock

2
Kaç kişinin uygulayamayacağına şaşıracaksınız strdup().
Tim Mesaj

10
Bu sadece iş açılışı bir C programcısı için yapılmışsa adil olur.

Şu anki işim için yaptığım görüşmede, görüşmeci benden strrev()tersine çevirme işlevini uygulamamı veya dizgi vermemi istedi . Beyaz tahta çözümüm onları etkiledi ve şimdi iş yapıyorum.
Gulshan

@crisaycock atoi () kolaydır. itoa () sapkın
Michael Brown

14

Birkaç disiplini kapsayan favorim, arayüz verilen ikilik bir ağaçtaki düğüm sayısını saymaktır (C #):

public interface IBinaryTree<T>
{
    IBinaryTree<T> Left
    {
        get;
    }

    IBinaryTree<T> Right
    {
        get;
    }

    T Data
    {
        get;
    }

    // Other properties and methods not germane to this problem.
}

ve sadece eğlence için, uygulama burada, görüşülen kişinin bunu görmesi gerekmese de.

public sealed class BinaryTree<T> : IBinaryTree<T>
{
    private readonly IBinaryTree<T> left;

    private readonly IBinaryTree<T> right;

    private readonly T data;

    public BinaryTree(
        IBinaryTree<T> left,
        IBinaryTree<T> right,
        T data)
    {
        this.left = left;
        this.right = right;
        this.data = data;
    }

    public IBinaryTree<T> Left
    {
        get
        {
            return this.left;
        }
    }

    public IBinaryTree<T> Right
    {
        get
        {
            return this.right;
        }
    }

    public T Data
    {
        get
        {
            return this.data;
        }
    }

    // Other properties and methods not germane to this problem.
}

ve asistan sınıf:

public static class BinaryTreeNodeCounter
{
    public static int CountNodes<T>(this IBinaryTree<T> tree)
    {
        // TODO: What goes here?
    }
}

Görmeyi sevdiğim çözüm şudur:

public static class BinaryTreeNodeCounter
{
    public static int CountNodes<T>(this IBinaryTree<T> tree)
    {
        return tree == null
            ? 0
            : 1 + tree.Left.CountNodes() + tree.Right.CountNodes();
    }
}

Bilgi gösterdiği gibi:

  • Bir ağaç (özellikle ikili ağaç) nasıl çalışır?
  • Bir ikili ağacın özyinelemeli tanımı
  • özyinelemeli yöntemler ve temel vakaların özyinelemeyi nasıl durdurduğu
  • tek bir düğümü saymak ne demektir
  • sözleşme olarak arayüzler
  • (daha az önemli) C # sözdizimi bilgisi:
    • jenerik
    • uzatma yöntemleri
    • üçlü operatör

Bir uzatma yöntemi olabilir mi?
Gulshan

Bu gün ve yaşta, evet. O zaman VS 2005'te kodlanıyorduk, bu nedenle seyrek sözdizimi.
Jesse C. Dilimleyici

Orijinal sınıfın kaynak kodunu alırken neden bir uzantı yöntemi kullanıyorsunuz? Uzatma yöntemleri bunun için değil.
Batibix

Spose, daha ileri bir seviyeye gidebilir ve adaylara bu sınıfın uyguladığı bir arayüz gösterebilirdim. Temel amaç, orijinal sınıfın değiştirilmesinin gerekmemesidir - bazı giriş seviyesi geliştiricileri, talebi "kolaylaştırmak" için sınıfa malzeme eklemeyi çok ister.
Jesse C. Slicer

Java'ya çok benzeyen kutsal bir saçmalık!
test et

12

Benim için ilginç beyaz tahta tartışmaları ortaya çıkaran iki soru

  1. "Lütfen bir web tarayıcısının oluşturulmuş bir sayfa almasını istediğiniz kadar ayrıntılı açıklayabilir misiniz"
  2. "Java Hazırda Bekletme'nin nasıl çalıştığını lütfen açıklayın"

Basit başlarlar ve gittikçe daha karmaşık hale gelirler.


31
ehi, cevapları yargılamaya bile yetkin değilim ... Sanırım ikincisi için 12 siyah mum ve bir keçiye ihtiyacınız var ...
Uberto

4
İkincisi kolaydır, işletim sisteminiz işlemcinin önbelleğini ve yığınını ve RAM'inizin içeriğini sabit sürücüye kaydeder ve ardından bilgisayar yeniden açıldığında geri yükler.
Malfist

Ancak, ilk sorunun açıklanması günler alabilir.
Malfist

@Malfist Java Hazırda Bekletme Sürekliliği çerçevesini kastettim.
Gary Rowe

2
@ Paul Stephenson Evet, ama emin olmak için ...
Gary Rowe

8

Bir bulmaca veya tasarım sorusunu beyaz tahta sorusu olarak kullanmaktan hoşlanmıyorum. Adayın bazı kod yazma yeteneğini test eden basit, basit soruları tercih ederim. Benim favorilerim:

1) Tek bağlantılı bir listeyi tersine çevirmek için bir fonksiyon yazın. (3 işaretleyiciye ihtiyaç duyduklarının farkına varmaları biraz zaman alır.)

2) Bir ikili ağaç verildiğinde, ikili ağacın derinliğini bulun. (Bu soru özyinelemeli kod yazma yeteneklerini test eder. Temel durumlarının sağlam olup olmadığını kontrol etmeme izin verin.)

3) Bir tamsayı dizisini ikili arama için bir prosedür yazın. (Jon Bentley'nin dediği gibi (Programlama İncileri'nde), birçok kişi ikili arama yazarken hata yapma eğilimindedir. Daha sonra hata bulma, test senaryoları yazma, kodları çalıştırma vb.


+1, yaklaşımınızın birisine Dinamik programcılarına ya da iş programlarında zor kullanıldıkları zaman bu tür kavramları sormalarının hiçbir anlamı yoktur. + Vurgu sadece çözüm üzerinde değil kod kalitesinde de olmalıdır.
Geek,

Tasarım sorularına aldırış etmiyorum, ama bir keresinde hobisi bulmaca yapan bir adamla röportaj yaptım ve bazı korkunç sorular vardı. Birine savaş sanatları sorusu sormak gibiydi.
Bob Murphy,

Muhtemelen, insanların (3) 'te "sıralı dizi" demek istediğinizi bilmesini sağlamalıdır?
Temmuz’da

7

Bunu çalıştığım bir şirkette kullandık.

Adayı, izleme süresi için kullanılan bir kağıt parçası verdik. Biri ya da bölümlerimiz tarafından kullanılan gerçek bir zaman çizelgesiydi. Daha iyi bir zaman takip aracı oluşturmak için adaydan tasarım sürecinde bize yol göstermesini istedik. Sınır yok, hangi dilin ne olduğunu söylemedi, sadece adayın "tam yaşam döngüsü" ne kadar iyi olduğunu görmek istiyorum. Gereksinimleri nasıl topladıkları konusunda bize gerçek bir fikir verdi. Veritabanı tablolarını nasıl yapılandırdılar, ne tür bir kullanıcı arayüzü yapabilirler. İletişim becerileri bu görev için açıkça gerekliydi. Genellikle birkaç büyük beyaz tahta içeren bir odada yapıldı ve 2 saat kadar sürdü.

Bu işlemi kullanarak birkaç kişiyi işe aldık ve eğer bu işi gerçekten iyi yaptılarsa bizim için çok iyi yaptılar. Eğer marjinallerse ve onları yine de işe almaya karar verdik (ayrı konu) marjinal programcılardı.


6

Programlama alanımla ilgili bir problem kullanıyorum.

Web uygulamaları geliştirirsem, kayıtları silen bir web formu nasıl oluşturabileceklerini ve kaydı veritabanından kaldırmak için hangi yaklaşımları kullanabileceklerini görmek istiyorum. Bu, temel veritabanı ilkelerini bildiklerini, silme işlemini doğrulamak için kullanıcıyla nasıl etkileşime girdiklerini ve yumuşak bir silme işleminin ne olduğunu bildiklerini söyler.

Benim favorim yok. Seçtiğim sorun işe bağlı olarak büyük ölçüde değişecek.

Bir röportajda sorunu tamamen çözüp çözemeyecekleri, hangi teknolojileri ve dilleri kullandıkları ya da kodlarının bir beyaz tahta üzerinde ne kadar berbat göründüğü umurumda değil. Bir düşünce deseni arıyorum; Sorunları nasıl düşüneceklerini ve çözebileceklerini bilip bilmediklerini görmek istiyorum.


2
+1 Tüm önemli olan son paragraf için. Genellikle bu tür konularda önemli olan cevap değil, oraya giden yoldur. Tüm matematik öğretmenlerimin dediği gibi "çalışmasını göster!"
Orbling

4

Benim favorim, kullanılan bir arkadaşımdı.

Bana ilk "n" asal sayılarını oluşturmak / yazdırmak / saklamak için bir işlev yazın ve sonra nasıl çalıştığını ve ne kadar verimli olduğunu açıklayın.

İyi çalışıyor çünkü:

  1. Bu algoritmik bir sorudur, bu nedenle görüşmecinin düşünmesini ve sonra da düşüncelerini açıklamasını gerektirir - böylece beyninin nasıl çalıştığını görebilirsiniz.

  2. Dilden bağımsız.

  3. Neredeyse hiç kimse tam anlamıyla doğru alamaz (her zamanki gibi kaçırdıkları (normalde 1 veya 2) bir uç vaka vardır) ya da negatif sayıları ele almazlar, böylece böceklerle nasıl başa çıktıklarını ve yanlış olduklarını söyleyebilirsiniz.

  4. Birçoğu bunu basit ama çok yavaş bir elek olarak yapar (örneğin, insanların% 80'i n'yi kontrol eder, n'yi n'den küçük olan tüm sayılara bölerek çok önemlidir); Uzay / zaman takaslarında örneğin "Eğer 2'ye bölünemeyeceğini biliyorsan neden sayıyı 4'e bölüyorsun?" ya da "sqrt (n) 'den küçük tüm asal sayılarla bölmeniz gerektiğine karar verdiniz, ancak bu sayıları bir yerde saklamanız gerekiyor, peki bunun etkileri nelerdir?")

Cevabı doğru bulmaları için onlara gerek yok. Birisi düşüncelerini düşünebilir ve açıklayabilirse, iyi bir aday olmak için yolun aşağısında uzun bir yol vardır.


Bir keresinde çok karışık bir C kodu bloğunun verildiği ve ne yaptığını bulmak istediğim bir röportaj sorusu aldım. Çok asal bir şekilde diğer her asal sayıyı bastırdı. 300 kişi başvurdu ve bana iş teklifini vermişlerdi, değerleri çıkarmanın aksine, onlara bunun amacını söyleyen tek aday bendim. Yani evet, +1, asal sayılar iyi bir çek. Özellikle bir elekle gelirlerse, bu uzay karmaşıklığı için hesaplamalı karmaşıklığı ortaya çıkarsa da.
Orbling

1
1 asal değildir ..

2
@ Thorbjørn - açıkçası, ancak bu sorunu çözmek için yazdığım rutinlerin iyi bir yüzdesi bana olduğunu söyledi
Rhys Gibson

o zaman bir hata var :)

3

Mühendislik okulumun C sınavlarının bir parçası olan ve tatilden dönerken öğrencilerin başarısız olması için "sahte" bir test olarak kullanılan aff_z adı verilen bir şey (işaretleme sistemimiz bir testin başarısız olduğunu işaretlemeyi durdurdu, bu yüzden bu sahte testin başarısız olacağını tüm testinizi geçersiz kılın. Sizi moronik ayrıntılara dikkat etmeye zorlar). Görüşme sırasında bir ya da iki kez tekrar kullandım.

Her neyse ... Tam formülasyonu unuttum ama böyle bir şeydi ...

Write a function taking a single char parameter named c and returning nothing (void).
You function must satisfy the following requirements:

 - if c is bigger or equal to 0, then print 'z' to standard output
 - if c is stricly smaller than 0 , then print 'z' to standard output
 - in any other case, print the letter 'z' to standard output

Üzücü olan şey, sadece bazı öğrencilerin cevabı oldukça açık bir şekilde ortaya çıktığında aşırı sarsılmış çözümler üretmeyecekleri, ancak bazılarının başarısızlığa uğramayacaklarıdır.

İster inanın ister inanmayın, röportajlar sırasında da oldu.

Bazı başvuru sahipleri olası dalları yazmaya başlayıp daha sonra yanlış olanı anlayacağından (açıkçası, eğer sadece sözlü olarak sorarsanız, bu konuştukları gibi yaptıkları oldukça anlaşılır), çünkü görüşmelerde çalıştırmak oldukça eğlenceliydi. Yazılı olarak ver, şaşırtıcı buluyorum ...)

Aptalca, ancak minimalist bir tarama olduğunu düşünüyorum (benzer şekilde, JS programcılarını işe alırken her zaman bir değişkeni nasıl açıklayacağımı soruyorum, ve sonra cevaplarını kullanarak var kullanıp kullanmamaları herhangi bir fark yaratabiliyor. dürüst.)


1
Röportajlarda adayların bundan hakaret ettiklerini hissettiniz mi? Ya da ciddi bir röportaj yapmak yerine sadece masrafları ile eğlendiğini mi düşünüyorsun?
Nicole,

@Renesis: İlk önce bir sırıtış ile bana birkaç bakıyordu. Bazıları testi geçemedi. Genelde iyi adaylar kapalıysa gülerler. Örneğin, JS programcıları için röportajın cevabını "duh" ile cevaplayamayan pek çok adayım vardı, variablename = variablevalue;oysa iyi olanlar sadece telefonda ya da şahsen gülecekler ve doğrudan farklı olanın ne olacağını ya da ne olacağını söyleyeceklerdi. var).
haylem

1
@Renesis: Ayrıca, bazıları kırılırsa daha az umursayamazdım. Hiçbir şekilde ayrımcı değil. Eğer kırılırlarsa, sınava girmeyi veya sorgulanmayı sevmeyen türden bir kişi olduklarını farz edeceğim. Gerçekten de hiçbir zaman masrafları pahasına eğlendiğimi hisseden başvuru sahiplerini almadım. Genelde çok basit sorular sormadan önce özür dilerim , çünkü iyi olanlar için zaman kaybı gibi gelebilir. Ama olay şu ki, bu benim için zaman kaybı değil. Onlara sormamak, uzun vadede olur.
haylem

@Renesis: Ve daha sık sık değil, sırıtış / gülüş / kırgın bakıştan sonra aldığım şey utanç verici bir ifadeydi ve başarısızlığa uğrayan veya dallanmaya başlamanın yararsız olduğunu anlayana kadar tüm sınav için dallanmaya başlayan bir özlemdi. Evet, bu testi yapmaktan zevk alıyorum ama iyi bir sebep olmasaydı vermem.
haylem

Şahsen, bunu okurken zihinsel bir yüze sahip olurdum ve görüşülen kişinin kendisiyle dalga geçmesi için soruyu başka birisinin yazıp yazamadığını merak ederdim.
wildpeaks

3

Gerçekten aradığınız şeye bağlı olarak, görüntüleri içeren çok sayıda dinamik web çalışması yapan bir kuruluş olarak, işle ilgili bir geometri sorusu sormaya meyilliyim. Her durumda, bir geometri sorusu sormaya meyilliyim, çünkü güzel ve görsel olan iyi bir matematik testi buldum ve adaylara çalışmalarını görsel olarak sunma ve bir problemle metodik olarak çalışma yeteneğini gösterme yeteneğini gösterebiliyorum.

İleri seviye adaylar için zaman zaman şu soruyu soruyorum:

Bu görüntü bir hilal ay gösterir. H 'den B' ye D 'nin genişliği 9 cm ve E ile F, 5 cm arasındadır. C, büyük dairenin merkezidir.

a) Lütfen hilal alanını hesaplayın. Hilal ay matematik soru

b) Herhangi bir boyuttan iç çembere sığacak bir görüntüyü yeniden boyutlandırmak için gerekli hesaplamaları tanımlayın ve eğer merkez nokta biliniyorsa, çemberin içine yerleştirin.

Daha kolay bir soru için genellikle aynı soruyu sorarım, ancak "kare içindeki bir daire içindeki kareyi" kullanın. Bu çok kolay olmasına rağmen, bunda mükemmel cebir olmasını beklerdim.

Kare içinde bir daire içinde Kare içinde bir daire içinde

Bunun üstünde ve üstünde, değişken uzunluktaki bir veri kümesinin tüm kombinasyonlarını oluşturmak için bir algoritmayı başlatmalarını isteme eğilimindeyim.


1
A) 'nın cevabı 128.75 mi? (Herhangi bir hata yapıp yapmadığımı bilmiyorum). Sevdim ama daha çok geometri hakkında.
Hoàng Uzun

2
Ayrıca, yorumdaki gecikme için üzgünüm. Neden olarak yorum yapmadan kural olarak oy kullanmamayı ve iki katına çıkmayı sevmiyorum. Benim aşağı oyum, sorunun kendisi ile ilgili değil, kesinlikle sizin için bir amacı var, bir programlama röportajında ​​uygun bir bağlam olduğunu düşünmüyorum.
Philip Regan

7
-1 çünkü geometri Just In Time Learning için iyi bir aday ve kaliteli yazılım oluşturma yeteneğimi yansıtmıyor.
Malfist

2
Bu problemden zevk aldım. Umarım benim çözümümü (a) bölümüyle paylaşmamın sakıncası yoktur. Çaplar 9 cm kadar farklılık gösterir, bu nedenle, iç çember r yarıçapına sahipse, dış çember r + 4.5 yarıçapına sahiptir. Hilal alanı, dairelerdeki alanlardaki farktır: pi (r + 4.5) ^ 2 - pi * r ^ 2. Tek kalan şey r'yi bulmak. C'yi nokta (0,0) olarak tanımlayın, sonra E noktası (0, r - 0,5) 'dir (çünkü CE daha büyük yarıçaptan 5 cm daha azdır). İç daire 4,5 cm sağa kaydırılır, yani denklemi (x - 4,5) ^ 2 + y ^ 2 = r ^ 2'dir. (X, y) = (0, r - 0.5) takın ve r için çözün.
Tim Goodman

2
+1 çünkü bence geometri gerektiren bir iş için iyi bir soru. Sadece bir formüle girmek değil, bir sürü akıl yürütme var. Bununla birlikte, 10 yıl içinde daireler hakkında düşünecek kadar fazla bir şey olmadığı için tetiklenen iyi programcılar biliyorum - ancak soru herhangi bir geliştirici röportajı için uygun bir soru sormuyor . Şu anda en çok oy alan SQL sorusu (benim de sevdiğim) en azından işe özel.
Tim Goodman

3

Gördüğüm en iyi FizzBuzz cevapları:

SQL Server 2008

;WITH mil AS (
 SELECT TOP 100 ROW_NUMBER() OVER ( ORDER BY c.column_id ) [n]
 FROM master.sys.all_columns as c
 CROSS JOIN master.sys.all_columns as c2
)                
 SELECT CASE WHEN n  % 3 = 0 THEN
             CASE WHEN n  % 5 = 0 THEN 'FizzBuzz' ELSE 'Fizz' END
        WHEN n % 5 = 0 THEN 'Buzz'
        ELSE CAST(n AS char(6))
     END + CHAR(13)
 FROM mil

C # (basit)

foreach (int number in Enumerable.Range(1, 100))
{
    bool isDivisibleBy3 = (number % 3) == 0;
    bool isDivisibleBy5 = (number % 5) == 0;

    if (isDivisibleBy3)
         Console.Write("Fizz");

    if (isDivisibleBy5)
         Console.Write("Buzz");

    if (!isDivisibleBy3 && !isDivisibleBy5)
         Console.Write(number);

    Console.WriteLine();
}

C # (zekice)

 Enumerable
  .Range(1, 100)
  .Select(i =>
    i % 15 == 0 ? "FizzBuzz" :
    i % 5 == 0 ? "Buzz" :
    i % 3 == 0 ? "Fizz" :
    i.ToString())
  .ToList()
  .ForEach(s => Console.WriteLine(s));

1
Bunun yazıldığı belirli bir SQL lehçesini eklemek isteyebilirsiniz.

İşlevsel tarzı ile güzel görünüyor.
Aralık'ta

2

Görüştüğüm adaylarda birkaç şey arıyorum. Çünkü çevrimiçi olarak tanımlayamıyorum, oldukça zayıf adaylar alıyoruz ve beklemeye geldim, bu yüzden onlar için oldukça kolayım. Yine de aradım:

  • Tasarım bilinci.

    "Bana numara tanımlamasıyla birden fazla Telefon Numarasına sahip ad ve soyadı olan Rehber içeren bir adres defteri programı için tablo yapısını gösterin (hücre / ev / iş / vb.)"

    Burada UML 2.0 spec diyagramı aramıyorum, burada basit bir baloncuk diyagramı iyi. Makul olduğu sürece.

  • Veri tabanı ile çalışma bilgisi (ör. SQL)

    1. "Smith" soyadı olan kişilerin tüm telefon numaralarını bulmak için bir sorgu yaz
    2. Veritabanındaki tüm müşterileri almak için bir sorgu ve "smith" soyadına sahip olanların telefon numaralarını yazın.
  • Test bilgisi

    public IEnumerable<PhoneNumber> GetPhoneNumbers(string lastName)Sorgunuzun sonuçlarını daha önce döndüren imzanın bulunduğu bir yöntem varsayalım . Boşluğa yönteme bir geçerseniz, NullReferenceException verildiğini varsayalım. Bu işlevselliği göstermek için bir test yazın.

    GetPhoneNumbers'ın "smith" soyadı olan biri için ev numarası (123)456-7890) döndüreceğini gösteren bir test yazın.

  • Bazı kodların nasıl yazılacağı bilgisi

    Yazdığınız testlerin gerekliliklerini yerine getirecek bir yöntem uygulayın.


Aldığımız başvuranların sayısını ve kalitesini göz önünde bulundurarak, ciddi şekilde başvuran herkesle röportaj yaptım. Kimseyi işe almadım.


SQL # 2'de, hepsini tek bir sorguda yapmaktan mı bahsediyorsunuz? Amaç sadece sol / sağ veya iç birleşimlerin anlayışını ölçmek için mi?
Nicole

@Renesis: Evet, öyle.
Steven Evers

2

Genelde, üzerinde çalıştıkları son sistemin bir blok şemasını çizmelerine, bloklar arasındaki ilişkileri sormalarına ve çalıştıkları / sorumlu oldukları blok üzerinde yoğunlaşmalarına izin vermelerine izin veririm. Bu alıştırmadan pek çok şey öğrenebilirsiniz, biri küçük alanın ötesine nasıl bakıldığı gibi, 'nerede olduğunu' bilmek için ne kadar önemli olduğunu, onun oynadığı rol hakkında da bilgi sahibi olabilirsiniz. rolü.


2

Aşağıdaki sorun için bir algoritma Yazın bir sayısı göz önüne alındığında , n çıkışı vardır (benzersiz) ikili ağaç sayısını, n, düğümleri.

Böylece, n = 0 ve n = 1 için cevap 1'dir. N = 2 için 2'ye sahipsiniz: kök düğümü ve ardından ikinci düğüm sola veya sağa.

Tasarım teknikleri hakkında bilgi edinebilir ve özyineleme veya notlandırma veya dinamik programlama çözümü hakkında fikir sahibi olup olmadıklarını görebilirsiniz.

[Ayrıca , ilgili ancak farklı, ikili arama ağaçları durumu için bu StackOverflow tartışmasına bakın .]


Yani dinamik programlamayı bilmeyen bir UI Programcısı kötü bir programcı mıdır? Bunun için dinamik programlamayı hatırlayamayan herhangi bir iş programcısı kötü mü? Topcoder'daki birçok genç dinamik bir programlama probleminden geçecek, fakat lütfen yazdıkları koda bir göz atın.
Geek,

@Geek: "Beyaz tahta" sorunlarının birinin düşünce sürecini görmenin bir yolu olduğunu unutmayın. Dinamik programlama problemleri, diğerleri arasında olduğu gibi Google'da da çok popüler olduğu için bu tartışmaya dahil edilmelidir.
Macneil

Katılmıyorum ama iki sorum var. 1. Bilinmeyen çözme? Yakın geçmişte bazı problemleri çözdüyseniz ya da kolej dışında kavramı hala hatırlıyorsanız DP problemleri parkta yürüyüşe çıkar. Bunu unutan birileri kesinlikle beyaz tahtada pek işe yaramayacak. 2. Birisi bir sorunu çözmekte zorlanıyorsa, kod kalitesini ölçmenin bir yolu yoktur. LinkList veya Strings ya da Arrays gibi bir kişinin problemini çözmesi ve kod yazması gibi bir problemle ilgili olarak.
Geek

Bazı firmaların yapabileceği gibi, bir görüşmeciden de haklı çıkmasını beklemem.
Macneil

@Geek: “dinamik programlamayı bilmeyen bir… programcı kötü bir programcı mıdır?” - evet . Bununla birlikte, dinamik programlamada düşünmenin alışkın olmadığınızda önemsiz olmadığını kabul ediyorum. Ancak bunu bilmek mutlak bir zorunluluktur.
Konrad Rudolph

2

Bir yazılım geliştiricisiyle röportaj yapsaydım, ondan bir yazılım tasarlamasını ve her bir satırda tam adı içeren keyfi büyüklükteki bir dosyadan yinelenen girdileri kaldırmak için donanım gereksinimlerini tanımlamasını isterdim. Problem tanımının bazı kısımlarını kasıtlı olarak belirsiz bırakıyorum. Sonra, gereksinimleri, farklı değişimleri, veri yapılarını ve algoritmaları, G / Ç (ikincil depolama), yazılım ve donanım teknolojileri, ölçeklenebilirlik vb.

Başvuru sahibinin birçok bilgi işlem alanındaki bilgi ve kabiliyetlerini ortaya çıkaran küçük ama zorlayıcı bir sorun olduğunu düşünüyorum.


2

Implement function/method(on c/c++/c# whatever), which calculates n-th item of Fibonacci sequence

Birçok erkek buna yapışabilir. Bazı çözümler verilirse - genellikle özyineleme kullanır. Daha sonra:

Implement the same via 'for'-loop

Söyleyemem, kaç adam her iki görevi de tamamlayamıyor - adayların% 50'si.
Bu yüzden hoşuma gidiyor :)


Ya ilk uygulama bir for döngüsü aracılığıyla yapılırsa?
Karanlık Gece

2
Özyinelemeli versiyonu uygulamak için önerilmiştir. Genellikle for-loop'lardan sonra çocuklar başarılı bir şekilde özyinelemeli sürümü uygularlar.
alexb,

Ya tek bir ifadenin olarak bunu uygulamak: fib(n)=round(power(PHI,n)/SQRT5). PHI ve SQRT5, sırasıyla altın oranını (1.618 ...) ve 5'in karekökünü temsil eden sabitlerdir.
oosterwal

2

Veritabanları için gidiyorum:

Tablo: Şeyler

ID Adı
1 Bodkin Van Horn
2 Hoos-Foos
3 Hoos-Foos
4 Sıcak Çekim
5 Marvin O'Gravel Balon Yüz
6 Snimm
7 Marvin O'Gravel Balon Yüz
8 Marvin O'Gravel Balon Yüz
9 Dave

Bana göre bu tür bir tabloyu kopyalayacak bir SQL yazın (ve hangi kimliği geri aldığım umrumda değil, hangisinin geri döndüğü o isim için geçerli olmalı). Dolayısıyla, doğru SQL uygulandıktan sonra, tablo şöyle bir şey sunacaktır:

Tablo: Şeyler

ID Adı
1 Bodkin Van Horn
2 Hoos-Foos
4 Sıcak Çekim
5 Marvin O'Gravel Balon Yüz
6 Snimm
9 Dave

Beğendim çünkü:

  • Kopyalamanın kaldırılması gerçek bir dünya sorunudur
  • Bunu yapmanın bir sürü yolu var
  • Bence, bu yolların hemen hemen hepsinin ya (biraz) daha karmaşık SQL'i (aslında GROUP BY ve HAVING) anlamanızı ya da çoklu basit ifadeleri zincirleme yoluyla aklınıza getirme yeteneğini gerektirdiğini düşünüyorum.
  • Bu son bit yüzünden, sentaksla ya da her neyse onunla mücadele ediyor olsalar bile, onlara ne düşündüklerini sorabilir ve bu şekilde konuşabilirsiniz.
  • Dr. Seuss'a gönderme yapıyor

(Bu, bunu yapmanın tamamen önemsiz bir yolu olduğunu ve bu yıllar boyunca onu karmaşık hale getirdiğim yerdeydi).


1
Sanırım "tamamen önemsiz" saymanın ne olduğunu bilmiyorum ... Gibi bir SELECT min(ID), Name FROM Things GROUP BY Nameşey işe yarayacak mı?
Tim Goodman

@Tim - Bu size her şeyin sayısını verir. Sadece kopyaları olanları istiyorum. El ile düzenlenen sonuçlar sayılmaz, milyonlarca satıra ölçeklendiğini varsayalım. Bu kolay bir problem ama benim tecrübeme göre, SQL'i tanıdığını iddia eden insanların% 80'i ilk bıçaklamanıza bile yetmiyor.
Jon Hopkins

@Jon: "Her şeyin sayımını verir" derken neyi kastettiğinizden emin değilsiniz. Örnek çözümünüzden, istediğiniz her isim için bir satır olduğu anlaşılıyor. Yorumlarınızdan, belki de bunun gibi bir şeyi kastediyorsunuz gibi gözüküyor HAVING count(Name) > 1, ama sanırım örnek cevabınız Bodkin Van Horn, Hot Shot, Snimm ve Dave'i göz ardı etmeli.
Tim Goodman

@Tim - Haklısın, gerçekten belirsiz. Birkaç dakikam olduğunda düzelteceğim.
Jon Hopkins,

1
Bunu yapacağını tahmin: DELETE FROM Things WHERE ID NOT IN (SELECT MIN(ID) FROM Things GROUP BY Name). Tercih edilen bir çözümünüz var mı?
Tim Goodman

2

En sevdiğim C ++ beyaz tahta sorunu, adayı uygulamaktır.

Vector3 a(1, 0, 0), b(0, 1, 0); // Mathematical 3D vectors
double c = 7.0;
double d = a * c;
Vector3 e = a * b;

Bundan öğrenebilirim

  • Eğer aday dönüş tipinde aşırı yükleme yapamayacağınızı anlarsa (juniour-level C ++ işareti)
  • Eğer aday geçici işlerin nasıl döneceğini ve döküm işleçlerinin nasıl uygulanacağını biliyorsa (orta seviye C ++ 'nın belirtisi)
  • Eğer aday temel vektörel matematik yapabilirse (uygulama alanımız için önemlidir)

2

Standart 52 kart destesini nasıl temsil edersiniz? Herhangi bir programlama dili iyi. Kartları nasıl karıştırırsın?


vector <Kart> 'da C ++' shuffle fonksiyonu ile :)
rightfold

1

Benim favorim printf prototipini sormaya başlamak. Daha sonra bir karakter basacak olan düşük seviyeli bir API printc (karakter c) verilirse, printf uygulanır. Yığını gibi her türlü ilginç yanıtı CPU'nun bir parçası olarak verir. Tahmin edebileceğiniz gibi ben bir C ve gömülü arka plandan geliyorum.


"Yığın CPU'nun bir parçası" olayı anlamıyorum.
Barjak

Bilgisayar mimarisi hakkında bir şey bilen herkes bunu bilir. Bana göre bu tamamen ilgisiz, bu yüzden adam cehaletini gösteriyor.
Michael K

@ aufather: Doğru hatırlıyorsam, onu çağırmanız varargs()veya bunun gibi bir işlev yapmanız gerekir . Doğrumuyum? Bir süre önce yaptığımı söylemek için sadece bir kez yaptım.
Michael K

@barjak - printf uygulamasına başladığınızda yığınıza erişmeniz gerekecektir ve yığının CPU'da olduğu yanıtları aldım.
aufather

@Michael - Gömülü dünyada, platform mimarinizi gerçekten iyi tanımanız gerekir. Bu yüzden bu soru çabucak cahilleri oldukça erken dışarıda bırakıyor.
aufather

1

İçinde 200 balık olan bir kaseniz var. Bu balıkların% 99'u lepistes değildir. Kalan balığın% 2'sinin lepistes olması için kaç tane balık çıkarmalısınız. İşini göster.

Bu kafa karıştırıcı gerekliliklerle ilgilidir. Aynı soruda bakış açılarını birkaç kez değiştirmenin bu şekilde söylendiği söylenir. Gerçekten neler olup bittiğini anlayabileceklerini görmek içindir.

Kaç kişinin yanlış anladığına şaşıracaksın.


4
Kaseye iki adet 12 inç Oscar ekleyin, kısa sürede lepisteslerin% 98'ini kaldıracaklar.
Geek,

Lepistes'i kaldırırsan ne olur?

1
% 1 lepistes, = 200 x 1% = 2 (200-2 = 198 diğer balık), burada 2 =% 2, kalan balık =% 98 = 98 (1: 1). 98 = 198 - 100 => answer = 100. [Diğer balıkları seçerek seçebileceğinizi varsayalım. Eğer lepistesleri kaldırırsanız, başka cevaplar da var.] Güzel soru, bir programcının çocuk oyuncağı olmasına rağmen, birkaç kişinin bu kadar iyi idare etmesine şaşırırsınız.
Orbling

1

Birkaç favorim var, ama işte neredeyse her zaman ortaya çıkan bir çift. Çoğu zaman final turu teknik (C ++) röportajları yapıyorum, bu nedenle yeni ilgi alanlarına yol açan daha uzun ve daha açık soruları destekliyor. 'Doğru' bir cevap yok, sadece başka bir konuşmaya açılıyor.

1) Temel bir paylaşılan işaretçi uygulamak, tr1 veya destekleyicilerin uygulamalarındaki paylaşılan işaretçilerle karşılaştırıldığında eksikliklerin olduğu yerler, bunların nasıl kullanılması gerektiği vs.

2) Bir kod incelemesi. Deneyimli elemanlar için, tasarım sorunları, hatalar, kodlama korkuları ve olası sürdürülebilirlik sorunları için verilmiş olan bazı kodları güvenle gözden geçirmelerini bekliyoruz. Ayrıca, elbette, nasıl düzelteceklerini; ve bazen bu mesajı, geliştirdikleri genç geliştiriciye nasıl verdiklerini.


1

Benden kullandığımdan beri kullandığım bir soru şudur:

1 ile 100 arasındaki tüm sayıları yazdırmak için bir işlev yazın.

Onu kullanmamın nedeninin büyük bir kısmı, o zaman çözümünü alıp çeşitli yöne hareket ettirebilmenizden kaynaklanıyor:

1 ile 1000, 10000 veya n arasındaki tüm sayıları yazdırmak için işlevi nasıl değiştirirsiniz ?

Bu sorulara verdikleri cevaplar, değişen gereksinimlere nasıl yanıt verdikleri ve performansla ilgili düşünceleri tanıyabilecekleri konusunda size fikir verebilir. Güçlü bir aday, hangi sıklıkta çağrılacağı için işlevin ne için gerekli olduğu konusunda bir soruya cevap verebilir.

Farklı bir yöne hareket etmek:

Bu işlevin dakikada birkaç kez çağrılacağını ve performansın bir endişe olduğunu bilseydiniz şeyleri nasıl değiştirirsiniz?

Bunu onların yanal düşüncelerini kontrol etmenin bir yolu olarak kullanıyorum. Asal sayıların hesaplanması, maksimum değer büyüdükçe yavaşlayabileceğinden, bazen çözmeye çalıştığınız sorun temelinde ayarlanan bir tür hesaplanmış veya önceden hesaplanmış arama tablosunu kullanmak daha mantıklı olur.


1

İşte bazı düşünceleri kışkırtan bir şey var - Çok basit, biraz matematik içerir ve adayın temel bilgisayar tasarımı (taşma, sayısal gösterim, vb.) Bilgisini kontrol eder:

Giriş olarak bir çift X, Y tamsayısı alan ve X * Y'nin 10'a eşit şekilde bölünebilir olup olmadığını belirleyen bir program (veya prosedür) yazın. makinenizde.


Örnek çözüm:


T_BOOL MultipleOfTen(int x, int y)
{
    return((x%2==0 || y%2==0) && (x%5==0 || y%5==0));
}

0

Aşağıdaki yöntemi doldurun: PS Bir sayı modu, en çok meydana gelen sayıdır (listede).

public int getMode(List<Integer> numberList) {


}

Bu verimli görmek için sizin kodunuzdur.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.