Adayların bağlantılı liste uygulaması yazması kötü mülakat uygulaması mıdır? [kapalı]


43

Bu siteyi ve SO'yu okumak, bir adayın sıfırdan bağlantılı bir liste uygulamak zorunda olduğunu söyleyen çok sayıda röportaj soruları ve cevapları gördüm. Genellikle bu, FizzBuzz'ı yazmak gibi adayların programlanması için bir "alıştırma" alıştırmasıdır. Buradaki fikir eğer aday bunu yapamazsa, programlayamazlar ve neredeyse derhal reddedilmeleri gerektiğidir.

Ancak, yardım edemem ama bunun aşağıdaki nedenlerden dolayı kötü bir uygulama olabileceğini düşünüyorum:

  • C # ve Python gibi modern üst düzey diller, listeleri yaygın olarak kullanır; Kendi bağlantılı liste nesnenizi yazmak, sadece olağandışı koşullar altında ve daha sonra muhtemelen tavsiye edilmeyen durumlarda gerekli olacaktır.
  • C ++ gibi daha düşük seviyeli diller, yineleyiciler / liste kapları ve nesnelerle standart kütüphanelere sahiptir.
  • İlk iki nokta ışığında kodlayıcılar, bir listeyi (bağlantılı, çift bağlantılı, vb.) Kendileri uygulamayı bile düşünmeden yıllara gidebilirler. Bazıları üniversite günlerinden beri böyle şeyleri görmeyebilir bile.
  • Bilgi işlem gücü aynı zamanda yıllar öncesindeki faktör değildi, bu yüzden işaretçilerle verimlilik eskiden olduğu gibi değil.
  • "Bağlantılı liste örneği" gibi basit bir web araştırması, başvurucunun gerçek yeterliliğini göstermeyecek şekilde ezberlenebilecek ve geri atılabilecek birçok kod örneği ortaya çıkarır.

Açık uçlu sorulara / adayların problem çözme / eleştirel düşünme yeteneklerine ilişkin tartışmalara öncülük etmek için bağlantılı bir listeyi kullanmanın büyük olasılıkla gerçekten iyi bir röportaj uygulaması olduğunu söylemeliyim . Herhangi bir şekilde görüşmeci, bir başvuru sahibinin neye benzediğini ve kitlenin nasıl yararlı olduğunu düşündüğünü gerçekten görebilir.

Bir masaüstünde veya web uygulamasında çalışan programcılar için "bağlantılı liste kodu yok, iş yok" un bu ikili yaklaşımının biraz modası geçmiş olduğunu düşünüyorum. Aynı zamanda oldukça zararlı olabilir; Bir listenin başı ile nasıl düzgün çalışacağını hatırlayamayan bir aday, mükemmel bir kodlayıcı ve iş arkadaşı olabilir ve karışımda kaybolabilir. Düşünceler?

EDIT : Sorulması iyi ya da kötü bir soru olup olmadığını işin bağlamına bağlı olduğunu gösteren birçok (iyi) yorum vardır. Kesinlikle katılıyorum, bu yüzden bu soruyu tekrar söylememe izin verin: Bağlantılı bir listeyi uygulamak, FizzBuzz gibi sorulara benzeyen çok geniş bir kodlama işi yelpazesi için ortak bir görüşme sorusu veya faktoriyalleri hesaplamak için özyinelemeli bir işlev yazmaktır. Bu soru, program adaylarını genel kurulda değerlendirmek için yaygın olarak kullanılacak yeterli faydaya sahip midir? Ya da "Kıdemli Geliştirici, Katıştırılmış Bağlantılı Listeler Ekibi" konumları dışında sorulacak kötü bir soru mu düşünülmeli?


11
Bu hangi pozisyon için? Bu ne tür bir iş? Hangi etki alanında?
Thomas Owens

1
Düzenlemelerinizi görüyorum, ancak yine de - bu ne tür bir iş? Bu bir staj mı? Giriş seviyesi bir iş mi? Ara iş mi? Bir programcı, mühendis ya da bilim adamı mı işe almak istiyorsunuz? Bu hangi etki alanında? Herhangi bir nedenden ötürü kendi algoritmalarını veya veri yapılarını yuvarlayabilecekleri bir konumda olacaklar mıydı?
Thomas Owens

3
'C # (...) listeleri yerel olarak yoğun bir şekilde kullanıyor' ve 'işaretçiler aracılığıyla verimlilik eskiden olduğu gibi değil': bu yerel listelerin bağlantılı listeler değil, dizilere dayalı listeler olduğunu biliyor musunuz? Diziler önbellekleme nedeniyle daha iyi performans gösterir. Aslında, IIRC .NET çerçevesi 2.0'a kadar bağlantılı listeler bile yoktu. C # programlarının çoğunun bağlantılı listeleri kullanmadığından eminim.
Alex ten Brink

1
@AlextenBrink İlginçtir ki, bağlantılı liste bilgisinin C # için daha az önemli olduğu anlamına gelir. Doğrudan dilin içine yerleştirilmiş daha iyi bir yapı kullanabildiğim zaman neden kendiniz (olası hatalarla) bir veri yapısı uyguluyorsunuz?
joshin4colours

Aklıma gelen soru 'neden hemen hemen her durumda başka bir veri yapısından daha düşük bir veri yapısı kullanmayı düşünmektesiniz?' Bağlantılı liste çoğu işlem için dizilere dayalı listelerden daha yavaştır; Bağlantılı listeler için iyi olan tek şey, sabit zamanda silmedir, ancak bunun gerekli olduğu çok az durum vardır. Bir görüşme sorusu için iyi bir veri yapısı olup olmayacağından bahsetmediğimi unutmayın: ilgili kavramlar iyi bir test olabilir, bilmiyorum.
Alex ten Brink

Yanıtlar:


52

Soruyu cevaplamak size bir aday hakkında ne bilmek istediğinizi söylerse, bu iyi bir röportaj sorusudur. Bunu sana söylemezse, bu kötü bir soru.

FizzBuzz gibi kolay sorular belirli bir amaca hizmet eder. Eğer bir aday FizzBuzz'ı kodlayamazsa, sadece kodlayamaz ve görüşmeyi erken bitirebilirsiniz. Bağlantılı bir listeyi uygulamaya koyma oranını biraz daha zorlaştırırdım, ancak genel olarak veri yapıları hakkında çok şey ortaya çıkaran bir sohbet başlatabilir.

Unutmayın ki, hiçbir röportaj sorusu size bilmek istediğiniz her şeyi söylemez. Gerçekten bir grup soru hazırlamanız gerekiyor. Soruları en kolaydan en zoruna doğru sırayla sormalısınız, böylece adayın bildiklerinin sınırını bulabilirsiniz . Bir soru sorarsanız ve çivilerse, başka ne yaptığını veya bilmediğinizi hala bilmiyorsunuzdur.


Düzenlemenizle ilgili olarak:

Bu soru, program adaylarını genel kurulda değerlendirmek için yaygın olarak kullanılacak yeterli faydaya sahip midir? Ya da "Kıdemli Geliştirici, Katıştırılmış Bağlantılı Listeler Ekibi" konumları dışında sorulacak kötü bir soru mu düşünülmeli?

Herhangi bir programlama adayını pratikte değerlendirmek için kullanılabilecek iyi bir genel amaç sorusu olduğunu düşünüyorum. Sadece daha büyük bir soru grubunun parçası olması gerekiyor. Birçok pozisyon türü için iyi bir buz kırıcı olacaktır (aday sıfırdan bağlantılı bir liste uygulayamasa bile, belki daha önce bir tanesini nasıl kullandıklarını ve anahtar fonksiyonların ne olduğunu açıklayabilir) veya "Kıdemli Geliştirici, Katıştırılmış Bağlantılı Listeler Ekibi" pozisyonu için daha gelişmiş sorulardan oluşan uzun bir dizi.


19
İlk paragrafın hikayenin yarısı. Diğer yarısı: Eğer soru sorulursa, adayın sizin için çalışmak istemesini sağlarsa, bu iyi bir röportaj sorusudur. O aday yaparsa değil sizin için işe istiyoruz, kötü bir soru.
Ocak'ta 12:12

5
Adayın bu şekilde bildiklerinin sınırını bulamazsınız, çünkü "karmaşık" ve "temel" olduğunu düşündüğünüz şeyin aynı sırayla adayınıza uygulandığını iddia edemezsiniz. LinkedList muhtemelen bir üniversite öğretmeni programcısı için temel bir şeydir, ancak kendi kendini öğreten bir programcı muhtemelen bir tane yazmak zorunda kalmamıştır. Sonuçta, muhtemelen ne zaman ihtiyaç duysa "LinkedList <string> ..." yazdı. Bu onun bilgisinin "LinkedList" seviyesinden geçtiği anlamına mı geliyor? Daha karmaşık konularda uzman olabilir ve Google’da 5 dakika içinde LL’leri öğrenebilir.
Sylverdrag

1
@Sylverdrag Bu yüzden birden fazla soruya ihtiyacınız olduğunu söyledim. Bağlantılı listeler hakkındaki bilgilerinin sınırını bulduğunuzda, başka bir konuya gidin.
Kertenkele Bill

@ruakh Bu kesinlikle bir rol oynar. Bir röportajda sorulan her soru CRUD uygulamalarının sıradan yönleriyle ilgiliyse (yani, o şirkette yeni bir şey öğrenebileceğimi sanmıyorum), o zaman orada çalışmak beni heyecanlandırmazdı.
Kertenkele Bill

34

İşleri kaçırdım, çünkü aklım böyle basit bulmacalar çıkardı. Diğer röportajlarda da bu tür bulmacalar üzerinde zekice çalıştım - bağlantılı olmayan bir listeyi baskı yapmayan bir ortamda nasıl kullanacağımı biliyorum. Birlikte çalıştığım birinden yeteneklerim hakkında hiçbir şikayetim olmadı, bu yüzden belki de işleri kaçırdığımı düşünmemeliyim, beni özlediklerini düşünmeliyim.

Yani evet, bence en azından şüpheli bir uygulama, ama anlıyorum. Ayrıca, sorunun yüksek basınçlı bir durum olması için sorunun değil, sorgulayıcının hatası olduğunu da düşündüm.

Şahsen, adayın zaten çözmüş olduğu bir sorun hakkında açık uçlu sorular sormayı tercih ediyorum - mümkünse, hem kodlama hem de süreç sorunlarını kapsayan. Kod örnekleri getirebilirlerse, harika.


Bir şey sormaları gerekiyor, bulmaca veya başka bir şey olsun. Herhangi bir soru, kişinin boş kalmasına neden olabilir.
oturum aç

2
@pdr - "Kod örnekleri getirebilirlerse, harika." Getirdikleri kod örneklerini yazdılarsa paha biçilemez.
Robrambusch

4
Birisinin zihni, bağlantılı bir liste uygulamasında boşluk bırakıyorsa ve bunu küçük bir sorunla başaramazsa veya kolayca sinirlenemezse, kaçırmayacağım bir kişi olacağını düşünüyorum.
Bill K

1
@pdr - "Eğer yapamazsan, ne kadar süredir işin olacağını düşünüyorsun?" - Yaşadığınız her türlü İK rejimi altında onları kovmanız gerektiği sürece. Ardından, aday aramanızı yeniden başlatmanın ek maliyeti de vardır. Ayrıca, görüşme yapacağınız bir sonraki kişinin tüm bölümünüzün teknik damgası olabileceği gerçeğinden doğabilecek fırsat maliyeti. Çünkü Ama tabii şimdi onlar kullanılamaz Eğer yanlış kişiye kiraladı ve onlar başka iş buldu.
robrambusch

1
@ robrambusch: Mükemmel problem çözme becerileri sergiledi ve sınıf yapısını iyi konuştu. Ama kod yazmadı. Bir röportajda kod yazmak konusunda, evet, bu faydalı olabilir, ancak bir saat içinde, çözdüğünüz problemlerle ilgili olarak bir saat içinde sizinle ilgili daha fazla şey öğrenebileceğimi düşünüyorum. çözmek için saat.
pdr

25

Programlama iş türünü tanımlamanız gerekir. Derleyiciler ve algoritmalar geliştirme işinde iseniz, bu gibi şeyler hakkında sorular beklenmelidir. İş kolu tipi uygulamalardaysanız ve adayın CRUD uygulamaları yapmasını beklerseniz, konsept bilgisi (bir program yazmadan) yeterli olabilir. Günümüzde, LOB türündeki uygulamalarda özel olarak işin yapılması için gereken farklı teknolojilerin bilgisi, düzgün algoritmalara olan gereksinimi ortadan kaldırmaktadır.


Kesinlikle. Geçen sene biraz da benzetilmiş tavlama kullanan (sınıf programları oluşturmak için) ve performans elde etmek için birkaç "gelişmiş" veri yapısı kullanan genel amaçlı bir genetik sıralama bileşeni yazdım. Bir tanesini kodlamana gerek yoktu. .Net çerçevesi ihtiyacım olana sahip değilse C5 veya Power Collections kullandım.
ElGringoGrande

4
Kabul ediyorum, bütün gün LOB uygulamaları yazıyorum, geçmişte bağlantılı liste uygulamalarım var ... üniversitede ... COBOL'da. Tekrar yapabilirim, ama neden? Çok sayıda yetkin LOB geliştiricisi muhtemelen asla bir tane yazmadı ve asla gerekmeyecek.
CaffGeek

1
Genel olarak kabul edildi, ancak bağlantılı bir liste gerçekten egzotik bir şey değil. Temel, FizzBuzz'ı geçtikten sadece bir seviye.
Francesco De Vittori

1
@ FrancescoDeVittori: Bu bazen sorun değil mi? Birisi size çözmek için bir sorun veriyor. Yeterince basit gözüküyor, ama daha önce hiç yapmadınız, bu yüzden beyniniz yarışmaya başlar, gotcha'ları bulmaya çalışır, eğer düşünmezseniz röportajınıza mal olacak bir şey. Ve orada değil, ama asıl problemi çözmekten alıkoyuyor.
pdr

@ FrancescoDeVittori: Temel olmayan mülakat sorularına birkaç örnek verebilir misiniz? Kendimi geliştirmek için buna ihtiyacım var. Teşekkürler.
Den

9

Cevabım "bağlıdır". Bir aday özgeçmişinde C veya C ++ yazdıysa bu soruyu soracağım. Bağlantılı bir listenin uygulanmasını istemek, bir C veya C ++ programcısı için kesinlikle gerekli olan işaretçilerin anlaşılması için iyi bir testtir.

Öte yandan, eğer bir aday C veya C ++ bildiğini iddia etmezse, ondan bağlantılı bir liste uygulamasını istemem ama onun hakkında soru sormayı düşünürdüm. Bağlantılı bir listenin nasıl çalıştığını yüksek düzeyde açıklayın. Listenin başına bir öğe eklemenin karmaşıklığı nedir? Listenin kuyruğu? Listenin ortasına bir öğe ekleme? Bir dizinin aksine bir listeyi ne zaman kullanırsınız? Bunlar, IMHO, her programcının bilmesi gereken temel veri yapısı kavramlarıdır.


7

Bunun kötü bir röportaj sorusu olduğunu düşünmezdim. Bir çok veri yapısı anlayışı ve programlanması, Bağlantılı Listeleri gerçekten iyi anlamakla başlar. Bu, bazı uyarılar olduğunu söyledi:

1) Bu bir fizz-buzz tipi soru. Sadece çok basit bir şeyi onaylıyorsunuz: Kişi bağlantılı bir listeyi anlıyor mu? Sor ve devam et.

2) Bağlantılı listeler ile ilgili kavramlarınızı (örneğin, C) anladığınızı göstermek için çok uygun dillerin, işte birlikte çalışacakları dil ile aynı olamayacağına bağlı listelerde zorluk vardır. Yapısal olarak herhangi bir dilde temel anlayışı gösterebilirsiniz, elbette, ancak bir adaydan [] kullanmadan [] kullanmadan bağlantılı bir listeyi Erlang'da tekrar uygulamasını istemek aynı zorluk değildir ve bir adayın anlayışı hakkında size aynı şeyi söylemez C'yi yapmalarını isteme gibi. İşin Java ile ilgiliyse, C'de yapmalarını istemek de bir şekilde noktayı kaçırıyor.

3) Akılda ve "beyaz tahta programlama" nın genel zorlukları ile, bu tür bir soruyu sorarken, temel prensiplerin anlaşıldığını gösterdiği sürece sahte kod veya şemaları kabul ediyorum. İnsanlardan sözdizimsel ve mantıksal açıdan mükemmel olan bir beyaz tahtaya kod yazmalarını istemiyorum, özellikle de tekrar bakmaları istendiğinde herhangi bir mantıksal sorunu çözebiliyorlarsa ve tanımlayabiliyorlarsa. YMMV.


6

Röportajlar yaparken, sık sık bağlantılı liste uygulamaları ve bağlantılı listeler etrafında merkezlenmiş bazı algoritmalar istendi. Birçoğunu çözdüm ve bir kısmı nöronları biraz çalıştırmamı istedi.

Eğer bir röportaj yapsaydım, bir kişinin kodlamada ne kadar iyi olduğunu test etmek için değil, bir kişinin ayrıntılara ne kadar dikkat ettiğini kontrol etmek için bir tür bağlantılı liste uygulamasına giderdim. Herkes bağlantılı bir liste yazabilir, ancak bazı iyi programcıların bile başarısız olduğu sınır durumlarıdır. Ona sorma Write a code for linked list in C/C++. Ondan C'ye (C ++ değil) genel bir bağlantılı liste yazmasını isteyin.

Sorunu bükün ve bağlantılı listeye başka koşullar koyun; sormak için iyi bir sorunuz olacak. Bazı insanlar o zaman hata yapmak zorundadır.


2
C’deki genel bağlantı listesi gibi bir şey yok
DeadMG

1
Ciddi anlamda? İşaretçilerinvoid sadece bunun için olduğunu sanıyordum ... :) Google'da "c'deki genel bağlantı listesi" için bulduğum ilk bağlantı şuydu: daniweb.com/software-development/c/threads/109260 ve diğeri teknik görüşme yapıyordu .com /… Herkesin bunu bildiğini sanıyordum!
c0da

Bu kodları test etmedim, ancak daha önce bu tür bir bağlantılı listeye
sahibim

C # dilinde genel bir bağlantılı liste yazarken bile bir veya iki "gotcha" vardır (örneğin, T türündeki öğelerin karşılaştırılması açık değildir; yani. (T v1, T v2) => {return v1 == v2;} derlenemez sınıf kısıtlamaları yoksa ya da varsayılan eşitlik işlecini kullanmıyorsanız)
Steven Evers

@ c0da Bence, voidişaretçileri kullanan bir liste genel değil, her zaman için sadece geneldir. İçinde her türlü şeyi tutabilirler ve hatta istedikleri her şeyi karıştırabilirler - ve bu tam olarak benim için jenerik değildir. Bu taban türünü kullanmak gibi object... nesne yönelimli dilde
dürtmek

5

Şu ana kadar profesyonelce programlama yaptığım yaklaşık 10 yıl içinde (ve hobi olarak on yıldan daha uzun bir süre önce), bağlantılı bir liste uygulamam gerektiğini hiç sanmıyorum. Biri benden röportaj sırasında yapmamı isterse, düzenli olarak bu işte yapacağım bir şey olup olmadığını sorarak karşı gelebilirim.

Elbette, hemen hemen kesinlikle orada iş var olacak sıfırdan bir bağlantılı liste uygulamak gibi - yaygın bilinen algoritmaların daha fazla veya daha az temiz oda uygulamaları yazmak gerekir. Ancak çoğu programlama işinde, bir adayın görüşme sırasında yapabileceği şirket için ne gibi bir değeri vardır? Öyle bir ortamda adayın, ileri vakaları doğru şekilde ele alan, dil veya çerçevedeki ortak uygulamaya göre hataları bildiren mükemmel bir uygulama sağlaması gerçekten de bu kadar önemli midir? Yoksa bunun farkında değil misiniz ve bunun yerine belki de 10-20 yıl içinde karşı karşıya kalmadıkları bir soruna gerçekten nasıl yaklaştıklarına odaklanabilirsiniz?

Mevcut işim için röportaj yaparken, şirkette kullanılan teknoloji yığını hakkında çok az deneyimim oldu. Şimdi, birkaç yıl sonra düzenli olarak meslektaşlarım bana geliyor ve yalnızca ürünler, bunların uygulanması ve uyguladıkları standartlar hakkında değil, aynı zamanda çok daha genel programlama sorunları hakkında da sorular soruyorlar (sadece dün ne sordum? Etkileri, belirli bir tablo bağlamında SQL Server'daki varsayılan kısıtlamada dairesel bir bağımlılığa ve bunun bizim durumumuzda kullanımına bağlıydı - buna bağlı olarak, bu özel durumda hiçbir çıkarım olmadığı ortaya çıktı). Bunun için de yepyeni bir bağlantılı liste uygulamasına ihtiyacım yoktu.

Adayın görevlendirmesi muhtemel işle ilgili sorular sorunve yeni bilgi edinme konusunda nasıl hissettiği hakkında bir fikir edinmeye çalışın. Hiç görmedikleri bazı belirsiz sözdizimlerinin anlamını nasıl anlayacaklardı? (Örneğin, bir C dükkanıysanız, o zaman trigrafları içeren bir soru deneyebilirsiniz.) Bir programlama pozisyonu için Düzenli Taşma gibi forumları düzenli olarak okurlar mı veya katkıda bulunurlar mı? Bir programlama dilinde veya çerçevede bazı görevlerini yerine getirmeleri istenirse, deneyimleri az veya hiç yoktur (örneğin, öncelikle bir Java mağazasındaysanız, peki ya Clojure veya .NET?), O zaman soruna nasıl yaklaşırlar? Belki de hata izleyicinizden gerçek bir böcek çıkarın (çözüldüğünden çok uzun bir süre önce bile olabilir) ve onlara genel anlamda çözüme nasıl yaklaşacaklarını sorun ve söz konusu ürünün ilgili kısımlarını açıklamaya hazır olun.

Eğer aday işle ilgili problemlerle başa çıkabiliyorsa ve yeni şeyler öğrenmeye karşı iyi bir tutuma sahipse, muhtemelen bu iyi bilinen sorulara cevap verilebilecek cevaplara cevap verememekten daha iyi bir uyum göstergesi olabilir. Sorular FizzBuzz, bağlantılı listeler veya başka bir şey hakkındadır. Adayın takıma ne kadar iyi uyduğunu ve bence oldukça güvenli bir zeminde olduğunuzu düşünüyorum.


4

Elbette çoğu insan hiçbir zaman bağlantılı bir liste uygulamasına ihtiyaç duymaz, ancak bunları sıfırdan uygulamak için muhtemelen işaretçilerin doğru şekilde ele alınması gerekir. Daha sonra, işaretçiler için tutarlı bir zihinsel model oluşturmanın, dil yeterliliği, bazı (soyut) makine seviyesinde ne olduğunu ve genel olarak soyutlama yeteneğini anlama ile ilişkili olduğunu düşünüyorlar.

Bunun mutlaka en iyi önlem olacağını söylemiyorum, ancak yalnızca bir korelasyon olduğunu.


4

'Yapma' soruları olduğunu söylemeye başlıyorsunuz, ancak sonra insanların anlaşılır bir şekilde bunları yapamayacağına dikkat çekiyorsunuz. Kafam karıştı.

İşte böyle düşünüyorum:

  • Söylediğiniz gibi bir tane yazmak için nadiren ihtiyaç vardır, böylece insanlar kolayca unutmuş olacaklar.
  • Yazmaları inanılmaz zor değil.
  • Onları yazmak için kullanılan kavramlar temel kabul edilebilir.
  • İnanılmaz bir şekilde kullanılırlar (farkında olmasanız bile).

Bence bu onlara sormaları gereken iyi sorulardır. Röportaj için ön çalışma yaptıkları için endişeleniyorsanız, bir liste yapın. Dairesel olarak yazmalarını ve uygulamalarının asimptotik çalışma süresinin ne olduğunu sormalarını isteyin. Ya da başka ortak ve / veya hızlı veri yapıları yazsınlar ... İkili arama ağacı? Bir sıra (FIFO)? Bir yığın (FILO)? Saf ( O(n)) öncelik sırası? Birçok insanın bir BST'nin O(log n) bir ağaç olduğu için olduğunu düşünüyorum .

Eğer metal çalışan ve bir ihtiyacı birisi için arıyorsanız çok veri yapılarında sağlam bir temel ... Bunlar bile olabilir uzakta sen işe aradığınız adaylar için çok önemsiz.

Bu, elbette, veri yapılarının temelleri / temelleri olan ve konumlarının bu temellerden fayda sağlayacağı bir gelişme istediğinizi varsayar. Saniyeler içinde bir asp sayfası atabilecek birini istiyorsanız, bunun için röportaj yapın. Mesele, bir röportaj sorusu seçmek değil, çünkü herkes yapar, ama aradığınız becerileri ölçen bir konu seçmektir. Şahsen, veri yapılarının soruları iyi, bağlantılı liste veya hayır olduğunu düşünüyorum.


Pratikte kafa karıştırıcı değil. FizzBuzz daha kolay bir sorudur, ancak başvuru sahipleri rutin olarak cevap vermeye bile başlayamazlar. Aynı bağlantılı listeler ile gider. Programlama dünyasının gizemi.
joshin4colours

@ joshin4colours: Hayır, soru hakkında kafam karıştı. İlk başta OP, LL sorularının “bimme” olduğunu söyler, ancak daha sonra nitelikli bir geliştiricinin soruyu neden cevaplayamayacağıyla ilgili noktaları listeler.
Steven Evers

3

Bu soru, program adaylarını genel kurulda değerlendirmek için yaygın olarak kullanılacak yeterli faydaya sahip midir?

Kesinlikle değil. Nasıl ifade edildiğine bağlı olarak, size söyleyeceği şeye göre, "bu aday bağlantılı bir listeyi nasıl tasarlayacağını bilir" den "bu aday X'e bağlı bir listeyi programlayabilir" e kadar değişir. Sahte kod için sorarsanız, ilk doğru daha fazla eğilimde olacaktır. Belirli bir dilde bir uygulama yapmak isterseniz, dili anlamalarına daha fazla dikkat edersiniz (özellikle işaretçilerle, referanslarla ve yapılarla ilgilenebileceğiniz C ve C ++ ile).

Tüm adayları aynı soruları kullanarak değerlendirmenin mümkün olmadığını söyleyeceğim kadar ileri giderdim. Görüştüğünüz becerileri değerlendirmek için görüşme sorularınızı uyarlamanız gerekir.

Eğer kişi kod yazma pozisyonunda olacaksa, pozisyonla alakalı olduğu sürece bir algoritma ve / veya veri yapısı sorusu eklemeyi düşünürüm. Daha önce tartışılmış veya kullanılmış bir şeyi seçmeye çalışırdım. Ayrıca, çalışma süresi ve hafıza tüketimi (büyük O notasyonu gibi şeyler) gibi söz konusu algoritmaların ve veri yapılarının uygulanması dışındaki şeylere de odaklanacağım. Bu kavramlar sadece veri yapısını oluşturmakla kalmayıp, aynı zamanda hangi uygulamanın en uygun olduğunu seçmekle de ilgilidir (örneğin bir ArrayListversus LinkedListgibi).


3

Düzenli bir programlama işi için adayı elimine eden bir soru olması gerektiğini sanmıyorum. Ancak, gerçekten kıdemli bir programcıyla mı yoksa maymunlarca kodlama yapan birileriyle yıllarca uğraşıyorsanız, görmek iyi bir şey. Ve yine de, bir programcının seçilmesinde temel bir kriter olmamalıdır. Belki de kötü hafızası olan harika bir programcı ve "bağlantılı liste" kelimesini yıllarca okumamış (ya da adını hatırlamıyor) ama yine de iyi uygulamalar yapabilir.

Öyleyse, bazılarının söylediği gibi, eğer bağlantılı liste ve çok fazla süslü algoritma, vs. ile çalışması gereken bir iş olacaksa, o zaman tamam. Bir formdaki olağan giriş verileri için, doğrulamak ve göstermek biraz işe yaramaz ve haksız mı.


2

Bunun bir röportaj sorusunun kötü bir örneği olduğunu düşünüyorum, ancak farklı bir nedenden dolayı. Bağlantılı bir liste o kadar basit bir kavramdır ve ne olduğunu bilmek, onu nasıl uygulayacağınızı bilmek demektir. Eğer kişi bağlantılı bir listenin ne olduğunu bilmiyorsa, nasıl çalıştığını açıklamak zorundasınız ve bunu yaparken de problemleri nasıl çözeceklerini bilip bilmeyecekleri hakkında hiçbir şey keşfetmeden cevabı vermiş olursunuz . Bu nedenle, soru, bir programlayıcı olarak uygunlukları hakkında size yararlı bir şey söylemediği için "bağlantılı bir listenin ne olduğunu ve nasıl çalıştığını zaten biliyor musunuz?"


2
Popüler sorular da ezberlemede iyi olan kişilerce oyun oynamaya tabidir.
Paul Nathan

1
Bağlantılı bir listenin bir aday için nasıl çalıştığını açıklamak zorunda kalırsanız, muhtemelen programlama yapmak için onu işe almamalısınız ...
Dima

2

Bağlantılı liste uygulaması yazmak iyi bir röportaj sorusudur çünkü adayın kodlama şekli hakkında çok şey ortaya çıkarır:

  • API'nin ne olduğunu biliyor mu? Başkalarının kodunu kullanabilir mi? Başkalarının kullanabilmesi için kod yazabilir mi?

  • Bağlantılı Listenin ne olduğunu biliyor mu? Koleksiyonlar, Veri Yapıları, Algoritmalar biliyor mu?

Bağlantılı Listenin hangi yöntemleri sunması gerektiğini bile bilmiyorsa, muhtemelen hiç kullanmadığını ya da ne zaman kullanacağını biliyordur.

  • Sorunu nasıl ele alıyor? Öncelikle bir analizle, küçük bir spesifikasyonla, bazı testlerle önceden mi başlıyor? Yoksa mutlu bir şekilde kaçmaya mı başladı?

  • Kenar davalarını ele alıyor mu? Son düğümü Bağlantılı Listeden çıkarmaya ne dersiniz? Birisi, bağlantılı listeye kendisinin linkli listeye bir referans eklemeye çalışırsa ve ardından her şeyi silerse?

  • İstisnaları ele alıyor mu? Her programlama dilinin istisnalar için kendi kuralları vardır: Java'da, boş bir listede bir getFirst () yaparken, bir LinkedList'in NoSuchElementException göndermesini beklersiniz. Diğer diller tanımsız, -1 veya sabit dönebilir.


Bir röportaj kodlama alıştırmasında, özellikle istenmediği sürece, bir kavram kanıtı için gerekli olanın ötesinde her türlü ileri vaka yönetimi, hata yönetimi, vb. Atlayacağım. AMA ben de bir seçim yaptığımı açıkça söyleyebilirim. Bir saatlik veya hatta birkaç saatlik görüşme sırasındaki kısıtlamalar, gerçekte gerçek kullanım görecek bir şey üzerinde çalışırken durumdan çok farklı.
Ocak'ta CVn
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.