Bagaimana cara menangani wawancara 'kode buruk'? [Tutup]


12

Wawancara 'kode buruk' adalah wawancara di mana orang yang diwawancarai ditunjukkan cuplikan 'kode buruk' dan diminta untuk memperbaikinya atau menunjukkan hal-hal yang salah dengannya. Saya mempunyai masalah dengan wawancara-wawancara ini karena saya perlu waktu untuk membaca kode, mencari tahu apa yang dilakukannya, dan menunjukkan kekurangannya. Dalam situasi di mana ada tekanan waktu, saya cenderung membeku dan saya melihat bahwa kode 'harus' berfungsi, bahkan ketika tidak.

Apa cara yang baik untuk menangani wawancara semacam ini, dan, secara umum, teknik apa yang baik untuk membaca dan memahami kode dengan cepat ?


8
Kenapa "cepat"? Jika Anda butuh waktu untuk berpikir, apa salahnya meluangkan waktu untuk berpikir?
S.Lott

Apakah ini bagian dari tes tertulis / bakat? Maka Anda perlu melakukan pekerjaan rumah Anda pada jenis tes untuk perusahaan yang bersangkutan.
Aditya P

@ S.Lott Yah, saya terutama menginginkan beberapa teknik yang akan membantu saya menghindari kunci kognitif dalam situasi semacam itu. Teknik yang dapat diterapkan dengan cepat cenderung bekerja lebih baik untuk saya.
quanticle

@AdityaGameProgrammer Ya, ini bukan tes tertulis. Anda diberikan selembar dengan kode sumber di atasnya, dan Anda diharapkan untuk membaca sumbernya dan mendiskusikan kekurangannya. Sebenarnya akan lebih baik jika itu tes tertulis, karena saya merasa kurang tertekan dalam format tertulis.
quanticle

@quanticle: Bagaimana "berhenti dan berpikir" bukan "teknik" pertama yang akan Anda gunakan? Memang, teknik apa lagi yang mungkin ada selain "berhenti dan berpikir"?
S.Lott

Jawaban:


18

Wawancara Kode Buruk (jika dilakukan dengan benar) akan menunjukkan kode kepada Anda dengan yang berikut:

  • Teknik bahasa yang buruk (tidak menggunakan usingpernyataan dalam C # saat diperlukan, atau menggunakan ArrayListalih - alih a List<T>)
  • Keputusan desain yang buruk (mengapa kita melewati string di mana-mana, atau menggunakan refdan outparameter begitu banyak?)
  • Kesalahan sintaksis (Ini seharusnya tidak bisa dikompilasi!)
  • Kesalahan run-time (seperti Stack Overflow yang disebabkan oleh properti yang merujuk pada dirinya sendiri di C #)

Ada daftar periksa mental yang harus Anda lalui, mengenai setiap poin di atas. Jika Anda tidak dapat melihat kode dan melakukannya, itu adalah titik perbaikan. Apa pun bahasa yang Anda anggap 'mahir', Anda harus dapat melihat satu blok kode dan menunjukkan keempat jenis kesalahan tersebut.

Baru-baru ini saya membuat blog tentang sepotong kode yang menunjukkan semua masalah ini , itu akan membantu Anda untuk melalui proses mental yang sama.

Ayende membawanya lebih dalam dengan seri Wages of Sin- nya.


Terima kasih atas ide daftar periksa. Semuanya cukup 'jelas', tetapi dalam situasi ini mudah kehilangan jejak dari beberapa hal itu jika Anda tidak secara sadar menyimpannya di kepala saat Anda membaca kode.
quanticle

Posting blog yang bagus. Selalu lucu ketika potongan kode yang dipegang oleh pakar sebagai contoh memiliki bug besar. Saya harap komentar saya tidak melanjutkan demonstrasi bug yang Anda dan Scott lakukan.
Ben Voigt

Hal lain yang digunakan dalam wawancara kode buruk adalah kesalahan logika. Misalnya, mereka menunjukkan kepada Anda fungsi kecil, mereka memberi tahu Anda apa yang seharusnya dilakukan dan Anda harus memberi tahu mereka mengapa itu tidak akan melakukannya atau dalam hal mana itu tidak akan berhasil.
HoLyVieR

+1. Satu lagi poin untuk daftar periksa: Periksa bagaimana kode menangani kasus perbatasan (Kosongkan daftar, string kosong, 0, Inf / NaN untuk angka floating point, a List<T>yang berisi nullelemen ...)
nikie

9

Jangan mencoba memahaminya dengan cepat. Tujuannya di sini bukan untuk melihat apakah Anda dapat memahami kode seperti seorang guru, tetapi untuk melihat bagaimana Anda berpikir.

IMO kuncinya adalah berpikir keras. Jadi, bahkan jika Anda membeku - maka katakan saja, "Saya stres di sini, tapi biarkan saya melewati ini perlahan-lahan dengan keras".

Dengan asumsi Anda memiliki keterampilan berpikir keras akan cukup memperlambat Anda untuk membuat pikiran Anda benar. Jika wawancara cukup cerdas, mereka akan melihat situasi Anda dan membantu Anda sampai Anda berpikir jernih. Mereka tidak keluar untuk mencoba dan menipu Anda agar terlihat bodoh - hanya teknik yang kuat untuk melihat bagaimana Anda berpikir.


2

Kemungkinannya, 'tekanan waktu' yang Anda rasakan sepenuhnya dipaksakan sendiri. Ini lebih berkaitan dengan perasaan tidak aman Anda sendiri dan mengkhawatirkan seberapa baik Anda mengukur.

Nasihat terbaik yang bisa diberikan siapa pun adalah: Bersantai. Luangkan waktu Anda, lihat kode dan hanya berbicara tentang apa yang Anda lihat saat Anda melihatnya. Jangan ragu untuk membicarakan bagian yang baik dan yang buruk; itu akan membantu mengurangi kegugupan Anda dan ke dalam kekhawatiran bahwa terlalu banyak waktu berlalu.

Selain itu, melalui berbagai 'lintasan' mungkin membuatnya sedikit lebih mudah untuk menemukan detail tertentu. Ambil satu pass untuk mencari kawat gigi atau kesalahan ketik yang tidak cocok. Ambil jalan lain untuk mencari jalur yang tidak jelas. Ambil satu lagi mencari pretzel semantik. Berfokus pada satu jenis "hal yang salah" mungkin membuatnya lebih mudah untuk melihat detail-detail itu dan (lagi) mengurangi suara batin Anda mempertanyakan apakah Anda melakukannya dengan cepat / cukup baik.

Yang terpenting, bicaralah melalui apa yang Anda lakukan dan pikirkan - itu akan membantu Anda dan pewawancara keduanya.


1

Saya belum pernah dalam wawancara semacam ini, tetapi ketika saya mencoba mengerjakan sepotong kode rumit yang mungkin saya curigai buruk, kadang-kadang saya berbicara dengan pelan kepada diri saya sendiri. Saya menemukan vokalisasi kadang membantu penyelesaian masalah. Juga dalam sebuah wawancara, Anda bisa mencoba melacak langkah-langkah eksekusi sebagai diagram atau sesuatu dengan pensil dan kertas. Ini dulu bekerja untuk saya di sekolah, masih kadang-kadang melakukannya di tempat kerja. YMMV, tentu saja ...


1

Saya pikir tempat yang bagus untuk memulai (jika Anda tidak melihat sesuatu yang jelas) adalah dengan "men-debug" -nya. Kecuali jika Anda melihat masalah yang mungkin terjadi, tempat yang baik untuk memulai adalah membuat daftar nilai pengujian kecil. Nilai yang baik adalah nilai 'jalur bahagia' (normal), nilai 'nol' atau 'kosong', nol, nilai yang sangat kecil (string 1 karakter, int 1, dll.), Sangat besar atau sangat panjang nilai, dan nilai 'aneh' khusus untuk jenis (misalnya, karakter Unicode untuk string, angka negatif untuk int, dll.). Tidak ada salahnya untuk menyebutkan bahwa biasanya Anda akan menulis unit test menggunakan nilai-nilai ini untuk menguji kode, dan hanya akan menjalankannya untuk memverifikasi fungsi.

Mulailah dengan berjalan melalui nilai happy-path Anda. Untuk fungsi tambahan, Anda bisa mulai dengan 3 atau 4. Periksa setiap baris untuk kesalahan ketik dan kesalahan logika, melacak nilai-nilai variabel lokal saat Anda pergi. Semoga Anda menemukan beberapa bug. Ketika Anda selesai dengan jalan bahagia, Anda akan memiliki perasaan yang lebih baik untuk kode dan mudah-mudahan akan merasa sedikit kurang kewalahan - jadi katakan sesuatu seperti, "Sekarang saya memiliki perasaan yang lebih baik untuk apa yang dilakukan kode ini, saya akan melangkah mundur dan melihatnya, "lalu lakukan hal itu - mencari hal-hal yang menonjol bagi Anda sebagai hal-hal yang akan Anda lakukan secara berbeda (keputusan desain yang buruk, variabel dengan nama buruk, selidiki kemungkinan bug, dll.).

Jika itu tidak membuat Anda ke mana-mana, atau jika Anda merasa Anda kehabisan hal untuk dikatakan, kembali ke daftar nilai tes Anda, dan berjalan lagi dengan yang baru yang menurut Anda kemungkinan akan menyebabkan masalah.

Setidaknya ini akan membuat Anda pergi.


0

Seperti yang dikatakan Stephen Bailey, berpikir keras adalah teknik yang sangat baik dalam situasi ini karena memungkinkan pewawancara Anda melihat proses berpikir Anda. Semacam menjelaskan apa yang Anda coba cari tahu. Hal lain yang bisa Anda lakukan adalah memberi tahu pewawancara bahwa Anda akan membaca kode dengan benar sebelum memberikan diagnosis tentang kejahatan dalam kode. Saya berada di kedua sisi meja dan saya tahu ini bisa membuat frustasi bagi kedua sisi dalam situasi ini.


0

Jika Anda merasa tidak terlalu tertekan untuk melakukannya sebagai ujian tertulis, cabut buku catatan Anda dan mulai mencatat. Saya mengeluarkan buku catatan dan mulai membuat sketsa sebagai bagian dari proses berpikir saya dalam sebuah wawancara. Memiliki buku catatan dan pena membuat Anda terlihat teratur. Anda mungkin menuliskan beberapa poin penting untuk dicari, sintaksis, kesalahan logika, ketidakcocokan tipe data, nilai variabel lokal (daftar dapat bervariasi tergantung pada jenis kode yang Anda dapatkan, daftar saya untuk sepotong SQL yang kompleks akan berbeda dari seseorang yang mendapat sepotong kode yang bukan data centric) ketika Anda melewati proses, dll. Setelah Anda menulis beberapa dari ini, kemudian mulai mencari mereka. Dengan begitu bahkan jika Anda tidak menemukan semua masalah sebelum pewawancara ingin melanjutkan, ia akan dapat melihat daftar hal-hal yang akan Anda periksa. Jika Anda membuat daftar periksa terlebih dahulu dari hal-hal yang mungkin ingin Anda cari, maka Anda akan merasa lebih percaya diri memulai proses mengetahui hal-hal yang telah Anda rencanakan untuk dilihat. Biasanya qiestions ini lebih tentang bagaimana Anda akan menemukan kesalahan daripada benar-benar menemukan semuanya.


0

Saya agak terlambat ke pesta ini, tetapi satu teknik yang bisa Anda gunakan adalah menulis unit test untuk kode yang dimaksud. Kemudian Anda dapat lebih sedikit berkonsentrasi pada apa yang salah dengan kode dan lebih pada hasil yang Anda harapkan. Saya lebih suka mempekerjakan seseorang yang bisa menulis tes yang bagus daripada seseorang yang bisa langsung melihat apa yang salah dengan sepotong kode.


0

Mungkin ada dua masalah:

Mungkin itu adalah "wawancara stres" http://en.wikipedia.org/wiki/Job_interview#Stress . Pewawancara sedang mencoba untuk melihat bagaimana Anda mengatasi stres karena lingkungan kerjanya yang demikian.

ATAU

Anda mungkin menjadi stres sendiri. Dalam hal ini Anda harus mengelola stres ini, Misalnya introspeksi dan lihat bagaimana Anda bisa tetap tenang.

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.