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.
sumber
Jawaban:
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".
sumber
Saya dapat melihat tiga kemungkinan di sini.
sumber
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.
sumber
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:
Respons yang salah biasanya hanya "melintasi" level pertama dan mencetak / membandingkan:
Jadi, ketika mengkodekan contoh rekursif yang akan melintasi semua level, saya akan menyebutkan hal-hal seperti:
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.
sumber
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.
sumber
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).
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
The
object
dimaksud terdiri dari bagian-bagianA,B and C
, dan membentuktriangle
. Orang tersebut hanya bertanya apakah objek (koleksi) berisi semua bagian yang sama.Pewawancara ingin tahu jika disajikan dengan bagian-bagian yang
A, B and C
dapat 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 adilA == B && A == C
.Kesederhanaan pertanyaan menghasilkan kebingungan, dan itu benar-benar diucapkan dengan buruk.
Kata-kata yang benar seharusnya.
Ya, Anda dapat menjawab pertanyaanare all my parts equal
menggunakan 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.
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.
sumber
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.
sumber