Pengembang C++
Buat aplikasi yang dapat digunakan untuk mencari string dalam file.
Masukan:
Aplikasi akan menerima dua parameter baris perintah. Parameter pertama adalah jalur ke file atau folder, sedangkan parameter kedua adalah string yang akan dicari (panjang maksimum 128 karakter).
Keluaran:
Cetak keluaran ke baris stdout dalam format <file>(<posisi>): <awalan>…<akhiran>”.
<file>: Nama file yang berisi string
<posisi>: Offset dalam file tempat string dimulai (berbasis nol).
<awalan>: Berisi tiga karakter di depan kecocokan
<akhiran>: Berisi tiga karakter setelah kecocokan.
Jika tidak ada cukup karakter untuk seluruh awalan atau akhiran (di awal atau akhir file), gunakan sebanyak yang tersedia. Dalam awalan dan akhiran, tab harus dicetak sebagai “\t” dan baris baru sebagai “\n”.
Asumsikan bahwa jalur tersebut dapat mengarah ke satu berkas teks, atau ke direktori dengan berkas dan/atau lebih banyak folder (aplikasi Anda harus dapat melintasi dan memproses semua berkas di subdirektori secara rekursif). Aplikasi harus memperhitungkan bahwa berkas mungkin sangat besar (potensi kendala/keterbatasan memori). Aplikasi tidak boleh mogok karena alasan apa pun (pastikan bahwa pengecualian ditangani dengan benar, penanganan kesalahan dari fungsi API, dll.), dan harus mencetak pesan kesalahan yang berarti saat terjadi masalah (memberi tahu saat argumen yang diberikan tidak cukup, jalur input tidak valid, dll.).
Catatan! Solusi harus menggunakan multi-threading dalam memproses data (setidaknya secara teoritis). Harap perhatikan bahwa solusi berulir tunggal mungkin lebih cepat dalam pemindaian berurutan ini, terutama pada drive yang lebih lambat. Cobalah untuk memaksimalkan kecepatan dan bandingkan hasil Anda dengan solusi berulir tunggal.
Apa yang akan kami evaluasi
Bagaimana Anda membangun solusi Anda tergantung pada Anda. Harap luangkan waktu saat membangun solusi Anda. Selalu lebih baik untuk meluangkan waktu lebih lama dan memberikan solusi yang hebat, daripada meluangkan waktu lebih sedikit dan memberikan solusi yang "lumayan". Kami akan menggunakan solusi Anda untuk memperkirakan tingkat pengalaman rekayasa perangkat lunak Anda. Solusi yang dikerjakan dengan baik akan menjamin wawancara, jenjang pekerjaan yang lebih tinggi, dan tawaran gaji yang lebih menarik. Solusi Anda akan dibahas secara rinci selama wawancara.
Kode sumber Anda harus menunjukkan:
- gaya pemrograman Anda,
- penggunaan prinsip pemrograman berorientasi objek,
- praktik terbaik pemrograman C++,
- penggunaan konvensi penamaan yang sistematis,
- penggunaan komentar yang tepat di tempat yang tepat,
- struktur kode yang baik,
- penanganan status kesalahan dan pengecualian,
- penghindaran konstruksi yang berbahaya atau rawan kesalahan,
- pemahaman Anda tentang "cara kerja internal" C++ dan fungsi standar (misalnya: pemborosan memori atau operasi penyalinan string/memori (implisit/internal) yang tidak perlu).
Tentu saja hindari kebocoran memori (misalnya karena pengecualian yang tidak tertangani). Kami lebih suka melihat pustaka standar C++ 14 digunakan, tetapi penggunaan Boost juga dapat diterima.
Kutipan yang menjelaskannya dengan cukup baik: “Selalu buat kode seolah-olah orang yang akhirnya mengelola kode Anda adalah seorang psikopat kejam yang tahu di mana Anda tinggal.” :-)
Kirimkan solusi Anda ke alamat email berikut: challenge@joineset.com
Dengan mengikuti tantangan ini, Anda menerima Syarat dan Ketentuan ESET dan mengakui Kebijakan Privasi ESET
