Apa masalah wawancara papan tulis favorit Anda? [Tutup]


52

Sama seperti judulnya, apa masalah wawancara papan tulis favorit Anda, dan mengapa itu terbukti efektif untuk Anda?

Junior, senior, Java, C, Javascript, PHP, SQL, pseudo-code, dll.


4
Masalah yang saya benci adalah Puzzle Einstein. stanford.edu/~laurik/fsmbook/examples/Einstein'sPuzzle.html Saya tidak bisa melakukannya dalam 30 menit. Tapi kemudian saya kesal, dan menemukan ini: games.flowix.com/en/index.html Jadi saya dilatih untuk melakukan masalah yang lebih sulit 6 x 6 x 6 rata-rata dalam 20 menit. Saya pikir saya dapat menangani 5 x 5 x 5 dalam 30 menit sekarang. Apapun teka-teki bodoh yang akan dilemparkan majikan kepada saya - saya akan mengingatnya dan akan memanggil mereka lain kali. Ada begitu banyak teka-teki bagus.
Pekerjaan

20
@ Pekerjaan: Tidak ada yang akan memberi tahu Anda apa pun tentang kinerja karyawan di pekerjaan. Kecuali, tentu saja, Anda menghabiskan seluruh waktu kerja Anda untuk menyelesaikan jenis teka-teki ini alih-alih menyelesaikan pekerjaan yang sebenarnya.
Robert Harvey

1
@Robert Harvey, maksud Anda, Anda berada dalam bisnis yang menghasilkan uang dengan cara lain selain memecahkan teka-teki? Saya tidak tahu ...;) Teka-teki itu menyenangkan. Sebagai catatan tambahan, perusahaan tempat saya bekerja dulu menggunakan tes IQ aktual sebagai langkah pertama dalam penyaringan mereka. Saya ingin menemukan beberapa pertanyaan papan tulis yang bagus untuk memisahkan kandidat terbaik, bukan hanya menyaringnya.
Nicole

4
@Renesis: Sebagai pengembang, saya bisa melihat bagaimana memecahkan teka-teki mengidentifikasi keterampilan pemecahan masalah dan analisis, tetapi pengembang juga harus tahu bagaimana menerjemahkan solusi itu ke dalam kode. Memecahkan puzzle hanya menunjukkan setengah dari eksekusi itu. Ini perbedaan antara memecahkan kubus Rubix dan menulis algoritma untuk memecahkan kubus Rubix.
Robert Harvey

@ Robert Harvey Saya setuju, saya secara khusus mencari masalah pengkodean, bukan hanya masalah pemikiran.
Nicole

Jawaban:


22

Saya meminta kandidat untuk merancang solusi untuk masalah yang sebenarnya saya temui dalam pekerjaan saya sehari-hari. Dengan melakukan itu, saya mencoba membuat dialog antara saya dan kandidat. Saya mencoba berdiskusi tentang desain yang sedang dibangun seolah-olah saya tidak pernah memikirkan masalah sebelumnya.

Apa yang saya coba evaluasi adalah apakah kita dapat saling memahami, dan apakah kita dapat berbicara tentang masalah teknis tanpa kebingungan.

Contoh nyata

(Untuk pengembang desktop java)

Rancang API untuk menangani riwayat navigasi browser web (halaman sebelumnya, halaman berikutnya, daftar 10 halaman sebelumnya), dan itu dapat digunakan kembali di banyak bagian aplikasi (di sini saya memberikan contoh nyata dalam aplikasi kami). Kemudian, buat sketsa implementasi.

Saya suka yang ini, karena cukup sederhana, mudah diilustrasikan, dapat diselesaikan langkah demi langkah (menambahkan perilaku tambahan tanpa merusak segalanya), memungkinkan untuk berbicara tentang kasus tepi dan penanganan kesalahan, dan juga memungkinkan untuk berbicara tentang data struktur.


40

Saya menemukan ini sangat mencerahkan ketika mewawancarai kandidat dan menyaring mereka yang tidak memiliki bisnis. Ini serupa dalam kompleksitas dengan Fizz Buzz, tetapi berfokus pada keterampilan basis data.

Assuming the following basic  table structure
Documents (DocID, DocDate)
Keywords (KeyWordID, KeyWord)
DocumentKeywords (DocID,KeywordID)

Write a query to return the following:
Part 1: Documents with a DocDate after 4/1/1995  
Part 2: Documents that contain the keyword "Blue"  
Part 3: Documents that contain the either the keyword "Blue" or "Yellow"
Part 4: Documents that contain the both the keywords "Blue" and "Yellow"

Saya membiarkan mereka menuliskannya dalam varian SQL apa pun yang mereka inginkan, dan saya tidak terlalu pilih-pilih masalah sintaksis kecil. Saya terutama ingin tahu bahwa mereka memahami konsep DB relasional dasar.

Sebagian besar kandidat dapat melewati bagian 3 tanpa masalah sama sekali. Anda akan kagum betapa banyak yang berpikir bahwa jawaban untuk bagian 4 hanya untuk mengubah operator dari ATAU ke DAN dalam klausa mana.


2
Ah, saya melihat masalah w / # 4. Dokumen Anda hanya memiliki satu kata kunci per baris, sehingga Anda tidak dapat memiliki sel yang sama-sama mengenal ketukan
glasnt

8
Aduh! Saya bisa melihat diri saya jatuh cinta (4) dalam sebuah wawancara. @Job: Sebagai pewawancara , saya akan meminta kandidat untuk menjelaskan pertanyaan, berharap dia tersandung masalah untuk melihat bagaimana dia berurusan dengan itu. (yang biasanya memberi tahu Anda lebih dari seorang kandidat yang menjawab pertanyaan Anda pada percobaan pertama.)
peterchen

3
@ Retesis, saya tidak begitu yakin ini benar-benar menggali dalam-dalam. Ini sepertinya cukup baik untuk mengetahui apakah seseorang memiliki keterampilan dasar query SQL. Saya benar-benar terkejut melihat betapa sedikit pengembang yang memiliki keterampilan dasar ini hari ini.
Mark Freedman

2
@ jk01, mungkin saya memiliki sikap kuno tentang hal ini, tetapi IMO yang berpengetahuan luas harus memiliki pengetahuan DB, jika tidak mengakses melalui kode, tetapi untuk setidaknya memahami domain dengan bereksperimen dengan pertanyaan. Tanpa ini, pengembang memiliki titik buta yang cukup signifikan. Ini juga sangat berguna untuk dukungan dan pemecahan masalah sistem. Abstraksi baik-baik saja untuk membantu menyederhanakan pengembangan dan meningkatkan produktivitas, tetapi saya telah melihat terlalu banyak asumsi yang dibuat karena ini sering kali disarikan. Saya bisa melanjutkan, tetapi ini bisa menjadi debat lain yang saya yakin sedang terjadi di tempat lain;)
Mark Freedman

4
@ back2dos - Dengar, jangan tersinggung hanya karena Anda tidak bisa menjawabnya. Mungkin ada banyak teknologi lain yang membuat ini lebih sederhana, tetapi kami menggunakan banyak basis data SQL dan saya merekrut orang yang tahu cara menggunakan teknologi yang kami gunakan, bukan membuat alasan mengapa mereka tidak perlu menjawab pertanyaan wawancara saya .
JohnFx

20

"Gambar untuk saya di papan tulis desain proyek terakhir yang Anda kerjakan, tanpa mengungkapkan detail sensitif apa pun kepada saya."


Bagaimana Anda mendefinisikan desain? Apakah Anda mencari diagram kelas? Diagram UML lain? Sketsa dasar dari tingkatan?
justkt

1
Saya menyebutnya baloongrams. ;) Cukup gambarkan cicle, letakkan nama dan hubungkan dengan panah bernama. Saya tidak peduli tentang lamarannya tetapi tentang fakta ia memahaminya.
Uberto

5
+1. Bagi orang-orang, yang memiliki pekerjaan sebelumnya, ini jelas merupakan salah satu hal terbaik yang dapat Anda lakukan. Jika mereka dapat menjelaskan bagaimana proyek itu disusun, itu sudah sangat berharga. Jika mereka memiliki ide mengapa itu disusun dengan cara tertentu, atau bagaimana beberapa hal dapat dilakukan lebih baik, daripada ini benar-benar merupakan nilai tambah yang besar.
back2dos

3
@ justkt: Yang penting adalah, bahwa orang yang diwawancarai mendapat informasi. Itu penting sedikit bagaimana. Saya telah bertemu orang-orang, yang benar-benar mengenal UML, yang tidak dapat menjelaskan apa pun tentang hal itu, dan orang-orang, yang dapat menjelaskan sistem yang rumit dengan beberapa garis berlekuk-lekuk.
back2dos

2
Bagaimana mungkin ada orang yang menggambar desain proyek tanpa mengungkapkan detail sensitif?
Nemanja Trifunovic

14

Melaksanakan strcpy, strcmpdan teman-teman.


4
Saya meminta kandidat untuk menerapkan atoi().
chrisaycock

2
Anda akan kagum pada berapa banyak orang yang tidak bisa menerapkan strdup().
Tim Post

10
Itu hanya adil jika lowongan pekerjaan adalah untuk seorang programmer C.

Dalam wawancara untuk pekerjaan saya saat ini, pewawancara meminta saya untuk mengimplementasikan strrev()atau fungsi pembalikan string. Solusi papan tulis saya mengesankan mereka dan saya melakukan pekerjaan sekarang.
Gulshan

@crisaycock atoi () mudah. itoa () licik
Michael Brown

14

Favorit saya yang mencakup beberapa disiplin ilmu adalah untuk menghitung jumlah node dalam pohon biner yang diberikan antarmuka (dalam C #):

public interface IBinaryTree<T>
{
    IBinaryTree<T> Left
    {
        get;
    }

    IBinaryTree<T> Right
    {
        get;
    }

    T Data
    {
        get;
    }

    // Other properties and methods not germane to this problem.
}

dan hanya untuk bersenang-senang, inilah implementasinya, meskipun orang yang diwawancara tidak perlu melihat ini.

public sealed class BinaryTree<T> : IBinaryTree<T>
{
    private readonly IBinaryTree<T> left;

    private readonly IBinaryTree<T> right;

    private readonly T data;

    public BinaryTree(
        IBinaryTree<T> left,
        IBinaryTree<T> right,
        T data)
    {
        this.left = left;
        this.right = right;
        this.data = data;
    }

    public IBinaryTree<T> Left
    {
        get
        {
            return this.left;
        }
    }

    public IBinaryTree<T> Right
    {
        get
        {
            return this.right;
        }
    }

    public T Data
    {
        get
        {
            return this.data;
        }
    }

    // Other properties and methods not germane to this problem.
}

dan asisten kelas:

public static class BinaryTreeNodeCounter
{
    public static int CountNodes<T>(this IBinaryTree<T> tree)
    {
        // TODO: What goes here?
    }
}

Solusi yang saya suka lihat adalah ini:

public static class BinaryTreeNodeCounter
{
    public static int CountNodes<T>(this IBinaryTree<T> tree)
    {
        return tree == null
            ? 0
            : 1 + tree.Left.CountNodes() + tree.Right.CountNodes();
    }
}

Karena menunjukkan pengetahuan tentang:

  • bagaimana sebuah pohon (pohon biner khususnya) bekerja
  • definisi rekursif dari pohon biner
  • metode rekursif dan bagaimana kasus dasar menghentikan rekursi
  • apa artinya menghitung satu simpul
  • antarmuka sebagai kontrak
  • (kurang penting) pengetahuan tentang sintaksis C #:
    • obat generik
    • metode penyuluhan
    • operator ternary

Mungkinkah itu metode ekstensi?
Gulshan

Di zaman sekarang ini, ya. Kami mengkode dalam VS 2005 pada saat itu, karenanya sintaksisnya jarang.
Jesse C. Slicer

Mengapa menggunakan metode ekstensi ketika Anda memiliki kode sumber untuk kelas asli? Bukan untuk apa metode penyuluhan.
Batibix

'Kira-kira saya bisa naik satu tingkat lebih dalam dan menunjukkan kepada kandidat antarmuka yang diimplementasikan oleh kelas ini. Intinya adalah bahwa kelas asli tidak perlu dimodifikasi - beberapa pengembang entry-level akan senang menambahkan hal-hal ke kelas untuk membuat permintaan "lebih mudah".
Jesse C. Slicer

omong kosong suci yang sangat mirip java!
Tes

12

Dua pertanyaan yang telah menimbulkan diskusi papan tulis yang menarik bagi saya adalah

  1. "Tolong bisakah Anda menjelaskan sedetail yang Anda suka bagaimana browser web mendapatkan halaman yang dihasilkan"
  2. "Tolong jelaskan cara kerja Java Hibernate"

Mereka memulai dari yang sederhana dan kemudian menjadi semakin kompleks.


31
ehi, saya bahkan tidak memenuhi syarat untuk menilai jawaban ... Saya pikir untuk yang kedua Anda perlu 12 lilin hitam dan seekor kambing ...
Uberto

4
Yang kedua adalah mudah, OS Anda menyimpan cache prosesor dan tumpukan dan isi RAM Anda ke hard drive, dan kemudian mengembalikannya ketika komputer dihidupkan kembali.
Malfist

Namun, pertanyaan pertama bisa memakan waktu berhari-hari untuk dijelaskan.
Malfist

@Malfist yang saya maksud adalah kerangka kerja Java Hibernate persisten.
Gary Rowe

2
@ Paul Stephenson Ya, tapi hanya untuk memastikan ...
Gary Rowe

8

Saya tidak suka menggunakan puzzle atau pertanyaan desain sebagai pertanyaan papan tulis. Saya lebih suka pertanyaan langsung, sederhana, yang menguji kemampuan kandidat untuk menulis beberapa kode. Favorit saya adalah:

1) Tulis fungsi untuk membalikkan daftar yang ditautkan sendiri. (Butuh beberapa saat sebelum mereka menyadari bahwa mereka membutuhkan 3 petunjuk.)

2) Diberikan pohon biner, temukan kedalaman pohon biner. (Pertanyaan ini menguji kemampuan mereka untuk menulis kode rekursif. Izinkan saya memeriksa apakah mereka memiliki kasing yang utuh.)

3) Tulis prosedur untuk mencari biner array bilangan bulat. (Seperti yang dikatakan Jon Bentley (dalam Pemrograman Mutiara), banyak orang cenderung membuat kesalahan dengan menulis pencarian biner. Orang kemudian dapat menindaklanjuti dengan menemukan bug, menulis kasus uji, menjalankan kode, dll.)


+1, saya suka pendekatan Anda tidak masuk akal untuk meminta seseorang Dynamic programmins atau konsep semacam itu ketika mereka hampir tidak digunakan dalam pemrograman bisnis + Penekanan harus pada kualitas kode juga dan bukan pada solusi saja.
Geek

Saya tidak keberatan dengan pertanyaan desain, tetapi saya pernah mewawancarai seorang pria yang hobinya membuat teka-teki, dan dia punya beberapa pertanyaan mengerikan. Itu seperti saya menanyakan pertanyaan seni bela diri kepada seseorang.
Bob Murphy

Mungkin harus memastikan orang tahu maksud Anda "array yang disortir" dalam (3) kan?
HaveAGuess

7

Kami menggunakan ini di satu perusahaan tempat saya bekerja.

Kami menyerahkan kandidat selembar kertas yang digunakan untuk melacak waktu. Itu adalah kartu absen nyata yang digunakan oleh salah satu atau divisi kami. Kami meminta kandidat untuk memandu kami melalui proses desain untuk membuat alat pelacakan waktu yang lebih baik. Tidak ada batasan, tidak mengatakan bahasa apa dll, hanya ingin melihat seberapa baik kandidat berada di "siklus hidup penuh". Itu memberi kami wawasan nyata tentang bagaimana mereka memenuhi persyaratan. Bagaimana mereka menyusun tabel database, seperti apa UI yang mungkin mereka lakukan. Keterampilan komunikasi jelas dibutuhkan untuk tugas ini. Itu biasanya dilakukan di sebuah ruangan dengan beberapa papan tulis besar dan berlangsung selama 2 jam.

Kami merekrut beberapa orang menggunakan proses ini dan jika mereka melakukan tugasnya dengan sangat baik, mereka melakukannya dengan sangat baik untuk kami. Jika mereka marjinal dan kami memutuskan untuk tetap mempekerjakan mereka (topik terpisah) mereka adalah programmer marginal.


6

Saya menggunakan masalah yang relevan dengan domain pemrograman saya.

Jika saya mengembangkan aplikasi web, saya ingin melihat bagaimana mereka membuat formulir web yang menghapus catatan, dan pendekatan apa yang mungkin mereka ambil untuk menghapus catatan dari database, misalnya. Ini memberitahu saya jika mereka tahu prinsip-prinsip basis data dasar, bagaimana mereka berinteraksi dengan pengguna untuk memverifikasi penghapusan, dan jika mereka tahu apa itu soft delete.

Saya tidak punya favorit. Masalah yang saya pilih akan sangat bervariasi tergantung pada pekerjaan.

Saya tidak peduli apakah mereka dapat menyelesaikan masalah sepenuhnya atau tidak dalam sebuah wawancara, teknologi dan bahasa apa yang mereka gunakan, atau seberapa jelek kode mereka di papan tulis. Saya mencari pola pikir; Saya ingin melihat apakah mereka tahu bagaimana memikirkan dan memecahkan masalah.


2
+1 Untuk paragraf terakhir, yang semuanya penting. Biasanya itu bukan jawaban yang penting dalam hal-hal seperti itu, tetapi jalan yang diambil untuk sampai ke sana. Seperti yang pernah dikatakan semua guru matematika saya, "tunjukkan pekerjaanmu!"
Orbling

4

Favorit saya adalah yang digunakan teman saya.

Tuliskan saya fungsi untuk menghasilkan / mencetak / menyimpan bilangan prima "n" pertama dan kemudian menjelaskan cara kerjanya dan seberapa efisiennya.

Ini bekerja dengan baik karena:

  1. Ini adalah pertanyaan algoritmik sehingga diperlukan orang yang diwawancarai untuk dapat berpikir dan kemudian menjelaskan pemikiran mereka - sehingga Anda dapat melihat bagaimana otak mereka bekerja.

  2. Bahasa independen.

  3. Hampir tidak ada orang yang sepenuhnya benar (biasanya ada kasus tepi yang mereka lewatkan (1 atau 2 normal), atau mereka tidak menangani angka negatif, sehingga Anda bisa melihat bagaimana mereka menangani bug dan diberi tahu bahwa mereka salah.

  4. Sebagian besar melakukannya sebagai saringan sederhana tetapi sangat lambat (mis. 80% orang akan memeriksa n adalah bilangan prima dengan membagi n oleh semua bilangan bulat kurang dari n), yang memberi Anda banyak ruang untuk percakapan tentang bagaimana mereka dapat meningkatkan algoritme berdasarkan pada pengorbanan ruang / waktu mis. "mengapa Anda membagi angka dengan 4 jika Anda sudah tahu itu tidak dapat dibagi 2?" atau "Anda telah berhasil bahwa Anda hanya perlu membagi dengan semua bilangan prima kurang dari sqrt (n), tetapi itu mengharuskan Anda untuk menyimpan angka-angka itu di suatu tempat, jadi apa implikasinya?")

Tidak perlu bagi mereka untuk mendapatkan jawaban yang benar. Jika seseorang dapat berpikir dan menjelaskan pemikiran mereka maka mereka jauh di jalan untuk menjadi kandidat yang baik.


Saya pernah mendapat pertanyaan wawancara, di mana saya diberi blok kode C yang sangat membingungkan, dan diminta untuk mencari tahu apa yang dilakukannya. Dalam putaran yang sangat dekat tentang cara mencetak nomor prima lainnya. 300 orang melamar dan mereka menawari saya pekerjaan itu karena ternyata saya adalah satu-satunya kandidat yang memberi tahu mereka apa tujuan pekerjaan itu, dan bukannya mengeluarkan nilai-nilai itu. Jadi ya, +1, bilangan prima adalah cek yang bagus. Terutama jika mereka datang dengan saringan, meskipun itu menukar kompleksitas komputasi untuk kompleksitas ruang.
Orbling

1
1 bukan prime ..

2
@ Thorbjørn - well jelas, tetapi persentase yang baik dari rutinitas yang saya lihat ditulis untuk menyelesaikan masalah ini telah mengatakan kepada saya bahwa itu adalah
Rhys Gibson

maka mereka memiliki bug :)

3

Sesuatu yang disebut aff_z, yang merupakan bagian dari ujian C sekolah teknik saya dan digunakan sebagai tes "dummy" untuk membuat siswa gagal ketika kembali dari liburan (sistem penilaian kami menyiratkan bahwa gagal tes menghentikan tanda, sehingga gagal bahwa tes boneka akan batalkan seluruh tes Anda. Memaksa Anda memperhatikan detail-detail tolol). Saya menggunakannya kembali sekali atau dua kali selama wawancara.

Ngomong-ngomong ... Aku lupa formulasi yang tepat tapi itu seperti ini ...

Write a function taking a single char parameter named c and returning nothing (void).
You function must satisfy the following requirements:

 - if c is bigger or equal to 0, then print 'z' to standard output
 - if c is stricly smaller than 0 , then print 'z' to standard output
 - in any other case, print the letter 'z' to standard output

Yang menyedihkan adalah bahwa tidak hanya beberapa siswa akan menghasilkan solusi yang sangat rumit ketika jawabannya cukup jelas, tetapi beberapa bahkan akan berhasil gagal.

Dan percaya atau tidak, itu memang terjadi selama wawancara juga.

Menjalankannya dalam wawancara cukup menyenangkan, karena beberapa pelamar akan mulai menulis cabang yang mungkin dan kemudian menyadari apa yang salah (jelas, jika Anda hanya bertanya kepada mereka secara lisan, itu cukup dimengerti bahwa mereka melakukannya saat Anda berbicara ... tetapi jika Anda berikan secara tertulis, saya merasa membingungkan ...)

Itu bodoh, tapi saya kira ini adalah penyaringan yang minimalis (sama halnya, ketika mempekerjakan programmer JS, saya selalu bertanya bagaimana mendeklarasikan variabel, dan kemudian tergantung pada jawaban mereka apakah menggunakan var membuat perbedaan atau tidak sama sekali. Cukup sering saat yang menyedihkan, secara jujur.)


1
Apakah Anda pernah memiliki kandidat dalam wawancara merasa dihina oleh ini? Atau berpikir Anda hanya bersenang-senang dengan biaya mereka alih-alih melakukan wawancara serius?
Nicole

@Renesis: Aku punya beberapa menatapku dengan seringai. Beberapa di antaranya gagal tes. Secara umum para kandidat yang baik tertawa jika libur. Untuk programmer JS misalnya, saya punya cukup banyak kandidat yang gagal menjawab wawancara dengan "duh, variablename = variablevalue;" sedangkan yang baik hanya akan tertawa di telepon atau secara langsung dan langsung memberi tahu saya apa perbedaannya dengan atau tanpa var).
haylem

1
@ Retesis: Plus, saya benar-benar tidak peduli jika ada yang tersinggung. Itu tidak diskriminatif dengan cara apa pun. Jika mereka tersinggung, maka saya akan menganggap mereka adalah tipe orang yang tidak suka diuji atau diinterogasi. Saya tidak pernah benar-benar memiliki pelamar merasa senang dengan biaya mereka. Saya biasanya bahkan meminta maaf sebelum mengajukan pertanyaan yang sangat sederhana karena mungkin terasa seperti buang-buang waktu untuk yang baik. Tapi masalahnya, itu bukan buang-buang waktu untukku. Tidak meminta mereka akan melakukan hal baru, dalam jangka panjang.
haylem

@Renesis: Dan lebih sering itu tidak, apa yang saya dapatkan setelah seringai / tawa / tersinggung adalah ekspresi malu dan permintaan maaf dari orang yang gagal atau mulai menulis percabangan untuk seluruh tes ketika mereka menyadari itu tidak berguna. Ya, saya bersenang-senang memberikan tes ini, tetapi saya tidak akan memberikannya jika bukan karena alasan yang baik.
haylem

Secara pribadi, saya akan memiliki facepalm mental ketika membaca itu dan akan bertanya-tanya apakah orang lain menulis pertanyaan untuk pewawancara untuk mengolok-oloknya.
wildpeaks

3

Ini benar-benar tergantung apa yang Anda cari, sebagai organisasi yang melakukan banyak pekerjaan web dinamis yang melibatkan gambar, saya cenderung ingin mengajukan pertanyaan geometri yang berkaitan dengan pekerjaan itu. Dalam kasus apa pun, saya cenderung mengajukan pertanyaan geometri, karena menurut saya tes matematika bagus yang bagus dan visual dan dapat menunjukkan kemampuan kandidat untuk mempresentasikan pekerjaan mereka secara visual dan secara sistematis menyelesaikan masalah.

Untuk kandidat tingkat lanjut, saya sesekali memberikan pertanyaan berikut:

Gambar ini menunjukkan bulan sabit. Lebar bulan sabit dari B ke D adalah 9cm dan antara E dan F, 5cm. C adalah pusat dari lingkaran yang lebih besar.

a) Silakan menghitung luas bulan sabit. Pertanyaan Bulan Sabit Matematika

b) Jelaskan perhitungan yang diperlukan untuk mengubah ukuran gambar agar cocok dengan lingkaran dalam dari ukuran tertentu, dan posisikan dalam lingkaran jika titik tengah diketahui.

Untuk pertanyaan yang lebih mudah, saya biasanya memberikan pertanyaan yang sama, tetapi gunakan contoh "kotak di dalam lingkaran di dalam kotak". Meskipun ini sangat mudah, jadi saya harapkan aljabar yang sempurna di atasnya.

Kotak di dalam lingkaran di dalam kotak

Lebih dan di atas itu, saya cenderung meminta mereka untuk mengetuk suatu algoritma untuk menghasilkan semua kombinasi dari set data panjang variabel.


1
Jawaban untuk a) adalah 128,75? (tidak tahu apakah saya melakukan kesalahan). Saya suka, tapi ini lebih tentang geometri.
Hoàng Long

2
Juga, maaf atas keterlambatan berkomentar. Saya tidak suka downvote sebagai aturan dan dua kali lipat tanpa berkomentar mengapa. Downvote saya bukan tentang pertanyaan itu sendiri, itu pasti memiliki tujuan untuk Anda, saya hanya tidak berpikir itu memiliki konteks yang tepat dalam wawancara pemrograman.
Philip Regan

7
-1 karena geometri adalah kandidat yang baik untuk Just In Time Learning, dan tidak mencerminkan kemampuan saya untuk membuat perangkat lunak yang berkualitas.
Malfist

2
Saya menikmati masalah ini. Saya harap Anda tidak keberatan saya membagikan solusi saya ke bagian (a). Diameternya berbeda 9 cm, jadi jika lingkaran dalam memiliki jari-jari r, maka lingkaran luar memiliki jari-jari r + 4.5. Area bulan sabit adalah perbedaan dalam area lingkaran: pi (r + 4.5) ^ 2 - pi * r ^ 2. Yang tersisa hanyalah menemukan r. Tetapkan C sebagai titik (0,0), kemudian titik E adalah pada (0, r - 0,5) (karena CE lebih kecil 5 cm dari jari-jari yang lebih besar). Lingkaran bagian dalam bergeser ke kanan 4.5cm, sehingga persamaannya adalah (x - 4.5) ^ 2 + y ^ 2 = r ^ 2. Hubungkan (x, y) = (0, r - 0,5) dan selesaikan untuk r.
Tim Goodman

2
+1 karena saya pikir ini pertanyaan yang bagus untuk pekerjaan yang membutuhkan geometri. Ada banyak alasan yang terlibat, tidak hanya memasukkan formula. Yang mengatakan, saya tahu beberapa programmer yang baik yang akan tersandung hanya karena mereka tidak begitu banyak seperti harus berpikir tentang lingkaran dalam 10 tahun - tapi pertanyaannya tidak meminta pertanyaan yang cocok untuk setiap wawancara pengembang. Pertanyaan SQL terpilih saat ini (yang saya juga suka) setidaknya sebagai spesifik pekerjaan.
Tim Goodman

3

Jawaban FizzBuzz terbaik yang pernah saya lihat adalah:

SQL Server 2008

;WITH mil AS (
 SELECT TOP 100 ROW_NUMBER() OVER ( ORDER BY c.column_id ) [n]
 FROM master.sys.all_columns as c
 CROSS JOIN master.sys.all_columns as c2
)                
 SELECT CASE WHEN n  % 3 = 0 THEN
             CASE WHEN n  % 5 = 0 THEN 'FizzBuzz' ELSE 'Fizz' END
        WHEN n % 5 = 0 THEN 'Buzz'
        ELSE CAST(n AS char(6))
     END + CHAR(13)
 FROM mil

C # (sederhana)

foreach (int number in Enumerable.Range(1, 100))
{
    bool isDivisibleBy3 = (number % 3) == 0;
    bool isDivisibleBy5 = (number % 5) == 0;

    if (isDivisibleBy3)
         Console.Write("Fizz");

    if (isDivisibleBy5)
         Console.Write("Buzz");

    if (!isDivisibleBy3 && !isDivisibleBy5)
         Console.Write(number);

    Console.WriteLine();
}

C # (pintar)

 Enumerable
  .Range(1, 100)
  .Select(i =>
    i % 15 == 0 ? "FizzBuzz" :
    i % 5 == 0 ? "Buzz" :
    i % 3 == 0 ? "Fizz" :
    i.ToString())
  .ToList()
  .ForEach(s => Console.WriteLine(s));

1
Anda mungkin ingin menambahkan dialek SQL khusus ini.

Terlihat bagus dengan gaya fungsional.
Orbling

2

Saya mencari beberapa hal dalam kandidat yang telah saya wawancarai. Karena alasan yang tidak bisa saya jelaskan secara online, kami mendapatkan kandidat yang sangat buruk, dan saya datang untuk mengharapkannya, jadi saya cukup mudah menggunakannya. Meski begitu, saya mencari:

  • Kesadaran desain.

    "Tunjukkan pada saya struktur tabel untuk program buku alamat yang memiliki Kontak dengan nama depan dan belakang yang dapat memiliki beberapa Nomor Telepon dengan deskripsi nomor (sel / rumah / kantor / dll.)"

    Saya tidak mencari diagram spec UML 2.0 di sini, diagram bubble sederhana di sini baik-baik saja. Selama itu masuk akal.

  • Pengetahuan bekerja dengan database (mis. SQL)

    1. Tulis kueri untuk mendapatkan semua nomor telepon untuk orang dengan nama belakang "smith"
    2. Tulis kueri untuk mendapatkan semua pelanggan dalam database, dan nomor telepon untuk yang memiliki nama belakang "smith"
  • Pengetahuan tentang pengujian

    Asumsikan ada metode dengan tanda tangan public IEnumerable<PhoneNumber> GetPhoneNumbers(string lastName)yang mengembalikan hasil permintaan Anda dari sebelumnya. Asumsikan bahwa jika Anda memasukkan nol ke dalam metode, ia melempar NullReferenceException. Tulis tes untuk menunjukkan fungsi ini.

    Tulis tes yang menunjukkan bahwa GetPhoneNumbers akan mengembalikan nomor telepon rumah (123) 456-7890 untuk seseorang dengan nama belakang "smith".

  • Pengetahuan tentang cara menulis beberapa kode

    Terapkan metode yang akan memenuhi persyaratan tes yang Anda tulis.


Mengingat jumlah dan kualitas pelamar yang kami dapatkan, saya telah mewawancarai semua orang yang pernah mendaftar dengan serius. Saya tidak mempekerjakan siapa pun.


Dalam SQL # 2, apakah Anda berbicara tentang melakukan ini semua dalam satu permintaan? Apakah tujuannya hanya untuk mengukur pemahaman gabungan kiri / kanan atau batin?
Nicole

@Renesis: Ya itu.
Steven Evers

2

Saya biasanya membiarkan mereka membuat sketsa diagram blok dari sistem terakhir yang mereka kerjakan, menanyakan tentang hubungan antara blok dan kemudian membiarkan mereka menguraikan blok yang mereka kerjakan / yang bertanggung jawab. Anda dapat belajar banyak dari latihan ini, seperti bagaimana seseorang melihat di luar wilayahnya yang kecil, seberapa penting baginya untuk mengetahui 'di mana' dia bertindak, juga Anda dapat belajar tentang peran yang dia mainkan, apakah itu kunci atau sisi wewenang.


2

Tulis algoritma untuk masalah berikut: Diberi angka n , output jumlah total pohon biner (unik) yang memiliki n node.

Jadi, untuk n = 0 dan n = 1, jawabannya adalah 1. Untuk n = 2, Anda memiliki 2: simpul akar, dan kemudian simpul kedua baik ke kiri atau ke kanan.

Anda dapat memperoleh wawasan tentang teknik desain dan untuk melihat apakah mereka memikirkan rekursi atau memoisasi atau solusi pemrograman dinamis.

[Lihat juga diskusi StackOverflow ini untuk kasus pohon pencarian biner terkait, tetapi berbeda.]


Jadi Programmer UI yang tidak tahu pemrograman dinamis adalah programmer yang buruk? Untuk itu, setiap programmer bisnis yang tidak dapat mengingat pemrograman dinamis itu buruk? Banyak remaja di topcoder akan mengalami masalah pemrograman yang dinamis tetapi lihat kode yang mereka tulis.
Geek

@ Geek: Ingatlah bahwa masalah "papan tulis" adalah cara untuk melihat proses berpikir seseorang. Masalah pemrograman dinamis harus termasuk dalam diskusi ini, karena mereka sangat populer dengan Google, antara lain.
Macneil

Saya tidak setuju tetapi saya punya dua pertanyaan. 1. Memecahkan yang tidak diketahui? Masalah DP menjadi jalan-jalan di taman jika Anda telah memecahkan beberapa masalah di masa lalu atau Anda masih ingat konsep keluar dari perguruan tinggi. Seseorang yang telah melupakannya pasti tidak akan berhasil di papan tulis. 2. Jika seseorang berjuang untuk menyelesaikan masalah, tidak mungkin Anda dapat mengukur kualitas kodenya. Bagaimana dengan memberikan masalah pada sesuatu seperti LinkList atau Strings atau Array sehingga orang tersebut dapat memecahkan masalah dan menulis kode.
Geek

Saya juga tidak akan mengharapkan orang yang diwawancarai untuk melakukannya dengan benar, namun beberapa perusahaan akan melakukannya.
Macneil

@ Geek: "seorang ... programmer yang tidak tahu pemrograman dinamis adalah programmer yang buruk?" - ya . Yang mengatakan, saya setuju bahwa berpikir dalam pemrograman dinamis tidak sepele ketika Anda tidak terbiasa. Tetapi mengetahui itu adalah keharusan mutlak.
Konrad Rudolph

2

Jika saya akan mewawancarai pengembang perangkat lunak, saya akan memintanya untuk merancang perangkat lunak dan menjelaskan persyaratan perangkat keras untuk menghapus entri duplikat dari file besar yang sewenang-wenang berisi nama lengkap di setiap baris. Saya meninggalkan beberapa bagian dari deskripsi masalah dengan sengaja. Kemudian saya menantangnya untuk melihat apakah dia memahami menganalisis dan mengklarifikasi persyaratan, pertukaran yang berbeda, struktur data dan algoritma, I / O (penyimpanan sekunder), teknologi perangkat lunak dan perangkat keras, skalabilitas, dll.

Saya pikir itu adalah masalah kecil namun menantang, mengungkapkan pengetahuan dan kemampuan pelamar di banyak bidang komputasi.


2

Implement function/method(on c/c++/c# whatever), which calculates n-th item of Fibonacci sequence

Banyak pria bisa terjebak dalam hal ini. Jika beberapa solusi diberikan - biasanya menggunakan rekursi. Setelah itu:

Implement the same via 'for'-loop

Tidak bisa memberi tahu Anda, berapa banyak orang yang gagal menyelesaikan kedua tugas - 50% dari kandidat.
Itu sebabnya saya suka :)


Bagaimana jika implementasi pertama dilakukan melalui for for?
Darknight

2
Versi rekursif diusulkan untuk diterapkan. Biasanya setelah for-loop guys berhasil mengimplementasikan versi rekursif.
alexb

Atau Anda bisa menerapkan ini sebagai satu pernyataan: fib(n)=round(power(PHI,n)/SQRT5). PHI dan SQRT5 adalah konstanta yang mewakili rasio emas (1,618 ...) dan akar kuadrat masing-masing.
oosterwal

2

Untuk database saya pergi dengan:

Tabel: Benda

Nama ID
1 Bodkin Van Horn
2 Hoos-Foos
3 Hoos-Foos
4 Hot-Shot
5 Marvin O'Gravel Balloon Face
6 Snimm
7 Marvin O'Gravel Balloon Face
8 Marvin O'Gravel Balloon Face
9 Dave

Tuliskan saya beberapa SQL yang akan menduplikat tabel seperti ini berdasarkan namanya (dan saya tidak peduli ID mana yang saya dapatkan kembali tetapi yang mana yang dikembalikan harus valid untuk nama itu). Jadi tabel setelah SQL yang benar telah diterapkan akan menampilkan sesuatu seperti:

Tabel: Benda

Nama ID
1 Bodkin Van Horn
2 Hoos-Foos
4 Hot-Shot
5 Marvin O'Gravel Balloon Face
6 Snimm
9 Dave

Saya suka itu karena:

  • De-duplikasi adalah masalah dunia nyata
  • Ada banyak cara untuk melakukannya
  • Saya berpikir bahwa hampir semua cara-cara tersebut membutuhkan Anda untuk memahami (sedikit) SQL yang lebih kompleks (pada dasarnya GROUP BY dan HAVING) atau kemampuan untuk bernalar melalui merantai beberapa pernyataan yang lebih sederhana.
  • Karena bit terakhir ini bahkan jika mereka sedang berjuang dengan sintaks atau apa pun, Anda dapat bertanya kepada mereka apa yang mereka pikirkan dan berbicara seperti itu.
  • Ini referensi Dr. Seuss

(Di sinilah saya menemukan bahwa ada beberapa cara sepele untuk melakukan ini dan saya sudah terlalu rumit selama bertahun-tahun).


1
Saya kira saya tidak tahu apa yang dianggap sebagai "sepenuhnya sepele" ... Sesuatu seperti itu SELECT min(ID), Name FROM Things GROUP BY Nameakan berhasil, bukan?
Tim Goodman

@ Tim - Itu memberi Anda hitungan untuk semuanya. Saya hanya ingin yang memiliki duplikat. Hasil edit yang diedit secara manual tidak masuk hitungan, asumsikan skala menjadi jutaan baris. Ini adalah masalah yang mudah, tetapi menurut pengalaman saya, 80% orang yang mengaku tahu SQL tidak bisa mencapai tingkat pertama.
Jon Hopkins

@ Jon: Tidak yakin apa yang Anda maksud dengan "Itu memberikan perhitungan untuk segalanya". Dari contoh solusi Anda, sepertinya yang Anda inginkan adalah satu baris untuk setiap nama yang berbeda. Dari komentar Anda sepertinya mungkin Anda maksudkan seperti itu HAVING count(Name) > 1, tapi kemudian saya kira jawaban sampel Anda harus menghilangkan Bodkin Van Horn, Hot Shot, Snimm, dan Dave.
Tim Goodman

@Tim - Anda benar, ini benar-benar tidak jelas. Saya akan mengedit ketika saya mendapatkan beberapa menit.
Jon Hopkins

1
Saya kira saya akan melakukan ini: DELETE FROM Things WHERE ID NOT IN (SELECT MIN(ID) FROM Things GROUP BY Name). Apakah Anda punya solusi yang disukai?
Tim Goodman

2

Masalah papan tulis C ++ favorit saya adalah menerapkan kandidat

Vector3 a(1, 0, 0), b(0, 1, 0); // Mathematical 3D vectors
double c = 7.0;
double d = a * c;
Vector3 e = a * b;

Dari sini saya bisa belajar

  • jika kandidat mengakui bahwa Anda tidak dapat membebani tipe pengembalian (indikasi juniour-level C ++)
  • jika kandidat tahu bagaimana mengembalikan operator casting sementara dan mengimplementasikan (indikasi C tingkat menengah ++)
  • jika kandidat dapat melakukan matematika vektor dasar (penting untuk domain aplikasi kami)

2

Bagaimana Anda mewakili setumpuk kartu 52 standar? Bahasa pemrograman apa pun baik-baik saja. Bagaimana Anda mengocok kartu?


vector <Card> dengan fungsi shuffle C ++ :)
rightfold

1

Favorit saya adalah memulai dengan menanyakan prototipe printf. Kemudian diberi printc API level rendah (char c), yang akan mencetak satu karakter, mengimplementasikan printf. Memberikan segala macam tanggapan menarik seperti tumpukan adalah bagian dari CPU. Seperti yang mungkin Anda tebak, saya berasal dari latar belakang C dan tertanam.


Saya tidak mendapatkan "tumpukan adalah bagian dari CPU".
barjak

Siapa pun yang tahu apa pun tentang arsitektur komputer akan tahu itu. Bagi saya itu sama sekali tidak berhubungan, jadi pria itu menunjukkan ketidaktahuannya.
Michael K

@aufather: Jika saya ingat dengan benar, Anda harus memanggil varargs()atau beberapa fungsi seperti itu. Apakah saya benar? Saya hanya melakukannya sekali untuk mengatakan saya melakukannya beberapa waktu yang lalu.
Michael K

@barjak - Setelah Anda mulai mengimplementasikan printf, Anda harus mengakses stack Anda, dan saya sudah mendapat tanggapan bahwa stack berada di CPU.
aufather

@Michael - Di dunia tertanam, Anda perlu mengetahui arsitektur platform Anda dengan sangat baik. Jadi pertanyaan ini dengan cepat menyingkirkan yang bodoh itu sejak dini.
aufather

1

Anda memiliki mangkuk dengan 200 ikan di dalamnya. Dari ikan ini 99% bukan ikan guppy. Berapa banyak ikan yang harus Anda buang sehingga 2% dari yang tersisa adalah ikan guppy. Tunjukkan pekerjaan Anda.

Ini tentang persyaratan yang membingungkan. Dikatakan cara ini untuk mengubah perspektif beberapa kali selama pertanyaan yang sama. Ini dimaksudkan untuk melihat apakah mereka dapat mengetahui apa yang sebenarnya terjadi.

Anda akan terkejut betapa banyak orang yang salah.


4
Tambahkan dua Oscar 12 Inch dalam mangkuk mereka akan menghapus 98% dari guppy segera.
Geek

Apa yang terjadi jika Anda menghapus guppy?

1
1% guppy, = 200 x 1% = 2 (200-2 = 198 ikan lainnya), di mana 2 = 2%, ikan yang tersisa = 98% = 98 (1: 1). 98 = 198 - 100 => answer = 100. [Anggap saja kamu bisa memilih ikan lain secara selektif. Jika menghapus guppy, ada jawaban lain.] Pertanyaan yang bagus, Anda akan terkejut betapa sedikit orang yang menanganinya dengan baik, meskipun itu seharusnya permainan anak-anak untuk seorang programmer.
Orbling

1

Saya punya beberapa favorit, tetapi di sini ada beberapa yang hampir selalu muncul. Sebagian besar waktu saya melakukan wawancara putaran teknis (C ++) final sehingga mendukung pertanyaan yang lebih panjang dan lebih terbuka yang mengarah pada bidang minat baru. Tidak ada jawaban yang 'benar', hanya ada celah untuk percakapan lain.

1) Menerapkan pointer bersama dasar, penjelasan di mana ada kekurangan dibandingkan dengan tr1 atau meningkatkan pointer bersama dalam implementasi mereka, bagaimana itu harus digunakan dll.

2) Tinjauan kode. Untuk karyawan yang berpengalaman, kami berharap mereka dapat dengan percaya diri meninjau beberapa kode yang disediakan untuk masalah desain, kesalahan, kengerian pengkodean, dan potensi masalah pemeliharaan. Juga, tentu saja, bagaimana mereka memperbaikinya; dan kadang-kadang bagaimana mereka memberikan pesan itu kepada pengembang junior yang mereka tembak.


1

Satu pertanyaan yang telah saya gunakan sejak digunakan pada saya adalah sebagai berikut:

Tulis fungsi untuk mencetak semua angka antara 1 dan 100.

Sebagian besar alasan mengapa saya menggunakannya adalah karena Anda dapat mengambil solusi di sana dan bergerak ke berbagai arah:

Bagaimana Anda memodifikasi fungsi untuk mencetak semua angka antara 1 dan 1000, 10000, atau n ?

Jawaban mereka atas pertanyaan-pertanyaan ini dapat memberi Anda wawasan tentang bagaimana mereka menanggapi perubahan persyaratan serta jika mereka dapat mengenali pertimbangan kinerja. Calon yang kuat mungkin menjawab dengan pertanyaan tentang apa fungsi yang diperlukan untuk seberapa sering akan dipanggil.

Bergerak ke arah yang berbeda:

Bagaimana Anda mengubah sesuatu jika Anda tahu fungsi ini akan dipanggil beberapa kali dalam satu menit dan kinerja menjadi perhatian?

Saya menggunakan ini sebagai cara memeriksa pemikiran lateral mereka. Karena menghitung bilangan prima bisa lambat karena nilai maks bertambah besar, kadang-kadang lebih masuk akal jika menggunakan semacam tabel pencarian yang dihitung atau dihitung sebelumnya yang disesuaikan berdasarkan masalah yang Anda coba selesaikan.


1

Ini salah satu untuk memancing beberapa pemikiran - Ini mudah, melibatkan sedikit matematika, dan memeriksa pengetahuan kandidat tentang desain komputer dasar (overflow, representasi numerik, dll):

Tulis sebuah program (atau prosedur) yang mengambil sepasang bilangan bulat X, Y sebagai input dan menentukan apakah X * Y dapat dibagi habis secara merata oleh 10. CATATAN PENTING: X dan Y mungkin cukup besar sehingga X * Y meluap dari jenis bilangan bulat terbesar yang tersedia di mesin Anda.


Solusi sampel:


T_BOOL MultipleOfTen(int x, int y)
{
    return((x%2==0 || y%2==0) && (x%5==0 || y%5==0));
}

0

Isi metode berikut: PS A mode angka adalah angka (dalam daftar) yang memiliki paling banyak kejadian.

public int getMode(List<Integer> numberList) {


}

Ini untuk melihat efisien adalah kode Anda.


-2

Bagaimana Anda mewakili matriks cadangan yang relatif besar ... katakanlah 1000x1000 tetapi memiliki paling banyak 100 entri tidak nol?

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.