Algoritma soruları iyi görüşme soruları mıdır? [kapalı]


25

Son zamanlarda dost bir programcı ile tartışmıştım. Yeni bir pozisyon için röportaj yapıyordu ve şu soru soruldu:

X ile başlayan ve Y ile biten bir sayı dizisi verin, ancak bir eleman eksik olduğunda N, YX-1 olur, eksik elemanı O (N) veya daha iyi olarak bulun.

Şimdi, cevap burada önemli değil (ama ilginç). Bu, görüşme sırasında sorulacak iyi bir soru olup olmadığı konusunda bir tartışma başlattı.

Bir taraf: Algoritmalar, programlamanın kalıtsal bir parçasıdır ve adayların bu soruyu cevaplayabilmesi, bu adayın iyi bir programcı olacağını ve daha büyük problemleri çözebileceğini ve nihayetinde anlaşılması ve cevaplanması kolay olan çoğu programlama görevini yerine getirebileceğini desteklemektedir.

Diğer taraf: Sıfırdan yazma algoritmaları, modern programlamada nadiren kullanılır ve bu nedenle, kişinin iyi bir programlayıcı olup olmayacağı konusundaki büyük soruyla ilgisizdir. Bir kişi bu soruya başarılı bir şekilde cevap verebilir, ancak daha sık programlama işlerini yapamamaktadır.

Senin düşüncelerin? İyi görüşme sorusu ya da değil?


Üzgünüm, ama anlayamıyorum Bu bağlamda "ya da daha iyi"find the missing element in O(N) or better ne demek ? Basit bir döngü sırasında çözülebilecek bir şey gibi görünüyor, ama yine de anlamıyorum - ya çözüldü ya da çözüldü değil mi?
Camilo Martin

"Veya daha iyisi" performansı ifade eder - bir O (ln (n)) çözümü daha iyi olurdu.
Ethel Evans

Algoritma soruları aslında bir programlama veya teknik iş görüşmesinde beklenen sorulardan biridir. Gayle Laakmaan McDowell, algoritmalar üzerine özel bir bölümü olan "Kodlama Mülakatını Cracking" adlı bir kitap yazdı.
hagubear

Yanıtlar:


20

Algoritma sorusu sormakla aynı fikirdeyim, ancak belirli bir büyük O kalite seviyesi konusunda ısrar ediyorum.

Bu tür bir soruyu sormak, kişinin soruna nasıl yaklaştığını ve girişimlerinde ne gibi tuzaklara maruz kaldıklarını görmek ilginçtir, ancak delice yanlış veya verimsiz bir şey yazmadıkça yazdıklarının gerçek ayrıntılarını yazdıkları kadar gerçek değildir. problem çözme / tasarım adımlarını tutarlı bir şekilde aşmak.

Benzer bir soru soruyorum ama işe alındıktan sonra en iyi şansı bulduğum insanlar, hatalı cevaplar veren ancak yaklaşımlarında doğru fikirleri olan kişiler.


9

Algoritma yazma yeteneğinin, kişinin iyi bir programlayıcı olup olmayacağına dair daha büyük bir soru ile alakasız olduğu fikrine katılmıyorum. Onu hiç kullanmak zorunda kalmasa bile (ki şüpheli), hâlihazırda yazılmış ve ortaya konan basit bir gereklilik grubundan daha karmaşık bir soruna mantıklı bir çözüm bulmak için gereken zihinsel esnekliğe sahip olup olmadığını gösterir. müşteri tarafından detaylı olarak.

Kesinlikle düşünmeyi ve analiz etmeyi bilmeyen birini işe almak istemem. Bir kod maymunu ve bir bilgisayar programcısı arasındaki farkı budur.


6

Burada itiraf etmeliyim ki, görüşmelerde algoritma soruları sormayı sevenlerden biri olduğumu, ancak soruya verilen cevabın kesinlikle alakasız olduğunu vurgulamalıyım. Görüşülen kişinin cevabı bilip bilmemesi en ufak bir umurumda değil. Bunun yerine, benim için bu soru, önem sırasına göre, aşağıdakiler gibi farklı yönleri hedeflemektedir:

Gereksinimler

Bu tür sorular kasıtlı olarak belirtilmemiştir. Örneğinizde, dizi hakkında daha fazla ayrıntı verilmemiştir. Bu sayıların gerçekten sıralanıp sıralanmadığını soran bir görüşmeci varsa, bu iyi bir işarettir. Müşterilerine daha kısa sürede daha iyi bir çözüme ulaşmalarına yardımcı olacak daha fazla ayrıntı sormak için doğru zihniyete sahiptir. Aday ayrıca bir N sayı dizisini saklamak için O (n) boşluğu kullanma fikrini de kullanabilir, ancak bunu X ve Y hakkında daha fazla ayrıntı sormadan yapmamalı. Sonra emin olun, devam edin ve dizi tabanlı bir çözümü başlatın. Ama size aralığın 1 ile 1 milyar olduğunu söylersem, sorun tamamen farklı bir hal alır. Tekrar strese gireyim, çözümü umursamıyorum.

Standart Teknikler

O (n) 'nin ne anlama geldiğini bile bilmeyen bir programcı kiralamak istemiyorum. Bu alanda iyi bir eğitime sahipseniz, bu mutlaka bilmeniz gereken bir şey. Ancak , sadece ne anlama geldiğini bilmek değil, aynı zamanda bu bilgiyi uygulamak için de önemlidir. Örneğinizde, adayın gerekli sıralama (O sıralama (n log n) nedeniyle, bir sıralama düzenini veya başka bir O (n) sıralama yaklaşımını hedefleyen daha fazla soru sormadan) verileri sıralamasına izin verilmediğini fark etmesini istiyorum. Genel olarak.

Benzer şekilde, diğer algoritma soruları ağaç veya grafik değiştirme veya özyineleme gibi standart teknikleri hedefler. Bir aday, iyi bir izlenim bırakmayan bu tekniklerden birine kayabilir. Ancak bu gibi durumlarda, adayın herhangi bir CS geçmişi olup olmadığını öğrenmek için daha derine inmeyi seviyorum. Tabii ki, hedef pozisyonun ne olduğuna bağlı, ancak genellikle çalışma zamanı karmaşıklıklarını, tipik veri yapılarını ve geçişlerini bilmeyen bir geliştirici herhangi bir yardımcı olmayacak.

Sorunlu Zihniyet

Soruyu sorduktan sonra adayı yakından izlersiniz. Nasıl tepki veriyor? En iyi sonuçları burada, sorunun ilk önce nasıl çözüleceğine dair hiçbir fikri olmayan adaylardan elde edersiniz . Bu bakımdan, soru daha sonra işyerinde benzer bir durum ortaya çıkarsa neler olabileceğini kontrol eder. Gelişiminiz sırasında böyle bir sorunla karşılaşabilirsiniz ve adayınızın bu sorunları nasıl çözebileceğini bilmek, kendi başlarına çözemiyor olsa bile iyidir.

Örnek: Adayınızın önümüzdeki yarım saat boyunca sessiz moda geçmesini istemiyorsunuz! Akıllı sorular bulabiliyor mu (bkz. Gereksinimler) kontrol edip, yapamayacağını anladıktan sonra kutunun dışında düşünmeye başlayıp başlamadığını kontrol edin. "Eğlenceli" bir soru sorma bile "İş arkadaşı telefon seçeneğini kullanabilir miyim?" iyi bir işaret.

Nasıl cevap verilir

Genel olarak, bu tür sorular için verebileceğiniz en iyi cevaplar karşı sorulardır! Hemen bir cevabı söylemek temel olarak her şeyi mahvetti ve aslında hiç de iyi bir cevap değil, çünkü bu soruların tümü, henüz akıllıca bunu yapmanız için gerekli bilgiye sahip olmadan, cevabınızın ima ettiği takaslar hakkında ipucu veriyor. değiş tokuş. Elbette, karşı soruların kalitesi adaylar arasında değişmektedir.

Görüşme sorularına genel bir not olarak: Karşı sorular nadiren kötü bir şeydir. Kendi röportajlarımdan birinde, örneğin, bana şöyle bir şey soruldu: "Eğer X'i uygulamak zorunda kalırsanız, bunun için C ++ veya Java'yı seçersiniz ve neden?" - Ben sadece "Bu ikisiyle sınırlı muyum?" Kendiniz için tahmin edin, böyle bir karşı soru için görüşmeci tarafından ne tür bir tepki alırsınız - ve görüşmeciye gerçekten neler yapabileceğinizi göstermenin sizin için ne kadar kolay olduğunu.


Neden "İş arkadaşı telefon seçeneğini kullanabilir miyim?" iyi bir işaret? Bu, görüşülen kişinin sorunların nasıl çözüleceğini bilmediğini ve her zaman yardım istediğini göstermiyor mu?
Uooo

Her zaman görüşülen kişinin basitçe cevaplayamayacağı bir soru olacaktır. Bu durumda bu iyi bir işarettir, ancak elbette, görüşmeci bu davranışı birkaç soru için tekrar etmemelidir. Zor görev, adayın hiçbir bilgisinin olmadığı (kabul edilebilir) tek bir tatlı noktaya çarptığınızda veya genel olarak zor olan problemlerden kurtulmaya çalışıyorsa (ki değil) bulmaktır.
Frank,

Birisi bir keresinde bana bir küçük geliştirici ile üst düzey geliştirici arasındaki farkın üst düzey geliştiricinin daha erken yardım isteyeceği olduğunu söyledi. Bir iş arkadaşı olarak telefon önemli bir beceridir. Bu sektörde pek çok ego var ve “Bilmiyorum” demek güzel bir işaret. Bugüne kadar tasarladığım / yazdığım en iyi kodlardan bazıları sadece kendi fikirlerim değil insanlarla çalışmaktan geldi.
MBonig

5

Adayın iş için bilmesi gereken algoritmalar / formüller hakkında sorular sormadığınız sürece (örneğin pozisyon gerektiriyorsa akışkan dinamikleri), değerlerini göremiyorum. Aday, nasıl giyindiklerinden, nasıl konuştuklarından vb. Endişe duyuyor gibi görünüyor ... yerinde bir matematik sorusunu cevaplayıp cevaplayamayacakları, belki de bir TV şovunda nasıl oynanabileceklerinden başka bir şey kanıtlamaz.

Röportaj yaparken, kendi kendime 'programlama' soruları bile sormuyorum. Adayın geçmiş projelerini, kodlarının hedeflerine nasıl ulaştığını, yaklaşımlarının ne olduğunu vb. Tarif etmesini sağlarım. Bundan sonra, adayın ne yaptığını veya bir görevli olup olmadığını bilip bilmediğini hızlı bir şekilde söyleyebilirim.


4

Programcıların algoritmaları çok iyi bilmeleri gerektiğine katılıyorum, süslü yeni çerçevelerle bile, ancak bir röportajda bir beyin teaser'ı konusunda tam olarak ikna olmadım. En büyük endişem, gerçek bir ortamda, çok farklı koşullar altında algoritmalar yazmanız; aka, her pentostronun izini süren biriyle baskı altında değil, en azından birkaç dakika sessizce düşünmesi için. Bu değerlendirme yöntemini savunanlar için, genellikle bu kişiye çözmesi için ne kadar süre veriyorsunuz? Kodun ateşli 3 dakikalık bir terörde bir çözüm bulmaktan çok uzak olmadığına inanıyorum, bu yüzden bunun aslında birinin günlük işlerle nasıl başa çıkacağını görmek için iyi bir yol olduğuna ikna ediyorum.


2

Bu özel soru ile ilgili sorun neredeyse hileli bir soru. Belirli bir kavrayışla kolayca O (n) ile karşılaşacaksınız, aksi halde O (n log n) 'den daha iyi olmak için mücadele edeceksiniz. Neredeyse "Bunu daha önce gördünüz mü?"

Algoritmik soruların iyi olduğundan emin değilim. Grafik teorisine dayanan birine sorsanız, görüşülen kişinin grafik teorisine ne kadar aşina olduğuna bağlı olacaktır - ve eğer onu işe alırsanız, grafik teorisini oldukça hızlı bir şekilde hızlandırabilir. Yine, "Daha önce buna maruz kaldınız mı?"

Düzenli bir röportajda ciddi problem çözme için zaman yok ve oturup oturduğumda, Wikipedia kullandığımda ve olayları çözmek için biraz zaman ayırdığımda durumlara farklı yaklaşıyorum. Muhtemelen görüşmeci için görüşmecinin ayrıntılı olarak ne bildiğini tartışması ve uygun bir algoritmik soru seçmesi için zaman yoktur.


1
O (n) olduğunu görmenin belirli bir fikri nedir? Ben, özünde bir O (n) problemi olarak "eksik olan için N sıralı değerlerin sıralanmış bir listesini ararken" görüyorum. Daha kötü olması için nasıl yazarsın? (Dürüst olmak gerekirse, merak ediyorum ve O (n) çözümünün nasıl net olmadığını görmüyorum ve hatta O (log n) bile bana açık görünüyor.)
dash-tom-bang

@ dash-tom-bang: Listeyi sıralı olarak düşünmedim (bir şeyi yanlış mı anladım?), böylece O (n log n) çözümü sıralama ve tarama olurken, O (n) rakamları toplardı. yukarı.
David Thornley

Bu durum böyle olabilir - listenin sıralanmayacağını düşünmemiştim. :) ("Liste X'te başlıyor ve Y'de bitiyor")
dash-tom-bang

2
Bir hızlı seçim çeşidi de burada çalışıyor. Pivot (üst + alt) / 2 ve eksik girişin hangi yarısı olduğunu görmek kolaydır çünkü her iki yarının ne kadar büyük olması gerektiğini biliyorsunuzdur. Eksik elemanı bulana kadar tekrarlayın.
Paul Hankin

1
Sorunun, X ile başlayan ve Y ile biten bir diziye (bir kümeden ziyade vs.) atıfta bulunmasının, öğelerin sıralandığını ima ettiğini düşünüyorum. Bu oldukça önemsiz bir soru gibi görünüyor.
FinnNk

1

Düzenli olarak kullandığım, bazıları çok zor olan algoritma gibi birkaç sorum var. Onları zihinsel olarak bir soruna nasıl saldırdıklarını ve belirli kavramları bozup bozmadıklarını görmek için kullanıyorum. (Sadece işaretçileri anlamayan pek çok geliştirici adayı gördüm.)


İşaretçiler, köpek gibi, değil mi? :)
JoshD

1

Aday hakkında size fikir verecek bir soru istiyorsunuz. Bir algoritma sorusu iyi bir cevap verebilir veya vermeyebilir. Ve onlara cevap verebileceklerini veya cevaplayamadıklarını kastetmiyorum. Eğer üzerinde çalışırlarsa ve akıl yürütmelerini anlar ve izlerseniz, bu iyi bir göstergedir. Sadece orada oturuyorlarsa, gerçek bir cevap yoksa, nereden başlayacağını bile bilmiyor gibisin, bu kötü bir gösterge (belki). Sorun, bazı insanların donması ve donmanın problem çözme becerisine sahip olmamadan ayırt edilmesi zor olabilir.

İnsanlar çeşitli nedenlerden dolayı röportajlarda hemen hemen her şeyi sormaktan şikayet edeceklerdir. Başvuru sahibi dondurabilir, başvuru sahibi bu soruyu yeni aramış olabilir, başvuru sahibi belirli bir önemsiz şey / teknoloji / ne olduğunu bilemeyebilir. Bütün bunlar doğrudur, ancak hala bir röportaj yapılması gerekiyor ve bu meslekten çoğumuz bundan nefret ediyorum. Bizi yargılayan birinin fikrinden nefret ediyoruz. Neden haksız bir şekilde yargılanabileceğimizi ya da testin sahte ya da nasıl oynanabileceğini hemen anlatabiliriz. Alt satırda, önemli değil.

Gerçekten istediğiniz şey, görüşme sırasında sunulabilecek veya verilmeyen becerileri belirleme becerisine sahip bir görüşmecidir. Sorular sadece araçlardır. Bana göre, tüm çekiçler aynı görünüyor. Ama onlarla yeterince yetenekli biri için, fark olduğundan eminim.


0

Algoritma sorularını seviyorum, çünkü yaptığımız şey bu. Kısıtlamaları severim, çünkü kullandığımız şey bu. Big-O özellikle endüstrimle alakalı.

Bu tür soruların cevaplarını "kodu beyaz tahtaya yaz" olarak istemekten hoşlanmıyorum. Görüşülen kişi, görüşme yaklaşımı hakkında akıllıca konuşabilmeli ve görüşme devam ederken görüşmeyi yapanlar gereksinimleri değiştirirken devam eden bir görüşmeye katılabilmelidir.

Asıl soru sorulduğunda, görüşmeci “Baştan başla ve 'çukuru' aramaya sonuna kadar yürü” der. Muhabir, çok yavaş olduğunu söylüyor, çünkü N çok garip. Görüşme ikili arama tartışmaya başlar. Muhabir, aniden verilerin artık sıralanmadığını söylüyor. Röportaj "sıralama sonra arama" diyor. "Şimdi çok yavaş". Vesaire vesaire.

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.