Cara cepat mempersiapkan wawancara kerja dengan pertanyaan tentang algoritma dan teknologi

Salam untuk semua pembaca Habr! Nama saya Yuriy, 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. Varian Rusia dari pos ini dapat Anda temukan di sini .

Tidak masuk akal bagi pemberi kerja untuk bertanya kepada pelamar tentang teknologi pemrograman tradisional. Itulah sebabnya saya akan memberi tahu Anda bagaimana mempersiapkan wawancara di hanya satu area sempit yang terkait dengan bahasa pemrosesan informasi, yaitu, pemrosesan bilangan bulat panjang (aritmatika panjang) dan identifikasi properti informasi objek dunia nyata, yang dijelaskan dalam bilangan bulat panjang.

1. Wawancara teknologi pemrosesan data biasanya diadakan untuk mempekerjakan tim analis dan pengembang yang sebelumnya memiliki pengalaman pengembangan dalam bahasa deklaratif, imperatif, berorientasi objek, dan fungsional.

Tugas Tentukan bahasa pemrograman dengan fragmen program berikut.



Pertama, Anda perlu menjawab pertanyaan: fitur mana dalam bahasa yang dipilih yang relevan dan akan menarik calon pemberi kerja? Bergantung pada ini, daftar dapat bervariasi dari versi ke versi, dari perpustakaan ke perpustakaan, dari implementasi ke implementasi.



Tugas Bahasa apa yang mendukung aritmatika dengan bilangan bulat panjang?

Siap menjawab? Berikut daftar yang disarankan:
  • C, C ++ - libgmp library
  • Common Lisp-tidak membatasi lebar bit bilangan bulat
  • Tipe numerik bawaan Erlang (integer ())
  • Jenis Go-Int dan Rat dari perpustakaan besar.
  • Tipe Integer bawaan Haskell
  • Java-java class.math.BigInteger (Februari 1997)
  • Perpustakaan OCaml-num
  • Pascal - Delphi-MPArith library
  • Modul Perl bignum dan bigrat
  • Modul PHP BCMath
  • Python adalah tipe panjang bawaan (sejak bahasa dibuat, Februari 1991)
  • Ruby - ketik Bignum
  • Kelas Scala-BigInt
  • Skema-dengan R6RS
  • .NET languages-System class.Numerics.BigInteger (diperkenalkan di .NET Framework 4.0, hampir 10 tahun lalu)


2. Jika majikan sudah memiliki daftar siap pakai, perlu untuk memilih bagian-bagian umum dari bahasa yang akan dibahas pada wawancara.

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

Sejumlah operasi rutin semacam itu sering dilakukan dalam sistem informasi yang besar dan sangat besar. Ada berbagai jenis penyortiran, mencari kriteria tertentu, algoritma pada grafik, masalah optimisasi pada set sifat yang berbeda, tugas merancang objek dengan sifat tidak pasti. Tetapi karena skala tugas-tugas ini penyortiran termudah mungkin memakan waktu sebulan, pencarian mungkin memakan waktu seminggu. Lihat tugas di bawah ini untuk pemahaman yang lebih baik.

Tugas Bayangkan ada pohon birch di luar kantor Anda. Seperti yang dihitung oleh kolega Anda, ada 100.000 daun di atasnya, dan diameter batang di akarnya adalah 60 sentimeter. Tulis parameter ini dalam notasi matematika apa pun. Buktikan kecocokannya: a) untuk komunikasi tertulis dengan kolega jika pohon tersebut akan ditebang, b) untuk melakukan pemrosesan komputer dari gambarnya.



3. Beberapa kata tentang bagian matematika dari wawancara. Dalam kehidupan nyata, kita jarang melampaui batasan aritmatika biasa. Beberapa dari kita menggunakan pencapaian aljabar dan analisis. Jadi saya memutuskan untuk menambahkan beberapa masalah kehidupan nyata untuk membuat kepala Anda siap.

Tugas Mengapa nomor telepon itu lima atau enam digit untuk waktu yang lama? Ada daftar angka - yang mana dari mereka adalah kotak tidak lengkap? Berapa banyak bus di kota Anda yang hanya memiliki jumlah kotak yang lengkap? Berapa banyak bilangan prima hingga 100 yang Anda tahu? Berapa persentase mereka di antara deretan angka dari 1 hingga 100? Biarkan 2, 3, 5, 7 menjadi bilangan prima, berdasarkan fakta ini, temukan jumlah bilangan prima hingga 100. Berapa banyak operasi aritmatika yang harus Anda lakukan? Selesaikan masalah yang sama di MS Excel dengan dua cara sebagai tes mandiri.

Tugas Bagaimana convexity dan concavity digunakan dalam praktik? Berikan 2-3 contoh penggunaan convexity-concavity.



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

Tugas Tulis algoritma Euclid yang diperluas dalam salah satu bahasa pemrograman yang disebutkan di atas pada langkah 1. Dalam bahasa apa tidak perlu dilakukan? Mengapa

5. Alangkah baiknya untuk memahami arah wawancara: jika Anda diharapkan untuk menulis algoritma sendiri atau jika Anda harus memelihara satu set algoritma pihak ketiga, mungkin harus memperkenalkan urutan yang tepat nanti?

Tugas Ada catatan yang dibuat oleh kepala petugas medis di buku catatan trainee-nya. Kita perlu mengkomputerisasi catatan ini untuk membuat janji pasien yang benar. Apa yang akan Anda sarankan kepada pekerja magang?



6. Jika pilihan bahasa wawancara tersirat, lebih baik untuk memilih bahasa yang lebih terstandarisasi, sehingga pewawancara tidak akan memiliki banyak kemungkinan untuk mengubah kondisi tugas selama percakapan.

Tugas Berapa banyak versi Pascal telah dibuat selama 25 tahun terakhir? Tentukan kekuatan dan kelemahan masing-masing versi.



7. Akan menyenangkan untuk menghadiri setidaknya satu seminar tentang algoritma dan implementasinya dalam produk informasi yang dipilih dalam bidang studi tertentu.

Tugas Penyair itu bertanya kepada Anda apakah mungkin baginya untuk menulis puisi "Eugene Onegin" dengan mempertimbangkan tesaurus dari penulisnya. Berikan dua solusi untuk masalah ini.

8. Di situs untuk pemrogram ada tugas untuk melatih kemampuan untuk memproses informasi ilmiah dan pemrograman algoritma yang kompleks. Di bawah ini kami memberikan solusi "langsung", tetapi tidak optimal. Ini hanya perumusan kondisi dari sudut pandang bahasa pemrograman tingkat tinggi.
Tolong, perhatikan fakta bahwa meskipun semua upaya penulis dalam merumuskan masalah, beberapa kesalahan masih bisa terjadi. Sehingga dimungkinkan untuk membahas masalah yang terjadi.

Tugas 489 dari Proyek Euler


Biarkan G(a,b)menjadi bilangan bulat non-negatif terkecil nuntuk itu GCD(n3+b,(n+a)3+b)dimaksimalkan.
Misalnya, G(1,1)=5karena GCD(n3+1,(n+1)3+1)mencapai nilai maksimum 7untuk n=5, dan lebih kecil untuk 0n<5.
Biarkan H(m,n)=ΣG(a,b)untuk 1am, 1bn.
Anda diberikan H(5,5)=128878dan H(10,10)=32936544.

Temukan H(18,1900).

Tugas untungnya, ini adalah masalah yang sangat jarang diselesaikan di Proyek Euler. Berdasarkan teks program, cari kekuatan dan kelemahan algoritma dan tentukan. Apakah program ini dapat menyelesaikan masalah ini selama hari kerja? Bagaimana bisa dipercepat? Tentukan kesalahan dalam tugas, jika ada. Temukan parameter " verylargenumber ". Apa itu dibatasi oleh?

Beberapa kata lagi jika Anda tidak bisa menyelesaikannya
Jika kita berbicara tentang maxima lokal, jawabannya harus kurang, tetapi setelah perhitungan, tiba-tiba kita berbicara tentang global maxima, yang tidak disebutkan dalam teks masalah. Namun, ada kecurigaan bahwa GCD(n3+1444,(n+1)3+1444)=1di bawah apapun n. Apa yang akan terjadi? ncocok dengan penulis masalah?

Kode untuk solusi sampel
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 lulus wawancara di atas-dan-ke atas!

UPD Khusus untuk publikasi artikel versi bahasa Inggris, kami memberikan beberapa hubungan non-sepele yang ditemukan setelah modernisasi mendalam dari solusi di atas. Saat menghitung untuk 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/id445002/


All Articles