Apakah hanya saya atau ini pertanyaan wawancara teknis yang membingungkan? [Tutup]

153

Latar Belakang

Saya baru saja diminta dalam sebuah wawancara teknologi untuk menulis sebuah algoritma untuk melintasi "objek" (perhatikan tanda kutip) di mana A sama dengan B dan B sama dengan C dan A sama dengan C.

Itu dia. Itu semua informasi yang saya diberikan.

Saya bertanya kepada pewawancara apa tujuannya tapi ternyata tidak ada, hanya "melintasi" objek ".

Saya tidak tahu tentang orang lain, tetapi ini sepertinya pertanyaan konyol bagi saya. Saya bertanya lagi, "Apakah saya mencari nilai?". Nggak. "Lintasi" saja.

Mengapa saya ingin tanpa henti melewati "objek" ini ?? Untuk melelehkan prosesor saya mungkin ??

The jawaban menurut pewawancara adalah bahwa saya harus menulis fungsi rekursif.

OK, jadi mengapa tidak meminta saya untuk menulis fungsi rekursif? Dan siapa yang akan menulis fungsi rekursif yang tidak pernah berakhir?

Pertanyaan saya:

Apakah ini pertanyaan yang valid untuk Anda semua dan, jika demikian, dapatkah Anda memberikan petunjuk tentang apa yang mungkin saya lewatkan? Mungkin saya berpikir terlalu keras untuk menyelesaikan masalah dunia nyata. Saya telah berhasil mengkode untuk waktu yang lama tetapi proses wawancara teknologi ini membuat saya merasa tidak tahu apa-apa.

Matt Cashatt
sumber
197
Satu-satunya jawaban yang benar di sini adalah "Saya tidak mengerti pertanyaannya."
user16764
16
Nah, jika mereka benar-benar tidak mengatakan apa itu A, B, dan C (seperti - mereka adalah objek) dan mereka menempatkan objek dalam tanda kutip, mereka tampaknya memiliki terminologi unik di sana. Jika mereka bertanya bagaimana melintasi grafik objek di mana objek A mereferensikan objek B yang mereferensikan objek C yang mereferensikan objek A itu akan dapat dimengerti, tetapi mengapa itu harus rekursif saya tidak tahu. Ngomong-ngomong, tidak perlu tanpa batas jika Anda mempertahankan daftar objek yang sudah dikunjungi. Tapi ya, saya akan khawatir bekerja di perusahaan yang menggunakan tes itu - mereka tampak bingung.
psr
77
Pertanyaan seperti yang dijelaskan adalah tidak masuk akal, dan begitu pula jawabannya. Entah Anda salah mengingat apa yang mereka minta, atau orang yang bertanya itu idiot dan Anda mungkin lebih baik tidak bekerja dengannya.
Mason Wheeler
26
Mengapa wawancara dev harus menyakitkan? Tidak bisakah kita semua duduk dan melihat kode masing-masing dan berdiskusi? Devs akan tahu di mana devs lain berada dengan melakukan ini dan itu tidak akan memakan waktu 6 jam. Tes kode adalah yang terburuk. Saya tidak keberatan mengakui bahwa saya payah dalam memberikan solusi optimal sementara 3 devs saya belum pernah bertemu menonton saya saat saya mengetik.
Erik Reppen
19
Saya harus memeriksa profil Anda untuk melihat apakah Anda tinggal di daerah yang sama dengan saya karena saya bekerja untuk waktu yang singkat di pekerjaan di mana seorang rekan yang mewawancarai saya bertanya, "Apakah Anda berorientasi pada detail?" Yang saya jawab, "Bisakah Anda lebih spesifik?" Dan jawabannya, "Saya tidak bisa menjelaskannya, tetapi saya tahu orang yang berorientasi detail ketika saya melihat pekerjaan mereka." Ambiguitas cinta.
Jesse C. Slicer

Jawaban:

305

Ini pertanyaan wawancara yang membingungkan dan tidak valid. Pewawancara tidak dapat dengan jelas mengartikulasikan apa yang dia cari dan mengharapkan Anda untuk membaca pikirannya alih-alih menanggapi secara bermakna upaya Anda yang tepat untuk mengklarifikasi pernyataan masalah. Anggap diri Anda beruntung Anda tidak mendapatkan pekerjaan itu.

Arti kata kerja "melintasi" yang beroperasi pada "objek" generik tidak jelas, menurut pendapat saya. Mulailah mengganti berbagai kata benda yang berbeda untuk objek kata dan dengan cepat menjadi jelas bahwa traversal suatu objek hanya bermakna bagi sebagian kecil dari semesta benda yang merupakan objek.

Masuk akal untuk "melintasi" node dari "pohon biner". Tidak masuk akal untuk "melintasi" seorang "badut". Namun, suatu objek dapat dengan mudah mewakili "badut" karena dapat mewakili "pohon biner".

Mat
sumber
9
Saya baru-baru ini masuk ke praktek mengganti kata benda dalam pertanyaan konyol dengan kata "badut" +1 pak!
rupjones
108
"Clown traversal" - betapa hebat Meme untuk "pertanyaan teknis bodoh". Sampaikan kepada!
radarbob
8
Hmm, saya bisa melintasi var clown = {topi: "dengan bunga", rambut: "merah cerah", hidung: "bola merah", mulut: "Mulut merah dibingkai putih", ...};)
mplungjan
37
Seluruh area penelitian CS teoretis saya melibatkan traversal badut iteratif, Anda gumpal tidak peka!
6
@JackManey: Semua orang tahu bahwa badut harus dilalui secara rekursif .
Adam Robinson
39

Saya dapat melihat tiga kemungkinan di sini.

  1. Dia benar-benar tidak kompeten. Tidak banyak lagi yang bisa dikatakan tentang hal itu.
  2. Dia sengaja membuatnya ambigu, untuk melihat seberapa baik Anda akan mengajukan pertanyaan untuk mencari tahu apa yang seharusnya Anda lakukan, dan apa yang benar-benar dia incar.
  3. Untuk alasan apa pun, dia memutuskan dia tidak ingin Anda diterima, jadi dia mengajukan pertanyaan yang tidak dapat dijawab seperti yang diberikan. Ketika dia ditanya tentang keahlian Anda, dia akan melewatkan bagian itu dan mengatakan sesuatu seperti: "Saya bertanya kepadanya tentang cara melintasi grafik tiga simpul, dan dia benar - benar bingung - tidak memiliki petunjuk bagaimana untuk memulai. Jelas dia sangat tidak kompeten! Kita bahkan tidak perlu mempertimbangkan untuk mempekerjakannya. "
Jerry Coffin
sumber
7
"Saya bertanya kepadanya tentang cara melintasi grafik tiga-simpul, ..." Jika pos OP benar, tidak ada grafik atau simpul. hanya "benda". Ini adalah bentuk "kesaksian palsu". Jika dia menulis sesuatu seperti ini dapat dituntut!
Emilio Garavaglia
9
Apakah Anda biasanya menggunakan kata ganti perempuan ketika jenis kelamin orang tersebut tidak disebutkan?
Chan-Ho Suh
8
@EmilioGaravaglia: Pertama-tama, ini mungkin tidak pernah ditulis. Kedua, bahkan dengan asumsi itu ditulis, Anda pasti tidak akan pernah mendapatkan akses ke sana, hanya surat "kami menyesal memberitahukan Anda ...". Ketiga, kecuali Anda memiliki rekaman wawancara, bagaimana Anda membuktikan bahwa pewawancara tidak mengatakan yang sebenarnya? Intinya: secara teori Anda seharusnya benar - tetapi dalam kenyataannya, hampir tidak ada peluang.
Jerry Coffin
11
@ Chan-HoSuh: OP menyebutkan gender dalam salah satu komentarnya.
Jerry Coffin
4
@JerryCoffin Maafkan saya kalau begitu.
Chan-Ho Suh
32

Ini hanya tebakan liar, tetapi dengan asumsi pewawancara berbicara tentang referensi pointer (dan ini adalah pertanyaan jebakan), jawabannya adalah: tidak ada yang perlu dilalui, karena semua referensi menunjuk ke objek yang sama.

Fungsi rekursif? Itu untuk melintasi pohon. Saya tidak melihat apa pun dalam pertanyaan awal yang menyiratkan bahwa dia berbicara tentang pohon.

Robert Harvey
sumber
28
Berpindah. Ada perusahaan yang lebih baik untuk bekerja.
shufler
7
Tidak Itu penyebab yang hilang. Jika pewawancara mengira dia salah, dia tidak akan mengajukan pertanyaan sejak awal. Saya pernah diminta untuk menulis sampel dalam bahasa apa pun yang saya inginkan; orang yang mewawancarai saya berasumsi bahwa kodesemu adalah pilihan yang valid.
Robert Harvey
8
@Robert Harvey: Apa yang salah dengan pseudocode?
James
6
@Robert Harvey: Agar adil semua orang inginkan adalah mencari tahu bagaimana Anda memecahkan masalah untuk tidak mencari tahu apakah Anda telah belajar dari sintaksis bahasa tertentu. Ini cukup umum untuk algoritma yang ditentukan dalam pseudocode.
James
8
Apa perbedaan antara pseudocode dan Python? :)
David Robinson
15

Meskipun saya tidak dapat berbicara untuk pewawancara khusus ini, saya telah melihat pertanyaan serupa dalam wawancara posisi pengembang front-end, jadi bahasa yang akan saya gunakan dalam contoh ini adalah JavaScript.

Diberikan:

var A = {
    key1: 'value1',
    key2: 2,
    key3: {
        innerkey1: 'value3'
    }
}

Respons yang salah biasanya hanya "melintasi" level pertama dan mencetak / membandingkan:

'value1'
2
[Object object]

Jadi, ketika mengkodekan contoh rekursif yang akan melintasi semua level, saya akan menyebutkan hal-hal seperti:

  • Penanganan referensi lingkaran
  • Bagaimana cara menangani array (haruskah mereka secara traverse dilalui juga?)
  • Haruskah fungsi dievaluasi dan nilai pengembaliannya diproses?
  • Untuk JavaScript: haruskah prototipe cocok dan apakah properti yang diwariskan juga harus dibandingkan?

Jadi "solusi" yang saya kira akan dilakukan pewawancara adalah memulai percakapan pada pertanyaan yang tampaknya sederhana yang memiliki banyak topik tingkat lanjut - rekursif, petunjuk / referensi, harapan, dll.

WSkid
sumber
5
Masuk akal seperti yang Anda katakan, WSKid. Sayangnya, tidak ada konteks yang ditawarkan.
Matt Cashatt
3
Benar, ini benar-benar menggenggam sedotan. Mereka seharusnya mempresentasikan use case, atau contoh 3 objek, atau sesuatu untuk memberi petunjuk pada masalah aktual.
WSkid
1
Saya berpikir sama, hanya untuk atribut objek python. Mengetahui pertanyaan mana yang mereka harapkan jawabannya akan sangat membantu, tetapi itu bisa diharapkan oleh konteks posisi, yaitu python dev, c # dev, javascript dev, php dev, dll.
Ken
2
+1 untuk menemukan konteks tempat pertanyaan masuk akal!
Donal Fellows
9

Beberapa pewawancara secara khusus mencoba mengajukan pertanyaan untuk melihat apakah kandidat cukup pintar dan jujur ​​untuk memberikan salah satu dari dua jawaban ini:

Saya tidak tahu

atau mungkin:

Saya tidak bisa menjawab seperti yang dinyatakan.

Mereka tidak menginginkan kandidat yang akan menerima BS murni sebagai spek, dan membuang-buang waktu majikan mereka dan membayar untuk mengimplementasikannya.

hotpaw2
sumber
6
Seluruh hidup kita, kita dikondisikan, dalam skenario seperti wawancara ini, untuk dapat memberikan jawaban atas suatu pertanyaan. Jika mengatakan "Saya tidak tahu" (yang saya lakukan, ngomong-ngomong) bisa diterima, maka saya seharusnya sudah diberitahu sebelumnya. Upaya dengan itikad baik untuk menjawab pertanyaan wawancara tidak selalu sama dengan bagaimana seseorang akan memperlakukan spesifikasi atau serangkaian persyaratan yang tidak memadai. Dan saya pikir inilah intinya, wawancara-wawancara ini telah berbelok keluar jalur dan kehilangan poin dalam banyak kasus.
Matt Cashatt
Jawaban yang bagus. Namun, jangan lupa bahwa perlu banyak pengalaman untuk bisa mengatakan ini. Secara pribadi, saya dapat mengatakan bahwa pengalaman dengan wawancara adalah bagian penting dari pekerjaan. @MatthewPatrickCashatt jika pewawancara tidak akan menerima "Saya tidak tahu", maka tidak banyak lagi untuk dicuss IMO.
arin
2
Pertanyaan jebakan adalah trolling atau tidak kompeten. Either way jika pewawancara mengajukan pertanyaan jebakan Anda tidak ingin bekerja di sana.
Ben Brocka
7

Tampak bagi saya bahwa ini adalah pertanyaan (tidak diartikulasikan) mengenai daftar tertaut melingkar. Saya mungkin akan bertanya apakah itu yang dimaksud (karena jawabannya pasti akan berbeda dari yang lain di atas yang mengatakan mereka semua referensi ke objek yang sama).

Jika ini adalah daftar pertanyaan yang ditautkan, maka Anda (dalam hal ini) memiliki daftar yang ditautkan secara tunggal, di mana titik akhir menunjuk ke ujung yang lain (meskipun jika itu diucapkan seperti yang Anda katakan - maka mungkin terkait dua kali lipat jika A menunjuk ke B dan C - tetapi klarifikasi dari pihak pewawancara akan membantu ini).

A -> B -> C -> A

Juga (dan ini terjadi setiap saat), pewawancara mungkin telah membaca pertanyaan ini, berpikir itu adalah pertanyaan 'baik', tetapi tidak benar-benar tahu jawabannya sendiri (atau bahkan apa artinya).

Maich
sumber
1
Terima kasih Maich - Saya pikir poin terakhir Anda adalah yang paling mungkin.
Matt Cashatt
5

Bagian dari tantangan di sini adalah untuk mendapatkan lebih detail dengan mengajukan pertanyaan spesifik untuk mengetahui bahwa ada struktur pohon dan apa saja komponen yang terlibat dalam melakukan traversal. Mungkin ada asumsi bahwa tidak banyak struktur data lain yang dilintasi selain pohon tetapi itu sedikit lompatan ke pikiran saya.

JB King
sumber
1
Terima kasih JB King. Ini adalah pengingat yang baik untuk bertanya. Dalam kasus khusus ini, saya lakukan. Bahkan, saya bahkan bertanya apakah itu pohon dan jawabannya tidak! Tetapi maksud Anda diambil dengan baik bahwa adalah tanggung jawab saya untuk menyaring sebanyak mungkin informasi dengan mengajukan pertanyaan.
Matt Cashatt
3

Mereka mungkin ingin mencoba mencari tahu bagaimana Anda menghadapi masalah aneh. Tetapi dalam hal ini, itu tidak ada hubungannya dengan "wawancara teknologi". Itu lebih mirip wawancara psikologis.

BenjaminB
sumber
5
Saya ingin melihat contoh salah satu spesifikasi teknologi mereka untuk proyek perangkat lunak.
Chuck D
Jika wawancara adalah untuk analis sistem atau posisi yang serupa, ini sepenuhnya tepat: pekerjaan Anda adalah membantu pelanggan mengklarifikasi pertanyaan mereka, daripada menjawabnya.
reinierpost
1
@ reinierpost - Tidak.
Matt Cashatt
3

Tulis algoritme untuk melintasi "objek" (perhatikan tanda kutip) di mana A sama dengan B dan B sama dengan C dan A sama dengan C.

Sepertinya kebanyakan orang berasumsi bahwa A, B, dan C adalah petunjuk, tetapi mereka juga bisa dengan mudah menjadi badut. (Atau anggota kelas badut.) Atau mereka bisa jadi nama badut. (Atau nama kelas. Atau subclass dari kelas badut.)

Saya akan membalik tabel dan bertanya apakah ini cara mereka biasanya menyiapkan spesifikasi pengembangan, dan kemudian memberi tahu mereka bagaimana saya bisa membantu mereka dengan persyaratan spesifikasi tahap pengembangan. Komunikasi harapan yang buruk menyebabkan produk kerja buruk. Entah mereka akan mendapatkannya atau tidak, Jika mereka tidak mendapatkannya, saya akan pergi.

Jim
sumber
2

Sementara pertanyaan itu tidak banyak disampaikan dan pewawancara jelas tidak membantu dalam memberikan arahan, saya memiliki pandangan yang sedikit berbeda tentang apa yang ditanyakan.

Saya pikir pewawancara sedang mencari solusi yang melintasi struktur objek menggunakan beberapa jenis refleksi. Informasi bahwa ketiga objek itu sama seharusnya memicu percakapan perbandingan identitas objek (A == B berarti objek benar-benar objek yang sama dalam memori), atau perbandingan kesetaraan objek (A == B berarti nilai-nilai objek tersebut adalah sama).

Fakta bahwa pewawancara mengatakan bahwa jawabannya adalah fungsi "rekursif", mungkin mengindikasikan bahwa diskusi mengenai penyalinan dalam dan perbandingan akan dilakukan.

Lucas
sumber
2

Datang sangat terlambat ke pesta ini, tapi saya pikir pewawancara salah mengajukan pertanyaan ini:

Tulis sebuah algoritma untuk melintasi array dan tentukan bahwa A sama dengan B dan B sama dengan C dan A sama dengan C, dalam urutan itu.

Maka jawaban yang benar adalah algoritma rekursif.

pgthew
sumber
1

Saya baru saja diminta dalam sebuah wawancara teknologi untuk menulis sebuah algoritma untuk melintasi "objek" (perhatikan tanda kutip) di mana A sama dengan B dan B sama dengan C dan A sama dengan C.

The objectdimaksud terdiri dari bagian-bagian A,B and C, dan membentuk triangle. Orang tersebut hanya bertanya apakah objek (koleksi) berisi semua bagian yang sama.

Pewawancara ingin tahu jika disajikan dengan bagian-bagian yang A, B and Cdapat Anda ketahui apakah mereka semua sama tanpa terjebak dalam loop tak terbatas. Pertanyaan ini bodoh hanya untuk dimengerti dan mereka masih berhasil mengatasinya dengan menanyakannya.

Mereka semua sama kapan A == B && B == C && A == C, tetapi itu bisa disederhanakan menjadi adil A == B && A == C.

Kesederhanaan pertanyaan menghasilkan kebingungan, dan itu benar-benar diucapkan dengan buruk.

Kata-kata yang benar seharusnya.

Tulis algoritme untuk memeriksa bagian-bagian koleksi untuk melihat apakah mereka semua sama satu sama lain. Kehati-hatian harus diberikan untuk tidak terjebak dalam loop yang tak terbatas. Sebagai contoh; jika bagian A sama dengan B dan B sama dengan C dan A sama dengan C dapat menyebabkan masalah.


Jawabannya menurut pewawancara adalah bahwa saya seharusnya menulis fungsi rekursif.

Ya, Anda dapat menjawab pertanyaan are all my parts equalmenggunakan fungsi rekursif. Tidak, ini bukan solusi yang efisien.

EDIT : Setelah beberapa pemikiran. Tidak, itu tidak mungkin untuk memeriksa koleksi berisi semua bagian yang sama menggunakan fungsi rekursif.

Solusi paling efisien adalah sebagai berikut.

function are_all_equal(parts)
{
   for(int i=1; i < parts.length; i++)
       if parts[i] is not same as parts[0]:
           return false;
   return true;
}

print are_all_equal(parts) ? "yes" : "no";

Masalah ini memang terjadi dalam pemrograman, dan meminta seseorang untuk menulis algoritma untuk menguji koleksi adalah hal yang normal. Bergantung pada bahasa pemrogramannya, masalah ini seringkali dapat diselesaikan dengan hanya satu baris kode.

Kata-kata seperti yang mereka lakukan, dan mengharapkan jawaban yang salah tidak normal. Karena pertanyaan ini ditanyakan setahun yang lalu. Saya benar-benar berharap Anda akhirnya bekerja di tempat lain. Saya akan tertarik mendengar dari pos asli bagaimana keadaannya baginya.

Reactgular
sumber
2
Banyak hal berubah - berlari secepat yang saya bisa dari perusahaan itu dan telah bahagia sejak itu.
Matt Cashatt
0

Apakah ini pertanyaan wawancara Java, jika demikian, mungkin dia ingin menguji kemampuan Anda dengan mengesampingkan "kode hash" dan "sama dengan".

Anda harus mengganti kedua metode ini dan menggunakan metode equals yang ditimpa untuk menghentikan rekursi ketika Anda membandingkan A dengan A.

Tanpa mengesampingkan, perbandingan Anda untuk "objek" A ke B, A ke C dan A ke A semua akan menghasilkan true tetapi setelah menimpa, hanya ketika objek A dibandingkan dengan objek A akan mengembalikan true di mana perbandingan lain akan mengembalikan false.

rpatali
sumber