Bagaimana cara mempersiapkan wawancara dengan cepat, yang akan memiliki pertanyaan tentang algoritma dan teknologi pemrosesan informasi?

Salam untuk semua pembaca Habr! Nama saya Yuri, saya telah mengajar teknologi tinggi, Oracle, Microsoft, dan lainnya selama lebih dari 20 tahun, serta menciptakan, mengembangkan, dan mendukung sistem informasi yang dimuat untuk berbagai pelanggan bisnis. Hari ini saya ingin memberi tahu Anda tentang arah saat ini: wawancara tentang teknologi pemrosesan data.

Pada wawancara rencana semacam itu, tidak ada gunanya bagi pengusaha untuk bertanya kepada pelamar tentang teknologi yang berkaitan dengan pemrograman tradisional. Oleh karena itu, saya secara populer akan memberi tahu Anda bagaimana mempersiapkan wawancara hanya di satu area sempit yang terkait dengan bahasa pemrosesan informasi, yaitu, memproses bilangan bulat panjang (aritmatika panjang) dan mengidentifikasi properti informasi dari objek dunia nyata yang dijelaskan dalam bilangan bulat panjang.

1. Wawancara dengan pertanyaan tentang teknologi pemrosesan data biasanya dilakukan dengan sekelompok tim analis dan pengembang yang sebelumnya memiliki pengalaman dalam mengembangkan bahasa deklaratif, imperatif, berorientasi objek, dan fungsional.

Tantangan. Tentukan bahasa pemrograman dengan sepotong program.



Karena itu, pertama-tama Anda perlu mempersiapkan diri untuk pertanyaan - apa yang sudah baik dalam bahasa yang dipilih, apa yang dapat menarik minat calon majikan? By the way, daftar dapat bervariasi dari versi ke versi, dari perpustakaan ke perpustakaan, dari implementasi ke implementasi.



Tantangan. Bahasa apa yang mendukung aritmatika dengan bilangan bulat panjang?

Sudahkah Anda berpikir? Daftar sampel:
  • C, C ++ - libgmp library
  • Gangguan Umum - tidak membatasi panjang bilangan bulat
  • Erlang - tipe numerik bawaan (integer ())
  • Go - ketik Int dan Rat dari perpustakaan besar.
  • Haskell - Integer Type Integer
  • Java - class java.math.BigInteger (Februari 1997)
  • OCaml - num library
  • Pascal / Delphi - perpustakaan MPArith
  • Modul Perl - bignum dan bigrat
  • PHP - modul BCMath
  • Python - tipe panjang bawaan (sejak bahasa dibuat, Februari 1991)
  • Ruby - ketik Bignum
  • Scala - kelas BigInt
  • Skema - dengan R6RS
  • Bahasa .NET - kelas System.Numerics.BigInteger (muncul di .NET Framework 4.0, hampir 10 tahun yang lalu)


2. Jika pemberi kerja telah menyusun daftar sebelumnya, maka perlu untuk mengisolasi bagian-bagian umum dari bahasa yang akan dibahas pada wawancara.

Tantangan. Menurut Anda, apa bahasa paling populer dari sudut pandang majikan? Di sini Anda dapat melihat jawabannya berdasarkan statistik.

Dalam sistem informasi yang besar dan ekstra besar, sejumlah operasi yang sepenuhnya rutin paling sering dilakukan: berbagai penyortiran, pencarian berdasarkan kriteria tertentu, algoritma pada grafik, masalah optimisasi pada set sifat yang berbeda, tugas membangun objek dengan properti yang tidak ditentukan. Tetapi, karena skala tugas, pengurutan paling sederhana bisa memakan waktu satu bulan, dan pencarian bisa memakan waktu seminggu. Perkiraan tugas pemahaman.

Tantangan. Di luar jendela ada birch. Di atasnya, seperti yang dihitung rekan Anda, 100.000 daun, diameter batang pada akar adalah 60 sentimeter. Catat parameter yang ditentukan dalam notasi matematika apa pun. Dan buktikan kecocokannya: untuk korespondensi dengan kolega, karena mereka ingin memotong pohon. Atau untuk pemrosesan komputer dari gambarnya.



3. Beberapa kata tentang bagian matematika. Dalam kehidupan, kita jarang melampaui batas-batas aritmatika biasa. Unit kami menggunakan prestasi aljabar dan analisis matematika. Biarkan pernyataan berikut membantu Anda mengingat, bahkan tidak secara dangkal, di mana pengetahuan yang terlupakan praktis digunakan.

Tantangan. Mengapa nomor telepon sudah lima atau enam digit begitu lama? Diberikan serangkaian angka - mana yang bukan persegi penuh? Berapa banyak bus di kota Anda yang memiliki angka kuadrat penuh? Berapa banyak bilangan prima hingga 100 yang Anda tahu? Berapa persentase semua angka dari 1 hingga 100? Biarkan 2, 3, 5, 7 menjadi bilangan prima, temukan jumlah bilangan prima hingga 100. Berapa banyak operasi aritmatika yang harus Anda lakukan? Selesaikan masalah yang sama pada MS Excel untuk pengujian sendiri dengan dua cara.

Tantangan. Bagaimana tonjolan dan cekung digunakan dalam praktik? Berikan 2-3 contoh penggunaan convexity-concavity.



4. Kadang-kadang perlu melalui dokumentasi untuk sistem / bahasa / set perpustakaan, contoh dari deskripsi teknis yang mendalam dan diperluas dari penulis / pabrikan sendiri. Ini terutama diperlukan jika Anda bermaksud untuk memanggil pustaka non-standar.

Tantangan. Tulis algoritma Euclidean yang diperluas dalam salah satu bahasa pemrograman yang ditunjukkan di atas, dalam paragraf 1. Dalam bahasa apa ini tidak perlu dilakukan? Mengapa

5. Dianjurkan untuk memahami arah wawancara: apakah Anda akan menulis sendiri algoritma atau apakah Anda harus memelihara satu set algoritma pihak ketiga, yang pada akhirnya harus ditertibkan?

Tantangan. Menurut serangkaian catatan dari dokter kepala, dibuat dengan pena pada buku catatan peserta pelatihan, perlu untuk mengidentifikasi secara komputer bagaimana pasien membuat janji temu. Apa yang bisa saya beri tahu magang?



6. Jika pilihan bahasa wawancara tersirat, lebih baik mengambil bahasa yang lebih terstandarisasi sehingga pewawancara tidak memiliki keinginan untuk mengubah kondisi tugas selama percakapan.

Tantangan. Berapa banyak versi bahasa Pascal telah muncul selama 25 tahun terakhir? Tunjukkan kekuatan dan kelemahan masing-masing versi.



7. Dianjurkan untuk menghadiri setidaknya satu seminar tentang algoritma dan implementasinya ke dalam solusi informasi siap pakai dalam bidang studi tertentu.

Tantangan. Penyair itu mengajukan pertanyaan kepada Anda: bisakah ia menulis puisi "Eugene Onegin" dengan mempertimbangkan tesaurus puitis dari penulis ini. Berikan dua solusi untuk masalah ini.

8. Sumber daya untuk programmer memiliki tugas untuk melatih kemampuan untuk memproses informasi ilmiah dan algoritma kompleks program. Di bawah ini kami menyajikan solusi "dahi", tetapi tidak optimal dan hanya pernyataan kondisi dari sudut pandang bahasa pemrograman tingkat tinggi. Karena kata-kata yang kurang akurat dari teks tugas itu sendiri, jawaban Anda mungkin tidak sesuai dengan jawaban yang diberikan oleh penulis tugas ini.

Tugas 489 dari Proyek Euler


Biarkan G(a,b)Merupakan bilangan bulat non-negatif terkecil nuntuk itu GCD(n3+b,(n+a)3+b)memiliki nilai kemungkinan terbesar.
Sebagai contoh G(1,1)=5sejak itu GCD(n3+1,(n+1)3+1)mencapai nilai maksimum 7di n=5dan memiliki nilai lebih kecil di 0n<5. Biarkan H(m,n)=ΣG(a,b)untuk 1am, 1bn.
Diketahui bahwa H(5,5)=128878dan H(10,10)=32936544. Temukan H(18,1900).

Tantangan. Untungnya, ini adalah tugas yang sangat jarang diselesaikan di Proyek Euler. Dengan menggunakan teks program yang diberikan, cari kekuatan dan kelemahan algoritma dan tentukan. Bisakah program ini menyelesaikan masalah ini dalam satu hari kerja? Bagaimana bisa dipercepat? Tunjukkan kesalahan dalam tugas, jika ada. Temukan opsi " sangat besar ". Bagaimana ini terbatas?

Beberapa kata lagi jika Anda tidak bisa menyelesaikannya.
Jika kita berbicara tentang maxima lokal, maka jawabannya harus kurang, tetapi setelah perhitungan tiba-tiba kita berbicara tentang global maxima, tentang yang tidak ada kata dalam teks masalah.
Namun, ada kecurigaan itu GCD(n3+1444,(n+1)3+1444)=1untuk apa saja n. Yang mana nakan cocok dengan penulis masalah?

Kode untuk solusi contoh
public class Start { static BigInteger[] GcdExtended(BigInteger a, BigInteger b) { BigInteger res[] = new BigInteger[3]; if (b == BigInteger.valueOf(0)) { res[0] = a; res[1] = BigInteger.valueOf(1); res[2] = BigInteger.valueOf(0); return res; } res = GcdExtended(b,a.divideAndRemainder(b)[1]); BigInteger s = res[2]; res[2] = res[1].subtract((a.divideAndRemainder(b)[0]).multiply(res[2])); res[1] = s; return res; } public static void main(String[]args) throws IOException { BigInteger i; BigInteger j; int n,n1; BigInteger temp; BigInteger temp1; BigInteger count; FileWriter fileWriter = new FileWriter("c:/temp/terribleanswer.txt"); n1=1; count=BigInteger.ZERO; i=BigInteger.ZERO; j=BigInteger.ZERO; temp1=BigInteger.ZERO; temp=BigInteger.ZERO; for (int a=1;a<19;a++) { for (int b=1;b<1901;b++) { for(n=1;n<;n++) { j=((BigInteger.valueOf(n)).pow(3)); j=j.add(BigInteger.valueOf(b)); i=(((BigInteger.valueOf(n)).add(BigInteger.valueOf(a))).pow(3)); i=i.add(BigInteger.valueOf(b)); int comparevalue = j.compareTo(i); if (comparevalue==0) { temp=GcdExtended(i,j); } else if (comparevalue == 1) { temp=GcdExtended(j,i); } else { temp=GcdExtended(i,j); } int compareTemp = temp.compareTo(temp1); if (compareTemp == 1) { temp1=temp; n1=n; continue; } } String fileContent = a + ";" + b +";"+ temp1 +";"+ n1 + "\n"; temp1=BigInteger.ZERO; count=count.add(BigInteger.valueOf(n1)); n1=1; try { fileWriter.append(fileContent); } catch (IOException e) { } } } String fileContent = count + "\n"; try { fileWriter.append(fileContent); } catch (IOException e) { } fileWriter.close(); } } 


9. Saya berharap Anda memiliki wawancara pada tingkat yang baik!

UPD Sebelum menerbitkan versi bahasa Inggris artikel , kami memberikan beberapa non-sepele
rasio ditemukan setelah modernisasi mendalam dari solusi di atas. Saat menghitung hingga n=$500.000.00.
GCD(n3+1444,(n+1)3+1444)=56298673,n=28147170; GCD(n3+1445,(n+1)3+1445)=14094169,n=14092001; GCD(n3+1446,(n+1)3+1446)=56454733,n=28225197; GCD(n3+1447,(n+1)3+1447)=14133211,n=14131040.

Source: https://habr.com/ru/post/id438498/


All Articles