En iyi C ++ görüşme sorusu nedir? [kapalı]


28

C ++ becerilerini ölçmek için bir C ++ programcısına bir soru sorabilirseniz ne olurdu?

En iyisi düşündüğüm soru şudur: "Bunu sil;" üye fonksiyonunun içinde? (Bunu bir bağlantı olarak koydum, böylece önce bunu düşünebilirsin, sonra doğru cevabı görebilmek için En İyi C ++ Röportaj Sorusu - Hiç!

Bunu istemiyorum çünkü çoğu insandan cevabı bilmesini bekliyorum. Yapmışlarsa, bu yararlı bir soru olmazdı. Doğru cevaba giden yolda çalışabileceklerini ve nasıl yapacaklarını görmek istiyorum.

Yanıtlar:


8

Onlara sanal üye fonksiyonunun C ++ 'ta şablonla birlikte kullanılamamasının nedenini soracağım. Elbette, soruyu derhal cevaplayabilen sadece birkaç kişi var. Ancak bir görüşmeci eğer C ++ 'nın temel mekaniğini iyi anlıyorsa (şablon C ++' da nasıl işliyor, sanal fonksiyonun nasıl uygulandığını, derleyici ve linker'ın kaynak kodundan nasıl bir çalıştırılabilir oluşturduğunu vs.), uygun adım adım bir cevap alabilirsiniz. soru yöneltme adım.

Eklendi: Bu yanıttaki şablon sanal üye işlevi, şablon sınıfındaki normal üye işlevi değil, bazı sınıfın sanal üye işlevi olan şablon işlevi anlamına gelir. Karışıklık için özür dilerim :(


3
@summerlight: Sanal üye işlevlerini ve şablonlarını karıştırıyorum ve şu ana kadar kötü bir şey olmadı ... Korkarım ne aldığınızı anlamadım. Beni aydınlatmak ister misin :)?
Matthieu M.,

2
Bu cevap neredeyse doğru değil. Şablon sanal üye işlevlerine sahip olamazsınız, ancak şablon sınıfının sanal üye işlevlerine sahip olabilirsiniz.
Katph

1
@summerlight: ah anladım! Eğlenceli soru evet, sık sık açılır;)
Matthieu M.

2
@nikie: Bu, şablon sınıfındaki sanal bir üye işlevidir - şablon <typename T> gibi sanal bir şablon üyesi işlevi değil; void doSomethingWithGenericTypeT (T arg);
yaz ışığı

2
@summerlight: Bu örneği gönderinize eklemeliydiniz. Şu ana kadar ne demek istediğinizi anlamadım. İyi bir soru olsa da, şimdi anlıyorum ;-)
nikie

57

En iyi C ++ mülakat sorusu, bir sınav sorusu değil, bir programlama sorunu olacaktır.


Kabul. Google’da aranabilecek sözdizimi hakkında soru sorma. Bunun yerine, adayın kolay (önemsiz olmasa da) bir işlev, tercihen bir noktada kendi kodunuzda yazdığınız bir şey yazmasını sağlayın.
chrisaycock,

4
Size uzman programcı hakkında çok şey söyleyebilir "bir dize tersine çevirmek için bir işlev yazmak" olarak basit bir organ bile: do kullandıkları CString, char*, std::string, vs .; yeni bir dize döndürüyorlar mı yoksa yerine ters mi döndüler; Karakterler üzerinde elle dolaşıyorlar mı yoksa bir kütüphane fonksiyonu çağırıyorlar mı? Ve tabii ki bir ipi ters gibi basit bir şey yapamazlarsa, bu onlar hakkında size çok şey anlatır! Ayrıca Unicode ile çalıştığı gibi UTF-8 ile çalıştığı gibi takip eden birçok soru var.
Gabe

16
@Ernelli: C ++ hiç gitmedi mi? Ciddi anlamda?
Steven Evers

1
@Gabe - iyi nokta. Örneğin, bir ilke parametresiyle yerinde bir şablon tersi yapmak, karakter başına bayt başına karakter dizileri söz konusu olduğunda çok genel olmaz (ya da muhtemelen işlev yerine ilke işlevidir). Erken optimizasyon yok (genel olması kolay çünkü yeni bir dize oluşturun) veya çeviklik (bu durum gerçekleşinceye kadar endişelenmeyin) ve yerinde tersine çevirmek zor değil, belki biraz mı bilemiyorum. daha kolay, sabit genişlikli karakter dizeleri için) kazanacaktı.
Steve314

1
@Ernelli - Eğer wchar_t ve std :: wstring unutuyorsun gönderin ve Windows / Unix farklı şeyler anlam
Martin Beckett

32

Onlara C ++ 0x ile ilgili neyi sevdiklerini sorardım. Bundan onları çeşitli klişelere "koyabilirim":

  • süper eski okul, C kodunu derlemek için C ++ derleyicilerini kullanıyor
  • STL'den korkan (veya hiç anlamadığı) eski okul, değişikliklere ayak uyduramadı
  • lambdas'ı sever, STL değerindeki referanslardan, büyük RAII fanından, sıcak paylaşılan_ptr, unique_ptr vb. cihazlardan hızlıca faydalanır.
  • acı çünkü son birkaç yılda yazılan tüm destek kodlarının C ++ 0x eşdeğerlerini kullanmak için uyarlanması gerekecek
  • nispeten kısa bir soruya cevap verirken başımı patlatıyor deli şablon metaprogrammer

Bu kovalardan bazıları sizin için mükemmel, bazıları ise "geldiğiniz için teşekkürler". Size çok fazla bilgi sağlayan bir soru olarak, bu benim kazananım.


1
Konuyla ilgili çok fazla tartışmayı teşvik eden iyi bir lider sorusu için +1.
Gary Rowe

8
C ++ 0x'in ne olduğu hakkında bir fikri olmayan insan kategorisini unuttun. Sanırım bu daha çok bir cevap olacak ve ilk iki türe uygun olacaktı.
Hızlı Balık

1
@Fast Fish, evet, C ++ gibi insanlar insanlar 0-whatnow? genellikle ilk iki kategoriden biri olacak ve tipik olarak cevaplarında bunu aydınlatacak.
Kate Gregory

28

Neden "bunu silebilirsin?" Diye şaşırdım. ilginç bir soru olarak kabul edilir. COM kodunu C ++ 'da yazan herkes, temel COM programlamasının ilk gününde öğrendiğiniz ilk şeyin "bunu silmek" i doğru kullanmak olduğunu bilir. Birisinin COM programlarını yazma konusunda özgeçmişlerine yalan söyleyip söylemediğini, ancak genel bir bilgi olan C ++ sorusu olarak, eğer birileri hemen cevap veremezse o zaman uygun olmayacaklarını belirlemek faydalı olabilir. ekibim için.

Her neyse, amacınız C ++ becerilerini ölçen bir soru bulmaksa, o zaman bir soru seçmek yanlış yoldur. Arkanı dön. Sorulacak doğru soru şudur:

Bir ila on arasında bir ölçekte, bir C ++ programcısı ne kadar iyi?

Bu size istediğiniz cevabı veren soru değil. Herkes ne olursa olsun "sekiz" diyor. Size istediğiniz cevabı veren soru şudur:

Tamam, sekiz yaşındasın. Yedinin çalışmakta zorlanacağını düşündüğünüz bir sorun alanı nedir?

Ve patlama , şimdi onları aldın. Eğer aday "özyinelemeyle ilgili bir şey" veya "sanal bir yıkıcı ne zaman kullanılacağını" düşünüyorsa, yediden birinin zor zamanlar geçirdiği bir şeydir, o zaman özyinme veya yıkıcılar hakkında ya da her neyse biraz bildiklerini biliyorsunuzdur. ve onların bilgisi bundan daha ileri gitmiyor.

Bu size bazı trivia soruları bulmaktan çok daha iyi bir kalibrasyon sağlamalıdır. Beni C ++ ile ilgili gerçek hakkında tek bir soru sormaya zorlayacak olsaydım, muhtemelen "sanal yöntemlerle uğraşan bir C ++ derleyicisinin bölümü için semantik analizörü ve kod oluşturucuyu nasıl tasarlardınız? "temel sınıf yıkıcısına" denir mi? " Üzerinde çalıştığınız ve adayın üzerinde çalışabileceği gerçek şeylerle ilgili sorular sormalısınız. Bu bir zamanlar üzerinde çalışmak zorunda kaldığım bir problemdi ve bir kişinin semantik analizörleri ve kod üreteçlerini ve C ++ bilgilerini nasıl tasarladığına dair oldukça iyi bir fikir vereceğini düşünüyorum.


3
Bunu kullanmaya başlayacağım: Tamam, yani sen sekiz. Yedinin çalışmakta zorlanacağını düşündüğünüz bir problem alanı nedir?
David Thielen

10
Burada bir başka güzel soru: dokuzda sorun yaşamanız gereken ne olabilir?
David Thornley

Bu çok mükemmel, muhteşem.
UpAndAdam

14

Sadece eğlence için, C ++ programcılarını şu küçük bebekle makaraya koydum:

Bu neden sonsuz bir döngüye giriyor (ve evet doğru yazıldı)?

int x=0;
while (x<3) {
  x = x++;
}

Birçoğunun ne kadar tetiklendiği şaşırtıcı. Tabii ki, Yığın Taşması göründüğünde daha fazla kullanamıyorum . Mutter ... mutter ...

(Doğru cevabı almak için itirafı oku ve kesinlikle yorumları oku)

Bonus soru eklendi

Tüm zamanların klasik FizzBuzz'ı var (şu anki ünlü Kodlama Korku makalesinde de belirtildiği gibi ). Asla kendim bir röportajda kullanmamıştım, ancak geliştirme ekibinin etrafında bir öğlen yemeği yudumladıktan sonra sonuçlar ... um ... şaşırtıcı derecede doğru.

itiraf

"X ++ özgün değeri döndürür" yanıtına yakalandım. Ancak, doğru cevap, sıralama noktalarından dolayı davranışın tanımsız olmasıdır. Buraya gönderinceye kadar hiç kimse bunu kullandığım zamanlardaki sıralama noktalarından bahsetmedi.

Eğitildim ve zaman ayırıp yorum yapan herkese gerçekten teşekkür etmek istiyorum.


1
Gary Rowe: Bu örneği sevmeme rağmen (ilk gördüğümde). İnsanların bunu çok çabuk görmemesi beni üzüyor, bilmesem de.
Orbling

2
Microsoft'tayken, başvuru sahiplerinden bağlantılı bir listeye bir ekleme yapmalarını rica etmeye başladım. Niye ya? Çünkü yaklaşık% 80'i yapamadı. Şaşırtıcı ...
David Thielen

43
Bu mutlaka sonsuz bir döngü değildir. Burada tanımsız davranışı çağırıyorsunuz (x araya girme sırası noktası olmadan iki kez değiştirilmiş). Ve aslında, benim özel derleyici, gcc benim özel kemer üzerinde (Debian 4.3.2-1.1) 4.3.2 (x86) ile o gelmez sonlandırmak.
Logan Capaldo,

2
Sıra noktalarından bahsetmek için @Logan +1. Kesin olarak ikinci bir röportaj alırsınız ;-)
Gary Rowe

4
Bu gerçekten iyi bir röportaj sorusu çünkü adaya başka bir röportaj için geri dönmeye değip değmeyeceğini söylüyor ;-). Eğer görüşme gerçekten de kodun sonsuz bir döngü ile sonuçlandığını düşünüyorsa (ve görüşmecinin teknik olarak yetkin olması gerekiyordu), aday güvenli bir şekilde "fırsatı" kaçırabilir.
CB Bailey,

8

Sorulacak ilk şey, işaretçiler hakkında basit bir soru. C ++ 'ı bildiğini iddia eden ya da daha da kötüsü C' nin cevap veremediğini görmek beni şaşırttı. Sonra sanal fonksiyonlar hakkında basit bir soru sorardım. Bu kombinasyon, kişinin gerçekten C ++ 'ı bilip bilmediğini çok hızlı bir şekilde söyler.


4
geçmişlerine bağlı olarak, hiçbir zaman işaretçileri anlamayan, ancak bazıları gerçekten kapsülleme veya polimorfizm almayan, donanım geçmişine sahip birisiyle tanışmadım
jk.

7

Bu, şirketinizde ne tür C ++ 'ların olduğuna bağlı. (C ++ programcılarını işe almam gerektiğinde, asla sormadım delete, çünkü onlara deletetamamen yazmak zorunda kalmamaları için teknikler hakkında sorular sordum .)

İdeal olarak, ekibinizin şu anda yazdığı seviyenin üstüne kod yazan kişileri işe almak istiyorsunuz, ancak bunu daha üst bir seviyeye taşıyacak ekiple eğitmekle birleştirmek istemiyorsanız, çok yüksek değil.



6

Onlara başka ne bildiklerini soracağımı ya da onlara daha farklı bir konuda bir soru verebileceklerini düşünüyorum.

Başka dilleri çok az deneyime sahip olan hakkında çok fazla C ++ kodlayıcısı var. Dar deneyim genellikle kısıtlayıcıdır.


6

Büyük bir C için en iyi soru ++ geliştirici "Biz neden bana sebebini söyle olduğunu DEĞİL C ++ kullanabilir?"


4

En iyi C ++ sorusu olduğunu sanmıyorum. C ++ çok büyük bir dildir ve C ++ 0X ile büyür, dilin belirli bir alt alanında güçlü olabilir ve dilin bir başka kısmı hakkında pek bir şey ifade edemezsiniz. Bir 'tek atış' sorusu, bir kimsenin dilin küçük bir kısmı hakkındaki bilgisini kullanacak ve dilin diğer yönleriyle ilgili bilgisine bakma riski taşıyacaktır.



3

En sevdiğim soru ise basit bir soru:

a) C ile başlayıp ardından C ++ 'a geçtiniz mi?

b) Öyleyse, farklı şekilde yapmayı öğrendiğiniz ilk birkaç şey neydi?

Bu cevap genellikle programcının C ++ 'a ve OOP ve C ++' ları genel olarak nasıl kavradığına dair bir fikir verir.

Burada "Doğru" veya "Yanlış" cevabı yoktur, ancak genellikle adayın nereden geldiğini anlamak için harika bir yoldur.


1

Aslında, kişiye, nesne yönelimli olan ve tercihen bildikleri diller listesinde olmayan başka bir programlama diline ait bir parça kod sunacaktım. Kod, bu dilde yapılan basit bir görevi temsil etmelidir.

Bunun amacı C ++ hakkındaki bilgilerini belirlemek değil, programlamayı ne kadar iyi anladıklarını bulmak olacaktır. Programlamanın arkasındaki temel kavramları anladığınızda, problemleri çözebilirsiniz.


1

Sanal İşlevleri C ++ 'ta nasıl uygularsınız, gerçek bir dünya senaryosunu açıklayın.


1

Şu anda şunu söylerdim: "Bir konteyner için bir hamle yapıcısını nasıl uygulayacaksınız?"

Benim mantığım şudur, çünkü hamle yapıcıları bir sonraki standardın bir özelliğidir ve mevcut olanın değil, adayın cevabı söz konusu geliştiricinin dili hakkında aktif olarak bilgi mi takip ettiğini yoksa sadece bildikleri numaralara bağlı kaldığını gösterecektir.


1

Sanırım, onların tasarımı hakkında fikirlerini sorabilirim std::string. Diğer tasarımlar kullanılır (örneğin, MFC / ATL verdiyseniz ben de onlara sorardım CString, wxStringvs.) ve sahip oldukları varsayılarak, karşılaştırmak ve tasarımları kontrast isteyin.

Dizeler, C ++ kullanarak gerçek deneyimi olan hemen hemen herkesin yukarıdakilerden en az birini veya ikisini kullanması gerektiği için yeterince yaygındır. Neredeyse tüm tasarımlar teorik saflık ile pratik kullanım arasında bazı ödünler verir. Bazıları gerçekten iyi çalışabilir, ancak yalnızca tam olarak amaçlandığı gibi kullanılırsa, diğerleri olası bazı sakarlıklar için çok yönlülük satarlar. Kısacası, gerçek bir deneyime sahiptir neredeyse herkes gerektiğini kendi tasarımları bazı anlamlı görüşlerini ifade edebilmek ve bu görüşler nasıl size düşündüklerini nasıl adil bir miktar söylemelidir onlar kod tasarım, derece teorik saflık karşı oldukları değer pragmatizm için, ve bunun gibi.

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.