İyi röportaj programlama projeleri [kapalı]


26

Potansiyel çalışanlara programlama yeteneklerini ölçmeleri için verebileceğim bazı küçük programlama projeleri arıyorum. Bunlar doğrudan üniversiteden programcılar olacak. Birkaç saat sürecek ve görüşmeden sonra cevaplarını e-postayla gönderecek projeleri arıyorum.

Bunun bir örneği, bu metin paragrafını almak ve alfabetik olarak benzersiz sözcüklerin bir listesini döndürmek olacaktır. Her bir kelimeden sonra, kelimenin kaç kez göründüğünü ve kelimenin hangi anlamlarda göründüğünü söyleyin.

Bir önerisi olan var mı?


ACM programlama yarışması soruları. Bu soruların arşivini burada bulabilirsiniz .
whatsisname,

1
Bu programlama bulmaca siteleri sizin için ilginç olur mu? programmers.stackexchange.com/questions/756/programming-puzzles/…
grokus

Yanıtlar:


43

Uzun zamandan beri birisinin kısa sürede yapamayacağı bir şeyin bana o kişi hakkında yararlı bir şey söyleyemediği sonucuna vardım. Ancak her iyi adayın zaten size çok şey söyleyebilecek yazılı kişisel projeleri vardır. Bu yüzden, "Bana gurur duyduğunuz ve isminizi damgalamaktan mutluluk duyacağınız bir kod verin" ile belirli zorlukları değiştirdim.

Onların seçim projenin herhangi bir saat süren bir görev daha anlatır. Sonra bir saatini daha fazla bilgi edinmek için tartışarak geçirebilirsiniz.


4
Bir şirkette röportaj yapmayı ve oldukça basit (15-20 satır) bir işlev verildiğini ve “Bu ne işe yarar?” Sorulduğunu hatırlıyorum. Onlara dedim, sonra "Kimse yanlış anladı mı?" Görüşülen kişilerin çoğunun cevaplayamadığı söylendi. Belki bu hızlı bir alternatif (yazamayan kodu okuyabilen birini tanımıyorum ama belki de yanlış insanlarla tanışmadım).
TMN

4
@TMN - Oh, biz de bunu biraz yapıyoruz. Ama kod okuyup yazamıyor insanlarla tanıştım iyi .
pdr

@TMN Kendi kendime öğrendim, kod okumak için yazmaktan çok daha iyi olmak adına, kod okuma konusunda çok zaman harcadım . Olabilir ve gerçekleşir, sadece becerisini kazanması için yazı yazması zaman alır ve pratik yapar.
Jimmy Hoffa,

27

Bu zihinsel zırvalıktan bıktım artık Ben onları ayrı yırtık, kod örnekleri sordu yerlerde yapılmış ve daha sonra örnek kod açıklamak bana sordunuz onların dışarı kırık 2 yaşındakiler tarafından yazılmıştır benzediğini sistemleri. Gizli sıralama algoritmaları, ağ hizmetleri, guis, veri yapıları (her zaman bir ağaç veya bağlantılı bir liste) uygulamam istendi. Görüşme yapan kişinin ne düşündüğü hakkında korkutucu, sinir bozucu her soru, programlamanın en önemli kısmıdır.

Sonunda hepsi oldukça işe yaramaz. Bir çalışanı değerlendirmenin en iyi yolu, onu 30 günlüğüne işe almak ve işini ne kadar iyi yaptığını görmek. Test geliştirmek istediğiniz zamanları harcayın ve bu size birisinin günlük olarak nasıl çalıştığı hakkında bir şey söylemeyecektir.


8
Tanımlanan bigtang gibi basit bir algoritmayı kodlamak, en azından "zihinsel" değildir. Böyle bir şeyi yapabilmek, röportaj yapmak için bir ön şart olmalıdır (ve benim şirketimde). Bu var çok aksi kağıt üzerinde harika görünüyor adayı tarama için yararlı. Yapmak istediğim son şey, bir telin palindrom olup olmadığını anlamak için bir fonksiyon yazamayan biriyle görüşerek saat harcamak. Bigtang testi yapamayan üst düzey okullardan gelen CS Doktora sayısına hayran kalacaksınız. Kısacası, böyle bir testi tamamlayabilmek gerekli ancak yeterli değil.
Jer

+1 @ Jer. Bir programcı için son görüşmemde, sekiz adaydan altısı en temel görevleri (Google ve SO ile bile) tamamlayamadı. Gerçek kod tabanımın yanına, beş gün, 30 gün boyunca izin vermelerine izin vermeme imkân yok.
Julia Hayward

2
@ JuliaHayward: Herkesin web / belgelere verilen bir projeyi tamamlayabilmesini beklerdim. Sorun, birileri buzzwords atmaya başladığında ve internete girmeden size sıralama algoritmaları gizlemeye başladığında , çeşitli sıralama tekniklerini ezberlediğiniz ya da her gün iş performansı için kritik olan varsayımın yanlış olduğu varsayılarak ortaya çıkar.
Ocak'ta

12

Birinin kendi zamanında pratik bir proje yapmasına izin vermek, mutlaka bunu yapan onlar anlamına gelmez.

Herkes bir röportaj için erken gelir (en azından olmalı). Onları görmeye hazır olana kadar üzerinde çalışmaları için bir 'beklerken' sayfamız var. Başvuru sahiplerinin bilgilerini öncelikle kullandığımız dilde test eden sekiz (8) sorusu vardır.

Herkesin doğru cevapları aramıyoruz, zira herkes önlerinde bir bilgisayarla doğru şekilde alabilir. Süreci arıyoruz, soruyu bile deniyorlar mı, cevaplarına nasıl geliyorlar.

Röportaja girdiğimizde, onlarla birlikte gider ve onların da doğru cevabı almalarına yol açabilecek soruları yanıtlarız. Ayrıca, cevaplarını nasıl aldıklarını sormamızı da sağlar.

Bu, önceki çalışmalarımızla birleştirildiğinde, adayları filtrelemenin en iyi yoludur.

GÜNCELLEME 2016/06/15

Geliştiricileri işe alma sürecimizdeki sürecimizi önemli ölçüde değiştirdik.

1. Aşama: 15 dakikalık bir telefon görüşmesi, 7 soru sorduğumuzda. İlk 2 "Çalıştığınız en eğlenceli şey nedir?" (programlama ile ilgili olmak zorunda değildir) ve "Boş zamanlarınızda eğlenmek için neyi kodluyorsunuz?".

2. Aşama: Kendi zamanlarında tamamladıkları küçük bir proje. Daha sonra onlarla bir ekran paylaşımı yapıyoruz ve bize ne yaptıklarını gösteriyorlar. Ekran paylaşımı sırasında aynı zamanda projelerinde iki değişiklik yapmalarını ve daha sonra çalışmalarını ve çalışmalarını izlemelerini sağlıyoruz.

Faz 3: Kişisel görüşme.

Bu süreç kültürün derhal sığabileceğini anlamamızı sağlar (1. aşama). Eğer işi yapabiliyorlarsa ve gerçekten konuşabiliyorlarsa (faz 2). Son olarak, değerlerinin aradığımız şeyle aynı hizada olduğundan emin olun (3. aşama).


1
Bu çok zekice. Bunu sevdim!
davidhaskins

3
Yine de triviaya dönüşen birçok röportajda bulundum. Bu özel sisntax parçasına tıkılmamaya ve geniş çaplı anlayışlarına dikkat etmemeye dikkat edin. Özellikle biraz yetenek veya ilgi duydukları iddia edilirse. Sonuç, onlar için çalışmak istemediğimden emindi ve karşılıklı olduğunu eminim.
John Nicholas

“Birisinin kendi zamanında pratik bir proje yapmasına izin vermek, mutlaka bunu yapan onlar olduğu anlamına gelmez” - Doğru, ama henüz bir röportaja girip kodları sorgulanacak kadar cesur birisiyle karşılaşmamıştım. yazılmadı. Olursa, mülakattan ve denetimli serbestlikten geçemezler, ancak yaklaşımımı tekrar gözden geçirebilirim.
pdr

@John. Kabul, "ah, orada virgül unuttun" olamaz. Bahsettiğim gibi, yaklaşımın nasıl işlediğini ve dili anladıklarında bir anlayış elde etmektir. Eğer eşyalarını bilirlerse kesinlikle daha büyük şeylere geçin.
RDL

2
@RDL, Mülakat sürecimizin çoğu, aradığımız geliştirici ve diğer şeyler için cehennem gibi eğlenceli olacak şekilde tasarlanmıştır. Ne kadar iyi devlerin bir mücadeleye karşı koyamayacağını biliyorsun
pdr

4

Jon Jagger'in fantastik Cyber-Dojo'suna bakmak isteyebilirsiniz .

Bu iş için tasarlanmış bir web tabanlı entegre bir ortam kasıtlı uygulama arasında Test Driven Development ve ekip dinamikleri öğrenmeye. Çok sayıda küçük programlama görevi vardır (kata) ve Python ve Ruby'den Java ve C ++ 'a kadar bir dizi dili destekler.

IDE'nin üretkenlik için tasarlandığından farklı olarak kod tamamlama, sözdizimi vurgulama veya otomatik yeniden düzenleme özelliği yoktur, böylece görüşme yapan kişinin bunlar olmadan neler yapabileceğini görebilirsiniz.

En iyi şey, bir kata yaptıktan sonra geri dönüp her katanın kırmızı / yeşil ilerlemesine (ya da TDD * 8 'yapmazlarsa bile değil) bakabilirsiniz. Her derleme / test, test sonuçları ile birlikte git deposundaki değişiklikleri taahhüt eder.

Görüşme kodlama testleri için bunu kullanmanın sadece bir sorunu çözme yeteneği olan adaylar hakkında değil, aynı zamanda problem çözme konusundaki yaklaşımları ve dış faktörler tarafından kısıtlanmadığında kullandıkları süreçler hakkında da çok fazla şey söyleyebileceğini düşünüyorum . Adayın harcamasını istediğiniz zaman.

Kendi CyberDojo sunucunuzu istiyorsanız, tüm proje github'da bulunabilir ve hatta oradan bağlı bir Anahtar Teslim Linux cihaz sanal makinesi bile vardır, bu da zaten VMware player veya VirtualBox kurulu olduğunu varsayarak , içinde çalıştığını ve çalıştığını gösterir. cihazı indirirken birkaç dakika!


3

Sadece bunu yapan bir firma ile röportaj yaptım. 6 ya da 7 sorunlu bir soru formu verdiler. Talimatlar her problemi çözmek için bir metot yapmaktı.

Görevin bir kısmı, kodu tekrar kullanabileceğinizi fark etmekti. Sorunlar diğer çözümlerden gelen kodları kullanabilir. Ya sıralı değildi. Örneğin, soru 3, soru 5 için kullanılan yöntem kullanılarak yazılabilir.

Böyle bir şeyi denemeyi öneririm.

Sorulara gelince? Project Euler sitesindeki başlangıçtaki sorulardan bazıları iyi.

Bir projeyi nasıl bir araya getirebileceklerini görmek istiyorsanız, basit bir oyun da deneyebilirsiniz.

Veya bir şey bulmak istemiyorsanız, son bir projeden sizi bir kodla göndermelerini isteyin.


3

İnsanlardan bir projeyi tamamlamalarını istemek için, akılda değerlendirmek istediğiniz belirli bir beceri kümesine sahip olmanız ve bu becerileri test etmek için projeyi tasarlamanız gerekir.

Bunun bir örneği, bu metin paragrafını almak ve alfabetik olarak benzersiz sözcüklerin bir listesini döndürmek olacaktır. Her bir kelimeden sonra, kelimenin kaç kez göründüğünü ve kelimenin hangi anlamlarda göründüğünü söyleyin.

Bu soruyla ne arıyorsunuz? Bunu çözmenin kaç yolu var ve her yaklaşım size cevabı yazan kişi hakkında ne söylüyor? Bu soruya etkili bir cevapla gösterilen beceriler, işletmeniz için en önemli olan becerilerle aynı mıdır?

Bu soruların cevaplarını istemiyorum; Sadece bir grup adayı işleminize tabi tutmadan önce cevapları düşünmenizi istiyorum. Hangi becerileri aradığınızı biliyorsanız, bu becerileri aramak için bir soru oluşturmak zor değildir. Eğer başkalarının sorusunu, değerlendirmek için neyin tasarlandığını (bir şey varsa) tam olarak anlamadan kullanırsanız, gerçekten sadece kendinizi kandırıyor ve herkesin zamanını boşa harcıyorsunuz.


Vaktini boşa harcadığım için üzgünüm.
bigtang

1
@bigtang, hiç de öyle değil. Yukarıdaki bir rant olarak ortaya çıktığında üzgünüm - nasıl olacağını görebiliyorum - ama amacım yeni işe alımlarda aradığınız becerilere dayanarak kendi projenizi oluşturmak için bir vaka oluşturmaktı. Neredeyse her şeyden küçük bir proje yapabilirsiniz, ancak hem sizin hem de görüşülen kişiler için değerli olmasını sağlamak için gereksinimler en çok değer verdiğiniz becerilere göre yapılmalıdır.
Caleb

İlk cümleyi tamamen kaldırdık (Saygılarımla, kendi başınıza düzgün bir proje ortaya koymak için yeterince zeki değilseniz, adayların sunumlarını değerlendirmek için yeterince zeki olduğunuzu düşündüren nedir? ”. değeri ve biraz rantish görünüyordu
Michael Durrant

0

Bunun bir örneği, bu metin paragrafını almak ve alfabetik olarak benzersiz sözcüklerin bir listesini döndürmek olacaktır. Her bir kelimeden sonra, kelimenin kaç kez göründüğünü ve kelimenin hangi anlamlarda göründüğünü söyleyin.

Bunu hangi dilde yazarlardı? Eğer yoğun bir şekilde C'ye odaklanan bir okuldan geliyorlarsa, Python / Perl / Ruby vb. Öğreten bir öğrenci yazmak kadar hızlı olmazdı ... hatta Java veya C #. Bununla birlikte, bu iyi bir küçük testtir.

Görüşme sırasında daha kolay olanları öneririm. Kandırmaca soruları yok. Bu konuda TMN ile birlikteyim. Onlara temel görevleri yapan ve ne yaptıklarını soran birkaç işlev verin (başkalarının kodlarını okuyarak). Ardından, kendi seçtikleri bir dilde yazmaları için birkaç temel görev (<20 satır) verin. Bu, bir giriş seviyesinin kodlayabileceklerini veya kodlayamayacaklarını bilmeleri için yeterli olmalıdır (bir giriş seviyesinde). Bu röportaj ve not ortalaması ile birlikte bilmeniz gerekenler hakkında size iyi bir fikir vermelidir.


1
Dili kritik bulmuyorum, hatta sözde kodla bile yapılabilir. Ana fikir, çalışan çalışanın "oraya" girip girmediğini ve problem çözmenin iyi belirtilerini gösterip göstermediğini görmektir.
Jonas Byström

Açıkçası, split () ve dizileri / listeleri olan herhangi bir dil (push / append ile) bu önemsiz hale getirecektir. Bir C programcısının split () ve listeyi 'kabul etmesine' ve listelemesine izin verin, ve bu kadar önemsiz hale gelir :-)
ChuckCottrill

-1

Onları uygulamak mı Conway'in Hayat Oyunu o dilin tasarım modeller kullanarak, bakıyoruz hangi dili için.

Bir Java veya C # Conway'in Yaşam Oyunu nesne yönelimli olmalı, LISP veya F # işlevsel olmalı, vb.


2
Bunu tamamlamaları için onlara ne kadar süre verdiniz?
Meslek

Bunun bir OO uygulamasından geçmesi yaklaşık 4 saatimi alıyor, ancak şimdi bir düzine defa yaptım. Ne düşündüklerini ve ne kadar uzağa gittiklerini (ve test edilebilir kod yazıp yazamadıklarını) görmek istiyorsanız, onlara bundan daha az zaman verin. Şahsen yaparsanız, 45 dakika verin ve ne kadar uzağa gittiklerini ve neden yaptıkları yolu seçtiklerini görün. Önceden bilmelerini istediğiniz sorunlardan biri, bu yüzden tamamen kaybolmamaları, hatta kendi başlarına denemelerini teşvik ediyorlar. Bir programcı hakkında çok şey ortaya koyuyor.
George Stocker

8
Bir adaydan Conway'in Yaşam Oyunu testini yazmalarında ne kadar yakın zamanda üniversitede olduklarını sormak veya bu problemi yazmak ve incelemek. @George Stocker'ı işe alırdın çünkü bir düzine defa yazmış. Yaşam Oyunu, gerçek dünyadaki herhangi bir geliştirme çalışması ile ne kadar ilişkilidir?
ChuckCottrill
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.