Pertanyaan dasar meliputi:
Saya pikir biasanya membantu untuk meminta pelamar Anda untuk menyelesaikan latihan pengkodean sederhana seperti:
- Tulis kelas daftar tertaut Anda sendiri tanpa menggunakan kelas bawaan.
- Tulis kelas hashtable Anda sendiri tanpa menggunakan kelas bawaan.
- Tulis kelas yang mewakili pohon biner. Tulis metode yang melintasi semua simpul pohon.
- Tulis metode untuk melakukan pencarian biner pada array tanpa menggunakan metode bawaan.
- Gambarlah skema basis data untuk sebuah blog. Setiap pengguna hanya memiliki satu blog, setiap blog memiliki banyak kategori, setiap kategori memiliki banyak posting, dan setiap posting dapat menjadi milik lebih dari satu kategori. Minta pelamar Anda untuk menulis pertanyaan untuk mengeluarkan informasi tertentu.
Selanjutnya, cari pengetahuan teknis khusus:
- (Penangan acara) Buat kelas dengan penangan acara khusus, buat kelas lain yang terhubung ke penangan acara khusus.
- (XML) Muat dokumen XML dan pilih semua node dengan properti x, y, dan z.
- (Pemrograman fungsional) Buat fungsi yang menerima fungsi lain sebagai parameter. Fungsi Map atau Fold berfungsi sangat baik untuk ini.
- (Refleksi) Tulis fungsi yang menentukan apakah kelas memiliki atribut tertentu.
- (Regex) Tulis ekspresi reguler yang menghapus semua tag dari blok HTML.
Tak satu pun dari ini adalah pertanyaan yang sulit bagi programmer C # mahir untuk menjawab, dan mereka harus memberi Anda ide yang baik tentang kekuatan khusus pelamar Anda. Anda mungkin juga ingin mengerjakan beberapa pertanyaan / contoh kode yang memanfaatkan pola desain tertentu.
[Edit untuk klarifikasi] :
Tampaknya banyak orang tidak mengerti mengapa saya menanyakan pertanyaan-pertanyaan semacam ini. Izinkan saya menyentuh beberapa komentar orang (saya tidak mengutip langsung, tetapi sebagai parafrase):
T: Kapan terakhir kali ada yang menggunakan volatile atau referensi lemah?
A: Ketika saya memberikan wawancara teknis, saya melihat apakah seseorang memahami fitur tingkat tinggi dan rendah dari .NET. Volatile dan referensi lemah adalah dua fitur tingkat rendah yang disediakan oleh .NET - bahkan jika fitur ini tidak sering digunakan dalam praktiknya, jawaban atas pertanyaan ini sangat terbuka:
Pemahaman yang baik tentang volatile menunjukkan bahwa seseorang memahami bagaimana optimisasi kompiler mengubah kebenaran kode, bagaimana utas menjaga salinan lokal dari keadaan bersama yang mungkin tidak sinkron pada waktu tertentu, dan secara minimal menyadari beberapa kompleksitas kode multithreaded .
Pemahaman yang baik tentang referensi yang lemah menunjukkan bahwa seseorang tahu tentang detail intim dari pemulung dan bagaimana memutuskan kapan harus membebaskan memori. Tentu, Anda bisa bertanya kepada kandidat "bagaimana cara kerja pengumpul sampah", tetapi bertanya tentang referensi yang lemah mendapat jawaban yang jauh lebih baik dan lebih bijaksana.
.NET adalah bahasa yang cukup abstrak, tetapi pengembang bintang hampir selalu memiliki pemahaman yang mendalam tentang CLR dan detail tingkat rendah dari runtime .NET.
T: Mengapa orang perlu menerapkan daftar hashtable atau tertaut mereka sendiri?
J: Saya tidak menyiratkan bahwa kelas Kamus lebih rendah atau bahwa orang-orang harus memutar hashtable mereka sendiri. Ini adalah pertanyaan dasar yang menguji apakah seseorang memiliki pemahaman minimal tentang struktur data. Itulah yang diuji untuk pertanyaan-pertanyaan ini: telanjangkan pemahaman minimum.
Anda belajar tentang hashtable dan daftar tertaut ini pada hari pertama Struktur Data 101. Jika seseorang tidak dapat menulis hashtable atau daftar tertaut dari awal, maka mereka memiliki kesenjangan besar dalam pengetahuan teknis mereka.
T: Mengapa pertanyaan-pertanyaan ini sangat berorientasi pada kasar?
A: Karena judul utas ini adalah "pertanyaan yang harus diketahui oleh setiap pengembang .NET yang baik". Setiap pengembang .NET memulai aplikasi crud penulisan karier mereka, dan 90% dari semua pengembangan aplikasi yang dilakukan orang mencari nafkah berkaitan dengan lini aplikasi bisnis.
Saya pikir pertanyaan menguji pengetahuan orang tentang aplikasi lini bisnis sesuai dalam banyak kasus, kecuali jika Anda mencari pengembang di ceruk yang sangat spesifik, seperti pengembangan kompiler, pengembangan mesin-game, pembuktian teorema, pemrosesan gambar, dll. .
(Regex) Write a regular expression which removes all tags from a block of HTML.
- I SMELL TROUBLESaya menemukan daftar ini di blog Scott Hanselman :
Inilah yang menurut saya merupakan pertanyaan paling penting dari pos-pos ini yang terbagi dalam beberapa kategori. Saya mengedit dan mengatur ulang mereka. Untungnya untuk sebagian besar pertanyaan ini sudah ada jawaban yang bagus tentang Stack Overflow. Ikuti saja tautannya (Saya akan memperbarui semuanya secepatnya) .
Platform. NET pertanyaan independen
a.Equals(b)
dana == b
?Assembly.LoadFrom
atauAssembly.LoadFile
sesuai?Finalize()
danDispose()
? ( artikel eksternal )Debug.Write
danTrace.Write
? Kapan masing-masing harus digunakan?catch (Exception e) {throw e;}
dan tangkapan(Exception e) {throw;}
?typeof(foo)
danmyFoo.GetType()
?ASP.NET
q=
kecuali di manaq=5
(seperti dalamhttp://localhost/page.aspx?q=5
)?sumber
Ini mungkin bukan yang ingin Anda dengar, tetapi saya sarankan untuk tidak berfokus pada teknologi yang sempit, tetapi pada pemrograman umum dan keterampilan memecahkan masalah. Pengembang yang solid dapat mempelajari apa pun yang Anda ingin mereka lakukan dengan cepat.
Saya, misalnya, bukan orang Compact Framework, jadi saya mungkin gagal wawancara Anda jika Anda pergi ke arah itu. Tetapi jika saya perlu menggunakannya saya bisa melakukan riset dan langsung masuk.
Buku Joel, Smart and Gets Things Done , memiliki saran yang bagus untuk mempekerjakan para dev dan ada banyak bagian menarik tentang jenis pertanyaan yang akan diajukan. Saya sangat merekomendasikannya.
sumber
Saya pikir jika saya mewawancarai seseorang yang memiliki pengalaman LINQ, aku mungkin hanya meminta mereka untuk menjelaskan LINQ. Jika mereka dapat menjelaskan eksekusi yang ditangguhkan, streaming, antarmuka IEnumerable / IEnumerator, foreach, blok iterator, pohon ekspresi (untuk poin bonus, bagaimanapun) maka mereka mungkin dapat mengatasi sisanya. (Harus diakui mereka bisa menjadi pengembang "ok" dan belum "mendapatkan" LINQ - Saya benar-benar memikirkan kasus di mana mereka mengklaim cukup tahu LINQ untuk menjadikannya pertanyaan yang adil.)
Di masa lalu saya telah mengajukan beberapa pertanyaan yang sudah terdaftar, dan beberapa lainnya:
sumber
Saya dengan orang-orang yang mencari kemampuan pemecahan masalah daripada hal-hal yang dapat Anda cari dan hafal dari '101 teratas. Wawancara NET Qs and As ".
Sebagai contoh saja, saya cenderung 'tahu' hal-hal yang perlu saya gunakan dari hari ke hari. Saya cenderung lupa (dan kemudian harus melihat kembali) hal-hal yang jarang saya gunakan.
Jika Anda ingin membuat saya tersandung dalam sebuah wawancara, itu akan sangat mudah.
Namun demikian, saya telah merancang dan mengkodekan banyak infrastruktur untuk sistem yang menggunakan Objek Bisnis dan lapisan Data yang identik untuk inkarnasi WinForms dan ASP.NET, dan basis kode kami cukup kuat dan dapat digunakan kembali sehingga kami dapat mendukung dan mengembangkan 20+ versi yang berbeda dari situs web, serta semakin banyak (saat ini 5) aplikasi WinForms ...
... dengan tim pengembangan dua.
Saya dulu bekerja di tim sebagai pemimpin teknologi, dan pekerjaan saya melibatkan banyak perekrutan dan wawancara. Kesalahan saya yang paling spektakuler adalah mempekerjakan seorang pria yang tahu lebih banyak tentang teknologi yang kami gunakan daripada kami semua, termasuk saya, dan saya menganggap diri saya sebagai seorang ahli. Dia tahu segalanya ...
... kecuali cara menulis kode yang memenuhi persyaratan, atau dapat dipahami oleh siapa pun kecuali dirinya sendiri. Ketika saya akhirnya meyakinkan PM untuk tidak memperpanjang kontraknya, setiap hal yang ditulisnya harus ditulis ulang.
Struktur wawancara Anda dengan bijak ...
sumber
Siapakah Jon Skeet?
sumber
Pertanyaan bagus yang pernah saya tanyakan adalah
Akan menarik untuk melihat apa yang akan muncul dengan calon dan Anda pasti akan belajar sedikit tentang bagaimana ia menggunakan kerangka kerja.
sumber
Saya akan selalu mencari soft skill sendiri - tidak ada pun yang dimaksudkan. Desain OO yang sangat bagus, pengembangan yang digerakkan oleh tes, latar belakang bahasa multi (pemrograman) yang bagus dan semua kecerdasan umum (dan menyelesaikan semua hal, kurasa!).
Pengembang yang cerdas seharusnya tidak mengalami kesulitan mempelajari teknologi individual yang Anda perlu mereka ketahui bahkan jika mereka belum pernah melihatnya - jadi saya tidak akan terlalu khawatir tentang pertanyaan spesifik seputar WCF / kerangka kerja kompak dan sejenisnya.
Saya ingin mereka menulis beberapa kode - cara terbaik untuk mengetahui apa yang mereka ketahui dan bagaimana cara kerjanya. Siapa pun dapat mengingat jawaban untuk 'Apa perbedaan antara tipe referensi dan tipe nilai?'
sumber
Secara jujur?
"Apa itu. NET?"
Jika mereka dapat memberi Anda jawaban yang jelas mengenai apa. kenal baik sekali.
Faktanya adalah, banyak orang tidak benar-benar tahu apa itu. NET. Bahkan mereka yang menulis program untuk itu.
sumber
Tidak ada, sungguh. Mungkin ada pertanyaan yang sangat sederhana yang orang-orang terpintar di dunia tidak tahu jawabannya. Bukan karena mereka sulit, tetapi hanya karena mereka belum menemukannya. Anda harus melihat seluruh paket dan keterampilan pengembang, bukan apakah mereka dapat menjawab pertanyaan sewenang-wenang.
Jika pertanyaannya cukup mudah dijawab dalam satu atau dua kalimat pendek, cukup mudah untuk memberi tahu seseorang yang tidak tahu. Anda harus mencari pemahaman mereka tentang konsep dan kemampuan penalaran, bukan kemampuan mereka untuk menjawab pertanyaan "setiap pengembang NET. Harus mampu menjawab."
sumber
Ketahui perbedaan antara tipe referensi dan nilai.
Ketahuilah bahwa acara disimpan sebagai referensi keras (mis. Ingat untuk membatalkan pendaftaran acara atau aplikasi akan membocorkan memori).
String tidak berubah.
sumber
Martin Fowler lebih memilih keterampilan desain daripada pengetahuan platform . Di sisi lain, Anda dapat mengajukan pertanyaan yang akan menunjukkan pengetahuan tentang pola desain dan platform .NET seperti ini:
sumber
Saya sarankan bertanya tentang blog yang mereka baca secara teratur dan proyek pemrograman pribadi yang telah mereka kerjakan karena ini akan menunjukkan keinginan untuk belajar dan hasrat untuk pemrograman.
sumber
Berikut adalah beberapa yang saya gunakan untuk memfilter programmer yang melamar pekerjaan sebagai programmer C #:
Apa perbedaan antara tipe referensi dan tipe nilai?
Jelaskan antarmuka IDisposable, yang membangun bahasa C # membutuhkannya dan bagaimana Anda akan mengimplementasikannya.
Pengecualian mana yang akan Anda lemparkan jika null dilewatkan sebagai argumen ke metode yang memiliki kontrak yang tidak mengizinkan null untuk parameter itu?
sumber
"Manakah dari ASP: kontrol apa pun yang akan Anda gunakan dalam produksi dan mengapa?"
Itu akan memberi tahu Anda dengan cepat apakah subjek Anda pernah benar-benar membangun dan mempertahankan proyek besar cukup lama untuk dibakar oleh DataGrids dan LinkButtons, atau apakah dia masih dalam fase Drag / Drop "mengajar diri sendiri dalam 21 hari".
(jawabannya adalah asp: Repeater, asp: PlaceHolder, asp: Literal, dan asp: Content)
sumber
Apa itu utas?
Apa itu GC?
sumber
Ini adalah sedikit pertanyaan variabel, dan bukan yang benar-benar harus Anda jawab sekarang, tetapi yang harus Anda jawab saat yang tepat:
"Apa yang ditawarkan oleh .NET framework untuk menyelesaikan tugas X?"
Atau lebih khusus:
"Apakah kerangka .NET menyertakan objek yang melakukan X?"
Sebagai contoh, saya baru-baru ini menghabiskan beberapa jam mengembangkan objek yang dioptimalkan untuk menyimpan array Boolean dan beroperasi di atasnya, seperti melakukan pengumpulan dengan BUKAN, ATAU, XOR, DAN, tetapkan semua nilai, dll. t sampai setelah saya selesai menulis semua tes unit saya dan mengubahnya untuk kinerja terbaik yang mungkin saya menyadari objek "BoolArray" saya sudah ada dalam kerangka .NET dengan nama "BitArray".
Ini bisa menjadi jawaban yang sulit karena sering kali jawaban terbaik tentang objek / pembantu yang digunakan adalah yang tidak Anda ketahui atau pahami sepenuhnya. Betapa indahnya dunia .NET jika semua orang benar-benar tahu tentang StringBuilder yang sederhana, alat dasar yang dapat meningkatkan kinerja jumlah yang signifikan.
sumber
Saya akan menyarankan beberapa pertanyaan fokus pada pemahaman konsep pemrograman menggunakan dotnet like
Apa perbedaan antara lingkungan yang dikelola dan yang tidak dikelola? Pro dan kontra GC Pro dan kontra JIT Jika kita perlu mengembangkan aplikasi X, bisakah kita menggunakan dotnet? Mengapa? (ini akan mengidentifikasi bagaimana dia melihat dotnet)
Saya juga menyarankan untuk menulis metode kecil dan memintanya untuk menulis ulang dengan kinerja yang lebih baik menggunakan kelas dotnet yang lebih baik atau cara standar. Juga menulis metode yang tidak benar (dalam hal apa pun) logis atau apa pun dan memintanya untuk memperbaikinya.
sumber
Saya penggemar berikut ini selain beberapa pertanyaan yang telah disebutkan:
sumber
Ini menarik, dan dengan risiko mendapatkan suara ini karena menurut pendapat saya, karena saya terlahir tuli, ditanyai pertanyaan seperti itu akan membutuhkan lebih banyak usaha untuk mengomunikasikan pikiran saya di pihak saya secara pribadi.
Terus terang, saya benar-benar tidak akan membaca terlalu banyak pertanyaan yang khas, karena paradigma yang mendasarinya adalah ' Seberapa baik Anda dapat menyuarakan pikiran dan pemahaman Anda? ', itulah yang benar-benar dicari pewawancara. Berkomunikasi selalu merupakan kelemahan terbesar saya karena cara saya dan bisa frustrasi dengan mudah.
Akan ideal untuk memiliki pengetahuan dan menjadi tipe tahu-itu-semua, tetapi sayangnya, ada beberapa hal yang saya tidak tahu, tetapi tidak perlu takut jika Anda benar-benar tidak tahu jawabannya dan mengakuinya daripada gertak sambal. melaluinya. Jika seorang pewawancara bertanya kepada saya pertanyaan seperti di atas, bahwa saya tidak akan yakin atau salah mengerti / salah menafsirkan pertanyaan, saya akan mengatakannya di muka, yang secara pribadi bisa memalukan, tetapi telah belajar untuk mengatasinya.
Anda akan terkejut pada berapa banyak yang benar-benar akan wafel dan menggertaknya di mana pada akhir hari tertangkap dengan 'celana bawah' mereka berbicara secara metaforis.
2 sen saya, Salam, Tom.
sumber
Beberapa lagi:
sumber
Saya tidak akan mengajukan pertanyaan "tahu sesuatu dari buku teks", tetapi lebih baik menanyakan hal-hal seperti:
Ini tidak 100% pasti, tergantung pada orang yang saya tanyakan:
Saya juga akan bertanya kepadanya bagaimana dia mempelajari barang-barangnya dan apa yang dia baca (blog, buku apa).
sumber
Beberapa lagi:
Apa keterbatasan pengumpulan sampah?
Tahu tentang finalizer dan IDisposable.
Waspadai kumpulan utas dan kapan menggunakannya.
Jika Anda melakukan aplikasi GUI - ketahuilah bahwa Windows GUI adalah utas tunggal.
Gunakan foreach (Saya melihat banyak orang melakukan MoveNext dll.)
sumber
Saya pikir itu bukan hanya pertanyaan, saya tahu beberapa orang yang brilian ketika Anda mewawancarai mereka, tetapi begitu mereka mencapai hal yang sebenarnya, mereka terlalu perfeksionis. Saya akan mengatakan bahwa mereka gagal untuk mengkode tugas dengan menyedihkan.
Saya pernah diwawancarai dan saya agak menyukai pendekatan di mana majikan pertama memberi saya kuesioner teknis untuk diisi dalam 30 menit. Jika seseorang berhasil maka dia akan dipanggil untuk wawancara 1 jam yang meliputi Pertanyaan Penilaian Kepribadian dan pencarian karakter ditambah jargon teknis.
Kemudian saya diminta untuk mengembangkan aplikasi web tiga halaman dalam waktu 6 jam. Kendala yang diberlakukan dalam aplikasi secara cerdas mencakup aspek utama pengembangan aplikasi seperti ERD kecil, Desain Layerd, Konsistensi UI, mengontrol masalah khusus seperti menggunakan tombol Radio di GridView dan Mengambil dan menampilkan jenis gambar dari DB pada halaman web, satu pengembangan algoritma, keamanan, Enkripsi, Hashing, Representasi dan manipulasi data.
Kemudian hari berikutnya mereka diikuti oleh diskusi 30 menit tentang aplikasi yang dikembangkan yang meliputi area bottleneck kinerja dan perbaikan pada desain dan algoritma yang digunakan. Dan tes opsional 1 jam untuk meningkatkan algoritme Anda yang dikembangkan pada langkah sebelumnya dengan kondisi tertentu.
Jadi butuh waktu yang cukup lama tetapi dengan cara ini Anda dapat memastikan bahwa orang yang Anda pekerjakan tahu setidaknya konsep-konsep yang penting untuk menjadi pengembang yang baik.
sumber
Saya lebih suka memberinya masalah dan memintanya untuk menyelesaikannya menggunakan fitur .net yang Anda tahu dan mengapa menurut Anda itu solusi terbaik.
Ini akan memecahkan hampir semua kemampuan kandidat dalam hal keterampilan teknis, analitis dan pemecahan masalah bersama dengan pendekatannya untuk memecahkan masalah.
sumber